Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

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

Sign up
Appearance settings

Commit1eb1bee

Browse files
committed
Fixed if conditions
1 parent2db2cb0 commit1eb1bee

File tree

3 files changed

+131
-62
lines changed

3 files changed

+131
-62
lines changed

‎html5lib/html5parser.py‎

Lines changed: 33 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,6 @@ def resetInsertionMode(self):
456456
new_phase=self.phases["inBody"]
457457
break
458458

459-
#log.debug(u"Changing phase to {}".format(new_phase))
460459
self.phase=new_phase
461460

462461
defparseRCDataRawtext(self,token,contentType):
@@ -474,7 +473,6 @@ def parseRCDataRawtext(self, token, contentType):
474473

475474
self.originalPhase=self.phase
476475

477-
log.debug(u"Changing phase to text")
478476
self.phase=self.phases["text"]
479477

480478

@@ -530,8 +528,6 @@ def processDoctype(self, token):
530528
self.parser.parseError("unexpected-doctype")
531529

532530
defprocessCharacters(self,token):
533-
log=logging.getLogger(u"html5lib")
534-
log.debug(u"Inserting text {}.format(token)")
535531
self.tree.insertText(token["data"])
536532

537533
defprocessSpaceCharacters(self,token):
@@ -604,27 +600,20 @@ def processEndTag(self, token):
604600

605601
classInJinjaVariablePhase(Phase):
606602
defprocessJinjaVariableStartTag(self,token):
607-
log=logging.getLogger('html5lib')
608-
log.debug(u"InJinjaVariable: Start Tag")
609603
self.tree.reconstructActiveFormattingElements()
610604
self.tree.insertElement(token)
611605

612606
defprocessJinjaVariableEndTag(self,token):
613-
log=logging.getLogger('html5lib')
614-
log.debug(u"InJinjaVariable: End Tag {}".format(token["name"]))
615607
fornodeinself.tree.openElements[::-1]:
616-
log.debug(u"InJinjaVariable: Open tag {} token {}".format(node,token))
617608
ifnode.name==token["name"]:
618609
self.tree.generateImpliedEndTags(exclude=token["name"])
619-
log.debug(u"InJinjaVariable: Implied end tag {} {}".format(self.tree.openElements[-1].name,token["name"]))
620610
ifself.tree.openElements[-1].name!=token["name"]:
621611
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
622612
whileself.tree.openElements.pop()!=node:
623613
pass
624614
break
625615
else:
626616
ifnode.nameTupleinspecialElements:
627-
log.debug(u"InJinjaVariable Nametuple {} in {}".format(node.nameTuple,specialElements))
628617
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
629618
break
630619

@@ -642,27 +631,51 @@ def processJinjaFilter(self, token):
642631

643632
classInJinjaStatementPhase(Phase):
644633
defprocessJinjaStatementStartTag(self,token):
645-
log=logging.getLogger('html5lib')
646-
log.debug(u"InJinjaStatement: Start Tag")
634+
iftoken['name']=='jinjaelse':
635+
self.closeOpenIf(token)
636+
eliftoken['name']=='jinjaelif':
637+
self.closeOpenIf(token)
638+
647639
self.tree.reconstructActiveFormattingElements()
648640
self.tree.insertElement(token)
649641

642+
defcloseOpenIf(self,token):
643+
importlogging
644+
log=logging.getLogger(u"html5lib")
645+
646+
fornodeinself.tree.openElements[::-1]:
647+
log.debug(u"Prev {} Cur {}".format(node.name,token['name']))
648+
649+
ifnode.name==token["name"]or (node.namein ["jinjaif","jinjaelif"]andtoken["name"]in ["jinjaelse","jinjaelif"]):
650+
self.tree.generateImpliedEndTags(exclude=token["name"])
651+
652+
ifself.tree.openElements[-1].namein ["jinjaif","jinjaelif"]andtoken["name"]in ["jinjaelse","jinjaelif"]:
653+
pass
654+
elifself.tree.openElements[-1].name!=token["name"]:
655+
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
656+
whileself.tree.openElements.pop()!=node:
657+
pass
658+
659+
break
660+
else:
661+
ifnode.nameTupleinspecialElements:
662+
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
663+
break
664+
650665
defprocessJinjaStatementEndTag(self,token):
651-
log=logging.getLogger('html5lib')
652-
log.debug(u"InJinjaStatement: End Tag {}".format(token["name"]))
653666
fornodeinself.tree.openElements[::-1]:
654-
log.debug(u"InJinjaStatement: Open tag {} token {}".format(node,token))
655-
ifnode.name==token["name"]:
667+
ifnode.name==token["name"]or (node.namein ["jinjaelse","jinjaelif"]andtoken["name"]=="jinjaif"):
656668
self.tree.generateImpliedEndTags(exclude=token["name"])
657-
log.debug(u"InJinjaStatement: Implied end tag {} {}".format(self.tree.openElements[-1].name,token["name"]))
658-
ifself.tree.openElements[-1].name!=token["name"]:
669+
670+
ifself.tree.openElements[-1].namein ["jinjaelse","jinjaelif"]andtoken["name"]=="jinjaif":
671+
pass
672+
elifself.tree.openElements[-1].name!=token["name"]:
659673
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
660674
whileself.tree.openElements.pop()!=node:
661675
pass
662676
break
663677
else:
664678
ifnode.nameTupleinspecialElements:
665-
log.debug(u"InJinjaStatement Nametuple {} in {}".format(node.nameTuple,specialElements))
666679
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
667680
break
668681

@@ -671,18 +684,7 @@ def processJinjaStatement(self, token):
671684
self.tree.openElements[-1].appendChild(element)
672685

673686
classInJinjaArgumentPhase(Phase):
674-
defprocessJinjaArgumentStartTag(self,token):
675-
log=logging.getLogger('html5lib')
676-
log.debug(u"InJinjaArgument: Start Tag")
677-
678-
defprocessJinjaArgumentEndTag(self,token):
679-
log=logging.getLogger('html5lib')
680-
log.debug(u"InJinjaArgument: End Tag {}".format(token["name"]))
681-
682687
defprocessJinjaArgument(self,token):
683-
log=logging.getLogger('html5lib')
684-
log.debug(u"InJinjaArgument: Process Jinja Argument {}".format(token["name"]))
685-
686688
element=self.tree.createElementWithoutNamespace(token)
687689
self.tree.openElements[-1].childNodes[-1].appendChild(element)
688690

@@ -979,8 +981,6 @@ def startTagOther(self, token):
979981
defendTagHead(self,token):
980982
node=self.parser.tree.openElements.pop()
981983
assertnode.name=="head","Expected head got %s"%node.name
982-
log=logging.getLogger(u"html5lib")
983-
log.debug(u"Switching phase to afterHead")
984984
self.parser.phase=self.parser.phases["afterHead"]
985985

986986
defendTagHtmlBodyBr(self,token):
@@ -991,8 +991,6 @@ def endTagOther(self, token):
991991
self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
992992

993993
defanythingElse(self):
994-
log=logging.getLogger(u"html5lib")
995-
log.debug(u"Implied end head tag")
996994
self.endTagHead(impliedTagToken("head"))
997995

998996
# XXX If we implement a parser for which scripting is disabled we need to
@@ -1063,8 +1061,6 @@ def endTagOther(self, token):
10631061

10641062
defanythingElse(self):
10651063
self.tree.insertElement(impliedTagToken("body","StartTag"))
1066-
log=logging.getLogger(u"html5lib")
1067-
log.debug(u"Changing phase to body")
10681064
self.parser.phase=self.parser.phases["inBody"]
10691065
self.parser.framesetOK=True
10701066

@@ -1196,9 +1192,6 @@ def processSpaceCharactersDropNewline(self, token):
11961192
self.tree.insertText(data)
11971193

11981194
defprocessCharacters(self,token):
1199-
importlogging
1200-
log=logging.getLogger(u"html5lib")
1201-
log.debug(u"In Body phase processing Characters {}".format(token))
12021195
iftoken["data"]=="\u0000":
12031196
# The tokenizer should always emit null on its own
12041197
return

‎html5lib/tests/test_jinja.py‎

Lines changed: 97 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,28 @@ class JinjaTestCase(unittest.TestCase):
1717
defsetUp(self):
1818
self.parser=html5lib.HTMLParser(strict=True,namespaceHTMLElements=False,tree=html5lib.treebuilders.getTreeBuilder("etree",fullTree=True))
1919

20+
defassertTree(self,root,spec):
21+
self.assertEqual(len(root),len(spec))
22+
23+
forchild,spec_childinzip(root,spec):
24+
self.assertEqual(child.tag,spec_child['tag'])
25+
26+
if'text'inspec_child:
27+
self.assertEqual(child.text,spec_child['text'])
28+
29+
if'value'inspec_child:
30+
self.assertEqual(child.attrib['value'],spec_child['value'])
31+
32+
if'children'inspec_child:
33+
self.assertTree(child,spec_child['children'])
34+
else:
35+
self.assertEqual(len(child),0)
36+
37+
if'attrs'inspec_child:
38+
fork,vinspec_child['attrs'].iteritems():
39+
self.assertIn(k,child.attrib)
40+
self.assertEqual(v,child.attrib[k])
41+
2042
deftest_var_1(self):
2143
html_string="""<h1>{{ hi }}</h1>"""
2244

@@ -142,6 +164,18 @@ def test_jinja_block(self):
142164
'text':'Hi'
143165
}])
144166

