Show More
@@ -96,36 +96,31 class templater(object): | |||
|
96 | 96 | (self.map[t], inst.args[1])) |
|
97 | 97 | return self.template(tmpl, self.filters, **m) |
|
98 | 98 | |
|
99 | template_re = re.compile(r"[#{]([a-zA-Z_][a-zA-Z0-9_]*)" | |
|
100 |
r"((% |
|
|
101 | r"((\|[a-zA-Z_][a-zA-Z0-9_]*)*)[#}]") | |
|
99 | template_re = re.compile(r"(?:(?:#(?=[\w\|%]+#))|(?:{(?=[\w\|%]+})))" | |
|
100 | r"(\w+)((%\w+)*)((\|\w+)*)[#}]") | |
|
102 | 101 | |
|
103 | 102 | def template(self, tmpl, filters={}, **map): |
|
104 | lm = map.copy() | |
|
105 | 103 | while tmpl: |
|
106 | 104 | m = self.template_re.search(tmpl) |
|
107 | 105 | if m: |
|
108 | 106 | start, end = m.span(0) |
|
109 | s, e = tmpl[start], tmpl[end - 1] | |
|
110 | 107 | key = m.group(1) |
|
111 | if ((s == '#' and e != '#') or (s == '{' and e != '}')): | |
|
112 | raise SyntaxError(_("'%s'/'%s' mismatch expanding '%s'") % | |
|
113 | (s, e, key)) | |
|
114 | if start: | |
|
115 | yield tmpl[:start] | |
|
116 | v = map.get(key, "") | |
|
117 | v = callable(v) and v(**map) or v | |
|
118 | ||
|
119 | 108 | format = m.group(2) |
|
120 | 109 | fl = m.group(4) |
|
121 | 110 | |
|
111 | if start: | |
|
112 | yield tmpl[:start] | |
|
113 | ||
|
114 | v = map.get(key, "") | |
|
115 | if callable(v): | |
|
116 | v = v(**map) | |
|
117 | ||
|
122 | 118 | if format: |
|
123 |
|
|
|
124 | q = v.__iter__ | |
|
125 | except AttributeError: | |
|
119 | if not hasattr(v, '__iter__'): | |
|
126 | 120 | raise SyntaxError(_("Error expanding '%s%s'") |
|
127 | 121 | % (key, format)) |
|
128 |
|
|
|
122 | lm = map.copy() | |
|
123 | for i in v: | |
|
129 | 124 | lm.update(i) |
|
130 | 125 | yield self(format[1:], **lm) |
|
131 | 126 |
General Comments 0
You need to be logged in to leave comments.
Login now