Mercurial > public > mercurial-scm > hg
comparison mercurial/templatefilters.py @ 8014:6a77ba181bc6
templatefilters: split out jsonescape() function
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Mon, 06 Apr 2009 10:51:45 +0200 |
parents | de377b1a9a84 |
children | 1bef3656d9fe |
comparison
equal
deleted
inserted
replaced
8013:9ec25db32b4e | 8014:6a77ba181bc6 |
---|---|
127 _escapes = [ | 127 _escapes = [ |
128 ('\\', '\\\\'), ('"', '\\"'), ('\t', '\\t'), ('\n', '\\n'), | 128 ('\\', '\\\\'), ('"', '\\"'), ('\t', '\\t'), ('\n', '\\n'), |
129 ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'), | 129 ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'), |
130 ] | 130 ] |
131 | 131 |
132 def jsonescape(s): | |
133 for k, v in _escapes: | |
134 s = s.replace(k, v) | |
135 return s | |
136 | |
132 def json(obj): | 137 def json(obj): |
133 if obj is None or obj is False or obj is True: | 138 if obj is None or obj is False or obj is True: |
134 return {None: 'null', False: 'false', True: 'true'}[obj] | 139 return {None: 'null', False: 'false', True: 'true'}[obj] |
135 elif isinstance(obj, int) or isinstance(obj, float): | 140 elif isinstance(obj, int) or isinstance(obj, float): |
136 return str(obj) | 141 return str(obj) |
137 elif isinstance(obj, str): | 142 elif isinstance(obj, str): |
138 for k, v in _escapes: | 143 return '"%s"' % jsonescape(obj) |
139 obj = obj.replace(k, v) | |
140 return '"%s"' % obj | |
141 elif isinstance(obj, unicode): | 144 elif isinstance(obj, unicode): |
142 return json(obj.encode('utf-8')) | 145 return json(obj.encode('utf-8')) |
143 elif hasattr(obj, 'keys'): | 146 elif hasattr(obj, 'keys'): |
144 out = [] | 147 out = [] |
145 for k, v in obj.iteritems(): | 148 for k, v in obj.iteritems(): |
167 "firstline": firstline, | 170 "firstline": firstline, |
168 "tabindent": lambda x: indent(x, '\t'), | 171 "tabindent": lambda x: indent(x, '\t'), |
169 "hgdate": lambda x: "%d %d" % x, | 172 "hgdate": lambda x: "%d %d" % x, |
170 "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'), | 173 "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'), |
171 "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'), | 174 "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'), |
175 "json": json, | |
176 "jsonescape": jsonescape, | |
172 "obfuscate": obfuscate, | 177 "obfuscate": obfuscate, |
173 "permissions": permissions, | 178 "permissions": permissions, |
174 "person": person, | 179 "person": person, |
175 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2"), | 180 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2"), |
176 "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"), | 181 "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"), |
180 "strip": lambda x: x.strip(), | 185 "strip": lambda x: x.strip(), |
181 "urlescape": lambda x: urllib.quote(x), | 186 "urlescape": lambda x: urllib.quote(x), |
182 "user": lambda x: util.shortuser(x), | 187 "user": lambda x: util.shortuser(x), |
183 "stringescape": lambda x: x.encode('string_escape'), | 188 "stringescape": lambda x: x.encode('string_escape'), |
184 "xmlescape": xmlescape, | 189 "xmlescape": xmlescape, |
185 "json": json, | |
186 } | 190 } |