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

Commitf756cab

Browse files
committed
WIP - Jinja parsing
1 parent5246944 commitf756cab

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

‎html5lib/constants.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3092,7 +3092,8 @@
30923092
"JinjaVariableStartTag":11,
30933093
"JinjaVariableEndTag":12,
30943094
"JinjaVariable":13,
3095-
"JinjaFilter":14
3095+
"JinjaFilter":14,
3096+
"JinjaPipe":15
30963097
}
30973098

30983099
tagTokenTypes=frozenset((tokenTypes["StartTag"],tokenTypes["EndTag"],

‎html5lib/html5parser.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ def mainLoop(self):
172172
JinjaVariableStartTag=tokenTypes["JinjaVariableStartTag"]
173173
JinjaVariableEndTag=tokenTypes["JinjaVariableEndTag"]
174174
JinjaVariable=tokenTypes["JinjaVariable"]
175+
JinjaPipe=tokenTypes["JinjaPipe"]
175176
JinjaFilter=tokenTypes["JinjaFilter"]
176177

177178
fortokeninself.normalizedTokens():
@@ -188,7 +189,7 @@ def mainLoop(self):
188189
self.parseError(new_token["data"],new_token.get("datavars", {}))
189190
new_token=None
190191
else:
191-
iftypein (JinjaVariableStartTag,JinjaVariableEndTag,JinjaVariable,JinjaFilter):
192+
iftypein (JinjaVariableStartTag,JinjaVariableEndTag,JinjaVariable,JinjaFilter,JinjaPipe):
192193
log.debug(u"Type is a jinja tag")
193194
phase=self.phases["inJinjaVariable"]
194195
elif (
@@ -231,6 +232,8 @@ def mainLoop(self):
231232
new_token=phase.processJinjaVariableEndTag(new_token)
232233
eliftype==JinjaVariable:
233234
new_token=phase.processJinjaVariable(new_token)
235+
eliftype==JinjaPipe:
236+
new_token=phase.processJinjaPipe(new_token)
234237
eliftype==JinjaFilter:
235238
new_token=phase.processJinjaFilter(new_token)
236239

@@ -429,7 +432,7 @@ def resetInsertionMode(self):
429432
new_phase=self.phases["inBody"]
430433
break
431434

432-
log.debug(u"Changing phase to {}".format(new_phase))
435+
#log.debug(u"Changing phase to {}".format(new_phase))
433436
self.phase=new_phase
434437

435438
defparseRCDataRawtext(self,token,contentType):
@@ -526,6 +529,9 @@ def processJinjaVariableEndTag(self, token):
526529
defprocessJinjaVariable(self,token):
527530
pass
528531

532+
defprocessJinjaPipe(self,token):
533+
pass
534+
529535
defprocessJinjaFilterTag(self,token):
530536
pass
531537

@@ -575,6 +581,10 @@ def processJinjaVariable(self, token):
575581
element=self.tree.createElementWithoutNamespace(token)
576582
self.tree.openElements[-1].appendChild(element)
577583

584+
defprocessJinjaPipe(self,token):
585+
element=self.tree.createElementWithoutNamespace(token)
586+
self.tree.openElements[-1].appendChild(element)
587+
578588
defprocessJinjaFilter(self,token):
579589
element=self.tree.createElementWithoutNamespace(token)
580590
self.tree.openElements[-1].appendChild(element)

‎html5lib/tokenizer.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ def jinjaVariableState(self):
390390

391391
ifdata=="}":
392392
self.state=self.jinjaVariableEndState
393+
#elif data == "(":
394+
#self.state = self.jinjaArgState
393395
elifdataisEOF:
394396
self.tokenQueue.append({"type":tokenTypes["ParseError"],"data":
395397
"eof-in-jinja-variable"})
@@ -398,30 +400,36 @@ def jinjaVariableState(self):
398400
# Skip spaces
399401
pass
400402
elifdata=="|":
401-
pass
403+
self.currentToken= {"type":tokenTypes["JinjaPipe"],
404+
"name":"jinjapipe","selfClosing":True,"data": {
405+
"value":data,
406+
"position":self.stream.position(),
407+
}}
408+
self.tokenQueue.append(self.currentToken)
402409
# If this is the first token after the variable start tag
403410
elifself.currentToken['type']==tokenTypes["JinjaVariableStartTag"]:
404411
#log.debug(u"Got start tag {}".format(("|", "}", "\u0000") | spaceCharacters))
405412

406-
chars=self.stream.charsUntil(frozenset(("|","}","\u0000"))|spaceCharacters)
413+
chars=self.stream.charsUntil(frozenset(("(","|","}","\u0000"))|spaceCharacters)
407414
self.currentToken= {"type":tokenTypes["JinjaVariable"],
408415
"name":"jinjavariable","selfClosing":True,"data": {
409416
"value":data+chars,
410417
"position":self.stream.position(),
411418
}}
412419
self.tokenQueue.append(self.currentToken)
413-
else:
414-
chars=self.stream.charsUntil(frozenset(("|","}","\u0000"))|spaceCharacters)
420+
elifself.currentToken['type']==tokenTypes["JinjaPipe"]:
421+
chars=self.stream.charsUntil(frozenset(("(","|","}","\u0000"))|spaceCharacters)
415422
self.currentToken= {"type":tokenTypes["JinjaFilter"],
416423
"name":"jinjafilter","selfClosing":True,"data": {
417424
"value":data+chars,
418425
"position":self.stream.position(),
419426
}}
420427
self.tokenQueue.append(self.currentToken)
421-
#else:
422-
#chars = self.stream.charsUntil(("}", "\u0000"))
423-
#self.tokenQueue.append({"type": tokenTypes["JinjaVariableTag"], "data":
424-
#data + chars})
428+
else:
429+
self.tokenQueue.append({"type":tokenTypes["ParseError"],"data":
430+
"expected-jinja-pipe-got-character"})
431+
self.stream.unget(data)
432+
self.state=self.bogusCommentState
425433

426434
returnTrue
427435

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp