| from __future__ import absolute_import, division, unicode_literals |
| from ..constants import rcdataElements, spaceCharacters |
| spaceCharacters = "".join(spaceCharacters) |
| SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) |
| class Filter(base.Filter): |
| """Collapses whitespace except in pre, textarea, and script elements""" |
| spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) |
| for token in base.Filter.__iter__(self): |
| and (preserve or token["name"] in self.spacePreserveElements): |
| elif type == "EndTag" and preserve: |
| elif not preserve and type == "SpaceCharacters" and token["data"]: |
| # Test on token["data"] above to not introduce spaces where there were not |
| elif not preserve and type == "Characters": |
| token["data"] = collapse_spaces(token["data"]) |
| def collapse_spaces(text): |
| return SPACES_REGEX.sub(' ', text) |