##// END OF EJS Templates
templater: replace regex complexity by simple str containment checks
Dirkjan Ochtman -
r8475:caaf1e77 default
parent child Browse files
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"(?:(?:#(?=[\w\|%]+#))|(?:{(?=[\w\|%]+})))"
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, key, format, get, map):
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, key, filters, get, map):
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 key, fmt, fl = m.groups()
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 fmt:
113 yield self._format(key, fmt, get, map)
114 elif fl:
115 yield self._filter(key, fl, get, map)
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(key)
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