formatter: use templatefilters.json()
Now _jsonifyobj() is identical to templatefilters.json(paranoid=False).
--- a/mercurial/formatter.py Sun Apr 02 11:54:24 2017 +0900
+++ b/mercurial/formatter.py Sun Apr 02 12:02:17 2017 +0900
@@ -112,8 +112,8 @@
)
from . import (
- encoding,
error,
+ templatefilters,
templatekw,
templater,
util,
@@ -282,24 +282,6 @@
baseformatter.end(self)
self._out.write(pickle.dumps(self._data))
-def _jsonifyobj(v):
- if isinstance(v, dict):
- xs = ['"%s": %s' % (encoding.jsonescape(k), _jsonifyobj(u))
- for k, u in sorted(v.iteritems())]
- return '{' + ', '.join(xs) + '}'
- elif isinstance(v, (list, tuple)):
- return '[' + ', '.join(_jsonifyobj(e) for e in v) + ']'
- elif v is None:
- return 'null'
- elif v is True:
- return 'true'
- elif v is False:
- return 'false'
- elif isinstance(v, (int, long, float)):
- return str(v)
- else:
- return '"%s"' % encoding.jsonescape(v)
-
class jsonformatter(baseformatter):
def __init__(self, ui, out, topic, opts):
baseformatter.__init__(self, ui, topic, opts, _nullconverter)
@@ -319,7 +301,8 @@
first = False
else:
self._out.write(",\n")
- self._out.write(' "%s": %s' % (k, _jsonifyobj(v)))
+ u = templatefilters.json(v, paranoid=False)
+ self._out.write(' "%s": %s' % (k, u))
self._out.write("\n }")
def end(self):
baseformatter.end(self)
--- a/mercurial/templatefilters.py Sun Apr 02 11:54:24 2017 +0900
+++ b/mercurial/templatefilters.py Sun Apr 02 12:02:17 2017 +0900
@@ -218,7 +218,7 @@
return "".join(indenter())
@templatefilter('json')
-def json(obj):
+def json(obj, paranoid=True):
if obj is None:
return 'null'
elif obj is False:
@@ -228,7 +228,7 @@
elif isinstance(obj, (int, long, float)):
return str(obj)
elif isinstance(obj, str):
- return '"%s"' % encoding.jsonescape(obj, paranoid=True)
+ return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid)
elif util.safehasattr(obj, 'keys'):
out = ['%s: %s' % (json(k), json(v))
for k, v in sorted(obj.iteritems())]