|
|
- from __future__ import absolute_import, division, unicode_literals
-
- from . import base
-
- from collections import OrderedDict
-
-
- def _attr_key(attr):
- """Return an appropriate key for an attribute for sorting
-
- Attributes have a namespace that can be either ``None`` or a string. We
- can't compare the two because they're different types, so we convert
- ``None`` to an empty string first.
-
- """
- return (attr[0][0] or ''), attr[0][1]
-
-
- class Filter(base.Filter):
- """Alphabetizes attributes for elements"""
- def __iter__(self):
- for token in base.Filter.__iter__(self):
- if token["type"] in ("StartTag", "EmptyTag"):
- attrs = OrderedDict()
- for name, value in sorted(token["data"].items(),
- key=_attr_key):
- attrs[name] = value
- token["data"] = attrs
- yield token
|