Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb.py @ 974:aedb47764f29
Added support for #foo%bar# syntax
This required moving template() into the templater class
author | Josef "Jeff" Sipek <jeffpc@optonline.net> |
---|---|
date | Wed, 17 Aug 2005 21:14:20 -0500 |
parents | 54b2a42e501e |
children | bdd7c53fca00 |
comparison
equal
deleted
inserted
replaced
938:54b2a42e501e | 974:aedb47764f29 |
---|---|
61 if hasattr(thing, "__iter__"): | 61 if hasattr(thing, "__iter__"): |
62 for part in thing: | 62 for part in thing: |
63 write(part) | 63 write(part) |
64 else: | 64 else: |
65 sys.stdout.write(str(thing)) | 65 sys.stdout.write(str(thing)) |
66 | |
67 def template(tmpl, filters = {}, **map): | |
68 while tmpl: | |
69 m = re.search(r"#([a-zA-Z0-9]+)((\|[a-zA-Z0-9]+)*)#", tmpl) | |
70 if m: | |
71 yield tmpl[:m.start(0)] | |
72 v = map.get(m.group(1), "") | |
73 v = callable(v) and v(**map) or v | |
74 | |
75 fl = m.group(2) | |
76 if fl: | |
77 for f in fl.split("|")[1:]: | |
78 v = filters[f](v) | |
79 | |
80 yield v | |
81 tmpl = tmpl[m.end(0):] | |
82 else: | |
83 yield tmpl | |
84 return | |
85 | 66 |
86 class templater: | 67 class templater: |
87 def __init__(self, mapfile, filters = {}, defaults = {}): | 68 def __init__(self, mapfile, filters = {}, defaults = {}): |
88 self.cache = {} | 69 self.cache = {} |
89 self.map = {} | 70 self.map = {} |
107 m.update(map) | 88 m.update(map) |
108 try: | 89 try: |
109 tmpl = self.cache[t] | 90 tmpl = self.cache[t] |
110 except KeyError: | 91 except KeyError: |
111 tmpl = self.cache[t] = file(self.map[t]).read() | 92 tmpl = self.cache[t] = file(self.map[t]).read() |
112 return template(tmpl, self.filters, **m) | 93 return self.template(tmpl, self.filters, **m) |
94 | |
95 def template(self, tmpl, filters = {}, **map): | |
96 while tmpl: | |
97 m = re.search(r"#([a-zA-Z0-9]+)((%[a-zA-Z0-9]+)*)((\|[a-zA-Z0-9]+)*)#", tmpl) | |
98 if m: | |
99 yield tmpl[:m.start(0)] | |
100 v = map.get(m.group(1), "") | |
101 v = callable(v) and v(**map) or v | |
102 | |
103 format = m.group(2) | |
104 fl = m.group(4) | |
105 | |
106 if format: | |
107 q = v.__iter__ | |
108 for i in q(): | |
109 lm = map.copy() | |
110 lm.update(i) | |
111 yield self(format[1:], **lm) | |
112 | |
113 v = "" | |
114 | |
115 elif fl: | |
116 for f in fl.split("|")[1:]: | |
117 v = filters[f](v) | |
118 | |
119 yield v | |
120 tmpl = tmpl[m.end(0):] | |
121 else: | |
122 yield tmpl | |
123 return | |
113 | 124 |
114 def rfc822date(x): | 125 def rfc822date(x): |
115 return time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x)) | 126 return time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x)) |
116 | 127 |
117 class hgweb: | 128 class hgweb: |
558 i.reverse() | 569 i.reverse() |
559 | 570 |
560 def entries(**map): | 571 def entries(**map): |
561 parity = 0 | 572 parity = 0 |
562 for k,n in i: | 573 for k,n in i: |
563 yield self.t("tagentry", | 574 yield {"parity": parity, |
564 parity = parity, | 575 "tag": k, |
565 tag = k, | 576 "node": hex(n)} |
566 node = hex(n)) | |
567 parity = 1 - parity | 577 parity = 1 - parity |
568 | 578 |
569 yield self.t("tags", | 579 yield self.t("tags", |
570 manifest = hex(mf), | 580 manifest = hex(mf), |
571 entries = entries) | 581 entries = entries) |