You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2018/05/29 15:44:37 UTC

[sling-whiteboard] 01/02: adding dynamic arguments

This is an automated email from the ASF dual-hosted git repository.

jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit 8e4f9dc0adc1fc782ef5759b2cca0277c0bc1e80
Author: JE Bailey <ja...@sas.com>
AuthorDate: Tue May 29 11:30:07 2018 -0400

    adding dynamic arguments
---
 streams/pom.xml                                    |   69 +-
 .../sling/resource/stream/ResourceFilter.java      |    8 +-
 .../stream/api/impl/ComparisonVisitor.java         |    8 +-
 .../resource/stream/api/impl/DefaultContext.java   |    3 +-
 .../sling/resource/stream/impl/FilterParser.java   | 1031 +++---
 .../stream/impl/FilterParserConstants.java         |  261 +-
 .../stream/impl/FilterParserTokenManager.java      | 3579 ++++++++++----------
 streams/src/main/javacc/resourceFilter.jj          |   17 +-
 .../resource/stream/ResourceFilterArgTest.java     |   70 +
 9 files changed, 2573 insertions(+), 2473 deletions(-)

diff --git a/streams/pom.xml b/streams/pom.xml
index d8923d3..f539670 100644
--- a/streams/pom.xml
+++ b/streams/pom.xml
@@ -12,7 +12,7 @@
 	<parent>
 		<groupId>org.apache.sling</groupId>
 		<artifactId>sling</artifactId>
-		<version>29</version>
+		<version>32</version>
 	</parent>
 
 	<artifactId>org.apache.sling.resource.stream</artifactId>
@@ -37,9 +37,6 @@
 				<artifactId>maven-sling-plugin</artifactId>
 			</plugin>
 			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-			</plugin>
-			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>javacc-maven-plugin</artifactId>
 				<version>2.6</version>
@@ -58,41 +55,6 @@
 				</executions>
 			</plugin>
 		</plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.codehaus.mojo
-										</groupId>
-										<artifactId>
-											javacc-maven-plugin
-										</artifactId>
-										<versionRange>
-											[2.6,)
-										</versionRange>
-										<goals>
-											<goal>javacc</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore></ignore>
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
 	</build>
 	<dependencies>
 		<dependency>
@@ -116,7 +78,7 @@
 		<dependency>
 			<groupId>org.apache.jackrabbit</groupId>
 			<artifactId>jackrabbit-jcr-commons</artifactId>
-			<version>2.15.5</version>
+			<version>2.16.1</version>
 			<scope>provided</scope>
 		</dependency>
 		<dependency>
@@ -125,32 +87,5 @@
 			<scope>provided</scope>
 		</dependency>
 	</dependencies>
-	<profiles>
-		<profile>
-			<id>autoInstall</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.sling</groupId>
-						<artifactId>maven-sling-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>install-bundle</id>
-								<goals>
-									<goal>install</goal>
-								</goals>
-							</execution>
-						</executions>
-						<configuration>
-							<slingUrl>http://localhost:4502/system/console</slingUrl>
-							<user>admin</user>
-							<password>admin</password>
-							<failOnError>true</failOnError>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
 	<description>provides a set of utilities to create and handle streams</description>
 </project>
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/ResourceFilter.java b/streams/src/main/java/org/apache/sling/resource/stream/ResourceFilter.java
index d5fbcec..5777f85 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/ResourceFilter.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/ResourceFilter.java
@@ -50,8 +50,14 @@ public class ResourceFilter implements Predicate<Resource> {
         return context;
     }
 
-    public void setContext(Context context) {
+    public ResourceFilter setContext(Context context) {
         this.context = context;
+        return this;
+    }
+    
+    public ResourceFilter addArgument(String key, Object value) {
+        getContext().addArgument(key, value);
+        return this;
     }
 
 }
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/api/impl/ComparisonVisitor.java b/streams/src/main/java/org/apache/sling/resource/stream/api/impl/ComparisonVisitor.java
index a9fd7c2..08974bf 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/api/impl/ComparisonVisitor.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/api/impl/ComparisonVisitor.java
@@ -58,8 +58,8 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
             case "path":
                 return Resource::getPath;
             case "date":
-                final List<Function<Resource, Object>> children = node.visitChildren(this);
                 return resource -> {
+                    final List<Function<Resource, Object>> children = node.visitChildren(this);
                     Object[] arguments = children.stream().map(funct -> {
                         return funct.apply(resource);
                     }).toArray();
@@ -112,6 +112,11 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
                 }
                 return value;
             };
+        case FilterParserConstants.DYNAMIC_ARG:
+            return resource -> {
+                String argument = node.text;
+                return context.getArgument(argument).orElse(new Null());
+            };
         default:
             return resource -> node.text;
         }
@@ -142,7 +147,6 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
         } else {
             return DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(dateString, OffsetDateTime::from).toInstant();
         }
