Mercurial > hg > mercurial-crew-with-dirclash
changeset 1899:888d298ddb91
many small changes to templater.
get string code to parse escapes. uses eval now, should parse strings
itself soon.
let caller check if fragment is defined using "in".
make templatepath take optional file name.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Sun, 26 Feb 2006 20:53:37 -0800 |
parents | e517189f168d |
children | f2815605186e |
files | mercurial/templater.py |
diffstat | 1 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -10,9 +10,9 @@ class templater(object): self.defaults = defaults for l in file(mapfile): - m = re.match(r'(\S+)\s*=\s*"(.*)"$', l) + m = re.match(r'(\S+)\s*=\s*(".*"|\'.*\')$', l) if m: - self.cache[m.group(1)] = m.group(2) + self.cache[m.group(1)] = eval(m.group(2)) else: m = re.match(r'(\S+)\s*=\s*(\S+)', l) if m: @@ -20,6 +20,9 @@ class templater(object): else: raise LookupError(_("unknown map entry '%s'") % l) + def __contains__(self, key): + return key in self.cache + def __call__(self, t, **map): m = self.defaults.copy() m.update(map) @@ -31,7 +34,9 @@ class templater(object): def template(self, tmpl, filters={}, **map): while tmpl: - m = re.search(r"#([a-zA-Z0-9]+)((%[a-zA-Z0-9]+)*)((\|[a-zA-Z0-9]+)*)#", tmpl) + m = re.search(r"#([a-zA-Z_][a-zA-Z0-9_]*)" + r"((%[a-zA-Z_][a-zA-Z0-9_]*)*)" + r"((\|[a-zA-Z_][a-zA-Z0-9_]*)*)#", tmpl) if m: yield tmpl[:m.start(0)] v = map.get(m.group(1), "") @@ -106,8 +111,10 @@ common_filters = { "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"), } -def templatepath(): - for f in "templates", "../templates": - p = os.path.join(os.path.dirname(__file__), f) - if os.path.isdir(p): +def templatepath(name=None): + for f in 'templates', '../templates': + fl = f.split('/') + if name: fl.append(name) + p = os.path.join(os.path.dirname(__file__), *fl) + if (name and os.path.exists(p)) or os.path.isdir(p): return os.path.normpath(p)