8000 Use dict on Py >= 3.7 for attributes now it is ordered · adhintz/html5lib-python@0db23a3 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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)
0