167+
deftest_jinja_block_named(self):
168+
html_string="""
169+
{% block title %}Hi{% endblock title %}
170+
"""
171+
172+
tree=self.parser.parseFragment(html_string)
173+
174+
self.assertTree(tree, [{
175+
'tag':'jinjablock',
176+
'text':'Hi'
177+
}])
178+
145179
deftest_jinja_block_in_title(self):
146180
html_string="""
147181
<title>{% block title %}{% endblock %}</title>
@@ -258,6 +292,41 @@ def test_jinja_if(self):
258292
'text':'yay'
259293
}])
260294

295+
deftest_jinja_if_else(self):
296+
html_string="""
297+
{% if True %}yay{% else %}boo{% endif %}
298+
"""
299+
300+
tree=self.parser.parseFragment(html_string)
301+
dump(tree)
302+
303+
self.assertTree(tree, [{
304+
'tag':'jinjaif',
305+
'text':'yay'
306+
}, {
307+
'tag':'jinjaelse',
308+
'text':'boo'
309+
}])
310+
311+
deftest_jinja_if_elif_else(self):
312+
html_string="""
313+
{% if True %}yay{% elif False %}too{% else %}boo{% endif %}
314+
"""
315+
316+
tree=self.parser.parseFragment(html_string)
317+
dump(tree)
318+
319+
self.assertTree(tree, [{
320+
'tag':'jinjaif',
321+
'text':'yay'
322+
}, {
323+
'tag':'jinjaelif',
324+
'text':'too'
325+
}, {
326+
'tag':'jinjaelse',
327+
'text':'boo'
328+
}])
329+
261330
deftest_jinja_if_lstrip(self):
262331
html_string="""
263332
{%+ if True %}yay{% endif %}
@@ -382,24 +451,34 @@ def test_comment(self):
382451
'value':"{{ '[%s]' % page.title if page.title }} "
383452
}])
384453

385-
defassertTree(self,root,spec):
386-
self.assertEqual(len(root),len(spec))
387-
388-
forchild,spec_childinzip(root,spec):
389-
self.assertEqual(child.tag,spec_child['tag'])
390-
391-
if'text'inspec_child:
392-
self.assertEqual(child.text,spec_child['text'])
454+
deftest_file(self):
455+
html_string="""
456+
<h4>{{ (term_price.price / term_price.term.num_cycles) | currency }}/month</h4>
393457
394-
if'value'inspec_child:
395-
self.assertEqual(child.attrib['value'],spec_child['value'])
458+
"""
396459

397-
if'children'inspec_child:
398-
self.assertTree(child,spec_child['children'])
399-
else:
400-
self.assertEqual(len(child),0)
460+
tree=self.parser.parseFragment(html_string)
461+
dump(tree)
401462

402-
if'attrs'inspec_child:
403-
fork,vinspec_child['attrs'].iteritems():
404-
self.assertIn(k,child.attrib)
405-
self.assertEqual(v,child.attrib[k])
463+
self.assertTree(tree, [{
464+
'tag':'h4',
465+
'children': [{
466+
'tag':'jinjavariabletag',
467+
'children': [{
468+
'tag':'jinjavariable',
469+
'value':'(term_price.price'
470+
}, {
471+
'tag':'jinjavariable',
472+
'value':'/'
473+
}, {
474+
'tag':'jinjavariable',
475+
'value':'term_price.term.num_cycles)'
476+
}, {
477+
'tag':'jinjapipe',
478+
'value':'|'
479+
}, {
480+
'tag':'jinjafilter',
481+
'value':'currency'
482+
}]
483+
}]
484+
}])

‎html5lib/tokenizer.py‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@ def emitCurrentToken(self, resetState=True):
258258
# Below are the various tokenizer states worked out.
259259
defdataState(self):
260260
data=self.stream.char()
261-
log.debug(u"Tokenizer DataState {}".format(data))
262261

263262
ifdata=="&":
264263
self.state=self.entityDataState
@@ -539,7 +538,7 @@ def jinjaVariableState(self):
539538

540539
ifdata=="}":
541540
self.state=self.jinjaVariableEndState
542-
elifdata=="(":
541+
elifdata=="("andself.currentToken['type']in [tokenTypes["JinjaVariable"],tokenTypes["JinjaFilter"]]:
543542
self.currentToken= {
544543
"type":tokenTypes["JinjaArgumentStartTag"],
545544
"name":u"jinjaargumentstarttag","data": {},
@@ -595,8 +594,6 @@ def jinjaVariableState(self):
595594
defjinjaArgState(self):
596595
data=self.stream.char()
597596

598-
log.debug(u"Arg {}".format(data))
599-
600597
ifdata==")":
601598
self.tokenQueue.append({
602599
"type":tokenTypes["JinjaArgumentEndTag"],

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp