import json
import optparse
import re
+import difflib
import sys
self._write(']')
def visitValue(self, node):
- self._write(json.dumps(node))
+ self._write(json.dumps(node, allow_nan=True))
self.replace(a, b)
def replace(self, a, b):
+ if isinstance(a, basestring) and isinstance(b, basestring):
+ if '\n' in a or '\n' in b:
+ a = a.splitlines()
+ b = b.splitlines()
+ differ = difflib.Differ()
+ result = differ.compare(a, b)
+ self.dumper.level += 1
+ for entry in result:
+ self.dumper._newline()
+ self.dumper._indent()
+ tag = entry[:2]
+ text = entry[2:]
+ if tag == '? ':
+ tag = ' '
+ prefix = ' '
+ text = text.rstrip()
+ suffix = ''
+ else:
+ prefix = '"'
+ suffix = '\\n"'
+ line = tag + prefix + text + suffix
+ self.dumper._write(line)
+ self.dumper.level -= 1
+ return
+ self.dumper.visit(a)
+ self.dumper._write(' -> ')
+ self.dumper.visit(b)
+
+ def isMultilineString(self, value):
+ return isinstance(value, basestring) and '\n' in value
+
+ def replaceMultilineString(self, a, b):
self.dumper.visit(a)
self.dumper._write(' -> ')
self.dumper.visit(b)