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/03/24 07:26:40 UTC

svn commit: r1084853 - in /jackrabbit/sandbox/jackrabbit-j3/src: main/java/org/apache/jackrabbit/j3/json/ main/java/org/apache/jackrabbit/j3/mc/ test/java/org/apache/jackrabbit/j3/json/

Author: thomasm
Date: Thu Mar 24 06:26:40 2011
New Revision: 1084853

URL: http://svn.apache.org/viewvc?rev=1084853&view=rev
Log:
Json/Jsop Tokenizer

Modified:
    jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/JsopTokenizer.java
    jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/NodeImpl.java
    jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestNode.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestTokenizer.java

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/JsopTokenizer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/JsopTokenizer.java?rev=1084853&r1=1084852&r2=1084853&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/JsopTokenizer.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/JsopTokenizer.java Thu Mar 24 06:26:40 2011
@@ -25,7 +25,7 @@ public class JsopTokenizer {
     // please note .0 and -.1 are not valid numbers
 
     final static int STRING = 0, NUMBER = 1, TRUE = 2, FALSE = 3, NULL = 4;
-    final static int ERROR = 5, END = 6;
+    final static int COMMENT = 5, ERROR = 6, END = 7;
 
     private static final String[] TYPE = {
         "string", "number", "true", "false", "null", "error", "end"
@@ -44,6 +44,11 @@ public class JsopTokenizer {
     }
 
     public String toString() {
+        int todo;
+//      version as comment
+//      newlines in strings -> error
+//      project source code format
+
         return jsop;
     }
 
@@ -167,6 +172,22 @@ public class JsopTokenizer {
         case '>':
         case '^':
             return ch;
+        case '/': {
+            ch = jsop.charAt(pos);
+            if (ch != '*') {
+                return '/';
+            }
+            pos++;
+            while (true) {
+                ch = jsop.charAt(pos++);
+                if (ch == '*' && jsop.charAt(pos) == '/') {
+                    break;
+                }
+            }
+            currentToken = jsop.substring(start + 2, pos - 1);
+            pos += 2;
+            return COMMENT;
+        }
         case '-':
             ch = jsop.charAt(pos);
             if (ch < '0' || ch > '9') {

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/NodeImpl.java?rev=1084853&r1=1084852&r2=1084853&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/NodeImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/NodeImpl.java Thu Mar 24 06:26:40 2011
@@ -134,6 +134,10 @@ public class NodeImpl {
             return Val.TRUE;
         } else if (t.matches(JsopTokenizer.FALSE)) {
             return Val.FALSE;
+        } else if (t.matches(JsopTokenizer.COMMENT)) {
+            String typeName = t.getToken().trim();
+            int type = PropertyType.valueFromName(typeName);
+            return Val.get(type, t.readString());
         }
         return Val.get(t.readString());
     }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java?rev=1084853&r1=1084852&r2=1084853&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/mc/Val.java Thu Mar 24 06:26:40 2011
@@ -242,6 +242,8 @@ public class Val implements Comparable<V
             return get(Boolean.parseBoolean(x));
         case PropertyType.LONG:
             return get(Long.decode(x));
+        case PropertyType.DOUBLE:
+            return get(Double.parseDouble(x));
         case PropertyType.DECIMAL:
         case PropertyType.DATE:
         case PropertyType.NAME:
@@ -310,8 +312,13 @@ public class Val implements Comparable<V
         case PropertyType.LONG:
             return value.toString();
         case PropertyType.DECIMAL:
-        case PropertyType.DOUBLE:
             return "/* " + PropertyType.nameFromValue(type) + " */ " + value.toString();
+        case PropertyType.DOUBLE:
+            String s = value.toString();
+            if (s.equals("NaN") || s.endsWith("Infinity")) {
+                s = "\"" + s + "\"";
+            }
+            return "/* " + PropertyType.nameFromValue(type) + " */ " + s;
         case PropertyType.STRING:
             return JsopTokenizer.encode(value.toString());
         default:

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestNode.java?rev=1084853&r1=1084852&r2=1084853&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestNode.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestNode.java Thu Mar 24 06:26:40 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.j3.json;
 
+import org.apache.jackrabbit.j3.mc.Val;
 import junit.framework.TestCase;
 
 /**
@@ -52,6 +53,16 @@ public class TestNode extends TestCase {
         node = NodeImpl.fromString("{\"long\": -230, \"decimal\": 230.0, \"double\": 230.0e1}");
         assertEquals("{\"double\": /* Double */ 2300.0,\n\"long\": -230,\n\"decimal\": /* Decimal */ 230.0\n}", node.toString());
 
+        node = new NodeImpl();
+        node.setProperty("NaN", Val.get(Math.sqrt(-1)));
+        node.setProperty("Inf", Val.get(Math.pow(0, -1)));
+        node.setProperty("negInf", Val.get(-Math.pow(0, -1)));
+        String s = node.toString();
+        assertEquals("{\"Inf\": /* Double */ \"Infinity\",\n\"NaN\": /* Double */ \"NaN\",\n\"negInf\": /* Double */ \"-Infinity\"\n}", s);
+        node = NodeImpl.fromString(s);
+        s = node.toString();
+        assertEquals("{\"Inf\": /* Double */ \"Infinity\",\n\"NaN\": /* Double */ \"NaN\",\n\"negInf\": /* Double */ \"-Infinity\"\n}", s);
+
     }
 
 }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestTokenizer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestTokenizer.java?rev=1084853&r1=1084852&r2=1084853&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestTokenizer.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestTokenizer.java Thu Mar 24 06:26:40 2011
@@ -66,6 +66,8 @@ public class TestTokenizer extends TestC
         test("\"Hello\"", "\"Hello\"");
         test(" [\n\n]\n", "[]");
         test(" {\n\n}\n", "{}");
+        test(" {\n\"a\": /* test */ 10\n}\n", "{ \"a\": /* test */ 10}");
+        test("+ - / ^ ", "+ - / ^");
 
         JsopTokenizer t = new JsopTokenizer("{}123");
         assertFalse(t.matches('+'));
@@ -126,6 +128,9 @@ public class TestTokenizer extends TestC
             case JsopTokenizer.ERROR:
                 buff.append("/error/");
                 break;
+            case JsopTokenizer.COMMENT:
+                buff.append("/*").append(t.getToken()).append("*/ ");
+                break;
             case '{':
                 buff.append(" {\n");
                 break;
@@ -153,6 +158,9 @@ public class TestTokenizer extends TestC
             case '^':
                 buff.append("^ ");
                 break;
+            case '/':
+                buff.append("/ ");
+                break;
             default:
                 throw new AssertionError("token type: " + t.getTokenType());
             }