-
     }
 
 }
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/api/impl/DefaultContext.java b/streams/src/main/java/org/apache/sling/resource/stream/api/impl/DefaultContext.java
index a53d8eb..c6ca312 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/api/impl/DefaultContext.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/api/impl/DefaultContext.java
@@ -84,8 +84,7 @@ public class DefaultContext implements Context {
 
     @Override
     public Optional<Object> getArgument(String text) {
-        // TODO Auto-generated method stub
-        return null;
+        return Optional.ofNullable(arguments.get(text));
     }
 
 }
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParser.java b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParser.java
index 1ed9ed9..a713918 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParser.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParser.java
@@ -1,538 +1,493 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParser.java */
-package org.apache.sling.resource.stream.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.sling.resource.stream.impl.node.*;
-
-public final class FilterParser implements FilterParserConstants {
-
-    final public Node parse() throws ParseException {
-        final Node node;
-        node = or();
-        jj_consume_token(0);
-        {
-            if (true)
-                return node;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node or() throws ParseException {
-        final List<Node> nodes = new ArrayList<Node>(3);
-        Node node;
-        node = and();
-        nodes.add(node);
-        label_1: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case OR:
-                ;
-                break;
-            default:
-                jj_la1[0] = jj_gen;
-                break label_1;
-            }
-            jj_consume_token(OR);
-            node = and();
-            nodes.add(node);
-        }
-        {
-            if (true)
-                return nodes.size() != 1 ? new Node(FilterParserConstants.OR, nodes) : nodes.get(0);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node and() throws ParseException {
-        final List<Node> nodes = new ArrayList<Node>(3);
-        Node node;
-        node = constraint();
-        nodes.add(node);
-        label_2: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case AND:
-                ;
-                break;
-            default:
-                jj_la1[1] = jj_gen;
-                break label_2;
-            }
-            jj_consume_token(AND);
-            node = constraint();
-            nodes.add(node);
-        }
-        {
-            if (true)
-                return nodes.size() != 1 ? new Node(FilterParserConstants.AND, nodes) : nodes.get(0);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node constraint() throws ParseException {
-        final Node node;
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case LPAREN:
-            node = group();
-            break;
-        case OFFSETDATETIME:
-        case DATETIME:
-        case DATE:
-        case NUMBER:
-        case STRING:
-        case NULL:
-        case BOOLEAN:
-        case FUNCTION_NAME:
-        case PROPERTY:
-            node = comparison();
-            break;
-        default:
-            jj_la1[2] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-        }
-        {
-            if (true)
-                return node;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node group() throws ParseException {
-        final Node node;
-        jj_consume_token(LPAREN);
-        node = or();
-        jj_consume_token(RPAREN);
-        {
-            if (true)
-                return node;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node comparison() throws ParseException {
-        Node leftValue;
-        Token op;
-        Node rightValue;
-        leftValue = argument();
-        op = comparisonValue();
-        rightValue = argument();
-        {
-            if (true)
-                return new Node(op.kind, op.image, leftValue, rightValue);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Token comparisonValue() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case EQUAL:
-            jj_consume_token(EQUAL);
-            break;
-        case NOT_EQUAL:
-            jj_consume_token(NOT_EQUAL);
-            break;
-        case GREATER_THAN:
-            jj_consume_token(GREATER_THAN);
-            break;
-        case GREATER_THAN_OR_EQUAL:
-            jj_consume_token(GREATER_THAN_OR_EQUAL);
-            break;
-        case LESS_THAN:
-            jj_consume_token(LESS_THAN);
-            break;
-        case LESS_THAN_OR_EQUAL:
-            jj_consume_token(LESS_THAN_OR_EQUAL);
-            break;
-        case LIKE:
-            jj_consume_token(LIKE);
-            break;
-        case LIKE_NOT:
-            jj_consume_token(LIKE_NOT);
-            break;
-        case CONTAINS:
-            jj_consume_token(CONTAINS);
-            break;
-        case CONTAINS_NOT:
-            jj_consume_token(CONTAINS_NOT);
-            break;
-        case CONTAINS_ANY:
-            jj_consume_token(CONTAINS_ANY);
-            break;
-        case CONTAINS_NOT_ANY:
-            jj_consume_token(CONTAINS_NOT_ANY);
-            break;
-        case IN:
-            jj_consume_token(IN);
-            break;
-        case NOT_IN:
-            jj_consume_token(NOT_IN);
-            break;
-        default:
-            jj_la1[3] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-        }
-        {
-            if (true)
-                return token;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public List<Node> Arguments() throws ParseException {
-        Object value = new ArrayList();
-        jj_consume_token(LPAREN);
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case OFFSETDATETIME:
-        case DATETIME:
-        case DATE:
-        case NUMBER:
-        case STRING:
-        case NULL:
-        case BOOLEAN:
-        case FUNCTION_NAME:
-        case PROPERTY:
-            value = commaSepArguments();
-            break;
-        default:
-            jj_la1[4] = jj_gen;
-            ;
-        }
-        jj_consume_token(RPAREN);
-        {
-            if (true)
-                return (List) value;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public List<Node> commaSepArguments() throws ParseException {
-        final List<Node> list = new ArrayList<Node>(3);
-        Node arg;
-        arg = argument();
-        list.add(arg);
-        label_3: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case COMMA:
-                ;
-                break;
-            default:
-                jj_la1[5] = jj_gen;
-                break label_3;
-            }
-            jj_consume_token(COMMA);
-            arg = argument();
-            list.add(arg);
-        }
-        {
-            if (true)
-                return list;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node argument() throws ParseException {
-        Node selector = null;
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case OFFSETDATETIME:
-        case DATETIME:
-        case DATE:
-        case NUMBER:
-        case STRING:
-        case NULL:
-        case BOOLEAN:
-            selector = literal();
-            break;
-        case PROPERTY:
-            selector = property();
-            break;
-        case FUNCTION_NAME:
-            selector = function();
-            break;
-        default:
-            jj_la1[6] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-        }
-        {
-            if (true)
-                return selector;
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node function() throws ParseException {
-        String functionName = null;
-        List<Node> children = null;
-        jj_consume_token(FUNCTION_NAME);
-        functionName = token.image;
-        jj_consume_token(LPAREN);
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case OFFSETDATETIME:
-        case DATETIME:
-        case DATE:
-        case NUMBER:
-        case STRING:
-        case NULL:
-        case BOOLEAN:
-        case FUNCTION_NAME:
-        case PROPERTY:
-            children = commaSepArguments();
-            break;
-        default:
-            jj_la1[7] = jj_gen;
-            ;
-        }
-        jj_consume_token(RPAREN);
-        {
-            if (true)
-                return new Node(FilterParserConstants.FUNCTION_NAME, functionName, children);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node literal() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case STRING:
-            jj_consume_token(STRING);
-            break;
-        case NUMBER:
-            jj_consume_token(NUMBER);
-            break;
-        case NULL:
-            jj_consume_token(NULL);
-            break;
-        case BOOLEAN:
-            jj_consume_token(BOOLEAN);
-            break;
-        case DATE:
-            jj_consume_token(DATE);
-            break;
-        case DATETIME:
-            jj_consume_token(DATETIME);
-            break;
-        case OFFSETDATETIME:
-            jj_consume_token(OFFSETDATETIME);
-            break;
-        default:
-            jj_la1[8] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-        }
-        {
-            if (true)
-                return new Node(token.kind, token.image);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    final public Node property() throws ParseException {
-        jj_consume_token(PROPERTY);
-        {
-            if (true)
-                return new Node(token.kind, token.image);
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    /** Generated Token Manager. */
-    public FilterParserTokenManager token_source;
-    SimpleCharStream jj_input_stream;
-    /** Current token. */
-    public Token token;
-    /** Next token. */
-    public Token jj_nt;
-    private int jj_ntk;
-    private int jj_gen;
-    final private int[] jj_la1 = new int[9];
-    static private int[] jj_la1_0;
-    static private int[] jj_la1_1;
-    static {
-        jj_la1_init_0();
-        jj_la1_init_1();
-    }
-
-    private static void jj_la1_init_0() {
-        jj_la1_0 = new int[] { 0x400000, 0x200000, 0x9843c00, 0xf0000000, 0x8843c00, 0x4000000, 0x8843c00, 0x8843c00,
-                0x8843c00, };
-    }
-
-    private static void jj_la1_init_1() {
-        jj_la1_1 = new int[] { 0x0, 0x0, 0xc00, 0x3ff, 0xc00, 0x0, 0xc00, 0xc00, 0x0, };
-    }
-
-    /** Constructor with InputStream. */
-    public FilterParser(java.io.InputStream stream) {
-        this(stream, null);
-    }
-
-    /** Constructor with InputStream and supplied encoding */
-    public FilterParser(java.io.InputStream stream, String encoding) {
-        try {
-            jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1);
-        } catch (java.io.UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-        token_source = new FilterParserTokenManager(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream stream) {
-        ReInit(stream, null);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream stream, String encoding) {
-        try {
-            jj_input_stream.ReInit(stream, encoding, 1, 1);
-        } catch (java.io.UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-        token_source.ReInit(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    /** Constructor. */
-    public FilterParser(java.io.Reader stream) {
-        jj_input_stream = new SimpleCharStream(stream, 1, 1);
-        token_source = new FilterParserTokenManager(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.Reader stream) {
-        jj_input_stream.ReInit(stream, 1, 1);
-        token_source.ReInit(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    /** Constructor with generated Token Manager. */
-    public FilterParser(FilterParserTokenManager tm) {
-        token_source = tm;
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    /** Reinitialise. */
-    public void ReInit(FilterParserTokenManager tm) {
-        token_source = tm;
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 9; i++)
-            jj_la1[i] = -1;
-    }
-
-    private Token jj_consume_token(int kind) throws ParseException {
-        Token oldToken;
-        if ((oldToken = token).next != null)
-            token = token.next;
-        else
-            token = token.next = token_source.getNextToken();
-        jj_ntk = -1;
-        if (token.kind == kind) {
-            jj_gen++;
-            return token;
-        }
-        token = oldToken;
-        jj_kind = kind;
-        throw generateParseException();
-    }
-
-    /** Get the next Token. */
-    final public Token getNextToken() {
-        if (token.next != null)
-            token = token.next;
-        else
-            token = token.next = token_source.getNextToken();
-        jj_ntk = -1;
-        jj_gen++;
-        return token;
-    }
-
-    /** Get the specific Token. */
-    final public Token getToken(int index) {
-        Token t = token;
-        for (int i = 0; i < index; i++) {
-            if (t.next != null)
-                t = t.next;
-            else
-                t = t.next = token_source.getNextToken();
-        }
-        return t;
-    }
-
-    private int jj_ntk() {
-        if ((jj_nt = token.next) == null)
-            return (jj_ntk = (token.next = token_source.getNextToken()).kind);
-        else
-            return (jj_ntk = jj_nt.kind);
-    }
-
-    private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
-    private int[] jj_expentry;
-    private int jj_kind = -1;
-
-    /** Generate ParseException. */
-    public ParseException generateParseException() {
-        jj_expentries.clear();
-        boolean[] la1tokens = new boolean[45];
-        if (jj_kind >= 0) {
-            la1tokens[jj_kind] = true;
-            jj_kind = -1;
-        }
-        for (int i = 0; i < 9; i++) {
-            if (jj_la1[i] == jj_gen) {
-                for (int j = 0; j < 32; j++) {
-                    if ((jj_la1_0[i] & (1 << j)) != 0) {
-                        la1tokens[j] = true;
-                    }
-                    if ((jj_la1_1[i] & (1 << j)) != 0) {
-                        la1tokens[32 + j] = true;
-                    }
-                }
-            }
-        }
-        for (int i = 0; i < 45; i++) {
-            if (la1tokens[i]) {
-                jj_expentry = new int[1];
-                jj_expentry[0] = i;
-                jj_expentries.add(jj_expentry);
-            }
-        }
-        int[][] exptokseq = new int[jj_expentries.size()][];
-        for (int i = 0; i < jj_expentries.size(); i++) {
-            exptokseq[i] = jj_expentries.get(i);
-        }
-        return new ParseException(token, exptokseq, tokenImage);
-    }
-
-    /** Enable tracing. */
-    final public void enable_tracing() {
-    }
-
-    /** Disable tracing. */
-    final public void disable_tracing() {
-    }
-
-}
+/* Generated By:JavaCC: Do not edit this line. FilterParser.java */
+package org.apache.sling.resource.stream.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.sling.resource.stream.impl.node.*;
+
+public final class FilterParser implements FilterParserConstants {
+
+  final public Node parse() throws ParseException {
+  final Node node;
+    node = or();
+    jj_consume_token(0);
+    {if (true) return node;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node or() throws ParseException {
+  final List < Node > nodes = new ArrayList < Node > (3);
+  Node node;
+    node = and();
+    nodes.add(node);
+    label_1:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case OR:
+        ;
+        break;
+      default:
+        jj_la1[0] = jj_gen;
+        break label_1;
+      }
+      jj_consume_token(OR);
+      node = and();
+      nodes.add(node);
+    }
+    {if (true) return nodes.size() != 1 ? new Node(FilterParserConstants.OR, nodes) : nodes.get(0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node and() throws ParseException {
+  final List < Node > nodes = new ArrayList < Node > (3);
+  Node node;
+    node = constraint();
+    nodes.add(node);
+    label_2:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AND:
+        ;
+        break;
+      default:
+        jj_la1[1] = jj_gen;
+        break label_2;
+      }
+      jj_consume_token(AND);
+      node = constraint();
+      nodes.add(node);
+    }
+    {if (true) return nodes.size() != 1 ? new Node(FilterParserConstants.AND, nodes) : nodes.get(0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node constraint() throws ParseException {
+  final Node node;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case LPAREN:
+      node = group();
+      break;
+    case OFFSETDATETIME:
+    case DATETIME:
+    case DATE:
+    case NUMBER:
+    case STRING:
+    case NULL:
+    case BOOLEAN:
+    case DYNAMIC_ARG:
+    case FUNCTION_NAME:
+    case PROPERTY:
+      node = comparison();
+      break;
+    default:
+      jj_la1[2] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return node;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node group() throws ParseException {
+  final Node node;
+    jj_consume_token(LPAREN);
+    node = or();
+    jj_consume_token(RPAREN);
+    {if (true) return node;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node comparison() throws ParseException {
+  Node leftValue;
+  Token op;
+  Node rightValue;
+    leftValue = argument();
+    op = comparisonValue();
+    rightValue = argument();
+    {if (true) return new Node(op.kind, op.image, leftValue, rightValue);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token comparisonValue() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case EQUAL:
+      jj_consume_token(EQUAL);
+      break;
+    case NOT_EQUAL:
+      jj_consume_token(NOT_EQUAL);
+      break;
+    case GREATER_THAN:
+      jj_consume_token(GREATER_THAN);
+      break;
+    case GREATER_THAN_OR_EQUAL:
+      jj_consume_token(GREATER_THAN_OR_EQUAL);
+      break;
+    case LESS_THAN:
+      jj_consume_token(LESS_THAN);
+      break;
+    case LESS_THAN_OR_EQUAL:
+      jj_consume_token(LESS_THAN_OR_EQUAL);
+      break;
+    case LIKE:
+      jj_consume_token(LIKE);
+      break;
+    case LIKE_NOT:
+      jj_consume_token(LIKE_NOT);
+      break;
+    case CONTAINS:
+      jj_consume_token(CONTAINS);
+      break;
+    case CONTAINS_NOT:
+      jj_consume_token(CONTAINS_NOT);
+      break;
+    case CONTAINS_ANY:
+      jj_consume_token(CONTAINS_ANY);
+      break;
+    case CONTAINS_NOT_ANY:
+      jj_consume_token(CONTAINS_NOT_ANY);
+      break;
+    case IN:
+      jj_consume_token(IN);
+      break;
+    case NOT_IN:
+      jj_consume_token(NOT_IN);
+      break;
+    default:
+      jj_la1[3] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return token;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public List < Node > Arguments() throws ParseException {
+  Object value = new ArrayList();
+    jj_consume_token(LPAREN);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OFFSETDATETIME:
+    case DATETIME:
+    case DATE:
+    case NUMBER:
+    case STRING:
+    case NULL:
+    case BOOLEAN:
+    case DYNAMIC_ARG:
+    case FUNCTION_NAME:
+    case PROPERTY:
+      value = commaSepArguments();
+      break;
+    default:
+      jj_la1[4] = jj_gen;
+      ;
+    }
+    jj_consume_token(RPAREN);
+    {if (true) return (List) value;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public List < Node > commaSepArguments() throws ParseException {
+  final List < Node > list = new ArrayList < Node > (3);
+  Node arg;
+    arg = argument();
+    list.add(arg);
+    label_3:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[5] = jj_gen;
+        break label_3;
+      }
+      jj_consume_token(COMMA);
+      arg = argument();
+      list.add(arg);
+    }
+    {if (true) return list;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node argument() throws ParseException {
+  Node selector = null;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OFFSETDATETIME:
+    case DATETIME:
+    case DATE:
+    case NUMBER:
+    case STRING:
+    case NULL:
+    case BOOLEAN:
+      selector = literal();
+      break;
+    case PROPERTY:
+      selector = property();
+      break;
+    case DYNAMIC_ARG:
+      selector = dynamicArg();
+      break;
+    case FUNCTION_NAME:
+      selector = function();
+      break;
+    default:
+      jj_la1[6] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return selector;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node function() throws ParseException {
+  String functionName = null;
+  List < Node > children = null;
+    jj_consume_token(FUNCTION_NAME);
+    functionName = token.image;
+    jj_consume_token(LPAREN);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OFFSETDATETIME:
+    case DATETIME:
+    case DATE:
+    case NUMBER:
+    case STRING:
+    case NULL:
+    case BOOLEAN:
+    case DYNAMIC_ARG:
+    case FUNCTION_NAME:
+    case PROPERTY:
+      children = commaSepArguments();
+      break;
+    default:
+      jj_la1[7] = jj_gen;
+      ;
+    }
+    jj_consume_token(RPAREN);
+    {if (true) return new Node(FilterParserConstants.FUNCTION_NAME, functionName, children);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node dynamicArg() throws ParseException {
+  String functionName = null;
+    jj_consume_token(DYNAMIC_ARG);
+    jj_consume_token(FUNCTION_NAME);
+    functionName = token.image;
+    {if (true) return new Node(FilterParserConstants.DYNAMIC_ARG, functionName);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node literal() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case STRING:
+      jj_consume_token(STRING);
+      break;
+    case NUMBER:
+      jj_consume_token(NUMBER);
+      break;
+    case NULL:
+      jj_consume_token(NULL);
+      break;
+    case BOOLEAN:
+      jj_consume_token(BOOLEAN);
+      break;
+    case DATE:
+      jj_consume_token(DATE);
+      break;
+    case DATETIME:
+      jj_consume_token(DATETIME);
+      break;
+    case OFFSETDATETIME:
+      jj_consume_token(OFFSETDATETIME);
+      break;
+    default:
+      jj_la1[8] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return new Node(token.kind, token.image);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Node property() throws ParseException {
+    jj_consume_token(PROPERTY);
+    {if (true) return new Node(token.kind, token.image);}
+    throw new Error("Missing return statement in function");
+  }
+
+  /** Generated Token Manager. */
+  public FilterParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  /** Current token. */
+  public Token token;
+  /** Next token. */
+  public Token jj_nt;
+  private int jj_ntk;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[9];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static {
+      jj_la1_init_0();
+      jj_la1_init_1();
+   }
+   private static void jj_la1_init_0() {
+      jj_la1_0 = new int[] {0x400000,0x200000,0x9843c00,0xf0000000,0x8843c00,0x4000000,0x8843c00,0x8843c00,0x8843c00,};
+   }
+   private static void jj_la1_init_1() {
+      jj_la1_1 = new int[] {0x0,0x0,0x1c00,0x3ff,0x1c00,0x0,0x1c00,0x1c00,0x0,};
+   }
+
+  /** Constructor with InputStream. */
+  public FilterParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  /** Constructor with InputStream and supplied encoding */
+  public FilterParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new FilterParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  /** Constructor. */
+  public FilterParser(java.io.Reader stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new FilterParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  /** Constructor with generated Token Manager. */
+  public FilterParser(FilterParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  /** Reinitialise. */
+  public void ReInit(FilterParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
+  }
+
+  private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+
+/** Get the next Token. */
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+/** Get the specific Token. */
+  final public Token getToken(int index) {
+    Token t = token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+
+  /** Generate ParseException. */
+  public ParseException generateParseException() {
+    jj_expentries.clear();
+    boolean[] la1tokens = new boolean[46];
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 9; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 46; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.add(jj_expentry);
+      }
+    }
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = jj_expentries.get(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  /** Enable tracing. */
+  final public void enable_tracing() {
+  }
+
+  /** Disable tracing. */
+  final public void disable_tracing() {
+  }
+
+}
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserConstants.java b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserConstants.java
index d679d76..17c3180 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserConstants.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserConstants.java
@@ -1,108 +1,153 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserConstants.java */
-package org.apache.sling.resource.stream.impl;
-
-/**
- * Token literal values and constants. Generated by
- * org.javacc.parser.OtherFilesGen#start()
- */
-public interface FilterParserConstants {
-
-    /** End of File. */
-    int EOF = 0;
-    /** RegularExpression Id. */
-    int PLUS = 3;
-    /** RegularExpression Id. */
-    int MINUS = 4;
-    /** RegularExpression Id. */
-    int DIGIT = 5;
-    /** RegularExpression Id. */
-    int EXP = 6;
-    /** RegularExpression Id. */
-    int OFFSET = 7;
-    /** RegularExpression Id. */
-    int YYYYMMDD = 8;
-    /** RegularExpression Id. */
-    int TIME = 9;
-    /** RegularExpression Id. */
-    int OFFSETDATETIME = 10;
-    /** RegularExpression Id. */
-    int DATETIME = 11;
-    /** RegularExpression Id. */
-    int DATE = 12;
-    /** RegularExpression Id. */
-    int NUMBER = 13;
-    /** RegularExpression Id. */
-    int INTEGER = 14;
-    /** RegularExpression Id. */
-    int FRACTIONAL_DIGITS = 15;
-    /** RegularExpression Id. */
-    int EXPONENT = 16;
-    /** RegularExpression Id. */
-    int DIGITS = 17;
-    /** RegularExpression Id. */
-    int STRING = 18;
-    /** RegularExpression Id. */
-    int SQUOTE = 19;
-    /** RegularExpression Id. */
-    int DQUOTE = 20;
-    /** RegularExpression Id. */
-    int AND = 21;
-    /** RegularExpression Id. */
-    int OR = 22;
-    /** RegularExpression Id. */
-    int NULL = 23;
-    /** RegularExpression Id. */
-    int LPAREN = 24;
-    /** RegularExpression Id. */
-    int RPAREN = 25;
-    /** RegularExpression Id. */
-    int COMMA = 26;
-    /** RegularExpression Id. */
-    int BOOLEAN = 27;
-    /** RegularExpression Id. */
-    int EQUAL = 28;
-    /** RegularExpression Id. */
-    int NOT_EQUAL = 29;
-    /** RegularExpression Id. */
-    int GREATER_THAN = 30;
-    /** RegularExpression Id. */
-    int GREATER_THAN_OR_EQUAL = 31;
-    /** RegularExpression Id. */
-    int LESS_THAN = 32;
-    /** RegularExpression Id. */
-    int LESS_THAN_OR_EQUAL = 33;
-    /** RegularExpression Id. */
-    int LIKE = 34;
-    /** RegularExpression Id. */
-    int LIKE_NOT = 35;
-    /** RegularExpression Id. */
-    int CONTAINS = 36;
-    /** RegularExpression Id. */
-    int CONTAINS_NOT = 37;
-    /** RegularExpression Id. */
-    int CONTAINS_ANY = 38;
-    /** RegularExpression Id. */
-    int CONTAINS_NOT_ANY = 39;
-    /** RegularExpression Id. */
-    int IN = 40;
-    /** RegularExpression Id. */
-    int NOT_IN = 41;
-    /** RegularExpression Id. */
-    int FUNCTION_NAME = 42;
-    /** RegularExpression Id. */
-    int PROPERTY = 43;
-    /** RegularExpression Id. */
-    int UNKNOWN = 44;
-
-    /** Lexical state. */
-    int DEFAULT = 0;
-
-    /** Literal token values. */
-    String[] tokenImage = { "<EOF>", "\" \"", "\"\\t\"", "\"+\"", "\"-\"", "<DIGIT>", "<EXP>", "<OFFSET>", "<YYYYMMDD>",
-            "<TIME>", "<OFFSETDATETIME>", "<DATETIME>", "<DATE>", "<NUMBER>", "<INTEGER>", "<FRACTIONAL_DIGITS>",
-            "<EXPONENT>", "<DIGITS>", "<STRING>", "<SQUOTE>", "<DQUOTE>", "<AND>", "<OR>", "\"null\"", "\"(\"", "\")\"",
-            "\",\"", "<BOOLEAN>", "<EQUAL>", "<NOT_EQUAL>", "<GREATER_THAN>", "\">=\"", "<LESS_THAN>", "\"<=\"",
-            "<LIKE>", "<LIKE_NOT>", "\"contains\"", "\"contains not\"", "\"contains any\"", "\"contains not any\"",
-            "\"in\"", "\"not in\"", "<FUNCTION_NAME>", "<PROPERTY>", "<UNKNOWN>", };
-
-}
+/* Generated By:JavaCC: Do not edit this line. FilterParserConstants.java */
+package org.apache.sling.resource.stream.impl;
+
+
+/**
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
+ */
+public interface FilterParserConstants {
+
+  /** End of File. */
+  int EOF = 0;
+  /** RegularExpression Id. */
+  int PLUS = 3;
+  /** RegularExpression Id. */
+  int MINUS = 4;
+  /** RegularExpression Id. */
+  int DIGIT = 5;
+  /** RegularExpression Id. */
+  int EXP = 6;
+  /** RegularExpression Id. */
+  int OFFSET = 7;
+  /** RegularExpression Id. */
+  int YYYYMMDD = 8;
+  /** RegularExpression Id. */
+  int TIME = 9;
+  /** RegularExpression Id. */
+  int OFFSETDATETIME = 10;
+  /** RegularExpression Id. */
+  int DATETIME = 11;
+  /** RegularExpression Id. */
+  int DATE = 12;
+  /** RegularExpression Id. */
+  int NUMBER = 13;
+  /** RegularExpression Id. */
+  int INTEGER = 14;
+  /** RegularExpression Id. */
+  int FRACTIONAL_DIGITS = 15;
+  /** RegularExpression Id. */
+  int EXPONENT = 16;
+  /** RegularExpression Id. */
+  int DIGITS = 17;
+  /** RegularExpression Id. */
+  int STRING = 18;
+  /** RegularExpression Id. */
+  int SQUOTE = 19;
+  /** RegularExpression Id. */
+  int DQUOTE = 20;
+  /** RegularExpression Id. */
+  int AND = 21;
+  /** RegularExpression Id. */
+  int OR = 22;
+  /** RegularExpression Id. */
+  int NULL = 23;
+  /** RegularExpression Id. */
+  int LPAREN = 24;
+  /** RegularExpression Id. */
+  int RPAREN = 25;
+  /** RegularExpression Id. */
+  int COMMA = 26;
+  /** RegularExpression Id. */
+  int BOOLEAN = 27;
+  /** RegularExpression Id. */
+  int EQUAL = 28;
+  /** RegularExpression Id. */
+  int NOT_EQUAL = 29;
+  /** RegularExpression Id. */
+  int GREATER_THAN = 30;
+  /** RegularExpression Id. */
+  int GREATER_THAN_OR_EQUAL = 31;
+  /** RegularExpression Id. */
+  int LESS_THAN = 32;
+  /** RegularExpression Id. */
+  int LESS_THAN_OR_EQUAL = 33;
+  /** RegularExpression Id. */
+  int LIKE = 34;
+  /** RegularExpression Id. */
+  int LIKE_NOT = 35;
+  /** RegularExpression Id. */
+  int CONTAINS = 36;
+  /** RegularExpression Id. */
+  int CONTAINS_NOT = 37;
+  /** RegularExpression Id. */
+  int CONTAINS_ANY = 38;
+  /** RegularExpression Id. */
+  int CONTAINS_NOT_ANY = 39;
+  /** RegularExpression Id. */
+  int IN = 40;
+  /** RegularExpression Id. */
+  int NOT_IN = 41;
+  /** RegularExpression Id. */
+  int DYNAMIC_ARG = 42;
+  /** RegularExpression Id. */
+  int FUNCTION_NAME = 43;
+  /** RegularExpression Id. */
+  int PROPERTY = 44;
+  /** RegularExpression Id. */
+  int UNKNOWN = 45;
+
+  /** Lexical state. */
+  int DEFAULT = 0;
+
+  /** Literal token values. */
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\t\"",
+    "\"+\"",
+    "\"-\"",
+    "<DIGIT>",
+    "<EXP>",
+    "<OFFSET>",
+    "<YYYYMMDD>",
+    "<TIME>",
+    "<OFFSETDATETIME>",
+    "<DATETIME>",
+    "<DATE>",
+    "<NUMBER>",
+    "<INTEGER>",
+    "<FRACTIONAL_DIGITS>",
+    "<EXPONENT>",
+    "<DIGITS>",
+    "<STRING>",
+    "<SQUOTE>",
+    "<DQUOTE>",
+    "<AND>",
+    "<OR>",
+    "\"null\"",
+    "\"(\"",
+    "\")\"",
+    "\",\"",
+    "<BOOLEAN>",
+    "<EQUAL>",
+    "<NOT_EQUAL>",
+    "<GREATER_THAN>",
+    "\">=\"",
+    "<LESS_THAN>",
+    "\"<=\"",
+    "<LIKE>",
+    "<LIKE_NOT>",
+    "\"contains\"",
+    "\"contains not\"",
+    "\"contains any\"",
+    "\"contains not any\"",
+    "\"in\"",
+    "\"not in\"",
+    "\"$\"",
+    "<FUNCTION_NAME>",
+    "<PROPERTY>",
+    "<UNKNOWN>",
+  };
+
+}
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserTokenManager.java b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserTokenManager.java
index 583e24c..2c9ede5 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserTokenManager.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/impl/FilterParserTokenManager.java
@@ -1,1754 +1,1825 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
-package org.apache.sling.resource.stream.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.sling.resource.stream.impl.node.*;
-
-/** Token Manager. */
-public class FilterParserTokenManager implements FilterParserConstants {
-
-    /** Debug output. */
-    public java.io.PrintStream debugStream = System.out;
-
-    /** Set debug output. */
-    public void setDebugStream(java.io.PrintStream ds) {
-        debugStream = ds;
-    }
-
-    private final int jjStopStringLiteralDfa_0(int pos, long active0) {
-        switch (pos) {
-        case 0:
-            if ((active0 & 0x200000000L) != 0L) {
-                jjmatchedKind = 32;
-                return -1;
-            }
-            if ((active0 & 0x10000000000L) != 0L) {
-                jjmatchedKind = 42;
-                return 168;
-            }
-            if ((active0 & 0x20000800000L) != 0L) {
-                jjmatchedKind = 42;
-                return 58;
-            }
-            if ((active0 & 0xf000000000L) != 0L) {
-                jjmatchedKind = 42;
-                return 60;
-            }
-            if ((active0 & 0x4L) != 0L)
-                return 60;
-            if ((active0 & 0x80000000L) != 0L) {
-                jjmatchedKind = 30;
-                return -1;
-            }
-            return -1;
-        case 1:
-            if ((active0 & 0x200000000L) != 0L) {
-                if (jjmatchedPos == 0) {
-                    jjmatchedKind = 32;
-                    jjmatchedPos = 0;
-                }
-                return -1;
-            }
-            if ((active0 & 0x20000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 1;
-                return 57;
-            }
-            if ((active0 & 0x10000000000L) != 0L)
-                return 60;
-            if ((active0 & 0x80000000L) != 0L) {
-                if (jjmatchedPos == 0) {
-                    jjmatchedKind = 30;
-                    jjmatchedPos = 0;
-                }
-                return -1;
-            }
-            if ((active0 & 0xf000800000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 1;
-                return 60;
-            }
-            return -1;
-        case 2:
-            if ((active0 & 0xf000800000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 2;
-                return 60;
-            }
-            if ((active0 & 0x20000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 2;
-                return 56;
-            }
-            return -1;
-        case 3:
-            if ((active0 & 0xf000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 3;
-                return 60;
-            }
-            if ((active0 & 0x800000L) != 0L)
-                return 60;
-            if ((active0 & 0x20000000000L) != 0L) {
-                if (jjmatchedPos < 2) {
-                    jjmatchedKind = 42;
-                    jjmatchedPos = 2;
-                }
-                return 55;
-            }
-            return -1;
-        case 4:
-            if ((active0 & 0x20000000000L) != 0L) {
-                if (jjmatchedPos < 2) {
-                    jjmatchedKind = 42;
-                    jjmatchedPos = 2;
-                }
-                return -1;
-            }
-            if ((active0 & 0xf000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 4;
-                return 60;
-            }
-            return -1;
-        case 5:
-            if ((active0 & 0xf000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 5;
-                return 60;
-            }
-            if ((active0 & 0x20000000000L) != 0L) {
-                if (jjmatchedPos < 2) {
-                    jjmatchedKind = 42;
-                    jjmatchedPos = 2;
-                }
-                return -1;
-            }
-            return -1;
-        case 6:
-            if ((active0 & 0xf000000000L) != 0L) {
-                jjmatchedKind = 42;
-                jjmatchedPos = 6;
-                return 60;
-            }
-            return -1;
-        case 7:
-            if ((active0 & 0xf000000000L) != 0L)
-                return 60;
-            return -1;
-        default:
-            return -1;
-        }
-    }
-
-    private final int jjStartNfa_0(int pos, long active0) {
-        return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-    }
-
-    private int jjStopAtPos(int pos, int kind) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        return pos + 1;
-    }
-
-    private int jjMoveStringLiteralDfa0_0() {
-        switch (curChar) {
-        case 9:
-            return jjStartNfaWithStates_0(0, 2, 60);
-        case 40:
-            return jjStopAtPos(0, 24);
-        case 41:
-            return jjStopAtPos(0, 25);
-        case 44:
-            return jjStopAtPos(0, 26);
-        case 60:
-            return jjMoveStringLiteralDfa1_0(0x200000000L);
-        case 62:
-            return jjMoveStringLiteralDfa1_0(0x80000000L);
-        case 99:
-            return jjMoveStringLiteralDfa1_0(0xf000000000L);
-        case 105:
-            return jjMoveStringLiteralDfa1_0(0x10000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa1_0(0x20000800000L);
-        default:
-            return jjMoveNfa_0(0, 0);
-        }
-    }
-
-    private int jjMoveStringLiteralDfa1_0(long active0) {
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(0, active0);
-            return 1;
-        }
-        switch (curChar) {
-        case 61:
-            if ((active0 & 0x80000000L) != 0L)
-                return jjStopAtPos(1, 31);
-            else if ((active0 & 0x200000000L) != 0L)
-                return jjStopAtPos(1, 33);
-            break;
-        case 110:
-            if ((active0 & 0x10000000000L) != 0L)
-                return jjStartNfaWithStates_0(1, 40, 60);
-            break;
-        case 111:
-            return jjMoveStringLiteralDfa2_0(active0, 0x2f000000000L);
-        case 117:
-            return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(0, active0);
-    }
-
-    private int jjMoveStringLiteralDfa2_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(0, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(1, active0);
-            return 2;
-        }
-        switch (curChar) {
-        case 108:
-            return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
-        case 110:
-            return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
-        case 116:
-            return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(1, active0);
-    }
-
-    private int jjMoveStringLiteralDfa3_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(1, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(2, active0);
-            return 3;
-        }
-        switch (curChar) {
-        case 32:
-            return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L);
-        case 108:
-            if ((active0 & 0x800000L) != 0L)
-                return jjStartNfaWithStates_0(3, 23, 60);
-            break;
-        case 116:
-            return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(2, active0);
-    }
-
-    private int jjMoveStringLiteralDfa4_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(2, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(3, active0);
-            return 4;
-        }
-        switch (curChar) {
-        case 97:
-            return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
-        case 105:
-            return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(3, active0);
-    }
-
-    private int jjMoveStringLiteralDfa5_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(3, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(4, active0);
-            return 5;
-        }
-        switch (curChar) {
-        case 105:
-            return jjMoveStringLiteralDfa6_0(active0, 0xf000000000L);
-        case 110:
-            if ((active0 & 0x20000000000L) != 0L)
-                return jjStopAtPos(5, 41);
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_0(4, active0);
-    }
-
-    private int jjMoveStringLiteralDfa6_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(4, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(5, active0);
-            return 6;
-        }
-        switch (curChar) {
-        case 110:
-            return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(5, active0);
-    }
-
-    private int jjMoveStringLiteralDfa7_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(5, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(6, active0);
-            return 7;
-        }
-        switch (curChar) {
-        case 115:
-            if ((active0 & 0x1000000000L) != 0L) {
-                jjmatchedKind = 36;
-                jjmatchedPos = 7;
-            }
-            return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(6, active0);
-    }
-
-    private int jjMoveStringLiteralDfa8_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(6, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(7, active0);
-            return 8;
-        }
-        switch (curChar) {
-        case 32:
-            return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(7, active0);
-    }
-
-    private int jjMoveStringLiteralDfa9_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(7, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(8, active0);
-            return 9;
-        }
-        switch (curChar) {
-        case 97:
-            return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(8, active0);
-    }
-
-    private int jjMoveStringLiteralDfa10_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(8, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(9, active0);
-            return 10;
-        }
-        switch (curChar) {
-        case 110:
-            return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
-        case 111:
-            return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(9, active0);
-    }
-
-    private int jjMoveStringLiteralDfa11_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(9, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(10, active0);
-            return 11;
-        }
-        switch (curChar) {
-        case 116:
-            if ((active0 & 0x2000000000L) != 0L) {
-                jjmatchedKind = 37;
-                jjmatchedPos = 11;
-            }
-            return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
-        case 121:
-            if ((active0 & 0x4000000000L) != 0L)
-                return jjStopAtPos(11, 38);
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_0(10, active0);
-    }
-
-    private int jjMoveStringLiteralDfa12_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(10, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(11, active0);
-            return 12;
-        }
-        switch (curChar) {
-        case 32:
-            return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(11, active0);
-    }
-
-    private int jjMoveStringLiteralDfa13_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(11, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(12, active0);
-            return 13;
-        }
-        switch (curChar) {
-        case 97:
-            return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(12, active0);
-    }
-
-    private int jjMoveStringLiteralDfa14_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(12, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(13, active0);
-            return 14;
-        }
-        switch (curChar) {
-        case 110:
-            return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_0(13, active0);
-    }
-
-    private int jjMoveStringLiteralDfa15_0(long old0, long active0) {
-        if (((active0 &= old0)) == 0L)
-            return jjStartNfa_0(13, old0);
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(14, active0);
-            return 15;
-        }
-        switch (curChar) {
-        case 121:
-            if ((active0 & 0x8000000000L) != 0L)
-                return jjStopAtPos(15, 39);
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_0(14, active0);
-    }
-
-    private int jjStartNfaWithStates_0(int pos, int kind, int state) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            return pos + 1;
-        }
-        return jjMoveNfa_0(state, pos + 1);
-    }
-
-    static final long[] jjbitVec0 = { 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL,
-            0xffffffffffffffffL };
-    static final long[] jjbitVec2 = { 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL };
-
-    private int jjMoveNfa_0(int startState, int curPos) {
-        int startsAt = 0;
-        jjnewStateCnt = 193;
-        int i = 1;
-        jjstateSet[0] = startState;
-        int kind = 0x7fffffff;
-        for (;;) {
-            if (++jjround == 0x7fffffff)
-                ReInitRounds();
-            if (curChar < 64) {
-                long l = 1L << curChar;
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 57:
-                    case 60:
-                        if ((0x8c00847affffffffL & l) == 0L)
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 0:
-                        if ((0x8c00847affffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        } else if ((0x3ff000000000000L & l) != 0L) {
-                            if (kind > 13)
-                                kind = 13;
-                            jjCheckNAddStates(0, 14);
-                        } else if (curChar == 45)
-                            jjCheckNAddStates(15, 22);
-                        else if (curChar == 60) {
-                            if (kind > 32)
-                                kind = 32;
-                        } else if (curChar == 62) {
-                            if (kind > 30)
-                                kind = 30;
-                        } else if (curChar == 61)
-                            jjstateSet[jjnewStateCnt++] = 32;
-                        else if (curChar == 34)
-                            jjCheckNAddStates(23, 25);
-                        else if (curChar == 39)
-                            jjCheckNAddStates(26, 28);
-                        else if (curChar == 46)
-                            jjCheckNAdd(1);
-                        if (curChar == 33)
-                            jjstateSet[jjnewStateCnt++] = 34;
-                        else if (curChar == 38)
-                            jjstateSet[jjnewStateCnt++] = 15;
-                        break;
-                    case 168:
-                        if ((0x8c00847affffffffL & l) == 0L)
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 56:
-                        if ((0x8c00847affffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        } else if (curChar == 32)
-                            jjstateSet[jjnewStateCnt++] = 55;
-                        break;
-                    case 58:
-                        if ((0x8c00847affffffffL & l) == 0L)
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 1:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 15)
-                            kind = 15;
-                        jjCheckNAdd(1);
-                        break;
-                    case 3:
-                        if ((0x280000000000L & l) != 0L)
-                            jjCheckNAdd(4);
-                        break;
-                    case 4:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 16)
-                            kind = 16;
-                        jjCheckNAdd(4);
-                        break;
-                    case 5:
-                        if (curChar == 39)
-                            jjCheckNAddStates(26, 28);
-                        break;
-                    case 7:
-                        jjCheckNAddStates(26, 28);
-                        break;
-                    case 8:
-                        if ((0xffffff7fffffffffL & l) != 0L)
-                            jjCheckNAddStates(26, 28);
-                        break;
-                    case 9:
-                        if (curChar == 39 && kind > 18)
-                            kind = 18;
-                        break;
-                    case 10:
-                        if (curChar == 34)
-                            jjCheckNAddStates(23, 25);
-                        break;
-                    case 12:
-                        jjCheckNAddStates(23, 25);
-                        break;
-                    case 13:
-                        if ((0xfffffffbffffffffL & l) != 0L)
-                            jjCheckNAddStates(23, 25);
-                        break;
-                    case 14:
-                        if (curChar == 34 && kind > 18)
-                            kind = 18;
-                        break;
-                    case 15:
-                        if (curChar == 38 && kind > 21)
-                            kind = 21;
-                        break;
-                    case 16:
-                        if (curChar == 38)
-                            jjstateSet[jjnewStateCnt++] = 15;
-                        break;
-                    case 32:
-                        if (curChar == 61 && kind > 28)
-                            kind = 28;
-                        break;
-                    case 33:
-                        if (curChar == 61)
-                            jjstateSet[jjnewStateCnt++] = 32;
-                        break;
-                    case 34:
-                        if (curChar == 61 && kind > 29)
-                            kind = 29;
-                        break;
-                    case 35:
-                        if (curChar == 33)
-                            jjstateSet[jjnewStateCnt++] = 34;
-                        break;
-                    case 36:
-                        if (curChar == 62 && kind > 30)
-                            kind = 30;
-                        break;
-                    case 41:
-                        if (curChar == 32)
-                            jjstateSet[jjnewStateCnt++] = 40;
-                        break;
-                    case 49:
-                        if (curChar == 60 && kind > 32)
-                            kind = 32;
-                        break;
-                    case 50:
-                        if (curChar == 61 && kind > 34)
-                            kind = 34;
-                        break;
-                    case 63:
-                    case 64:
-                        jjCheckNAddStates(29, 31);
-                        break;
-                    case 66:
-                        if (curChar == 45)
-                            jjCheckNAddStates(15, 22);
-                        break;
-                    case 67:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(68, 102);
-                        break;
-                    case 68:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 69;
-                        break;
-                    case 69:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(70, 101);
-                        break;
-                    case 70:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 71;
-                        break;
-                    case 71:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(72, 100);
-                        break;
-                    case 72:
-                        if (curChar == 45)
-                            jjCheckNAdd(73);
-                        break;
-                    case 73:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(73, 74);
-                        break;
-                    case 74:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 75;
-                        break;
-                    case 75:
-                        if ((0x3000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(76, 77);
-                        break;
-                    case 76:
-                        if (curChar == 45)
-                            jjCheckNAdd(77);
-                        break;
-                    case 77:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(77, 78);
-                        break;
-                    case 78:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 79;
-                        break;
-                    case 79:
-                        if ((0xf000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 80;
-                        break;
-                    case 80:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 81;
-                        break;
-                    case 82:
-                        if ((0x7000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 83;
-                        break;
-                    case 83:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 84;
-                        break;
-                    case 84:
-                        if (curChar == 58)
-                            jjstateSet[jjnewStateCnt++] = 85;
-                        break;
-                    case 85:
-                        if ((0x3f000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 86;
-                        break;
-                    case 86:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(87, 94);
-                        break;
-                    case 87:
-                        if (curChar == 58)
-                            jjstateSet[jjnewStateCnt++] = 88;
-                        break;
-                    case 88:
-                        if ((0x3f000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 89;
-                        break;
-                    case 89:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(90, 94);
-                        break;
-                    case 90:
-                        if (curChar == 46)
-                            jjstateSet[jjnewStateCnt++] = 91;
-                        break;
-                    case 91:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 92;
-                        break;
-                    case 92:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 93;
-                        break;
-                    case 93:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAdd(94);
-                        break;
-                    case 94:
-                        if ((0x280000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 95;
-                        break;
-                    case 95:
-                        if ((0x7000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 96;
-                        break;
-                    case 96:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 97;
-                        break;
-                    case 97:
-                        if (curChar == 58)
-                            jjstateSet[jjnewStateCnt++] = 98;
-                        break;
-                    case 98:
-                        if ((0x3f000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 99;
-                        break;
-                    case 99:
-                        if ((0x3ff000000000000L & l) != 0L && kind > 10)
-                            kind = 10;
-                        break;
-                    case 100:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(32, 35);
-                        break;
-                    case 101:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(36, 39);
-                        break;
-                    case 102:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(40, 43);
-                        break;
-                    case 103:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(104, 132);
-                        break;
-                    case 104:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 105;
-                        break;
-                    case 105:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(106, 131);
-                        break;
-                    case 106:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 107;
-                        break;
-                    case 107:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(108, 130);
-                        break;
-                    case 108:
-                        if (curChar == 45)
-                            jjCheckNAdd(109);
-                        break;
-                    case 109:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(109, 110);
-                        break;
-                    case 110:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 111;
-                        break;
-                    case 111:
-                        if ((0x3000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(112, 113);
-                        break;
-                    case 112:
-                        if (curChar == 45)
-                            jjCheckNAdd(113);
-                        break;
-                    case 113:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(113, 114);
-                        break;
-                    case 114:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 115;
-                        break;
-                    case 115:
-                        if ((0xf000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 116;
-                        break;
-                    case 116:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 117;
-                        break;
-                    case 118:
-                        if ((0x7000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 119;
-                        break;
-                    case 119:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 120;
-                        break;
-                    case 120:
-                        if (curChar == 58)
-                            jjstateSet[jjnewStateCnt++] = 121;
-                        break;
-                    case 121:
-                        if ((0x3f000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 122;
-                        break;
-                    case 122:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 11)
-                            kind = 11;
-                        jjstateSet[jjnewStateCnt++] = 123;
-                        break;
-                    case 123:
-                        if (curChar == 58)
-                            jjstateSet[jjnewStateCnt++] = 124;
-                        break;
-                    case 124:
-                        if ((0x3f000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 125;
-                        break;
-                    case 125:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 11)
-                            kind = 11;
-                        jjstateSet[jjnewStateCnt++] = 126;
-                        break;
-                    case 126:
-                        if (curChar == 46)
-                            jjstateSet[jjnewStateCnt++] = 127;
-                        break;
-                    case 127:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 128;
-                        break;
-                    case 128:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 129;
-                        break;
-                    case 129:
-                        if ((0x3ff000000000000L & l) != 0L && kind > 11)
-                            kind = 11;
-                        break;
-                    case 130:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(44, 47);
-                        break;
-                    case 131:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(48, 51);
-                        break;
-                    case 132:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(52, 55);
-                        break;
-                    case 133:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(134, 149);
-                        break;
-                    case 134:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 135;
-                        break;
-                    case 135:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(136, 148);
-                        break;
-                    case 136:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 137;
-                        break;
-                    case 137:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(138, 147);
-                        break;
-                    case 138:
-                        if (curChar == 45)
-                            jjCheckNAdd(139);
-                        break;
-                    case 139:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(139, 140);
-                        break;
-                    case 140:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 141;
-                        break;
-                    case 141:
-                        if ((0x3000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(142, 143);
-                        break;
-                    case 142:
-                        if (curChar == 45)
-                            jjCheckNAdd(143);
-                        break;
-                    case 143:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(143, 144);
-                        break;
-                    case 144:
-                        if (curChar == 45)
-                            jjstateSet[jjnewStateCnt++] = 145;
-                        break;
-                    case 145:
-                        if ((0xf000000000000L & l) != 0L)
-                            jjstateSet[jjnewStateCnt++] = 146;
-                        break;
-                    case 146:
-                        if ((0x3ff000000000000L & l) != 0L && kind > 12)
-                            kind = 12;
-                        break;
-                    case 147:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(56, 59);
-                        break;
-                    case 148:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(60, 63);
-                        break;
-                    case 149:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddStates(64, 67);
-                        break;
-                    case 150:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 13)
-                            kind = 13;
-                        jjCheckNAdd(150);
-                        break;
-                    case 151:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(151, 152);
-                        break;
-                    case 152:
-                        if (curChar == 46)
-                            jjCheckNAdd(153);
-                        break;
-                    case 153:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 13)
-                            kind = 13;
-                        jjCheckNAdd(153);
-                        break;
-                    case 154:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(154, 155);
-                        break;
-                    case 156:
-                        if ((0x280000000000L & l) != 0L)
-                            jjCheckNAdd(157);
-                        break;
-                    case 157:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 13)
-                            kind = 13;
-                        jjCheckNAdd(157);
-                        break;
-                    case 158:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(158, 159);
-                        break;
-                    case 159:
-                        if (curChar == 46)
-                            jjCheckNAdd(160);
-                        break;
-                    case 160:
-                        if ((0x3ff000000000000L & l) != 0L)
-                            jjCheckNAddTwoStates(160, 161);
-                        break;
-                    case 162:
-                        if ((0x280000000000L & l) != 0L)
-                            jjCheckNAdd(163);
-                        break;
-                    case 163:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 13)
-                            kind = 13;
-                        jjCheckNAdd(163);
-                        break;
-                    case 164:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 14)
-                            kind = 14;
-                        jjCheckNAdd(164);
-                        break;
-                    case 165:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 13)
-                            kind = 13;
-                        jjCheckNAddStates(0, 14);
-                        break;
-                    case 166:
-                        if ((0x3ff000000000000L & l) == 0L)
-                            break;
-                        if (kind > 17)
-                            kind = 17;
-                        jjCheckNAdd(166);
-                        break;
-                    case 172:
-                        if (curChar == 32)
-                            jjstateSet[jjnewStateCnt++] = 171;
-                        break;
-                    case 179:
-                        if (curChar == 32)
-                            jjstateSet[jjnewStateCnt++] = 178;
-                        break;
-                    case 189:
-                        if (curChar == 32)
-                            jjstateSet[jjnewStateCnt++] = 188;
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else if (curChar < 128) {
-                long l = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 57:
-                        if ((0xffffffffd7ffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        }
-                        if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 56;
-                        break;
-                    case 0:
-                        if ((0xffffffffd7ffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        } else if (curChar == 91)
-                            jjCheckNAddStates(29, 31);
-                        if ((0x2000000020L & l) != 0L)
-                            jjAddStates(68, 69);
-                        else if (curChar == 108)
-                            jjAddStates(70, 72);
-                        else if (curChar == 105)
-                            jjAddStates(73, 74);
-                        else if (curChar == 110)
-                            jjstateSet[jjnewStateCnt++] = 58;
-                        else if (curChar == 126)
-                            jjstateSet[jjnewStateCnt++] = 50;
-                        else if (curChar == 103)
-                            jjstateSet[jjnewStateCnt++] = 47;
-                        else if (curChar == 102)
-                            jjstateSet[jjnewStateCnt++] = 30;
-                        else if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 26;
-                        else if (curChar == 111)
-                            jjstateSet[jjnewStateCnt++] = 22;
-                        else if (curChar == 124)
-                            jjstateSet[jjnewStateCnt++] = 20;
-                        else if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 18;
-                        break;
-                    case 168:
-                        if ((0xffffffffd7ffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        }
-                        if (curChar == 115)
-                            jjstateSet[jjnewStateCnt++] = 172;
-                        if (curChar == 115) {
-                            if (kind > 28)
-                                kind = 28;
-                        }
-                        break;
-                    case 56:
-                    case 60:
-                        if ((0xffffffffd7ffffffL & l) == 0L)
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 58:
-                        if ((0xffffffffd7ffffffL & l) != 0L) {
-                            if (kind > 42)
-                                kind = 42;
-                            jjCheckNAdd(60);
-                        }
-                        if (curChar == 111)
-                            jjstateSet[jjnewStateCnt++] = 57;
-                        break;
-                    case 2:
-                        if ((0x2000000020L & l) != 0L)
-                            jjAddStates(68, 69);
-                        break;
-                    case 6:
-                        if (curChar == 92)
-                            jjstateSet[jjnewStateCnt++] = 7;
-                        break;
-                    case 7:
-                        jjCheckNAddStates(26, 28);
-                        break;
-                    case 8:
-                        if ((0xffffffffefffffffL & l) != 0L)
-                            jjCheckNAddStates(26, 28);
-                        break;
-                    case 11:
-                        if (curChar == 92)
-                            jjstateSet[jjnewStateCnt++] = 12;
-                        break;
-                    case 12:
-                        jjCheckNAddStates(23, 25);
-                        break;
-                    case 13:
-                        if ((0xffffffffefffffffL & l) != 0L)
-                            jjCheckNAddStates(23, 25);
-                        break;
-                    case 17:
-                        if (curChar == 100 && kind > 21)
-                            kind = 21;
-                        break;
-                    case 18:
-                        if (curChar == 110)
-                            jjstateSet[jjnewStateCnt++] = 17;
-                        break;
-                    case 19:
-                        if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 18;
-                        break;
-                    case 20:
-                        if (curChar == 124 && kind > 22)
-                            kind = 22;
-                        break;
-                    case 21:
-                        if (curChar == 124)
-                            jjstateSet[jjnewStateCnt++] = 20;
-                        break;
-                    case 22:
-                        if (curChar == 114 && kind > 22)
-                            kind = 22;
-                        break;
-                    case 23:
-                        if (curChar == 111)
-                            jjstateSet[jjnewStateCnt++] = 22;
-                        break;
-                    case 24:
-                        if (curChar == 101 && kind > 27)
-                            kind = 27;
-                        break;
-                    case 25:
-                        if (curChar == 117)
-                            jjCheckNAdd(24);
-                        break;
-                    case 26:
-                        if (curChar == 114)
-                            jjstateSet[jjnewStateCnt++] = 25;
-                        break;
-                    case 27:
-                        if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 26;
-                        break;
-                    case 28:
-                        if (curChar == 115)
-                            jjCheckNAdd(24);
-                        break;
-                    case 29:
-                        if (curChar == 108)
-                            jjstateSet[jjnewStateCnt++] = 28;
-                        break;
-                    case 30:
-                        if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 29;
-                        break;
-                    case 31:
-                        if (curChar == 102)
-                            jjstateSet[jjnewStateCnt++] = 30;
-                        break;
-                    case 37:
-                        if (curChar == 110 && kind > 30)
-                            kind = 30;
-                        break;
-                    case 38:
-                        if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 37;
-                        break;
-                    case 39:
-                        if (curChar == 104)
-                            jjstateSet[jjnewStateCnt++] = 38;
-                        break;
-                    case 40:
-                        if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 39;
-                        break;
-                    case 42:
-                        if (curChar == 114)
-                            jjstateSet[jjnewStateCnt++] = 41;
-                        break;
-                    case 43:
-                        if (curChar == 101)
-                            jjstateSet[jjnewStateCnt++] = 42;
-                        break;
-                    case 44:
-                        if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 43;
-                        break;
-                    case 45:
-                        if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 44;
-                        break;
-                    case 46:
-                        if (curChar == 101)
-                            jjstateSet[jjnewStateCnt++] = 45;
-                        break;
-                    case 47:
-                        if (curChar == 114)
-                            jjstateSet[jjnewStateCnt++] = 46;
-                        break;
-                    case 48:
-                        if (curChar == 103)
-                            jjstateSet[jjnewStateCnt++] = 47;
-                        break;
-                    case 51:
-                        if (curChar == 126)
-                            jjstateSet[jjnewStateCnt++] = 50;
-                        break;
-                    case 52:
-                        if (curChar == 101 && kind > 35)
-                            kind = 35;
-                        break;
-                    case 53:
-                        if (curChar == 107)
-                            jjstateSet[jjnewStateCnt++] = 52;
-                        break;
-                    case 54:
-                        if (curChar == 105)
-                            jjstateSet[jjnewStateCnt++] = 53;
-                        break;
-                    case 55:
-                        if (curChar == 108)
-                            jjstateSet[jjnewStateCnt++] = 54;
-                        break;
-                    case 59:
-                        if (curChar == 110)
-                            jjstateSet[jjnewStateCnt++] = 58;
-                        break;
-                    case 61:
-                        if (curChar == 91)
-                            jjCheckNAddStates(29, 31);
-                        break;
-                    case 62:
-                        if (curChar == 92)
-                            jjstateSet[jjnewStateCnt++] = 63;
-                        break;
-                    case 63:
-                        jjCheckNAddStates(29, 31);
-                        break;
-                    case 64:
-                        if ((0xffffffffcfffffffL & l) != 0L)
-                            jjCheckNAddStates(29, 31);
-                        break;
-                    case 65:
-                        if (curChar == 93 && kind > 43)
-                            kind = 43;
-                        break;
-                    case 81:
-                        if (curChar == 84)
-                            jjstateSet[jjnewStateCnt++] = 82;
-                        break;
-                    case 117:
-                        if (curChar == 84)
-                            jjstateSet[jjnewStateCnt++] = 118;
-                        break;
-                    case 155:
-                        if ((0x2000000020L & l) != 0L)
-                            jjAddStates(75, 76);
-                        break;
-                    case 161:
-                        if ((0x2000000020L & l) != 0L)
-                            jjAddStates(77, 78);
-                        break;
-                    case 167:
-                        if (curChar == 105)
-                            jjAddStates(73, 74);
-                        break;
-                    case 169:
-                        if (curChar == 116 && kind > 29)
-                            kind = 29;
-                        break;
-                    case 170:
-                        if (curChar == 111)
-                            jjstateSet[jjnewStateCnt++] = 169;
-                        break;
-                    case 171:
-                        if (curChar == 110)
-                            jjstateSet[jjnewStateCnt++] = 170;
-                        break;
-                    case 173:
-                        if (curChar == 115)
-                            jjstateSet[jjnewStateCnt++] = 172;
-                        break;
-                    case 174:
-                        if (curChar == 108)
-                            jjAddStates(70, 72);
-                        break;
-                    case 175:
-                        if (curChar == 110 && kind > 32)
-                            kind = 32;
-                        break;
-                    case 176:
-                        if (curChar == 97)
-                            jjstateSet[jjnewStateCnt++] = 175;
-                        break;
-                    case 177:
-                        if (curChar == 104)
-                            jjstateSet[jjnewStateCnt++] = 176;
-                        break;
-                    case 178:
-                        if (curChar == 116)
-                            jjstateSet[jjnewStateCnt++] = 177;
-                        break;
-                    case 180:
-                        if (curChar == 115)
-                            jjstateSet[jjnewStateCnt++] = 179;
-                        break;
-                    case 181:
-                        if (curChar == 115)
-                            jjstateSet[jjnewStateCnt++] = 180;
-                        break;
-                    case 182:
-                        if (curChar == 101)
-                            jjstateSet[jjnewStateCnt++] = 181;
-                        break;
-                    case 183:
-                        if (curChar == 101 && kind > 34)
-                            kind = 34;
-                        break;
-                    case 184:
-                        if (curChar == 107)
-                            jjstateSet[jjnewStateCnt++] = 183;
-                        break;
-                    case 185:
-                        if (curChar == 105)
-                            jjstateSet[jjnewStateCnt++] = 184;
-                        break;
-                    case 186:
-                        if (curChar == 116 && kind > 35)
-                            kind = 35;
-                        break;
-                    case 187:
-                        if (curChar == 111)
-                            jjstateSet[jjnewStateCnt++] = 186;
-                        break;
-                    case 188:
-                        if (curChar == 110)
-                            jjstateSet[jjnewStateCnt++] = 187;
-                        break;
-                    case 190:
-                        if (curChar == 101)
-                            jjstateSet[jjnewStateCnt++] = 189;
-                        break;
-                    case 191:
-                        if (curChar == 107)
-                            jjstateSet[jjnewStateCnt++] = 190;
-                        break;
-                    case 192:
-                        if (curChar == 105)
-                            jjstateSet[jjnewStateCnt++] = 191;
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else {
-                int hiByte = (int) (curChar >> 8);
-                int i1 = hiByte >> 6;
-                long l1 = 1L << (hiByte & 077);
-                int i2 = (curChar & 0xff) >> 6;
-                long l2 = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 57:
-                    case 60:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 0:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 168:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 56:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 58:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            break;
-                        if (kind > 42)
-                            kind = 42;
-                        jjCheckNAdd(60);
-                        break;
-                    case 7:
-                    case 8:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            jjCheckNAddStates(26, 28);
-                        break;
-                    case 12:
-                    case 13:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            jjCheckNAddStates(23, 25);
-                        break;
-                    case 63:
-                    case 64:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                            jjCheckNAddStates(29, 31);
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            }
-            if (kind != 0x7fffffff) {
-                jjmatchedKind = kind;
-                jjmatchedPos = curPos;
-                kind = 0x7fffffff;
-            }
-            ++curPos;
-            if ((i = jjnewStateCnt) == (startsAt = 193 - (jjnewStateCnt = startsAt)))
-                return curPos;
-            try {
-                curChar = input_stream.readChar();
-            } catch (java.io.IOException e) {
-                return curPos;
-            }
-        }
-    }
-
-    static final int[] jjnextStates = { 68, 104, 134, 150, 151, 152, 154, 155, 158, 159, 164, 166, 149, 132, 102, 67,
-            103, 133, 150, 151, 154, 158, 164, 11, 13, 14, 6, 8, 9, 62, 64, 65, 72, 73, 74, 100, 70, 72, 100, 101, 68,
-            70, 101, 102, 108, 109, 110, 130, 106, 108, 130, 131, 104, 106, 131, 132, 138, 139, 140, 147, 136, 138, 147,
-            148, 134, 136, 148, 149, 3, 4, 182, 185, 192, 168, 173, 156, 157, 162, 163, };
-
-    private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) {
-        switch (hiByte) {
-        case 0:
-            return ((jjbitVec2[i2] & l2) != 0L);
-        default:
-            if ((jjbitVec0[i1] & l1) != 0L)
-                return true;
-            return false;
-        }
-    }
-
-    /** Token literal values. */
-    public static final String[] jjstrLiteralImages = { "", null, null, null, null, null, null, null, null, null, null,
-            null, null, null, null, null, null, null, null, null, null, null, null, "\156\165\154\154", "\50", "\51",
-            "\54", null, null, null, null, "\76\75", null, "\74\75", null, null, "\143\157\156\164\141\151\156\163",
-            "\143\157\156\164\141\151\156\163\40\156\157\164", "\143\157\156\164\141\151\156\163\40\141\156\171",
-            "\143\157\156\164\141\151\156\163\40\156\157\164\40\141\156\171", "\151\156", "\156\157\164\40\151\156",
-            null, null, null, };
-
-    /** Lexer state names. */
-    public static final String[] lexStateNames = { "DEFAULT", };
-    static final long[] jjtoToken = { 0x1fffffe7fc01L, };
-    static final long[] jjtoSkip = { 0x6L, };
-    protected SimpleCharStream input_stream;
-    private final int[] jjrounds = new int[193];
-    private final int[] jjstateSet = new int[386];
-    private final StringBuilder jjimage = new StringBuilder();
-    private StringBuilder image = jjimage;
-    private int jjimageLen;
-    private int lengthOfMatch;
-    protected char curChar;
-
-    /** Constructor. */
-    public FilterParserTokenManager(SimpleCharStream stream) {
-        if (SimpleCharStream.staticFlag)
-            throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
-        input_stream = stream;
-    }
-
-    /** Constructor. */
-    public FilterParserTokenManager(SimpleCharStream stream, int lexState) {
-        this(stream);
-        SwitchTo(lexState);
-    }
-
-    /** Reinitialise parser. */
-    public void ReInit(SimpleCharStream stream) {
-        jjmatchedPos = jjnewStateCnt = 0;
-        curLexState = defaultLexState;
-        input_stream = stream;
-        ReInitRounds();
-    }
-
-    private void ReInitRounds() {
-        int i;
-        jjround = 0x80000001;
-        for (i = 193; i-- > 0;)
-            jjrounds[i] = 0x80000000;
-    }
-
-    /** Reinitialise parser. */
-    public void ReInit(SimpleCharStream stream, int lexState) {
-        ReInit(stream);
-        SwitchTo(lexState);
-    }
-
-    /** Switch to specified lex state. */
-    public void SwitchTo(int lexState) {
-        if (lexState >= 1 || lexState < 0)
-            throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.",
-                    TokenMgrError.INVALID_LEXICAL_STATE);
-        else
-            curLexState = lexState;
-    }
-
-    protected Token jjFillToken() {
-        final Token t;
-        final String curTokenImage;
-        final int beginLine;
-        final int endLine;
-        final int beginColumn;
-        final int endColumn;
-        String im = jjstrLiteralImages[jjmatchedKind];
-        curTokenImage = (im == null) ? input_stream.GetImage() : im;
-        beginLine = input_stream.getBeginLine();
-        beginColumn = input_stream.getBeginColumn();
-        endLine = input_stream.getEndLine();
-        endColumn = input_stream.getEndColumn();
-        t = Token.newToken(jjmatchedKind, curTokenImage);
-
-        t.beginLine = beginLine;
-        t.endLine = endLine;
-        t.beginColumn = beginColumn;
-        t.endColumn = endColumn;
-
-        return t;
-    }
-
-    int curLexState = 0;
-    int defaultLexState = 0;
-    int jjnewStateCnt;
-    int jjround;
-    int jjmatchedPos;
-    int jjmatchedKind;
-
-    /** Get the next Token. */
-    public Token getNextToken() {
-        Token matchedToken;
-        int curPos = 0;
-
-        EOFLoop: for (;;) {
-            try {
-                curChar = input_stream.BeginToken();
-            } catch (java.io.IOException e) {
-                jjmatchedKind = 0;
-                matchedToken = jjFillToken();
-                return matchedToken;
-            }
-            image = jjimage;
-            image.setLength(0);
-            jjimageLen = 0;
-
-            try {
-                input_stream.backup(0);
-                while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
-                    curChar = input_stream.BeginToken();
-            } catch (java.io.IOException e1) {
-                continue EOFLoop;
-            }
-            jjmatchedKind = 0x7fffffff;
-            jjmatchedPos = 0;
-            curPos = jjMoveStringLiteralDfa0_0();
-            if (jjmatchedPos == 0 && jjmatchedKind > 44) {
-                jjmatchedKind = 44;
-            }
-            if (jjmatchedKind != 0x7fffffff) {
-                if (jjmatchedPos + 1 < curPos)
-                    input_stream.backup(curPos - jjmatchedPos - 1);
-                if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
-                    matchedToken = jjFillToken();
-                    TokenLexicalActions(matchedToken);
-                    return matchedToken;
-                } else {
-                    continue EOFLoop;
-                }
-            }
-            int error_line = input_stream.getEndLine();
-            int error_column = input_stream.getEndColumn();
-            String error_after = null;
-            boolean EOFSeen = false;
-            try {
-                input_stream.readChar();
-                input_stream.backup(1);
-            } catch (java.io.IOException e1) {
-                EOFSeen = true;
-                error_after = curPos <= 1 ? "" : input_stream.GetImage();
-                if (curChar == '\n' || curChar == '\r') {
-                    error_line++;
-                    error_column = 0;
-                } else
-                    error_column++;
-            }
-            if (!EOFSeen) {
-                input_stream.backup(1);
-                error_after = curPos <= 1 ? "" : input_stream.GetImage();
-            }
-            throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar,
-                    TokenMgrError.LEXICAL_ERROR);
-        }
-    }
-
-    void TokenLexicalActions(Token matchedToken) {
-        switch (jjmatchedKind) {
-        case 18:
-            image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-            matchedToken.image = image.substring(1, lengthOfMatch - 1);
-            break;
-        case 43:
-            image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-            matchedToken.image = image.substring(1, lengthOfMatch - 1);
-            break;
-        default:
-            break;
-        }
-    }
-
-    private void jjCheckNAdd(int state) {
-        if (jjrounds[state] != jjround) {
-            jjstateSet[jjnewStateCnt++] = state;
-            jjrounds[state] = jjround;
-        }
-    }
-
-    private void jjAddStates(int start, int end) {
-        do {
-            jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-        } while (start++ != end);
-    }
-
-    private void jjCheckNAddTwoStates(int state1, int state2) {
-        jjCheckNAdd(state1);
-        jjCheckNAdd(state2);
-    }
-
-    private void jjCheckNAddStates(int start, int end) {
-        do {
-            jjCheckNAdd(jjnextStates[start]);
-        } while (start++ != end);
-    }
-
-}
+/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
+package org.apache.sling.resource.stream.impl;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.sling.resource.stream.impl.node.*;
+
+/** Token Manager. */
+public class FilterParserTokenManager implements FilterParserConstants
+{
+
+  /** Debug output. */
+  public  java.io.PrintStream debugStream = System.out;
+  /** Set debug output. */
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x200000000L) != 0L)
+         {
+            jjmatchedKind = 32;
+            return -1;
+         }
+         if ((active0 & 0x10000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            return 168;
+         }
+         if ((active0 & 0xf000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            return 60;
+         }
+         if ((active0 & 0x4L) != 0L)
+            return 60;
+         if ((active0 & 0x80000000L) != 0L)
+         {
+            jjmatchedKind = 30;
+            return -1;
+         }
+         if ((active0 & 0x20000800000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            return 58;
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x200000000L) != 0L)
+         {
+            if (jjmatchedPos == 0)
+            {
+               jjmatchedKind = 32;
+               jjmatchedPos = 0;
+            }
+            return -1;
+         }
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 1;
+            return 57;
+         }
+         if ((active0 & 0x10000000000L) != 0L)
+            return 60;
+         if ((active0 & 0x80000000L) != 0L)
+         {
+            if (jjmatchedPos == 0)
+            {
+               jjmatchedKind = 30;
+               jjmatchedPos = 0;
+            }
+            return -1;
+         }
+         if ((active0 & 0xf000800000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 1;
+            return 60;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 2;
+            return 56;
+         }
+         if ((active0 & 0xf000800000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 2;
+            return 60;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0xf000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 3;
+            return 60;
+         }
+         if ((active0 & 0x800000L) != 0L)
+            return 60;
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 43;
+               jjmatchedPos = 2;
+            }
+            return 55;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0xf000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 4;
+            return 60;
+         }
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 43;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 5:
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 43;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xf000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 5;
+            return 60;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0xf000000000L) != 0L)
+         {
+            jjmatchedKind = 43;
+            jjmatchedPos = 6;
+            return 60;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0xf000000000L) != 0L)
+            return 60;
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+}
+private int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 9:
+         return jjStartNfaWithStates_0(0, 2, 60);
+      case 36:
+         return jjStopAtPos(0, 42);
+      case 40:
+         return jjStopAtPos(0, 24);
+      case 41:
+         return jjStopAtPos(0, 25);
+      case 44:
+         return jjStopAtPos(0, 26);
+      case 60:
+         return jjMoveStringLiteralDfa1_0(0x200000000L);
+      case 62:
+         return jjMoveStringLiteralDfa1_0(0x80000000L);
+      case 99:
+         return jjMoveStringLiteralDfa1_0(0xf000000000L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x10000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x20000800000L);
+      default :
+         return jjMoveNfa_0(0, 0);
+   }
+}
+private int jjMoveStringLiteralDfa1_0(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 61:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStopAtPos(1, 31);
+         else if ((active0 & 0x200000000L) != 0L)
+            return jjStopAtPos(1, 33);
+         break;
+      case 110:
+         if ((active0 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 40, 60);
+         break;
+      case 111:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2f000000000L);
+      case 117:
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0);
+}
+private int jjMoveStringLiteralDfa2_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(0, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 108:
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
+      case 110:
+         return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
+      case 116:
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0);
+}
+private int jjMoveStringLiteralDfa3_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(1, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(2, active0);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 32:
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L);
+      case 108:
+         if ((active0 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(3, 23, 60);
+         break;
+      case 116:
+         return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(2, active0);
+}
+private int jjMoveStringLiteralDfa4_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(2, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(3, active0);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(3, active0);
+}
+private int jjMoveStringLiteralDfa5_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(3, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(4, active0);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0xf000000000L);
+      case 110:
+         if ((active0 & 0x20000000000L) != 0L)
+            return jjStopAtPos(5, 41);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(4, active0);
+}
+private int jjMoveStringLiteralDfa6_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(4, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(5, active0);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 110:
+         return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(5, active0);
+}
+private int jjMoveStringLiteralDfa7_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(5, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(6, active0);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 115:
+         if ((active0 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 36;
+            jjmatchedPos = 7;
+         }
+         return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(6, active0);
+}
+private int jjMoveStringLiteralDfa8_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(6, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(7, active0);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 32:
+         return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(7, active0);
+}
+private int jjMoveStringLiteralDfa9_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(7, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(8, active0);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(8, active0);
+}
+private int jjMoveStringLiteralDfa10_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(8, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(9, active0);
+      return 10;
+   }
+   switch(curChar)
+   {
+      case 110:
+         return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
+      case 111:
+         return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(9, active0);
+}
+private int jjMoveStringLiteralDfa11_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(9, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(10, active0);
+      return 11;
+   }
+   switch(curChar)
+   {
+      case 116:
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 37;
+            jjmatchedPos = 11;
+         }
+         return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
+      case 121:
+         if ((active0 & 0x4000000000L) != 0L)
+            return jjStopAtPos(11, 38);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(10, active0);
+}
+private int jjMoveStringLiteralDfa12_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(10, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(11, active0);
+      return 12;
+   }
+   switch(curChar)
+   {
+      case 32:
+         return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(11, active0);
+}
+private int jjMoveStringLiteralDfa13_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(11, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(12, active0);
+      return 13;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(12, active0);
+}
+private int jjMoveStringLiteralDfa14_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(12, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(13, active0);
+      return 14;
+   }
+   switch(curChar)
+   {
+      case 110:
+         return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(13, active0);
+}
+private int jjMoveStringLiteralDfa15_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(13, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(14, active0);
+      return 15;
+   }
+   switch(curChar)
+   {
+      case 121:
+         if ((active0 & 0x8000000000L) != 0L)
+            return jjStopAtPos(15, 39);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(14, active0);
+}
+private int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private int jjMoveNfa_0(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 193;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 57:
+               case 60:
+                  if ((0x8c00846affffffffL & l) == 0L)
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 0:
+                  if ((0x8c00846affffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  else if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 13)
+                        kind = 13;
+                     jjCheckNAddStates(0, 14);
+                  }
+                  else if (curChar == 45)
+                     jjCheckNAddStates(15, 22);
+                  else if (curChar == 60)
+                  {
+                     if (kind > 32)
+                        kind = 32;
+                  }
+                  else if (curChar == 62)
+                  {
+                     if (kind > 30)
+                        kind = 30;
+                  }
+                  else if (curChar == 61)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  else if (curChar == 34)
+                     jjCheckNAddStates(23, 25);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(26, 28);
+                  else if (curChar == 46)
+                     jjCheckNAdd(1);
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  else if (curChar == 38)
+                     jjstateSet[jjnewStateCnt++] = 15;
+                  break;
+               case 168:
+                  if ((0x8c00846affffffffL & l) == 0L)
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 56:
+                  if ((0x8c00846affffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  else if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 55;
+                  break;
+               case 58:
+                  if ((0x8c00846affffffffL & l) == 0L)
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 1:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 15)
+                     kind = 15;
+                  jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(4);
+                  break;
+               case 4:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAdd(4);
+                  break;
+               case 5:
+                  if (curChar == 39)
+                     jjCheckNAddStates(26, 28);
+                  break;
+               case 7:
+                  jjCheckNAddStates(26, 28);
+                  break;
+               case 8:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(26, 28);
+                  break;
+               case 9:
+                  if (curChar == 39 && kind > 18)
+                     kind = 18;
+                  break;
+               case 10:
+                  if (curChar == 34)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 12:
+                  jjCheckNAddStates(23, 25);
+                  break;
+               case 13:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 14:
+                  if (curChar == 34 && kind > 18)
+                     kind = 18;
+                  break;
+               case 15:
+                  if (curChar == 38 && kind > 21)
+                     kind = 21;
+                  break;
+               case 16:
+                  if (curChar == 38)
+                     jjstateSet[jjnewStateCnt++] = 15;
+                  break;
+               case 32:
+                  if (curChar == 61 && kind > 28)
+                     kind = 28;
+                  break;
+               case 33:
+                  if (curChar == 61)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  break;
+               case 34:
+                  if (curChar == 61 && kind > 29)
+                     kind = 29;
+                  break;
+               case 35:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  break;
+               case 36:
+                  if (curChar == 62 && kind > 30)
+                     kind = 30;
+                  break;
+               case 41:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 40;
+                  break;
+               case 49:
+                  if (curChar == 60 && kind > 32)
+                     kind = 32;
+                  break;
+               case 50:
+                  if (curChar == 61 && kind > 34)
+                     kind = 34;
+                  break;
+               case 63:
+               case 64:
+                  jjCheckNAddStates(29, 31);
+                  break;
+               case 66:
+                  if (curChar == 45)
+                     jjCheckNAddStates(15, 22);
+                  break;
+               case 67:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(68, 102);
+                  break;
+               case 68:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 69;
+                  break;
+               case 69:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(70, 101);
+                  break;
+               case 70:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 71;
+                  break;
+               case 71:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(72, 100);
+                  break;
+               case 72:
+                  if (curChar == 45)
+                     jjCheckNAdd(73);
+                  break;
+               case 73:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(73, 74);
+                  break;
+               case 74:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 75;
+                  break;
+               case 75:
+                  if ((0x3000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(76, 77);
+                  break;
+               case 76:
+                  if (curChar == 45)
+                     jjCheckNAdd(77);
+                  break;
+               case 77:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(77, 78);
+                  break;
+               case 78:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 79;
+                  break;
+               case 79:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 80;
+                  break;
+               case 80:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 81;
+                  break;
+               case 82:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 83;
+                  break;
+               case 83:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 84;
+                  break;
+               case 84:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 85;
+                  break;
+               case 85:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 86;
+                  break;
+               case 86:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(87, 94);
+                  break;
+               case 87:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 88;
+                  break;
+               case 88:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 89;
+                  break;
+               case 89:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(90, 94);
+                  break;
+               case 90:
+                  if (curChar == 46)
+                     jjstateSet[jjnewStateCnt++] = 91;
+                  break;
+               case 91:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 92;
+                  break;
+               case 92:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 93;
+                  break;
+               case 93:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAdd(94);
+                  break;
+               case 94:
+                  if ((0x280000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 95;
+                  break;
+               case 95:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 96;
+                  break;
+               case 96:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 97;
+                  break;
+               case 97:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 98;
+                  break;
+               case 98:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 99;
+                  break;
+               case 99:
+                  if ((0x3ff000000000000L & l) != 0L && kind > 10)
+                     kind = 10;
+                  break;
+               case 100:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(32, 35);
+                  break;
+               case 101:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(36, 39);
+                  break;
+               case 102:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(40, 43);
+                  break;
+               case 103:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(104, 132);
+                  break;
+               case 104:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 105;
+                  break;
+               case 105:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(106, 131);
+                  break;
+               case 106:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 107;
+                  break;
+               case 107:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(108, 130);
+                  break;
+               case 108:
+                  if (curChar == 45)
+                     jjCheckNAdd(109);
+                  break;
+               case 109:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(109, 110);
+                  break;
+               case 110:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 111;
+                  break;
+               case 111:
+                  if ((0x3000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(112, 113);
+                  break;
+               case 112:
+                  if (curChar == 45)
+                     jjCheckNAdd(113);
+                  break;
+               case 113:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(113, 114);
+                  break;
+               case 114:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 115;
+                  break;
+               case 115:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 116;
+                  break;
+               case 116:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 117;
+                  break;
+               case 118:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 119;
+                  break;
+               case 119:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 120;
+                  break;
+               case 120:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 121;
+                  break;
+               case 121:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 122;
+                  break;
+               case 122:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjstateSet[jjnewStateCnt++] = 123;
+                  break;
+               case 123:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 124;
+                  break;
+               case 124:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 125;
+                  break;
+               case 125:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjstateSet[jjnewStateCnt++] = 126;
+                  break;
+               case 126:
+                  if (curChar == 46)
+                     jjstateSet[jjnewStateCnt++] = 127;
+                  break;
+               case 127:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 128;
+                  break;
+               case 128:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 129;
+                  break;
+               case 129:
+                  if ((0x3ff000000000000L & l) != 0L && kind > 11)
+                     kind = 11;
+                  break;
+               case 130:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(44, 47);
+                  break;
+               case 131:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(48, 51);
+                  break;
+               case 132:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(52, 55);
+                  break;
+               case 133:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(134, 149);
+                  break;
+               case 134:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 135;
+                  break;
+               case 135:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(136, 148);
+                  break;
+               case 136:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 137;
+                  break;
+               case 137:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(138, 147);
+                  break;
+               case 138:
+                  if (curChar == 45)
+                     jjCheckNAdd(139);
+                  break;
+               case 139:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(139, 140);
+                  break;
+               case 140:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 141;
+                  break;
+               case 141:
+                  if ((0x3000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(142, 143);
+                  break;
+               case 142:
+                  if (curChar == 45)
+                     jjCheckNAdd(143);
+                  break;
+               case 143:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(143, 144);
+                  break;
+               case 144:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 145;
+                  break;
+               case 145:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 146;
+                  break;
+               case 146:
+                  if ((0x3ff000000000000L & l) != 0L && kind > 12)
+                     kind = 12;
+                  break;
+               case 147:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(56, 59);
+                  break;
+               case 148:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(60, 63);
+                  break;
+               case 149:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(64, 67);
+                  break;
+               case 150:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAdd(150);
+                  break;
+               case 151:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(151, 152);
+                  break;
+               case 152:
+                  if (curChar == 46)
+                     jjCheckNAdd(153);
+                  break;
+               case 153:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAdd(153);
+                  break;
+               case 154:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(154, 155);
+                  break;
+               case 156:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(157);
+                  break;
+               case 157:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAdd(157);
+                  break;
+               case 158:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(158, 159);
+                  break;
+               case 159:
+                  if (curChar == 46)
+                     jjCheckNAdd(160);
+                  break;
+               case 160:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(160, 161);
+                  break;
+               case 162:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(163);
+                  break;
+               case 163:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAdd(163);
+                  break;
+               case 164:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 14)
+                     kind = 14;
+                  jjCheckNAdd(164);
+                  break;
+               case 165:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAddStates(0, 14);
+                  break;
+               case 166:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 17)
+                     kind = 17;
+                  jjCheckNAdd(166);
+                  break;
+               case 172:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 171;
+                  break;
+               case 179:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 178;
+                  break;
+               case 189:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 188;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 57:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 56;
+                  break;
+               case 0:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  else if (curChar == 91)
+                     jjCheckNAddStates(29, 31);
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(68, 69);
+                  else if (curChar == 108)
+                     jjAddStates(70, 72);
+                  else if (curChar == 105)
+                     jjAddStates(73, 74);
+                  else if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 58;
+                  else if (curChar == 126)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  else if (curChar == 103)
+                     jjstateSet[jjnewStateCnt++] = 47;
+                  else if (curChar == 102)
+                     jjstateSet[jjnewStateCnt++] = 30;
+                  else if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 26;
+                  else if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 22;
+                  else if (curChar == 124)
+                     jjstateSet[jjnewStateCnt++] = 20;
+                  else if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 18;
+                  break;
+               case 168:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 172;
+                  if (curChar == 115)
+                  {
+                     if (kind > 28)
+                        kind = 28;
+                  }
+                  break;
+               case 56:
+               case 60:
+                  if ((0xffffffffd7ffffffL & l) == 0L)
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 58:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 43)
+                        kind = 43;
+                     jjCheckNAdd(60);
+                  }
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 57;
+                  break;
+               case 2:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(68, 69);
+                  break;
+               case 6:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  break;
+               case 7:
+                  jjCheckNAddStates(26, 28);
+                  break;
+               case 8:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(26, 28);
+                  break;
+               case 11:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 12;
+                  break;
+               case 12:
+                  jjCheckNAddStates(23, 25);
+                  break;
+               case 13:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 17:
+                  if (curChar == 100 && kind > 21)
+                     kind = 21;
+                  break;
+               case 18:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 17;
+                  break;
+               case 19:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 18;
+                  break;
+               case 20:
+                  if (curChar == 124 && kind > 22)
+                     kind = 22;
+                  break;
+               case 21:
+                  if (curChar == 124)
+                     jjstateSet[jjnewStateCnt++] = 20;
+                  break;
+               case 22:
+                  if (curChar == 114 && kind > 22)
+                     kind = 22;
+                  break;
+               case 23:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 22;
+                  break;
+               case 24:
+                  if (curChar == 101 && kind > 27)
+                     kind = 27;
+                  break;
+               case 25:
+                  if (curChar == 117)
+                     jjCheckNAdd(24);
+                  break;
+               case 26:
+                  if (curChar == 114)
+                     jjstateSet[jjnewStateCnt++] = 25;
+                  break;
+               case 27:
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 26;
+                  break;
+               case 28:
+                  if (curChar == 115)
+                     jjCheckNAdd(24);
+                  break;
+               case 29:
+                  if (curChar == 108)
+                     jjstateSet[jjnewStateCnt++] = 28;
+                  break;
+               case 30:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 29;
+                  break;
+               case 31:
+                  if (curChar == 102)
+                     jjstateSet[jjnewStateCnt++] = 30;
+                  break;
+               case 37:
+                  if (curChar == 110 && kind > 30)
+                     kind = 30;
+                  break;
+               case 38:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 37;
+                  break;
+               case 39:
+                  if (curChar == 104)
+                     jjstateSet[jjnewStateCnt++] = 38;
+                  break;
+               case 40:
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 39;
+                  break;
+               case 42:
+                  if (curChar == 114)
+                     jjstateSet[jjnewStateCnt++] = 41;
+                  break;
+               case 43:
+                  if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 42;
+                  break;
+               case 44:
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 43;
+                  break;
+               case 45:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 46:
+                  if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 45;
+                  break;
+               case 47:
+                  if (curChar == 114)
+                     jjstateSet[jjnewStateCnt++] = 46;
+                  break;
+               case 48:
+                  if (curChar == 103)
+                     jjstateSet[jjnewStateCnt++] = 47;
+                  break;
+               case 51:
+                  if (curChar == 126)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 52:
+                  if (curChar == 101 && kind > 35)
+                     kind = 35;
+                  break;
+               case 53:
+                  if (curChar == 107)
+                     jjstateSet[jjnewStateCnt++] = 52;
+                  break;
+               case 54:
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 53;
+                  break;
+               case 55:
+                  if (curChar == 108)
+                     jjstateSet[jjnewStateCnt++] = 54;
+                  break;
+               case 59:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 58;
+                  break;
+               case 61:
+                  if (curChar == 91)
+                     jjCheckNAddStates(29, 31);
+                  break;
+               case 62:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 63;
+                  break;
+               case 63:
+                  jjCheckNAddStates(29, 31);
+                  break;
+               case 64:
+                  if ((0xffffffffcfffffffL & l) != 0L)
+                     jjCheckNAddStates(29, 31);
+                  break;
+               case 65:
+                  if (curChar == 93 && kind > 44)
+                     kind = 44;
+                  break;
+               case 81:
+                  if (curChar == 84)
+                     jjstateSet[jjnewStateCnt++] = 82;
+                  break;
+               case 117:
+                  if (curChar == 84)
+                     jjstateSet[jjnewStateCnt++] = 118;
+                  break;
+               case 155:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(75, 76);
+                  break;
+               case 161:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(77, 78);
+                  break;
+               case 167:
+                  if (curChar == 105)
+                     jjAddStates(73, 74);
+                  break;
+               case 169:
+                  if (curChar == 116 && kind > 29)
+                     kind = 29;
+                  break;
+               case 170:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 169;
+                  break;
+               case 171:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 170;
+                  break;
+               case 173:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 172;
+                  break;
+               case 174:
+                  if (curChar == 108)
+                     jjAddStates(70, 72);
+                  break;
+               case 175:
+                  if (curChar == 110 && kind > 32)
+                     kind = 32;
+                  break;
+               case 176:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 175;
+                  break;
+               case 177:
+                  if (curChar == 104)
+                     jjstateSet[jjnewStateCnt++] = 176;
+                  break;
+               case 178:
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 177;
+                  break;
+               case 180:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 179;
+                  break;
+               case 181:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 180;
+                  break;
+               case 182:
+                  if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 181;
+                  break;
+               case 183:
+                  if (curChar == 101 && kind > 34)
+                     kind = 34;
+                  break;
+               case 184:
+                  if (curChar == 107)
+                     jjstateSet[jjnewStateCnt++] = 183;
+                  break;
+               case 185:
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 184;
+                  break;
+               case 186:
+                  if (curChar == 116 && kind > 35)
+                     kind = 35;
+                  break;
+               case 187:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 186;
+                  break;
+               case 188:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 187;
+                  break;
+               case 190:
+                  if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 189;
+                  break;
+               case 191:
+                  if (curChar == 107)
+                     jjstateSet[jjnewStateCnt++] = 190;
+                  break;
+               case 192:
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 191;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 57:
+               case 60:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 0:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 168:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 56:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 58:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 43)
+                     kind = 43;
+                  jjCheckNAdd(60);
+                  break;
+               case 7:
+               case 8:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(26, 28);
+                  break;
+               case 12:
+               case 13:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 63:
+               case 64:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(29, 31);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 193 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   68, 104, 134, 150, 151, 152, 154, 155, 158, 159, 164, 166, 149, 132, 102, 67, 
+   103, 133, 150, 151, 154, 158, 164, 11, 13, 14, 6, 8, 9, 62, 64, 65, 
+   72, 73, 74, 100, 70, 72, 100, 101, 68, 70, 101, 102, 108, 109, 110, 130, 
+   106, 108, 130, 131, 104, 106, 131, 132, 138, 139, 140, 147, 136, 138, 147, 148, 
+   134, 136, 148, 149, 3, 4, 182, 185, 192, 168, 173, 156, 157, 162, 163, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec2[i2] & l2) != 0L);
+      default :
+         if ((jjbitVec0[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+
+/** Token literal values. */
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, "\156\165\154\154", 
+"\50", "\51", "\54", null, null, null, null, "\76\75", null, "\74\75", null, null, 
+"\143\157\156\164\141\151\156\163", "\143\157\156\164\141\151\156\163\40\156\157\164", 
+"\143\157\156\164\141\151\156\163\40\141\156\171", "\143\157\156\164\141\151\156\163\40\156\157\164\40\141\156\171", "\151\156", 
+"\156\157\164\40\151\156", "\44", null, null, null, };
+
+/** Lexer state names. */
+public static final String[] lexStateNames = {
+   "DEFAULT",
+};
+static final long[] jjtoToken = {
+   0x3fffffe7fc01L, 
+};
+static final long[] jjtoSkip = {
+   0x6L, 
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[193];
+private final int[] jjstateSet = new int[386];
+private final StringBuilder jjimage = new StringBuilder();
+private StringBuilder image = jjimage;
+private int jjimageLen;
+private int lengthOfMatch;
+protected char curChar;
+/** Constructor. */
+public FilterParserTokenManager(SimpleCharStream stream){
+   if (SimpleCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+
+/** Constructor. */
+public FilterParserTokenManager(SimpleCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 193; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+
+/** Switch to specified lex state. */
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 1 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   final Token t;
+   final String curTokenImage;
+   final int beginLine;
+   final int endLine;
+   final int beginColumn;
+   final int endColumn;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   curTokenImage = (im == null) ? input_stream.GetImage() : im;
+   beginLine = input_stream.getBeginLine();
+   beginColumn = input_stream.getBeginColumn();
+   endLine = input_stream.getEndLine();
+   endColumn = input_stream.getEndColumn();
+   t = Token.newToken(jjmatchedKind, curTokenImage);
+
+   t.beginLine = beginLine;
+   t.endLine = endLine;
+   t.beginColumn = beginColumn;
+   t.endColumn = endColumn;
+
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+/** Get the next Token. */
+public Token getNextToken() 
+{
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {
+   try
+   {
+      curChar = input_stream.BeginToken();
+   }
+   catch(java.io.IOException e)
+   {
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      return matchedToken;
+   }
+   image = jjimage;
+   image.setLength(0);
+   jjimageLen = 0;
+
+   try { input_stream.backup(0);
+      while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
+         curChar = input_stream.BeginToken();
+   }
+   catch (java.io.IOException e1) { continue EOFLoop; }
+   jjmatchedKind = 0x7fffffff;
+   jjmatchedPos = 0;
+   curPos = jjMoveStringLiteralDfa0_0();
+   if (jjmatchedPos == 0 && jjmatchedKind > 45)
+   {
+      jjmatchedKind = 45;
+   }
+   if (jjmatchedKind != 0x7fffffff)
+   {
+      if (jjmatchedPos + 1 < curPos)
+         input_stream.backup(curPos - jjmatchedPos - 1);
+      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+      {
+         matchedToken = jjFillToken();
+         TokenLexicalActions(matchedToken);
+         return matchedToken;
+      }
+      else
+      {
+         continue EOFLoop;
+      }
+   }
+   int error_line = input_stream.getEndLine();
+   int error_column = input_stream.getEndColumn();
+   String error_after = null;
+   boolean EOFSeen = false;
+   try { input_stream.readChar(); input_stream.backup(1); }
+   catch (java.io.IOException e1) {
+      EOFSeen = true;
+      error_after = curPos <= 1 ? "" : input_stream.GetImage();
+      if (curChar == '\n' || curChar == '\r') {
+         error_line++;
+         error_column = 0;
+      }
+      else
+         error_column++;
+   }
+   if (!EOFSeen) {
+      input_stream.backup(1);
+      error_after = curPos <= 1 ? "" : input_stream.GetImage();
+   }
+   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+  }
+}
+
+void TokenLexicalActions(Token matchedToken)
+{
+   switch(jjmatchedKind)
+   {
+      case 18 :
+        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
+         break;
+      case 44 :
+        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                                                        matchedToken.image = image.substring(1, lengthOfMatch - 1);
+         break;
+      default :
+         break;
+   }
+}
+private void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+
+private void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+
+}
diff --git a/streams/src/main/javacc/resourceFilter.jj b/streams/src/main/javacc/resourceFilter.jj
index 7b9fc3e..cba8286 100644
--- a/streams/src/main/javacc/resourceFilter.jj
+++ b/streams/src/main/javacc/resourceFilter.jj
@@ -104,7 +104,8 @@ TOKEN :
 | < CONTAINS_NOT_ANY : "contains not any" >
 | < IN : "in" >
 | < NOT_IN : "not in" >
-| < FUNCTION_NAME : (~[ "\"", "'", "(", ")", ",", "=", "<", ">", " ", "[", "]","+","-",".","0"-"9" ])+ >
+| < DYNAMIC_ARG : "$" >
+| < FUNCTION_NAME : (~[ "\"", "'", "$", "(", ")", ",", "=", "<", ">", " ", "[", "]","+","-",".","0"-"9" ])+ >
 | < PROPERTY: "[" ( "\\" ~[ ] | ~[ "]", "\\" ] )* "]" >{matchedToken.image = image.substring(1, lengthOfMatch - 1);}
 }
 
@@ -271,7 +272,9 @@ Node argument() :
   (
     selector = literal()
   | selector = property()
+  | selector = dynamicArg()
   | selector = function()
+
   )
   {
     return selector;
@@ -294,6 +297,18 @@ Node function() :
   }
 }
 
+Node dynamicArg() :
+{
+  String functionName = null;
+}
+{
+  < DYNAMIC_ARG >< FUNCTION_NAME >
+  {
+    functionName = token.image;
+    return new Node(FilterParserConstants.DYNAMIC_ARG, functionName);
+  }
+}
+
 Node literal() :
 {
 }
diff --git a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterArgTest.java b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterArgTest.java
new file mode 100644
index 0000000..348276b
--- /dev/null
+++ b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterArgTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.resource.stream;
+
+import static org.junit.Assert.assertEquals;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class ResourceFilterArgTest {
+
+    private static final String START_PATH = "/content/sample/en";
+    @Rule
+    public final SlingContext context = new SlingContext();
+
+    @Before
+    public void setUp() throws ParseException {
+        context.load().json("/data.json", "/content/sample/en");
+    }
+
+    @Test
+    public void testMatchingNameInArg() throws Exception {
+        ResourceFilter filter = new ResourceFilter(
+                "[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang")
+                        .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian");
+        List<Resource> found = handle(START_PATH, filter);
+        assertEquals(1, found.size());
+    }
+    
+    @Test
+    public void testMatchingNameInList() throws Exception {
+        ResourceFilter filter = new ResourceFilter(
+                "[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang")
+                        .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian");
+        List<Resource> found = handle(START_PATH, filter);
+        assertEquals(1, found.size());
+    }
+    
+    @Test
+    public void testNameFunctionAgainstRegex2() throws ParseException, Exception {
+        ResourceFilter query = new ResourceFilter("name() like $regex").addArgument("regex", "testpage[1-2]");
+        List<Resource> found = handle(START_PATH, query);
+        assertEquals(2, found.size());
+    }
+
+    private List<Resource> handle(String startPath, ResourceFilter filter) {
+        Resource resource = context.resourceResolver().getResource(startPath);
+        return ResourceStream.from(resource).setResourceSelector(filter).stream().collect(Collectors.toList());
+    }
+
+
+}

-- 
To stop receiving notification emails like this one, please contact
jeb@apache.org.