Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/bleach/_vendor/html5lib/treewalkers/genshi.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 from __future__ import absolute_import, division, unicode_literals | |
2 | |
3 from genshi.core import QName | |
4 from genshi.core import START, END, XML_NAMESPACE, DOCTYPE, TEXT | |
5 from genshi.core import START_NS, END_NS, START_CDATA, END_CDATA, PI, COMMENT | |
6 | |
7 from . import base | |
8 | |
9 from ..constants import voidElements, namespaces | |
10 | |
11 | |
12 class TreeWalker(base.TreeWalker): | |
13 def __iter__(self): | |
14 # Buffer the events so we can pass in the following one | |
15 previous = None | |
16 for event in self.tree: | |
17 if previous is not None: | |
18 for token in self.tokens(previous, event): | |
19 yield token | |
20 previous = event | |
21 | |
22 # Don't forget the final event! | |
23 if previous is not None: | |
24 for token in self.tokens(previous, None): | |
25 yield token | |
26 | |
27 def tokens(self, event, next): | |
28 kind, data, _ = event | |
29 if kind == START: | |
30 tag, attribs = data | |
31 name = tag.localname | |
32 namespace = tag.namespace | |
33 converted_attribs = {} | |
34 for k, v in attribs: | |
35 if isinstance(k, QName): | |
36 converted_attribs[(k.namespace, k.localname)] = v | |
37 else: | |
38 converted_attribs[(None, k)] = v | |
39 | |
40 if namespace == namespaces["html"] and name in voidElements: | |
41 for token in self.emptyTag(namespace, name, converted_attribs, | |
42 not next or next[0] != END or | |
43 next[1] != tag): | |
44 yield token | |
45 else: | |
46 yield self.startTag(namespace, name, converted_attribs) | |
47 | |
48 elif kind == END: | |
49 name = data.localname | |
50 namespace = data.namespace | |
51 if namespace != namespaces["html"] or name not in voidElements: | |
52 yield self.endTag(namespace, name) | |
53 | |
54 elif kind == COMMENT: | |
55 yield self.comment(data) | |
56 | |
57 elif kind == TEXT: | |
58 for token in self.text(data): | |
59 yield token | |
60 | |
61 elif kind == DOCTYPE: | |
62 yield self.doctype(*data) | |
63 | |
64 elif kind in (XML_NAMESPACE, DOCTYPE, START_NS, END_NS, | |
65 START_CDATA, END_CDATA, PI): | |
66 pass | |
67 | |
68 else: | |
69 yield self.unknown(kind) |