jsondiff: Better formating of shader differences.
diff --git a/scripts/jsondiff.py b/scripts/jsondiff.py
index a76d0c9..3b1f911 100755
--- a/scripts/jsondiff.py
+++ b/scripts/jsondiff.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 ##########################################################################
 #
+# Copyright 2015 VMware, Inc.
 # Copyright 2011 Jose Fonseca
 # All Rights Reserved.
 #
@@ -28,6 +29,7 @@
 import json
 import optparse
 import re
+import difflib
 import sys
 
 
@@ -131,7 +133,7 @@
         self._write(']')
 
     def visitValue(self, node):
-        self._write(json.dumps(node))
+        self._write(json.dumps(node, allow_nan=True))
 
 
 
@@ -252,10 +254,38 @@
             self.replace(a, b)
 
     def replace(self, a, b):
+        if self.isMultilineString(a) or self.isMultilineString(b):
+            a = str(a)
+            b = str(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
+
 
 #
 # Unfortunately JSON standard does not include comments, but this is a quite