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 zcmcIt+j1mF5#{ndYfo48Wo8K8xP!3)g9!_I&H2^ke}DLc|Loqs-M!kseE;Ry`NjW! z^wZm)e7%2j(OsN>@!@`Vv%k6f=ga-|Zui~U#W(ougSX#rxALEgf4SYB#IR~lZ+}zy z`1RTT>_b`L#jC5!oBj2-ulD%UA6|d^#rGfJziqc+yZzb6A8ohquFhY-xIBBayLo%| zYIpl5W~~N`{rqD0W_P*&6o2wyQBt}-^zqcPqc5+ncjsSSzWDO`>?_&KgQTOVNy^u( zzMEl<9g*U+ZG(@0dAx$(obA897opj1FW$eo*lr6E{&M_6GkU38!0(S=H*ZiIK(S9& zTYbACwY92fYp6)|a)0&B?(+N}yX)j$pN{_q&ed)<{psz?%7-(~HKXR?S)3z=ZaBUD z)V;e{QPv-iUo`^?7J3E@=+^7*^!B6UH*|-e;ofcfQ8oo~q)EoO!d~14(ZZXbK~v2j z@Is2#H}dhvMm0B^2ZT-dq!jJeRfI1;gRWu>f!0-QdYAzfbh|p_(udYHrj6YDMt6T` z>(Mz1tlm}(pkN$xG$e>Zcp-rEzo`7-8I+wM&K-p*1o-Xo>wLHS;+ymR>H#X6_TgxX z#XdWJu^H$GCe}z6sj7AmEM!0Kg-reGc#*Q6h29;|4{{q#zk%l&!d8jrPejs_iBv zaD}_09AicU{FxxTUz)ZbcvNqO096?9V{$I{?x7BuMAP+vjTqFLH-hjoQK{MwdCsAY z>(g6On9zYklYh8xT4=(}AzJM>N-cjq-m~j4FQ!~I08;MQY!DJDh|m^LIF&z|EiC1_ zK>|ZbsR?u;C9U!vo1wfv1;?e$O7esy&8lxAe36n7fw#I778F`ktqhcJQfJVV&rq?d zyKjV^^`cz4048Ke3$j!r_f!^SU`ch!n$37_g@cSd&AwO;gSL^{DV8k67 z1Uz!beZRrS2BTDY2x=CS7+##5J5WhBUG-yD)+X?Z3Mi(Ucuw8ME5%)^#F}8dP`IHU zl1W(eNDQX&(q>Y1O-Ve_I7c3QXx3mTetQJ)EozUUhDEA-II7tlKvmMtlBhd_@O~P2bEFH(>^)gr&T@y6s$%{QsGe$#sHz&j~C{8 zsMqo|q-i^NKWY5v{{hSXe*B5lQTBOotsNpS83u0P)`r}*E}7IrwE>g5Zu`!*qk`2v z5o1XQxJxk%h*MWlJ6AIP%xhM2MMJ88)y(m1@;GA<*D=6HKF&EDGbHE!rL)~z;ZmnybR9je$@jaIw8Kz3SN*idxN)-om% zg|wvo!&pGN+;!cI9>tc3R2~y<2o`4BeHb7aRb1@B9XcfS(4oU^w$IRNj%!CQ-mfK{ zHaJWsQFE?saF|1W_*itLHJ$m&7xdrX)=91nn#Y+aZ13X7*@jO?^Q z8rW3mPVS^zNnz1oKS}s%3Z5J-&#Eng#zcVy`WAotQ;Pyt>dQY24_ZoZh;}_s4FIvQu{mPSmLo z)KIv~v`Ldiwb7H~!FYy^>I}NrFnKajxV*V;(>zQ;kChhxKGt%rhx9PyBLH;rV~n_i z5gG`p%4QymzJ^un2Od)isnD?7-eaX&VMvxs1&oYXSvqNqo1QOlp_vJcA^&h_5VG89 zXdXUM>M;9Pamzr{3)0N{Ad~ZM5o4OKQ6jo$7RA&b^CgZGq-sv#KL%6J(4Hs4mEh!g zgpIHyB7^N($EXgPFF;B|9#$w|#Cj#a8;!!)A1RKARB9YL8?#rLp`JuiqLSbedjJzF zQFO#b+>Zj8HY7UrAS6xw8Xq?JQ5iC3R%2XY6&!KDk*PI5Z0Sr{*^B|UYDy}6f^ED% zu|d`_J4w{YkB60TE_W~zkQ4Ycl%_bilVw8I8?;f|_8IUciP!yibd zRxRF6{z&>?=`onTkwU(kaizIsWm*JBLcM8O#ZA^yzH>1T2ICBHR8W)SBrZ6$Zvtl9Id8Hk}ejGewJ#htVCI2!i)BM#_ zgi3r&nb%kZE)>rqu3Ud5rEhy7Any8JzVPN3CyK|C;`EJU+!-G)l1ag*CUC64kMh$r zZc*r$){$g91O(&y0F2!o6r{RXOT!HX7!~%l!V4YoTmp+~_$L*PNjS1Zwpzg;SyXW3 zwK0efx=(s8tu-`wC*gSFRmCB@vyCT)4-A$$Q+XQm`(o3qF%8n_;)jY;BSxW;|FFk^ zrWU3ekh(vp)+AkGE%-(1y@3}mkPyg?<%t<9$;{7XsfjMNoZ(azrasZdFt|i!!Uy*& z)oxEJ?0)7cp}L<*S7)N#!r!>C3qxEe3dCL-SME~J*kn+ub62)xcA#2=Wc{Vz@H7s0 z4S7#(dwCFo+&0Rad=k@jj=~wX&DTZ|uz7_wgCl*yWsW6CVLR65lwFfZA04SEBm&Zt z_Jg+_5uOd`SO>DikqZE0chpN}Z3qPQ9i>?dbwK73{-jOg&Y6G0IT?C z$RLVHH^vR6tyjlKxTKh;>wW5vkcQH?@H&tR`p6l*azV)Rp@f%5LQl)FTLPXaLuv z>p{swZJ9#(#DxoUBT*jnAUIsovpcCF7%=r->A56!;Mk-P_^}Q|8w12-K%V0T?u1Mp zQmPp~DI%Vc=PL+kaDcnI%kVnTC{rel=R1ADBewCyB_c<N&wv&lLr)PplFC8+5Hg(YirToANk5ME_XR<+TDi#7{B6z_)W^( zMu`h<_FGFjPuz7X&Gib;bxiy}OtR0Q2VI>#0$X(-g zeNYjSKm}N*qx4%etuss+95Cx=ut4M=JORN=8cT2psgr0mk!B4_ z#K+IL@#NV-?nk&;a(b#s+4hMS9fkHx?58kvQrU56(VsD-?-Nh1W*Ov8FaU-K;-`kG z`dui;fGYPHovv}IlQiTzSzj}`6R9qQ9X?pco*y2<`@noH8dr@SQ#g$jczBLCbEB9% z0O)~NVjslq+;r)Yz-OHW2-)Q4AjXiDWUI#(bzEQ>ru^pBi5ElVD#e_DhIX4uAJW)w z0XhbHRPQ}tr&@KSt)iXlu+>I>Z`c5#`S3N_E41Ub{YTD`)DoVBu;tzpK^HnIl!JMM z1gS?1b^FM{6m@ZKes(mrMO94w+wq>Awo{$mT9TCD_8J(WU!i*3J4rxaAw`Xb&)@K~ z6}*w5xB)!iv9dHBz9@h>XTAc2Q32@F zpoW}->*7jb;bgqO`w>-l)kj8sC-Gjvjvvp)%vUW;X%SXA*=(UjwEKsl_(BRER{*9OICA!#F*7Vqo75d1?&6^X$r-%gpMk?64xrUM z$NrFxRH|?84dz+&Lg8#p@1O&(yovv&g7O9ybPdo6~ljHgLO!}%LZ{ckeOk$S{C0Td` zlm~h+EWo6pu~7J?PKXz>p&*a97~*%{(ZNV&aY$~U&6ggFRo!+a&$&%_OtCms$i{kA zz#J+b@I((AZ#eK-8D2!^gE#KK@?}}Plg57x;$ur1COt8UpLbrpj4L2_;sXQHA3iNc z1Dt1`xY~+sGtV#KGb^{!ququ7kU}duWBsWCF8Nx8)a3PNMHPgbjCow{yi~mB}!ZZ*+jt+Y=v)j&!tG$AF;O5mQo8EJP|84rGfB_3&Eh#8Z+1Vh)N0?gPxf zTkqEwI%6WYCvO+#GqDC2%BEJn%H*@3H!MnSKQ0_j(!H*KE7)DC& zd508Jg?#+OXgZMDdjEEu#~BOYN(m&C;F&cK(0c|m8@a1OZW{@c=VR%Jy3O*S?6k~@ zVEz`lAZgQ{m!)v095!t>OZC2xQi8ir04`ju#gT@CG~JQbLPhk^MA5E+!q;Q=m>Oh! 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")