|
5 | 5 |
|
6 | 6 | from codecs import register_error, xmlcharrefreplace_errors
|
7 | 7 |
|
8 |
| -from ..constants import voidElements, booleanAttributes, spaceCharacters |
9 |
| -from ..constants import rcdataElements, entities, xmlEntities |
10 |
| -from .. import utils |
| 8 | +from .constants import voidElements, booleanAttributes, spaceCharacters |
| 9 | +from .constants import rcdataElements, entities, xmlEntities |
| 10 | +from . import treewalkers, utils |
11 | 11 | from xml.sax.saxutils import escape
|
12 | 12 |
|
13 | 13 | spaceCharacters = "".join(spaceCharacters)
|
@@ -73,6 +73,13 @@ def htmlentityreplace_errors(exc):
|
73 | 73 | register_error("htmlentityreplace", htmlentityreplace_errors)
|
74 | 74 |
|
75 | 75 |
|
| 76 | +def serialize(input, tree="etree", encoding=None, **serializer_opts): |
| 77 | + # XXX: Should we cache this? |
| 78 | + walker = treewalkers.getTreeWalker(tree) |
| 79 | + s = HTMLSerializer(**serializer_opts) |
| 80 | + return s.render(walker(input), encoding) |
| 81 | + |
| 82 | + |
76 | 83 | class HTMLSerializer(object):
|
77 | 84 |
|
78 | 85 | # attribute quoting options
|
@@ -181,24 +188,24 @@ def serialize(self, treewalker, encoding=None):
|
181 | 188 | self.errors = []
|
182 | 189 |
|
183 | 190 | if encoding and self.inject_meta_charset:
|
184 |
| - from ..filters.inject_meta_charset import Filter |
| 191 | + from .filters.inject_meta_charset import Filter |
185 | 192 | treewalker = Filter(treewalker, encoding)
|
186 | 193 | # Alphabetical attributes is here under the assumption that none of
|
187 | 194 | # the later filters add or change order of attributes; it needs to be
|
188 | 195 | # before the sanitizer so escaped elements come out correctly
|
189 | 196 | if self.alphabetical_attributes:
|
190 |
| - from ..filters.alphabeticalattributes import Filter |
| 197 | + from .filters.alphabeticalattributes import Filter |
191 | 198 | treewalker = Filter(treewalker)
|
192 | 199 | # WhitespaceFilter should be used before OptionalTagFilter
|
193 | 200 | # for maximum efficiently of this latter filter
|
194 | 201 | if self.strip_whitespace:
|
195 |
| - from ..filters.whitespace import Filter |
| 202 | + from .filters.whitespace import Filter |
196 | 203 | treewalker = Filter(treewalker)
|
197 | 204 | if self.sanitize:
|
198 |
| - from ..filters.sanitizer import Filter |
| 205 | + from .filters.sanitizer import Filter |
199 | 206 | treewalker = Filter(treewalker)
|
200 | 207 | if self.omit_optional_tags:
|
201 |
| - from ..filters.optionaltags import Filter |
| 208 | + from .filters.optionaltags import Filter |
202 | 209 | treewalker = Filter(treewalker)
|
203 | 210 |
|
204 | 211 | for token in treewalker:
|
|
0 commit comments