@@ -174,6 +174,9 @@ def mainLoop(self):
174
174
JinjaVariable = tokenTypes ["JinjaVariable" ]
175
175
JinjaPipe = tokenTypes ["JinjaPipe" ]
176
176
JinjaFilter = tokenTypes ["JinjaFilter" ]
177
+ JinjaArgumentStartTag = tokenTypes ["JinjaArgumentStartTag" ]
178
+ JinjaArgumentEndTag = tokenTypes ["JinjaArgumentEndTag" ]
179
+ JinjaArgument = tokenTypes ["JinjaArgument" ]
177
180
178
181
for token in self .normalizedTokens ():
179
182
new_token = token
@@ -190,8 +193,11 @@ def mainLoop(self):
190
193
new_token = None
191
194
else :
192
195
if type in (JinjaVariableStartTag , JinjaVariableEndTag , JinjaVariable , JinjaFilter , JinjaPipe ):
193
- log .debug (u"Type is a jinja tag" )
196
+ log .debug (u"Type is a jinja variable tag" )
194
197
phase = self .phases ["inJinjaVariable" ]
198
+ elif type in (JinjaArgumentStartTag , JinjaArgumentEndTag , JinjaArgument ):
199
+ log .debug (u"Type is a jinja argument tag" )
200
+ phase = self .phases ["inJinjaArgument" ]
195
201
elif (
196
202
len (self .tree .openElements ) == 0 or
197
203
currentNodeNamespace == self .tree .defaultNamespace or
@@ -236,6 +242,12 @@ def mainLoop(self):
236
242
new_token = phase .processJinjaPipe (new_token )
237
243
elif type == JinjaFilter :
238
244
new_token = phase .processJinjaFilter (new_token )
245
+ elif type == JinjaArgumentStartTag :
246
+ new_token = phase .processJinjaArgumentStartTag (new_token )
247
+ elif type == JinjaArgumentEndTag :
248
+ new_token = phase .processJinjaArgumentEndTag (new_token )
249
+ elif type == JinjaArgument :
250
+ new_token = phase .processJinjaArgument (new_token )
239
251
240
252
if (type == StartTagToken and token ["selfClosing" ]
241
253
and not token ["selfClosingAcknowledged" ]):
@@ -529,6 +541,15 @@ def processJinjaVariableEndTag(self, token):
529
541
def processJinjaVariable (self , token ):
530
542
pass
531
543
544
+ def processJinjaArgumentStartTag (self , token ):
545
+ pass
546
+
547
+ def processJinjaArgumentEndTag (self , token ):
548
+ pass
549
+
550
+ def processJinjaArgument (self , token ):
551
+ pass
552
+
532
553
def processJinjaPipe (self , token ):
533
554
pass
534
555
@@ -554,26 +575,26 @@ def processEndTag(self, token):
554
575
class InJinjaVariablePhase (Phase ):
555
576
def processJinjaVariableStartTag (self , token ):
556
577
log = logging .getLogger ('html5lib' )
557
- log .debug (u"InJinja : Start Tag" )
578
+ log .debug (u"InJinjaVariable : Start Tag" )
558
579
self .tree .reconstructActiveFormattingElements ()
559
580
self .tree .insertElement (token )
560
581
561
582
def processJinjaVariableEndTag (self , token ):
562
583
log = logging .getLogger ('html5lib' )
563
- log .debug (u"InJinja : End Tag {}" .format (token ["name" ]))
584
+ log .debug (u"InJinjaVariable : End Tag {}" .format (token ["name" ]))
564
585
for node in self .tree .openElements [::- 1 ]:
565
- log .debug (u"InJinja : Open tag {} token {}" .format (node , token ))
586
+ log .debug (u"InJinjaVariable : Open tag {} token {}" .format (node , token ))
566
587
if node .name == token ["name" ]:
567
588
self .tree .generateImpliedEndTags (exclude = token ["name" ])
568
- log .debug (u"InJinja : Implied end tag {} {}" .format (self .tree .openElements [- 1 ].name , token ["name" ]))
589
+ log .debug (u"InJinjaVariable : Implied end tag {} {}" .format (self .tree .openElements [- 1 ].name , token ["name" ]))
569
590
if self .tree .openElements [- 1 ].name != token ["name" ]:
570
591
self .parser .parseError ("unexpected-end-tag" , {"name" : token ["name" ]})
571
592
while self .tree .openElements .pop () != node :
572
593
pass
573
594
break
574
595
else :
575
596
if node .nameTuple in specialElements :
576
- log .debug (u"Nametuple {} in {}" .format (node .nameTuple , specialElements ))
597
+ log .debug (u"InJinjaVariable Nametuple {} in {}" .format (node .nameTuple , specialElements ))
577
598
self .parser .parseError ("unexpected-end-tag" , {"name" : token ["name" ]})
578
599
break
579
600
@@ -589,6 +610,22 @@ def processJinjaFilter(self, token):
589
610
element = self .tree .createElementWithoutNamespace (token )
590
611
self .tree .openElements [- 1 ].appendChild (element )
591
612
613
+ class InJinjaArgumentPhase (Phase ):
614
+ def processJinjaArgumentStartTag (self , token ):
615
+ log = logging .getLogger ('html5lib' )
616
+ log .debug (u"InJinjaArgument: Start Tag" )
617
+
618
+ def processJinjaArgumentEndTag (self , token ):
619
+ log = logging .getLogger ('html5lib' )
620
+ log .debug (u"InJinjaArgument: End Tag {}" .format (token ["name" ]))
621
+
622
+ def processJinjaArgument (self , token ):
623
+ log = logging .getLogger ('html5lib' )
624
+ log .debug (u"InJinjaArgument: Process Jinja Argument {}" .format (token ["name" ]))
625
+
626
+ element = self .tree .createElementWithoutNamespace (token )
627
+ self .tree .openElements [- 1 ].childNodes [- 1 ].appendChild (element )
628
+
592
629
class InitialPhase (Phase ):
593
630
def processSpaceCharacters (self , token ):
594
631
pass
@@ -2794,6 +2831,7 @@ def processEndTag(self, token):
2794
2831
# XXX "inHeadNoscript": InHeadNoScriptPhase,
2795
2832
"afterHead" : AfterHeadPhase ,
2796
2833
"inJinjaVariable" : InJinjaVariablePhase ,
2834
+ "inJinjaArgument" : InJinjaArgumentPhase ,
2797
2835
"inBody" : InBodyPhase ,
2798
2836
"text" : TextPhase ,
2799
2837
"inTable" : InTablePhase ,
0 commit comments