You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/09/13 09:57:52 UTC

svn commit: r1170072 - /jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java

Author: thomasm
Date: Tue Sep 13 07:57:51 2011
New Revision: 1170072

URL: http://svn.apache.org/viewvc?rev=1170072&view=rev
Log:
Jsop pretty printer

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java?rev=1170072&r1=1170071&r2=1170072&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java Tue Sep 13 07:57:51 2011
@@ -292,8 +292,95 @@ public class JsopBuilder {
         }
     }
 
+    /**
+     * Get the buffer length.
+     *
+     * @return the length
+     */
     public int length() {
         return buff.length();
     }
 
+    /**
+     * Beautify (format) the json / jsop string.
+     *
+     * @param jsop the jsop string
+     * @return the formatted string
+     */
+    public static String prettyPrint(String jsop) {
+        StringBuilder buff = new StringBuilder();
+        JsopTokenizer t = new JsopTokenizer(jsop);
+        while (true) {
+            prettyPrint(buff, t, "  ");
+            if (t.getTokenType() == JsopTokenizer.END) {
+                return buff.toString();
+            }
+        }
+    }
+
+    static String prettyPrint(StringBuilder buff, JsopTokenizer t, String ident) {
+        String space = "";
+        boolean inArray = false;
+        while (true) {
+            switch (t.read()) {
+                case JsopTokenizer.END:
+                    return buff.toString();
+                case JsopTokenizer.STRING:
+                    buff.append('\"').append(t.getEscapedToken()).append('\"');
+                    break;
+                case JsopTokenizer.NUMBER:
+                case JsopTokenizer.TRUE:
+                case JsopTokenizer.FALSE:
+                case JsopTokenizer.NULL:
+                case JsopTokenizer.IDENTIFIER:
+                case JsopTokenizer.ERROR:
+                    buff.append(t.getEscapedToken());
+                    break;
+                case '{':
+                    if (t.matches('}')) {
+                        buff.append("{}");
+                    } else {
+                        buff.append("{\n").append(space += ident);
+                    }
+                    break;
+                case '}':
+                    space = space.substring(0, space.length() - ident.length());
+                    buff.append('\n').append(space).append("}");
+                    break;
+                case '[':
+                    inArray = true;
+                    buff.append("[");
+                    break;
+                case ']':
+                    inArray = false;
+                    buff.append("]");
+                    break;
+                case ',':
+                    if (!inArray) {
+                        buff.append(",\n").append(space);
+                    } else {
+                        buff.append(", ");
+                    }
+                    break;
+                case ':':
+                    buff.append(": ");
+                    break;
+                case '+':
+                    buff.append("+ ");
+                    break;
+                case '-':
+                    buff.append("- ");
+                    break;
+                case '^':
+                    buff.append("^ ");
+                    break;
+                case '/':
+                    buff.append("/ ");
+                    break;
+                default:
+                    throw new AssertionError("token type: " + t.getTokenType());
+            }
+        }
+    }
+
 }