From 84bc64f473207aba9a911680057169f35e01041b Mon Sep 17 00:00:00 2001 From: neumond Date: Thu, 21 Apr 2016 14:41:59 +0300 Subject: [PATCH 1/3] Implement InHeadNoscript context --- html5lib/constants.py | 2 + html5lib/html5parser.py | 101 ++++++++++++++++++++++------ html5lib/tests/tree_construction.py | 7 +- 3 files changed, 89 insertions(+), 21 deletions(-) diff --git a/html5lib/constants.py b/html5lib/constants.py index f6e38cbf..dbef76f1 100644 --- a/html5lib/constants.py +++ b/html5lib/constants.py @@ -283,6 +283,8 @@ "Element %(name)s not allowed in a non-html context", "unexpected-end-tag-before-html": "Unexpected end tag (%(name)s) before html.", + "unexpected-inhead-noscript-tag": + "Element %(name)s not allowed in a inhead-noscript context", "XXX-undefined-error": "Undefined error (this sucks and should be fixed)", } diff --git a/html5lib/html5parser.py b/html5lib/html5parser.py index a7cb98be..8a7edbb4 100644 --- a/html5lib/html5parser.py +++ b/html5lib/html5parser.py @@ -22,18 +22,18 @@ def parse(doc, treebuilder="etree", encoding=None, - namespaceHTMLElements=True): + namespaceHTMLElements=True, script=True): """Parse a string or file-like object into a tree""" tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parse(doc, encoding=encoding) + return p.parse(doc, encoding=encoding, script=script) def parseFragment(doc, container="div", treebuilder="etree", encoding=None, - namespaceHTMLElements=True): + namespaceHTMLElements=True, script=True): tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parseFragment(doc, container=container, encoding=encoding) + return p.parseFragment(doc, container=container, encoding=encoding, script=script) def method_decorator_metaclass(function): @@ -78,11 +78,12 @@ def __init__(self, tree=None, tokenizer=tokenizer.HTMLTokenizer, self.phases = dict([(name, cls(self, self.tree)) for name, cls in getPhases(debug).items()]) - def _parse(self, stream, innerHTML=False, container="div", - encoding=None, parseMeta=True, useChardet=True, **kwargs): + def _parse(self, stream, innerHTML=False, container="div", encoding=None, + parseMeta=True, useChardet=True, script=True, **kwargs): self.innerHTMLMode = innerHTML self.container = container + self.scriptMode = script self.tokenizer = self.tokenizer_class(stream, encoding=encoding, parseMeta=parseMeta, useChardet=useChardet, @@ -222,7 +223,8 @@ def normalizedTokens(self): for token in self.tokenizer: yield self.normalizeToken(token) - def parse(self, stream, encoding=None, parseMeta=True, useChardet=True): + def parse(self, stream, encoding=None, parseMeta=True, + useChardet=True, script=True): """Parse a HTML document into a well-formed tree stream - a filelike object or string containing the HTML to be parsed @@ -231,13 +233,15 @@ def parse(self, stream, encoding=None, parseMeta=True, useChardet=True): the encoding. If specified, that encoding will be used, regardless of any BOM or later declaration (such as in a meta element) + + script - treat noscript elements as if javascript was turned on """ self._parse(stream, innerHTML=False, encoding=encoding, - parseMeta=parseMeta, useChardet=useChardet) + parseMeta=parseMeta, useChardet=useChardet, script=script) return self.tree.getDocument() def parseFragment(self, stream, container="div", encoding=None, - parseMeta=False, useChardet=True): + parseMeta=False, useChardet=True, script=True): """Parse a HTML fragment into a well-formed tree fragment container - name of the element we're setting the innerHTML property @@ -249,8 +253,11 @@ def parseFragment(self, stream, container="div", encoding=None, the encoding. If specified, that encoding will be used, regardless of any BOM or later declaration (such as in a meta element) + + script - treat noscript elements as if javascript was turned on """ - self._parse(stream, True, container=container, encoding=encoding) + self._parse(stream, True, container=container, + encoding=encoding, script=script) return self.tree.getFragment() def parseError(self, errorcode="XXX-undefined-error", datavars={}): @@ -708,7 +715,8 @@ def __init__(self, parser, tree): self.startTagHandler = utils.MethodDispatcher([ ("html", self.startTagHtml), ("title", self.startTagTitle), - (("noscript", "noframes", "style"), self.startTagNoScriptNoFramesStyle), + (("noframes", "style"), self.startTagNoFramesStyle), + ("noscript", self.startTagNoscript), ("script", self.startTagScript), (("base", "basefont", "bgsound", "command", "link"), self.startTagBaseLinkCommand), @@ -717,7 +725,7 @@ def __init__(self, parser, tree): ]) self.startTagHandler.default = self.startTagOther - self. endTagHandler = utils.MethodDispatcher([ + self.endTagHandler = utils.MethodDispatcher([ ("head", self.endTagHead), (("br", "html", "body"), self.endTagHtmlBodyBr) ]) @@ -767,10 +775,17 @@ def startTagMeta(self, token): def startTagTitle(self, token): self.parser.parseRCDataRawtext(token, "RCDATA") - def startTagNoScriptNoFramesStyle(self, token): + def startTagNoFramesStyle(self, token): # Need to decide whether to implement the scripting-disabled case self.parser.parseRCDataRawtext(token, "RAWTEXT") + def startTagNoscript(self, token): + if self.parser.scriptMode: + self.parser.parseRCDataRawtext(token, "RAWTEXT") + else: + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inHeadNoscript"] + def startTagScript(self, token): self.tree.insertElement(token) self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState @@ -796,10 +811,51 @@ def endTagOther(self, token): def anythingElse(self): self.endTagHead(impliedTagToken("head")) - # XXX If we implement a parser for which scripting is disabled we need to - # implement this phase. - # - # class InHeadNoScriptPhase(Phase): + class InHeadNoscriptPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), + (("head", "noscript"), self.startTagHeadNoscript), + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = utils.MethodDispatcher([ + ("noscript", self.endTagNoscript), + ("br", self.endTagBr), + ]) + self.endTagHandler.default = self.endTagOther + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBaseLinkCommand(self, token): + return self.parser.phases["inHead"].startTagBaseLinkCommand(token) + + def startTagHeadNoscript(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + return self.anythingElse(token) + + def endTagNoscript(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "noscript", "Expected noscript got %s" % node.name + self.parser.phase = self.parser.phases["inHead"] + + def endTagBr(self, token): + return self.anythingElse(token) + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.endTagNoscript(impliedTagToken("noscript")) + return token + class AfterHeadPhase(Phase): def __init__(self, parser, tree): Phase.__init__(self, parser, tree) @@ -910,7 +966,8 @@ def __init__(self, parser, tree): ("isindex", self.startTagIsIndex), ("textarea", self.startTagTextarea), ("iframe", self.startTagIFrame), - (("noembed", "noframes", "noscript"), self.startTagRawtext), + ("noscript", self.startTagNoscript), + (("noembed", "noframes"), self.startTagRawtext), ("select", self.startTagSelect), (("rp", "rt"), self.startTagRpRt), (("option", "optgroup"), self.startTagOpt), @@ -1231,6 +1288,12 @@ def startTagIFrame(self, token): self.parser.framesetOK = False self.startTagRawtext(token) + def startTagNoscript(self, token): + if self.parser.scriptMode: + self.startTagRawtext(token) + else: + self.startTagOther(token) + def startTagRawtext(self, token): """iframe, noembed noframes, noscript(if scripting enabled)""" self.parser.parseRCDataRawtext(token, "RAWTEXT") @@ -2687,7 +2750,7 @@ def processEndTag(self, token): "beforeHtml": BeforeHtmlPhase, "beforeHead": BeforeHeadPhase, "inHead": InHeadPhase, - # XXX "inHeadNoscript": InHeadNoScriptPhase, + "inHeadNoscript": InHeadNoscriptPhase, "afterHead": AfterHeadPhase, "inBody": InBodyPhase, "text": TextPhase, diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index c1125387..f6666b7d 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -51,14 +51,17 @@ def runtest(self): fragmentContainer = self.test['document-fragment'] expected = self.test['document'] expectedErrors = self.test['errors'].split("\n") if self.test['errors'] else [] + script = True + if 'script-off' in self.test: + script = False with warnings.catch_warnings(): warnings.simplefilter("error") try: if fragmentContainer: - document = p.parseFragment(input, fragmentContainer) + document = p.parseFragment(input, fragmentContainer, script=script) else: - document = p.parse(input) + document = p.parse(input, script=script) except constants.DataLossWarning: pytest.skip("data loss warning") From 70151d2ab75c6c87bfb1efde0e6e6fc7154d5eaa Mon Sep 17 00:00:00 2001 From: neumond Date: Thu, 21 Apr 2016 14:54:03 +0300 Subject: [PATCH 2/3] Update pytest.expect --- .pytest.expect | Bin 55002 -> 41273 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.pytest.expect b/.pytest.expect index e818b51683df6a369de1cb6f44e86dbd9bcc9a27..877f85a6aebf061db64d749f5c221094d0ffbfb0 100644 GIT binary patch literal 41273 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 S{rB7NU%uO2-<)4v{`mjHGpdaM literal 55002 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 From 969d7c6cdb0a5a9f02b502dde462423ae724dfd7 Mon Sep 17 00:00:00 2001 From: neumond Date: Sat, 23 Apr 2016 19:14:04 +0300 Subject: [PATCH 3/3] Rename parameter to "scripting", update test expectations --- .pytest.expect | Bin 41273 -> 55044 bytes html5lib/html5parser.py | 28 ++++++++++++++-------------- html5lib/tests/tree_construction.py | 10 +++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.pytest.expect b/.pytest.expect index 877f85a6aebf061db64d749f5c221094d0ffbfb0..bb5398d1a6e213ab2d8b0d51f88683aaf49b29c4 100644 GIT binary patch literal 55044 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 S{rB7NU%uO2-<)4v{`mjHGpdaM diff --git a/html5lib/html5parser.py b/html5lib/html5parser.py index 8a7edbb4..b1e41029 100644 --- a/html5lib/html5parser.py +++ b/html5lib/html5parser.py @@ -22,18 +22,18 @@ def parse(doc, treebuilder="etree", encoding=None, - namespaceHTMLElements=True, script=True): + namespaceHTMLElements=True, scripting=False): """Parse a string or file-like object into a tree""" tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parse(doc, encoding=encoding, script=script) + return p.parse(doc, encoding=encoding, scripting=scripting) def parseFragment(doc, container="div", treebuilder="etree", encoding=None, - namespaceHTMLElements=True, script=True): + namespaceHTMLElements=True, scripting=False): tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parseFragment(doc, container=container, encoding=encoding, script=script) + return p.parseFragment(doc, container=container, encoding=encoding, scripting=scripting) def method_decorator_metaclass(function): @@ -79,11 +79,11 @@ def __init__(self, tree=None, tokenizer=tokenizer.HTMLTokenizer, getPhases(debug).items()]) def _parse(self, stream, innerHTML=False, container="div", encoding=None, - parseMeta=True, useChardet=True, script=True, **kwargs): + parseMeta=True, useChardet=True, scripting=False, **kwargs): self.innerHTMLMode = innerHTML self.container = container - self.scriptMode = script + self.scripting = scripting self.tokenizer = self.tokenizer_class(stream, encoding=encoding, parseMeta=parseMeta, useChardet=useChardet, @@ -224,7 +224,7 @@ def normalizedTokens(self): yield self.normalizeToken(token) def parse(self, stream, encoding=None, parseMeta=True, - useChardet=True, script=True): + useChardet=True, scripting=False): """Parse a HTML document into a well-formed tree stream - a filelike object or string containing the HTML to be parsed @@ -234,14 +234,14 @@ def parse(self, stream, encoding=None, parseMeta=True, regardless of any BOM or later declaration (such as in a meta element) - script - treat noscript elements as if javascript was turned on + scripting - treat noscript elements as if javascript was turned on """ self._parse(stream, innerHTML=False, encoding=encoding, - parseMeta=parseMeta, useChardet=useChardet, script=script) + parseMeta=parseMeta, useChardet=useChardet, scripting=scripting) return self.tree.getDocument() def parseFragment(self, stream, container="div", encoding=None, - parseMeta=False, useChardet=True, script=True): + parseMeta=False, useChardet=True, scripting=False): """Parse a HTML fragment into a well-formed tree fragment container - name of the element we're setting the innerHTML property @@ -254,10 +254,10 @@ def parseFragment(self, stream, container="div", encoding=None, regardless of any BOM or later declaration (such as in a meta element) - script - treat noscript elements as if javascript was turned on + scripting - treat noscript elements as if javascript was turned on """ self._parse(stream, True, container=container, - encoding=encoding, script=script) + encoding=encoding, scripting=scripting) return self.tree.getFragment() def parseError(self, errorcode="XXX-undefined-error", datavars={}): @@ -780,7 +780,7 @@ def startTagNoFramesStyle(self, token): self.parser.parseRCDataRawtext(token, "RAWTEXT") def startTagNoscript(self, token): - if self.parser.scriptMode: + if self.parser.scripting: self.parser.parseRCDataRawtext(token, "RAWTEXT") else: self.tree.insertElement(token) @@ -1289,7 +1289,7 @@ def startTagIFrame(self, token): self.startTagRawtext(token) def startTagNoscript(self, token): - if self.parser.scriptMode: + if self.parser.scripting: self.startTagRawtext(token) else: self.startTagOther(token) diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index f6666b7d..608be2b8 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -51,17 +51,17 @@ def runtest(self): fragmentContainer = self.test['document-fragment'] expected = self.test['document'] expectedErrors = self.test['errors'].split("\n") if self.test['errors'] else [] - script = True - if 'script-off' in self.test: - script = False + scripting = False + if 'script-on' in self.test: + scripting = True with warnings.catch_warnings(): warnings.simplefilter("error") try: if fragmentContainer: - document = p.parseFragment(input, fragmentContainer, script=script) + document = p.parseFragment(input, fragmentContainer, scripting=scripting) else: - document = p.parse(input, script=script) + document = p.parse(input, scripting=scripting) except constants.DataLossWarning: pytest.skip("data loss warning") pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy