equal
deleted
inserted
replaced
8 self.base = os.path.dirname(mapfile) |
8 self.base = os.path.dirname(mapfile) |
9 self.filters = filters |
9 self.filters = filters |
10 self.defaults = defaults |
10 self.defaults = defaults |
11 |
11 |
12 for l in file(mapfile): |
12 for l in file(mapfile): |
13 m = re.match(r'(\S+)\s*=\s*"(.*)"$', l) |
13 m = re.match(r'(\S+)\s*=\s*(".*"|\'.*\')$', l) |
14 if m: |
14 if m: |
15 self.cache[m.group(1)] = m.group(2) |
15 self.cache[m.group(1)] = eval(m.group(2)) |
16 else: |
16 else: |
17 m = re.match(r'(\S+)\s*=\s*(\S+)', l) |
17 m = re.match(r'(\S+)\s*=\s*(\S+)', l) |
18 if m: |
18 if m: |
19 self.map[m.group(1)] = os.path.join(self.base, m.group(2)) |
19 self.map[m.group(1)] = os.path.join(self.base, m.group(2)) |
20 else: |
20 else: |
21 raise LookupError(_("unknown map entry '%s'") % l) |
21 raise LookupError(_("unknown map entry '%s'") % l) |
|
22 |
|
23 def __contains__(self, key): |
|
24 return key in self.cache |
22 |
25 |
23 def __call__(self, t, **map): |
26 def __call__(self, t, **map): |
24 m = self.defaults.copy() |
27 m = self.defaults.copy() |
25 m.update(map) |
28 m.update(map) |
26 try: |
29 try: |
29 tmpl = self.cache[t] = file(self.map[t]).read() |
32 tmpl = self.cache[t] = file(self.map[t]).read() |
30 return self.template(tmpl, self.filters, **m) |
33 return self.template(tmpl, self.filters, **m) |
31 |
34 |
32 def template(self, tmpl, filters={}, **map): |
35 def template(self, tmpl, filters={}, **map): |
33 while tmpl: |
36 while tmpl: |
34 m = re.search(r"#([a-zA-Z0-9]+)((%[a-zA-Z0-9]+)*)((\|[a-zA-Z0-9]+)*)#", tmpl) |
37 m = re.search(r"#([a-zA-Z_][a-zA-Z0-9_]*)" |
|
38 r"((%[a-zA-Z_][a-zA-Z0-9_]*)*)" |
|
39 r"((\|[a-zA-Z_][a-zA-Z0-9_]*)*)#", tmpl) |
35 if m: |
40 if m: |
36 yield tmpl[:m.start(0)] |
41 yield tmpl[:m.start(0)] |
37 v = map.get(m.group(1), "") |
42 v = map.get(m.group(1), "") |
38 v = callable(v) and v(**map) or v |
43 v = callable(v) and v(**map) or v |
39 |
44 |
104 "firstline": (lambda x: x.splitlines(1)[0]), |
109 "firstline": (lambda x: x.splitlines(1)[0]), |
105 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), |
110 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), |
106 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"), |
111 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"), |
107 } |
112 } |
108 |
113 |
109 def templatepath(): |
114 def templatepath(name=None): |
110 for f in "templates", "../templates": |
115 for f in 'templates', '../templates': |
111 p = os.path.join(os.path.dirname(__file__), f) |
116 fl = f.split('/') |
112 if os.path.isdir(p): |
117 if name: fl.append(name) |
|
118 p = os.path.join(os.path.dirname(__file__), *fl) |
|
119 if (name and os.path.exists(p)) or os.path.isdir(p): |
113 return os.path.normpath(p) |
120 return os.path.normpath(p) |