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 2012/01/18 13:37:00 UTC

svn commit: r1232857 - in /jackrabbit/sandbox/microkernel/src: main/java/org/apache/jackrabbit/mk/json/ test/java/org/apache/jackrabbit/mk/json/

Author: thomasm
Date: Wed Jan 18 12:36:59 2012
New Revision: 1232857

URL: http://svn.apache.org/viewvc?rev=1232857&view=rev
Log:
Jsop parser / generator: faster and lenient array parsing, no space after newline.

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.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=1232857&r1=1232856&r2=1232857&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 Wed Jan 18 12:36:59 2012
@@ -207,7 +207,7 @@ public class JsopBuilder implements Jsop
         if (lineLength > 0) {
             int len = buff.length();
             if (len > lineLength / 4 && len + add - previous > lineLength) {
-                buff.append("\n ");
+                buff.append('\n');
                 previous = len;
             }
         }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java?rev=1232857&r1=1232856&r2=1232857&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java Wed Jan 18 12:36:59 2012
@@ -244,6 +244,17 @@ public class JsopStream implements JsopR
             return "false";
         case JsopTokenizer.NULL:
             return "null";
+        case '[':
+            StringBuilder buff = new StringBuilder();
+            buff.append('[');
+            while (true) {
+                String s = readRawValue();
+                buff.append(s);
+                if ("]".equals(s)) {
+                    break;
+                }
+            }
+            return buff.toString();
         }
         return Character.toString((char) (x & 255));
     }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java?rev=1232857&r1=1232856&r2=1232857&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java Wed Jan 18 12:36:59 2012
@@ -71,6 +71,9 @@ public class JsopTokenizer implements Js
      * @return the token
      */
     public String getToken() {
+        if (lastType > COMMENT) {
+            return String.valueOf((char) lastType);
+        }
         return lastEscaped ? decode(lastToken) : lastToken;
     }
 
@@ -393,15 +396,20 @@ public class JsopTokenizer implements Js
 
     private void skipRawValue() {
         switch (currentType) {
-            case '[':
+            case '[': {
                 read();
-                if (!matches(']')) {
-                    do {
-                        skipRawValue();
-                    } while (matches(','));
-                    read(']');
+                int level = 0;
+                while (true) {
+                    if (matches(']') && level-- == 0) {
+                        break;
+                    } else if (matches('[')) {
+                        level++;
+                    } else {
+                        read();
+                    }
                 }
                 break;
+            }
             case '{':
                 read();
                 if (!matches('}')) {

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java?rev=1232857&r1=1232856&r2=1232857&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java Wed Jan 18 12:36:59 2012
@@ -47,6 +47,27 @@ public class JsopStreamTest extends Test
         assertEquals("\"x\":[1,null,true,false,\"Hello\"]", s.toString());
     }
 
+    public void testRawValue() {
+        JsopStream s = new JsopStream().tag('+').
+        key("x").object().
+            key("y").array().value(1).array().endArray().value(2).endArray().endObject();
+        assertEquals("+\"x\":{\"y\":[1,[],2]}", s.toString());
+        testRawValue(s);
+        testRawValue(new JsopTokenizer(s.toString()));
+    }
+
+    private void testRawValue(JsopReader s) {
+        assertFalse(s.matches('-'));
+        assertTrue(s.matches('+'));
+        assertEquals("x", s.read(JsopTokenizer.STRING));
+        s.read(':');
+        assertEquals("{", s.read('{'));
+        assertEquals("y", s.readString());
+        s.read(':');
+        assertEquals("[1,[],2]", s.readRawValue());
+        s.read('}');
+    }
+
     public void testJsopReader() {
         JsopStream s = new JsopStream().tag('+').
             key("x").object().

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java?rev=1232857&r1=1232856&r2=1232857&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java Wed Jan 18 12:36:59 2012
@@ -76,8 +76,8 @@ public class JsopTest extends TestCase {
 
         buff.setLineLength(10);
         buff.key("hello").value("world");
-        assertEquals("\"hello\":\n \"world\"", buff.toString());
-        assertEquals(17, buff.length());
+        assertEquals("\"hello\":\n\"world\"", buff.toString());
+        assertEquals(16, buff.length());
     }
 
     public void testNumber() {