Show More
@@ -42,8 +42,7 b' class engine(object):' | |||
|
42 | 42 | filter uses function to transform value. syntax is |
|
43 | 43 | {key|filter1|filter2|...}.''' |
|
44 | 44 | |
|
45 |
template_re = re.compile(r |
|
|
46 | r"(\w+)(?:(?:%(\w+))|((?:\|\w+)*))[#}]") | |
|
45 | template_re = re.compile(r'{([\w\|%]+)}|#([\w\|%]+)#') | |
|
47 | 46 | |
|
48 | 47 | def __init__(self, loader, filters={}, defaults={}): |
|
49 | 48 | self.loader = loader |
@@ -70,7 +69,8 b' class engine(object):' | |||
|
70 | 69 | else: |
|
71 | 70 | yield str(item) |
|
72 | 71 | |
|
73 |
def _format(self, |
|
|
72 | def _format(self, expr, get, map): | |
|
73 | key, format = expr.split('%') | |
|
74 | 74 | v = get(key) |
|
75 | 75 | if not hasattr(v, '__iter__'): |
|
76 | 76 | raise SyntaxError(_("Error expanding '%s%%%s'") % (key, format)) |
@@ -79,9 +79,10 b' class engine(object):' | |||
|
79 | 79 | lm.update(i) |
|
80 | 80 | yield self.process(format, lm) |
|
81 | 81 | |
|
82 |
def _filter(self, |
|
|
83 | v = get(key) | |
|
84 | for f in filters.split('|')[1:]: | |
|
82 | def _filter(self, expr, get, map): | |
|
83 | parts = expr.split('|') | |
|
84 | v = get(parts[0]) | |
|
85 | for f in parts[1:]: | |
|
85 | 86 | v = self.filters[f](v) |
|
86 | 87 | return v |
|
87 | 88 | |
@@ -103,18 +104,19 b' class engine(object):' | |||
|
103 | 104 | break |
|
104 | 105 | |
|
105 | 106 | start, end = m.span(0) |
|
106 |
|
|
|
107 | variants = m.groups() | |
|
108 | expr = variants[0] or variants[1] | |
|
107 | 109 | |
|
108 | 110 | if start: |
|
109 | 111 | yield tmpl[:start] |
|
110 | 112 | tmpl = tmpl[end:] |
|
111 | 113 | |
|
112 |
if |
|
|
113 |
yield self._format( |
|
|
114 |
elif |
|
|
115 |
yield self._filter( |
|
|
114 | if '%' in expr: | |
|
115 | yield self._format(expr, get, map) | |
|
116 | elif '|' in expr: | |
|
117 | yield self._filter(expr, get, map) | |
|
116 | 118 | else: |
|
117 |
yield get( |
|
|
119 | yield get(expr) | |
|
118 | 120 | |
|
119 | 121 | engines = {'default': engine} |
|
120 | 122 |
General Comments 0
You need to be logged in to leave comments.
Login now