Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pystache_custom
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
pystache_custom
Commits
23bd0053
Commit
23bd0053
authored
Mar 20, 2011
by
Pieter van de Bruggen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactoring some rendering-related behavior.
This now passes the entire Mustache spec v1.0.2.
parent
7f6da416
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
18 deletions
+26
-18
pystache/template.py
+26
-18
No files found.
pystache/template.py
View file @
23bd0053
...
...
@@ -15,14 +15,26 @@ def call(view, x, template=None):
x
=
x
(
view
,
template
)
return
unicode
(
x
)
def
parse
(
template
,
view
,
delims
=
(
'{{'
,
'}}'
)):
tmpl
=
Template
(
template
)
tmpl
.
view
=
view
tmpl
.
otag
,
tmpl
.
ctag
=
delims
tmpl
.
_compile_regexps
()
return
tmpl
.
_parse
()
def
renderParseTree
(
parsed
,
view
,
template
):
n
=
len
(
parsed
)
return
''
.
join
(
map
(
call
,
[
view
]
*
n
,
parsed
,
[
template
]
*
n
))
def
render
(
template
,
view
,
delims
=
(
'{{'
,
'}}'
)):
parseTree
=
parse
(
template
,
view
,
delims
)
return
renderParseTree
(
parseTree
,
view
,
template
)
def
partialTag
(
name
,
indentation
=
''
):
def
func
(
self
):
nonblank
=
re
.
compile
(
r'^(.)'
,
re
.
M
)
template
=
re
.
sub
(
nonblank
,
indentation
+
r'\1'
,
self
.
partial
(
name
))
template
=
Template
(
template
)
template
.
view
=
self
parsed
=
template
.
_parse
()
return
''
.
join
(
map
(
call
,
[
self
]
*
len
(
parsed
),
parsed
))
return
render
(
template
,
self
)
return
func
def
sectionTag
(
name
,
parsed
,
template
,
delims
):
...
...
@@ -32,10 +44,7 @@ def sectionTag(name, parsed, template, delims):
if
not
data
:
return
''
elif
callable
(
data
):
tmpl
=
Template
(
call
(
self
,
data
,
template
))
tmpl
.
otag
,
tmpl
.
ctag
=
delims
tmpl
.
_compile_regexps
()
ast
=
tmpl
.
_parse
()
ast
=
parse
(
call
(
self
,
data
,
template
),
self
,
delims
)
data
=
[
data
]
elif
type
(
data
)
not
in
[
list
,
tuple
]:
data
=
[
data
]
...
...
@@ -43,7 +52,7 @@ def sectionTag(name, parsed, template, delims):
parts
=
[]
for
element
in
data
:
self
.
context_list
.
insert
(
0
,
element
)
parts
.
append
(
''
.
join
(
map
(
call
,
[
self
]
*
len
(
ast
),
ast
)
))
parts
.
append
(
renderParseTree
(
ast
,
self
,
delims
))
del
self
.
context_list
[
0
]
return
''
.
join
(
parts
)
...
...
@@ -54,18 +63,18 @@ def inverseTag(name, parsed, template, delims):
data
=
self
.
get
(
name
)
if
data
:
return
''
return
''
.
join
(
map
(
call
,
[
self
]
*
len
(
parsed
),
parsed
)
)
return
renderParseTree
(
parsed
,
self
,
delims
)
return
func
def
escapedTag
(
name
):
fetch
=
unescapedTag
(
name
)
def
escapedTag
(
name
,
delims
):
fetch
=
unescapedTag
(
name
,
delims
)
def
func
(
self
):
return
cgi
.
escape
(
fetch
(
self
),
True
)
return
func
def
unescapedTag
(
name
):
def
unescapedTag
(
name
,
delims
):
def
func
(
self
):
return
unicode
(
call
(
self
,
self
.
get
(
name
)
))
return
unicode
(
render
(
call
(
self
,
self
.
get
(
name
)),
self
,
delims
))
return
func
class
EndOfSection
(
Exception
):
...
...
@@ -174,17 +183,16 @@ class Template(object):
elif
captures
[
'tag'
]
==
'/'
:
raise
EndOfSection
(
buffer
,
template
[
index
:
tagPos
],
pos
)
elif
captures
[
'tag'
]
in
[
'{'
,
'&'
]:
buffer
.
append
(
unescapedTag
(
name
))
buffer
.
append
(
unescapedTag
(
name
,
(
self
.
otag
,
self
.
ctag
)
))
elif
captures
[
'tag'
]
==
''
:
buffer
.
append
(
escapedTag
(
name
))
buffer
.
append
(
escapedTag
(
name
,
(
self
.
otag
,
self
.
ctag
)
))
else
:
raise
Exception
(
"'
%
s' is an unrecognized type!"
%
captures
[
'tag'
])
return
pos
def
render
(
self
,
encoding
=
None
):
parsed
=
self
.
_parse
()
result
=
''
.
join
(
map
(
call
,
[
self
.
view
]
*
len
(
parsed
),
parsed
))
result
=
render
(
self
.
template
,
self
.
view
)
if
encoding
is
not
None
:
result
=
result
.
encode
(
encoding
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment