@@ -456,7 +456,6 @@ def resetInsertionMode(self):
456456new_phase = self .phases ["inBody" ]
457457break
458458
459- #log.debug(u"Changing phase to {}".format(new_phase))
460459self .phase = new_phase
461460
462461def parseRCDataRawtext (self ,token ,contentType ):
@@ -474,7 +473,6 @@ def parseRCDataRawtext(self, token, contentType):
474473
475474self .originalPhase = self .phase
476475
477- log .debug (u"Changing phase to text" )
478476self .phase = self .phases ["text" ]
479477
480478
@@ -530,8 +528,6 @@ def processDoctype(self, token):
530528self .parser .parseError ("unexpected-doctype" )
531529
532530def processCharacters (self ,token ):
533- log = logging .getLogger (u"html5lib" )
534- log .debug (u"Inserting text {}.format(token)" )
535531self .tree .insertText (token ["data" ])
536532
537533def processSpaceCharacters (self ,token ):
@@ -604,27 +600,20 @@ def processEndTag(self, token):
604600
605601class InJinjaVariablePhase (Phase ):
606602def processJinjaVariableStartTag (self ,token ):
607- log = logging .getLogger ('html5lib' )
608- log .debug (u"InJinjaVariable: Start Tag" )
609603self .tree .reconstructActiveFormattingElements ()
610604self .tree .insertElement (token )
611605
612606def processJinjaVariableEndTag (self ,token ):
613- log = logging .getLogger ('html5lib' )
614- log .debug (u"InJinjaVariable: End Tag {}" .format (token ["name" ]))
615607for node in self .tree .openElements [::- 1 ]:
616- log .debug (u"InJinjaVariable: Open tag {} token {}" .format (node ,token ))
617608if node .name == token ["name" ]:
618609self .tree .generateImpliedEndTags (exclude = token ["name" ])
619- log .debug (u"InJinjaVariable: Implied end tag {} {}" .format (self .tree .openElements [- 1 ].name ,token ["name" ]))
620610if self .tree .openElements [- 1 ].name != token ["name" ]:
621611self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
622612while self .tree .openElements .pop ()!= node :
623613pass
624614break
625615else :
626616if node .nameTuple in specialElements :
627- log .debug (u"InJinjaVariable Nametuple {} in {}" .format (node .nameTuple ,specialElements ))
628617self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
629618break
630619
@@ -642,27 +631,51 @@ def processJinjaFilter(self, token):
642631
643632class InJinjaStatementPhase (Phase ):
644633def processJinjaStatementStartTag (self ,token ):
645- log = logging .getLogger ('html5lib' )
646- log .debug (u"InJinjaStatement: Start Tag" )
634+ if token ['name' ]== 'jinjaelse' :
635+ self .closeOpenIf (token )
636+ elif token ['name' ]== 'jinjaelif' :
637+ self .closeOpenIf (token )
638+
647639self .tree .reconstructActiveFormattingElements ()
648640self .tree .insertElement (token )
649641
642+ def closeOpenIf (self ,token ):
643+ import logging
644+ log = logging .getLogger (u"html5lib" )
645+
646+ for node in self .tree .openElements [::- 1 ]:
647+ log .debug (u"Prev {} Cur {}" .format (node .name ,token ['name' ]))
648+
649+ if node .name == token ["name" ]or (node .name in ["jinjaif" ,"jinjaelif" ]and token ["name" ]in ["jinjaelse" ,"jinjaelif" ]):
650+ self .tree .generateImpliedEndTags (exclude = token ["name" ])
651+
652+ if self .tree .openElements [- 1 ].name in ["jinjaif" ,"jinjaelif" ]and token ["name" ]in ["jinjaelse" ,"jinjaelif" ]:
653+ pass
654+ elif self .tree .openElements [- 1 ].name != token ["name" ]:
655+ self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
656+ while self .tree .openElements .pop ()!= node :
657+ pass
658+
659+ break
660+ else :
661+ if node .nameTuple in specialElements :
662+ self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
663+ break
664+
650665def processJinjaStatementEndTag (self ,token ):
651- log = logging .getLogger ('html5lib' )
652- log .debug (u"InJinjaStatement: End Tag {}" .format (token ["name" ]))
653666for node in self .tree .openElements [::- 1 ]:
654- log .debug (u"InJinjaStatement: Open tag {} token {}" .format (node ,token ))
655- if node .name == token ["name" ]:
667+ if node .name == token ["name" ]or (node .name in ["jinjaelse" ,"jinjaelif" ]and token ["name" ]== "jinjaif" ):
656668self .tree .generateImpliedEndTags (exclude = token ["name" ])
657- log .debug (u"InJinjaStatement: Implied end tag {} {}" .format (self .tree .openElements [- 1 ].name ,token ["name" ]))
658- if self .tree .openElements [- 1 ].name != token ["name" ]:
669+
670+ if self .tree .openElements [- 1 ].name in ["jinjaelse" ,"jinjaelif" ]and token ["name" ]== "jinjaif" :
671+ pass
672+ elif self .tree .openElements [- 1 ].name != token ["name" ]:
659673self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
660674while self .tree .openElements .pop ()!= node :
661675pass
662676break
663677else :
664678if node .nameTuple in specialElements :
665- log .debug (u"InJinjaStatement Nametuple {} in {}" .format (node .nameTuple ,specialElements ))
666679self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
667680break
668681
@@ -671,18 +684,7 @@ def processJinjaStatement(self, token):
671684self .tree .openElements [- 1 ].appendChild (element )
672685
673686class InJinjaArgumentPhase (Phase ):
674- def processJinjaArgumentStartTag (self ,token ):
675- log = logging .getLogger ('html5lib' )
676- log .debug (u"InJinjaArgument: Start Tag" )
677-
678- def processJinjaArgumentEndTag (self ,token ):
679- log = logging .getLogger ('html5lib' )
680- log .debug (u"InJinjaArgument: End Tag {}" .format (token ["name" ]))
681-
682687def processJinjaArgument (self ,token ):
683- log = logging .getLogger ('html5lib' )
684- log .debug (u"InJinjaArgument: Process Jinja Argument {}" .format (token ["name" ]))
685-
686688element = self .tree .createElementWithoutNamespace (token )
687689self .tree .openElements [- 1 ].childNodes [- 1 ].appendChild (element )
688690
@@ -979,8 +981,6 @@ def startTagOther(self, token):
979981def endTagHead (self ,token ):
980982node = self .parser .tree .openElements .pop ()
981983assert node .name == "head" ,"Expected head got %s" % node .name
982- log = logging .getLogger (u"html5lib" )
983- log .debug (u"Switching phase to afterHead" )
984984self .parser .phase = self .parser .phases ["afterHead" ]
985985
986986def endTagHtmlBodyBr (self ,token ):
@@ -991,8 +991,6 @@ def endTagOther(self, token):
991991self .parser .parseError ("unexpected-end-tag" , {"name" :token ["name" ]})
992992
993993def anythingElse (self ):
994- log = logging .getLogger (u"html5lib" )
995- log .debug (u"Implied end head tag" )
996994self .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
10641062def anythingElse (self ):
10651063self .tree .insertElement (impliedTagToken ("body" ,"StartTag" ))
1066- log = logging .getLogger (u"html5lib" )
1067- log .debug (u"Changing phase to body" )
10681064self .parser .phase = self .parser .phases ["inBody" ]
10691065self .parser .framesetOK = True
10701066
@@ -1196,9 +1192,6 @@ def processSpaceCharactersDropNewline(self, token):
11961192self .tree .insertText (data )
11971193
11981194def processCharacters (self ,token ):
1199- import logging
1200- log = logging .getLogger (u"html5lib" )
1201- log .debug (u"In Body phase processing Characters {}" .format (token ))
12021195if token ["data" ]== "\u0000 " :
12031196# The tokenizer should always emit null on its own
12041197return