comparison mercurial/templater.py @ 3640:e7639888bb2f

templater: simplify cache and remove filter argument in __call__
author Matt Mackall <mpm@selenic.com>
date Mon, 13 Nov 2006 13:26:57 -0600
parents dfbbb33f3fa3
children 7b064d8bac5e
comparison
equal deleted inserted replaced
3639:dfbbb33f3fa3 3640:e7639888bb2f
76 self.map[key] = os.path.join(self.base, val) 76 self.map[key] = os.path.join(self.base, val)
77 else: 77 else:
78 raise SyntaxError(_("%s:%s: parse error") % (mapfile, i)) 78 raise SyntaxError(_("%s:%s: parse error") % (mapfile, i))
79 79
80 def __contains__(self, key): 80 def __contains__(self, key):
81 return key in self.cache 81 return key in self.cache or key in self.map
82 82
83 def __call__(self, t, **map): 83 def __call__(self, t, **map):
84 '''perform expansion. 84 '''perform expansion.
85 t is name of map element to expand. 85 t is name of map element to expand.
86 map is added elements to use during expansion.''' 86 map is added elements to use during expansion.'''
87 m = self.defaults.copy() 87 m = self.defaults.copy()
88 m.update(map) 88 m.update(map)
89 try: 89 if not self.cache.has_key(t):
90 tmpl = self.cache[t]
91 except KeyError:
92 try: 90 try:
93 tmpl = self.cache[t] = file(self.map[t]).read() 91 self.cache[t] = file(self.map[t]).read()
94 except IOError, inst: 92 except IOError, inst:
95 raise IOError(inst.args[0], _('template file %s: %s') % 93 raise IOError(inst.args[0], _('template file %s: %s') %
96 (self.map[t], inst.args[1])) 94 (self.map[t], inst.args[1]))
97 return self.template(tmpl, self.filters, **m) 95 return self.template(self.cache[t], **m)
98 96
99 template_re = re.compile(r"(?:(?:#(?=[\w\|%]+#))|(?:{(?=[\w\|%]+})))" 97 template_re = re.compile(r"(?:(?:#(?=[\w\|%]+#))|(?:{(?=[\w\|%]+})))"
100 r"(\w+)((%\w+)*)((\|\w+)*)[#}]") 98 r"(\w+)((%\w+)*)((\|\w+)*)[#}]")
101 99
102 def template(self, tmpl, filters={}, **map): 100 def template(self, tmpl, **map):
103 while tmpl: 101 while tmpl:
104 m = self.template_re.search(tmpl) 102 m = self.template_re.search(tmpl)
105 if m: 103 if m:
106 start, end = m.span(0) 104 start, end = m.span(0)
107 key = m.group(1) 105 key = m.group(1)
126 124
127 v = "" 125 v = ""
128 126
129 elif fl: 127 elif fl:
130 for f in fl.split("|")[1:]: 128 for f in fl.split("|")[1:]:
131 v = filters[f](v) 129 v = self.filters[f](v)
132 130
133 yield v 131 yield v
134 tmpl = tmpl[end:] 132 tmpl = tmpl[end:]
135 else: 133 else:
136 yield tmpl 134 yield tmpl