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