Skip to content

Commit 0db23a3

Browse files
committed
Use dict on Py >= 3.7 for attributes now it is ordered
1 parent 0fdd819 commit 0db23a3

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

html5lib/html5parser.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
from six import with_metaclass, viewkeys
33

44
import types
5+
56
from collections import OrderedDict
7+
from sys import version_info
68

79
from . import _inputstream
810
from . import _tokenizer
@@ -24,6 +26,12 @@
2426
)
2527

2628

29+
if version_info >= (3, 7):
30+
attributeMap = dict
31+
else:
32+
attributeMap = OrderedDict
33+
34+
2735
def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs):
2836
"""Parse an HTML document as a string or file-like object into a tree
2937
@@ -329,10 +337,11 @@ def normalizeToken(self, token):
329337
# HTML5 specific normalizations to the token stream
330338
if token["type"] == tokenTypes["StartTag"]:
331339
raw = token["data"]
332-
token["data"] = OrderedDict(raw)
333-
if len(raw) > len(token["data"]):
340+
data = attributeMap(raw)
341+
if len(raw) > len(data):
334342
# we had some duplicated attribute, fix so first wins
335-
token["data"].update(raw[::-1])
343+
data.update(raw[::-1])
344+
token["data"] = data
336345

337346
return token
338347

@@ -2770,8 +2779,8 @@ def processEndTag(self, token):
27702779
def adjust_attributes(token, replacements):
27712780
needs_adjustment = viewkeys(token['data']) & viewkeys(replacements)
27722781
if needs_adjustment:
2773-
token['data'] = OrderedDict((replacements.get(k, k), v)
2774-
for k, v in token['data'].items())
2782+
token['data'] = attributeMap((replacements.get(k, k), v)
2783+
for k, v in token['data'].items())
27752784

27762785

27772786
def impliedTagToken(name, type="EndTag", attributes=None,

0 commit comments

Comments
 (0)