mercurial/templatefilters.py
changeset 8014 6a77ba181bc6
parent 7948 de377b1a9a84
child 8158 1bef3656d9fe
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 }