improve templating.
authorVadim Gelfer <vadim.gelfer@gmail.com>
Mon, 27 Feb 2006 11:33:09 -0800
changeset 1904 a7e416bf3c1d
parent 1903 e4abeafd6eb1
child 1905 0c760737b996
improve templating. allow {foo} as well as #foo#. add new functions for changeset authors.
mercurial/templater.py
--- a/mercurial/templater.py	Mon Feb 27 11:32:10 2006 -0800
+++ b/mercurial/templater.py	Mon Feb 27 11:33:09 2006 -0800
@@ -67,9 +67,9 @@
             tmpl = self.cache[t] = file(self.map[t]).read()
         return self.template(tmpl, self.filters, **m)
 
-    template_re = re.compile(r"#([a-zA-Z_][a-zA-Z0-9_]*)"
+    template_re = re.compile(r"[#{]([a-zA-Z_][a-zA-Z0-9_]*)"
                              r"((%[a-zA-Z_][a-zA-Z0-9_]*)*)"
-                             r"((\|[a-zA-Z_][a-zA-Z0-9_]*)*)#")
+                             r"((\|[a-zA-Z_][a-zA-Z0-9_]*)*)[#}]")
 
     def template(self, tmpl, filters={}, **map):
         lm = map.copy()
@@ -136,18 +136,34 @@
 def obfuscate(text):
     return ''.join(['&#%d;' % ord(c) for c in text])
 
+def domain(author):
+    f = author.find('@')
+    if f == -1: return ''
+    author = author[f+1:]
+    f = author.find('>')
+    if f >= 0: author = author[:f]
+    return author
+
+def person(author):
+    f = author.find('<')
+    if f == -1: return util.shortuser(author)
+    return author[:f].rstrip()
+
 common_filters = {
-    "escape": lambda x: cgi.escape(x, True),
-    "urlescape": urllib.quote,
-    "strip": lambda x: x.strip(),
+    "addbreaks": nl2br,
     "age": age,
     "date": lambda x: util.datestr(x),
-    "addbreaks": nl2br,
+    "escape": lambda x: cgi.escape(x, True),
+    "firstline": (lambda x: x.splitlines(1)[0]),
+    "domain": domain,
     "obfuscate": obfuscate,
+    "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"),
+    "person": person,
+    "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"),
     "short": (lambda x: x[:12]),
-    "firstline": (lambda x: x.splitlines(1)[0]),
-    "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"),
-    "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"),
+    "strip": lambda x: x.strip(),
+    "urlescape": urllib.quote,
+    "user": util.shortuser,
     }
 
 def templatepath(name=None):