sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j..@apache.org
Subject [sling-whiteboard] 01/01: literal date parsing and documentation updates
Date Sun, 18 Feb 2018 01:58:57 GMT
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 21f52ce4b5dd1fb3e9b251ca9f20adefeb685ada
Author: jason e bailey <jeb@apache.org>
AuthorDate: Sat Feb 17 20:44:00 2018 -0500

    literal date parsing and documentation updates
---
 streams/README.md                                  |   20 +-
 .../sling/resource/stream/ResourceStream.java      |  104 +-
 .../sling/resource/stream/parser/FilterParser.java |  919 +++---
 .../stream/parser/FilterParserConstants.java       |  273 +-
 .../stream/parser/FilterParserTokenManager.java    | 3268 ++++++++++----------
 streams/src/main/javacc/resourceFilter.jj          |    2 +
 .../resource/stream/ResourceFilterDateTest.java    |    4 +-
 .../resource/stream/ResourceFilterLogicTest.java   |    2 +-
 .../sling/resource/stream/ResourceFilterTest.java  |    2 +-
 9 files changed, 2381 insertions(+), 2213 deletions(-)

diff --git a/streams/README.md b/streams/README.md
index 11397d8..425caf7 100644
--- a/streams/README.md
+++ b/streams/README.md
@@ -10,9 +10,8 @@ Example of a stream.
 ```java
 ResourceStream
 	.from(resource)
-	.stream(
-		where(property("jcr:primaryType").is("cq:Page")))
-   .filter(
+	.setBranchSelector(where(property("jcr:primaryType").is("page")))
+	.setResourceSelector(
       aChildResource("jcr:content")
           .has(property("sling:resourceType")
 		    .isNot("sling/components/page/folder")));
@@ -23,8 +22,9 @@ same results using the filter script
 ```java
 ResourceStream
     .from(resource)
-    .stream("[jcr:primaryType] == 'cq:Page'")
-    .filter(new ResourceFilter("[jcr:content/sling:resourceType] != 'apps/components/page/folder'"));
+    .setBranchSelector("[jcr:primaryType] == 'cq:Page'")
+    .setResourceSelector("[jcr:content/sling:resourceType] != 'apps/components/page/folder'"))
+    .stream();
 ```
 
 
@@ -112,3 +112,13 @@ OOTB Functions are:
 | name  | none      | String  | Provides the name of the resource                              |
 | date  | 0 - 2     | Instant | First argument is string representation of the date, second argument is a standard Java DateFormat representation of the value. No argument returns the current time. |
 | path  | none		| String  | path of the tested resource        |
+
+## Optimizing Traversals
+Similar to indexing in a query there are strategies that you can do within a tree traversal so that traversals can be done in an efficient manner across a large number of resources. The following strategies will assist in traversal optimization.
+
+### Limit traversal paths
+In a naive implementation of a tree traversal the traversal occurs across all nodes in the tree regardless of the ability of the tree structure to support the nodes that are being looked for. An example of this is a tree of Page resources that have have a child node of jcr:content which contains a subtree of data to define the page structure. If the jcr:content node is not capable of having a child resource of type Page and the goal of the traversal is to identify Page resources that mat [...]
+  
+### Limit memory consumption
+The instantiation of a Resource object from the underlying ResourceResolver is a non trivial consumption of memory. When the focus of a tree traversal is obtaining information from thousands of Resources, an effective method is to extract the information as part of the stream processing or utilizing the forEach method of the ResourceStream object which allows the resource to be garbage collected in an efficient manner. 
+
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/ResourceStream.java b/streams/src/main/java/org/apache/sling/resource/stream/ResourceStream.java
index ae89143..c9710f9 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/ResourceStream.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/ResourceStream.java
@@ -30,10 +30,8 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.resource.stream.parser.ParseException;
 
 /**
- * Base class from which a fluent api can be created or which can be defined
- * using the integrated query language.
- * 
- * Additionally provides the ability to stream child resources.
+ * Utility to create a Stream<Resource> of Resource objects from a managed
+ * traversal of a Resource tree
  *
  */
 public class ResourceStream {
@@ -45,15 +43,17 @@ public class ResourceStream {
 
 	private long startOfRange;
 	
+    // determine if a given child of a resource should be traversed 
 	private Predicate<Resource> branchSelector = resource -> true;
-
-	private Predicate<Resource> childSelector = resource -> true;
+	
+    // determine if a given resource should be added to the stream
+	private Predicate<Resource> resourceSelector = resource -> true;
 
 	/**
-	 * Starting point to locate resources. resources of the start resource.
+	 * Base resource for traversal
 	 * 
 	 * @param resource
-	 *            starting point for the traversal
+	 *            traversal starting point
 	 * @return new instance of ResourceQuery;
 	 */
 	public static ResourceStream from(@Nonnull Resource resource) {
@@ -70,15 +70,13 @@ public class ResourceStream {
 	}
 
 	/**
-	 * Sets the maximum number of items to be returned or processed. Starting from
+	 * Sets the maximum number of items to be returned. Starting from
 	 * the first matching resource. This method is mutually exclusive to the range
 	 * method
 	 * 
-	 * This performs the same form of limitation as a limit on a Stream
-	 * 
 	 * @param number
 	 *            maximum number of items to be returned
-	 * @return this locator
+	 * @return ResourceStream
 	 */
 	public ResourceStream limit(long number) {
 		if (number < 0) {
@@ -90,15 +88,13 @@ public class ResourceStream {
 	}
 
 	/**
-	 * Sets the maximum number of items to be returned or processed. Starting from
-	 * the nth identified resource as set by the startOfRange. This method is
+	 * Sets the maximum number of items to be returned. Starting from
+	 * the nth identified resource as defined by the startOfRange. This method is
 	 * mutually exclusive to the limit method
 	 * 
-	 * This can be achieved on a Stream by performing a a filter operation
-	 * 
-	 * @param startOfRange
-	 * @param limit
-	 * @return
+	 * @param startOfRange index of the first resource to be returned
+	 * @param limit maximum number of resources to be returned
+	 * @return ResourceStream
 	 */
 	public ResourceStream range(long startOfRange, long limit) {
 		if (startOfRange < 0 || limit < 0) {
@@ -108,69 +104,65 @@ public class ResourceStream {
 		this.limit = limit;
 		return this;
 	}
-	
 
 	/**
-	 * Resets the starting path for the query to be the provided path. This can be
-	 * used to limit the possible branching options beneath a resource tree, or to
-	 * use a parent the resource as the basis of permissions for another resource
-	 * structure
-	 * 
+	 * Resets the starting path for the tree traversal. 
 	 * 
 	 * @param path
 	 *            set the internal resource to path
-	 * @return this locator
+	 * @return ResourceStream
 	 */
 	public ResourceStream startingFrom(String path) {
 		this.resource = Objects.requireNonNull(resource.getResourceResolver().getResource(path));
 		return this;
 	}
-	
+
 	/**
-	 * Sets the branch selector for the traversal process. 
+	 * Predicate used to select child resources for traversal
 	 * 
-	 * @param path
-	 *            set the internal resource to path
-	 * @return this locator
-	 * @throws ParseException 
+	 * @param branchSelector
+	 *            resourceFilter script for traversal control
+	 * @return ResourceStream
+	 * @throws ParseException
 	 */
 	public ResourceStream setBranchSelector(String branchSelector) throws ParseException {
 		return setBranchSelector(new ResourceFilter(branchSelector));
 	}
-	
+
 	/**
-	 * Sets the branch selector for the traversal process. 
+	 * Predicate used to select child resources for traversal
 	 * 
-	 * @param path
-	 *            set the internal resource to path
-	 * @return this locator
+	 * @param branchSelector
+	 *            predicate for traversal control
+	 * @return ResourceStream
 	 */
 	public ResourceStream setBranchSelector(Predicate<Resource> branchSelector) {
 		this.branchSelector = Objects.requireNonNull(branchSelector);
 		return this;
 	}
-	
+
 	/**
-	 * Sets the branch selector for the traversal process. 
+	 * ResourceFilter script to identify Resource objects to add to the Stream<Resource>
 	 * 
-	 * @param path
-	 *            set the internal resource to path
-	 * @return this locator
-	 * @throws ParseException 
+	 * @param resourceSelector
+	 *            ResourceFilter script
+	 * @return ResourceStream
+	 * @throws ParseException
 	 */
-	public ResourceStream setChildSelector(String childSelector) throws ParseException {
-		return setChildSelector(new ResourceFilter(childSelector));
+	public ResourceStream setResourceSelector(String resourceSelector) throws ParseException {
+		return setResourceSelector(new ResourceFilter(resourceSelector));
 	}
-	
+
 	/**
-	 * Sets a child selector which defines whether a given reosource should be part of the stream 
+	 * Sets a resource selector which defines whether a given resource should be part
+	 * of the stream
 	 * 
-	 * @param path
-	 *            set the internal resource to path
-	 * @return this locator
+	 * @param resourceSelector
+	 *            identifies resource for Stream<Resource>
+	 * @return ResourceStream
 	 */
-	public ResourceStream setChildSelector(Predicate<Resource> childSelector) {
-		this.childSelector = Objects.requireNonNull(childSelector);
+	public ResourceStream setResourceSelector(Predicate<Resource> resourceSelector) {
+		this.resourceSelector = Objects.requireNonNull(resourceSelector);
 		return this;
 	}
 
@@ -218,7 +210,7 @@ public class ResourceStream {
 							resourcesToCheck.clear();
 						}
 					}
-				} while (startOfRange > 0 || !childSelector.test(current));
+				} while (startOfRange > 0 || !resourceSelector.test(current));
 				return true;
 			}
 
@@ -230,11 +222,9 @@ public class ResourceStream {
 	}
 
 	/**
-	 * Sets a child selector which defines whether a given reosource should be part of the stream 
+	 * Perform the consumer on each Resource in the defined Stream
 	 * 
-	 * @param path
-	 *            set the internal resource to path
-	 * @return this locator
+	 * @param consumer
 	 */
 	public void forEach(Consumer<Resource> consumer) {
 		stream().forEach(consumer);
diff --git a/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParser.java b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParser.java
index 9657f93..5acb26d 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParser.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParser.java
@@ -1,456 +1,463 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParser.java */
-package org.apache.sling.resource.stream.parser;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.sling.resource.stream.parser.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 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 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 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 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;
-    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[] {0x20000,0x10000,0x4c2100,0xff800000,0x442100,0x200000,0x442100,0x442100,0x442100,};
-   }
-   private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x60,0x1f,0x60,0x0,0x60,0x60,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[40];
-    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 < 40; 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.parser;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.sling.resource.stream.parser.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 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 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 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 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;
+    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[] {0x40000,0x20000,0x984300,0xff000000,0x884300,0x400000,0x884300,0x884300,0x884300,};
+   }
+   private static void jj_la1_init_1() {
+      jj_la1_1 = new int[] {0x0,0x0,0xc0,0x3f,0xc0,0x0,0xc0,0xc0,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[41];
+    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 < 41; 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/parser/FilterParserConstants.java b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserConstants.java
index 8bc03cb..eb4724e 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserConstants.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserConstants.java
@@ -1,135 +1,138 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserConstants.java */
-package org.apache.sling.resource.stream.parser;
-
-
-/**
- * Token literal values and constants.
- * Generated by org.javacc.parser.OtherFilesGen#start()
- */
-public interface FilterParserConstants {
-
-  /** End of File. */
-  int EOF = 0;
-  /** RegularExpression Id. */
-  int DOT = 3;
-  /** RegularExpression Id. */
-  int PLUS = 4;
-  /** RegularExpression Id. */
-  int MINUS = 5;
-  /** RegularExpression Id. */
-  int DIGIT = 6;
-  /** RegularExpression Id. */
-  int EXP = 7;
-  /** RegularExpression Id. */
-  int NUMBER = 8;
-  /** RegularExpression Id. */
-  int INTEGER = 9;
-  /** RegularExpression Id. */
-  int FRACTIONAL_DIGITS = 10;
-  /** RegularExpression Id. */
-  int EXPONENT = 11;
-  /** RegularExpression Id. */
-  int DIGITS = 12;
-  /** RegularExpression Id. */
-  int STRING = 13;
-  /** RegularExpression Id. */
-  int SQUOTE = 14;
-  /** RegularExpression Id. */
-  int DQUOTE = 15;
-  /** RegularExpression Id. */
-  int AND = 16;
-  /** RegularExpression Id. */
-  int OR = 17;
-  /** RegularExpression Id. */
-  int NULL = 18;
-  /** RegularExpression Id. */
-  int LPAREN = 19;
-  /** RegularExpression Id. */
-  int RPAREN = 20;
-  /** RegularExpression Id. */
-  int COMMA = 21;
-  /** RegularExpression Id. */
-  int BOOLEAN = 22;
-  /** RegularExpression Id. */
-  int EQUAL = 23;
-  /** RegularExpression Id. */
-  int NOT_EQUAL = 24;
-  /** RegularExpression Id. */
-  int GREATER_THAN = 25;
-  /** RegularExpression Id. */
-  int GREATER_THAN_OR_EQUAL = 26;
-  /** RegularExpression Id. */
-  int LESS_THAN = 27;
-  /** RegularExpression Id. */
-  int LESS_THAN_OR_EQUAL = 28;
-  /** RegularExpression Id. */
-  int LIKE = 29;
-  /** RegularExpression Id. */
-  int LIKE_NOT = 30;
-  /** RegularExpression Id. */
-  int CONTAINS = 31;
-  /** RegularExpression Id. */
-  int CONTAINS_NOT = 32;
-  /** RegularExpression Id. */
-  int CONTAINS_ANY = 33;
-  /** RegularExpression Id. */
-  int CONTAINS_NOT_ANY = 34;
-  /** RegularExpression Id. */
-  int IN = 35;
-  /** RegularExpression Id. */
-  int NOT_IN = 36;
-  /** RegularExpression Id. */
-  int FUNCTION_NAME = 37;
-  /** RegularExpression Id. */
-  int PROPERTY = 38;
-  /** RegularExpression Id. */
-  int UNKNOWN = 39;
-
-  /** Lexical state. */
-  int DEFAULT = 0;
-
-  /** Literal token values. */
-  String[] tokenImage = {
-    "<EOF>",
-    "\" \"",
-    "\"\\t\"",
-    "\".\"",
-    "\"+\"",
-    "\"-\"",
-    "<DIGIT>",
-    "<EXP>",
-    "<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.parser;
+
+
+/**
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
+ */
+public interface FilterParserConstants {
+
+  /** End of File. */
+  int EOF = 0;
+  /** RegularExpression Id. */
+  int DOT = 3;
+  /** RegularExpression Id. */
+  int PLUS = 4;
+  /** RegularExpression Id. */
+  int MINUS = 5;
+  /** RegularExpression Id. */
+  int DIGIT = 6;
+  /** RegularExpression Id. */
+  int EXP = 7;
+  /** RegularExpression Id. */
+  int DATE = 8;
+  /** RegularExpression Id. */
+  int NUMBER = 9;
+  /** RegularExpression Id. */
+  int INTEGER = 10;
+  /** RegularExpression Id. */
+  int FRACTIONAL_DIGITS = 11;
+  /** RegularExpression Id. */
+  int EXPONENT = 12;
+  /** RegularExpression Id. */
+  int DIGITS = 13;
+  /** RegularExpression Id. */
+  int STRING = 14;
+  /** RegularExpression Id. */
+  int SQUOTE = 15;
+  /** RegularExpression Id. */
+  int DQUOTE = 16;
+  /** RegularExpression Id. */
+  int AND = 17;
+  /** RegularExpression Id. */
+  int OR = 18;
+  /** RegularExpression Id. */
+  int NULL = 19;
+  /** RegularExpression Id. */
+  int LPAREN = 20;
+  /** RegularExpression Id. */
+  int RPAREN = 21;
+  /** RegularExpression Id. */
+  int COMMA = 22;
+  /** RegularExpression Id. */
+  int BOOLEAN = 23;
+  /** RegularExpression Id. */
+  int EQUAL = 24;
+  /** RegularExpression Id. */
+  int NOT_EQUAL = 25;
+  /** RegularExpression Id. */
+  int GREATER_THAN = 26;
+  /** RegularExpression Id. */
+  int GREATER_THAN_OR_EQUAL = 27;
+  /** RegularExpression Id. */
+  int LESS_THAN = 28;
+  /** RegularExpression Id. */
+  int LESS_THAN_OR_EQUAL = 29;
+  /** RegularExpression Id. */
+  int LIKE = 30;
+  /** RegularExpression Id. */
+  int LIKE_NOT = 31;
+  /** RegularExpression Id. */
+  int CONTAINS = 32;
+  /** RegularExpression Id. */
+  int CONTAINS_NOT = 33;
+  /** RegularExpression Id. */
+  int CONTAINS_ANY = 34;
+  /** RegularExpression Id. */
+  int CONTAINS_NOT_ANY = 35;
+  /** RegularExpression Id. */
+  int IN = 36;
+  /** RegularExpression Id. */
+  int NOT_IN = 37;
+  /** RegularExpression Id. */
+  int FUNCTION_NAME = 38;
+  /** RegularExpression Id. */
+  int PROPERTY = 39;
+  /** RegularExpression Id. */
+  int UNKNOWN = 40;
+
+  /** Lexical state. */
+  int DEFAULT = 0;
+
+  /** Literal token values. */
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\t\"",
+    "\".\"",
+    "\"+\"",
+    "\"-\"",
+    "<DIGIT>",
+    "<EXP>",
+    "<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/parser/FilterParserTokenManager.java b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserTokenManager.java
index 1cd42c4..ddfd594 100644
--- a/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserTokenManager.java
+++ b/streams/src/main/java/org/apache/sling/resource/stream/parser/FilterParserTokenManager.java
@@ -1,1568 +1,1724 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
-package org.apache.sling.resource.stream.parser;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.sling.resource.stream.parser.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; }
+/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
+package org.apache.sling.resource.stream.parser;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.sling.resource.stream.parser.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 & 0x4L) != 0L)
-            return 58;
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            return 58;
-         }
-         if ((active0 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            return 97;
-         }
-         if ((active0 & 0x800000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            return 83;
-         }
-         if ((active0 & 0x10000000L) != 0L)
-         {
-            jjmatchedKind = 27;
-            return -1;
-         }
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            return 56;
-         }
-         if ((active0 & 0x4000000L) != 0L)
-         {
-            jjmatchedKind = 25;
-            return -1;
-         }
-         return -1;
-      case 1:
-         if ((active0 & 0x800000000L) != 0L)
-            return 58;
-         if ((active0 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 1;
-            return 103;
-         }
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 1;
-            return 55;
-         }
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 1;
-            return 58;
-         }
-         if ((active0 & 0x10000000L) != 0L)
-         {
-            if (jjmatchedPos == 0)
-            {
-               jjmatchedKind = 27;
-               jjmatchedPos = 0;
-            }
-            return -1;
-         }
-         if ((active0 & 0x4000000L) != 0L)
-         {
-            if (jjmatchedPos == 0)
-            {
-               jjmatchedKind = 25;
-               jjmatchedPos = 0;
-            }
-            return -1;
-         }
-         return -1;
-      case 2:
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 2;
-            return 54;
-         }
-         if ((active0 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 2;
-            return 102;
-         }
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 2;
-            return 58;
-         }
-         return -1;
-      case 3:
-         if ((active0 & 0x20000000L) != 0L)
-            return 101;
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 37;
-               jjmatchedPos = 2;
-            }
-            return 53;
-         }
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 3;
-            return 58;
-         }
-         return -1;
-      case 4:
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 4;
-            return 58;
-         }
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 37;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 5:
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 5;
-            return 58;
-         }
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 37;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 6:
-         if ((active0 & 0x780000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 6;
-            return 58;
-         }
-         return -1;
-      case 7:
-         if ((active0 & 0x780000000L) != 0L)
-            return 58;
-         return -1;
-      default :
-         return -1;
-   }
-}
+   {
+      case 0:
+         if ((active0 & 0x4L) != 0L)
+            return 58;
+         if ((active0 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            return 119;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            return 58;
+         }
+         if ((active0 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            return 133;
+         }
+         if ((active0 & 0x8000000L) != 0L)
+         {
+            jjmatchedKind = 26;
+            return -1;
+         }
+         if ((active0 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 28;
+            return -1;
+         }
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            return 56;
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x1000000000L) != 0L)
+            return 58;
+         if ((active0 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 1;
+            return 139;
+         }
+         if ((active0 & 0x8000000L) != 0L)
+         {
+            if (jjmatchedPos == 0)
+            {
+               jjmatchedKind = 26;
+               jjmatchedPos = 0;
+            }
+            return -1;
+         }
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 1;
+            return 55;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 1;
+            return 58;
+         }
+         if ((active0 & 0x20000000L) != 0L)
+         {
+            if (jjmatchedPos == 0)
+            {
+               jjmatchedKind = 28;
+               jjmatchedPos = 0;
+            }
+            return -1;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 2;
+            return 138;
+         }
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 2;
+            return 54;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 2;
+            return 58;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0x40000000L) != 0L)
+            return 137;
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 38;
+               jjmatchedPos = 2;
+            }
+            return 53;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 3;
+            return 58;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 38;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 4;
+            return 58;
+         }
+         return -1;
+      case 5:
+         if ((active0 & 0x2000000000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 38;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 5;
+            return 58;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0xf00000000L) != 0L)
+         {
+            jjmatchedKind = 38;
+            jjmatchedPos = 6;
+            return 58;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0xf00000000L) != 0L)
+            return 58;
+         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, 58);
-      case 32:
-         jjmatchedKind = 1;
-         return jjMoveStringLiteralDfa1_0(0x40000L);
-      case 40:
-         return jjStopAtPos(0, 19);
-      case 41:
-         return jjStopAtPos(0, 20);
-      case 44:
-         return jjStopAtPos(0, 21);
-      case 60:
-         return jjMoveStringLiteralDfa1_0(0x10000000L);
-      case 62:
-         return jjMoveStringLiteralDfa1_0(0x4000000L);
-      case 99:
-         return jjMoveStringLiteralDfa1_0(0x780000000L);
-      case 105:
-         return jjMoveStringLiteralDfa1_0(0x800000000L);
-      case 108:
-         return jjMoveStringLiteralDfa1_0(0x20000000L);
-      case 110:
-         return jjMoveStringLiteralDfa1_0(0x1000000000L);
-      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 & 0x4000000L) != 0L)
-            return jjStopAtPos(1, 26);
-         else if ((active0 & 0x10000000L) != 0L)
-            return jjStopAtPos(1, 28);
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L);
-      case 110:
-         if ((active0 & 0x800000000L) != 0L)
-            return jjStartNfaWithStates_0(1, 35, 58);
-         return jjMoveStringLiteralDfa2_0(active0, 0x40000L);
-      case 111:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1780000000L);
-      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 107:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L);
-      case 110:
-         return jjMoveStringLiteralDfa3_0(active0, 0x780000000L);
-      case 116:
-         return jjMoveStringLiteralDfa3_0(active0, 0x1000000000L);
-      case 117:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000L);
-      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, 0x1000000000L);
-      case 101:
-         if ((active0 & 0x20000000L) != 0L)
-            return jjStartNfaWithStates_0(3, 29, 101);
-         break;
-      case 108:
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000L);
-      case 116:
-         return jjMoveStringLiteralDfa4_0(active0, 0x780000000L);
-      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, 0x780000000L);
-      case 105:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000L);
-      case 108:
-         if ((active0 & 0x40000L) != 0L)
-            return jjStopAtPos(4, 18);
-         break;
-      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, 0x780000000L);
-      case 110:
-         if ((active0 & 0x1000000000L) != 0L)
-            return jjStopAtPos(5, 36);
-         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, 0x780000000L);
-      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 & 0x80000000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 7;
-         }
-         return jjMoveStringLiteralDfa8_0(active0, 0x700000000L);
-      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, 0x700000000L);
-      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, 0x200000000L);
-      case 110:
-         return jjMoveStringLiteralDfa10_0(active0, 0x500000000L);
-      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, 0x200000000L);
-      case 111:
-         return jjMoveStringLiteralDfa11_0(active0, 0x500000000L);
-      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 & 0x100000000L) != 0L)
-         {
-            jjmatchedKind = 32;
-            jjmatchedPos = 11;
-         }
-         return jjMoveStringLiteralDfa12_0(active0, 0x400000000L);
-      case 121:
-         if ((active0 & 0x200000000L) != 0L)
-            return jjStopAtPos(11, 33);
-         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, 0x400000000L);
-      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, 0x400000000L);
-      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, 0x400000000L);
-      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 & 0x400000000L) != 0L)
-            return jjStopAtPos(15, 34);
-         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);
-}
+{
+   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, 58);
+      case 32:
+         jjmatchedKind = 1;
+         return jjMoveStringLiteralDfa1_0(0x80000L);
+      case 40:
+         return jjStopAtPos(0, 20);
+      case 41:
+         return jjStopAtPos(0, 21);
+      case 44:
+         return jjStopAtPos(0, 22);
+      case 60:
+         return jjMoveStringLiteralDfa1_0(0x20000000L);
+      case 62:
+         return jjMoveStringLiteralDfa1_0(0x8000000L);
+      case 99:
+         return jjMoveStringLiteralDfa1_0(0xf00000000L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x1000000000L);
+      case 108:
+         return jjMoveStringLiteralDfa1_0(0x40000000L);
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x2000000000L);
+      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 & 0x8000000L) != 0L)
+            return jjStopAtPos(1, 27);
+         else if ((active0 & 0x20000000L) != 0L)
+            return jjStopAtPos(1, 29);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L);
+      case 110:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 36, 58);
+         return jjMoveStringLiteralDfa2_0(active0, 0x80000L);
+      case 111:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2f00000000L);
+      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 107:
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L);
+      case 110:
+         return jjMoveStringLiteralDfa3_0(active0, 0xf00000000L);
+      case 116:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000L);
+      case 117:
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000L);
+      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, 0x2000000000L);
+      case 101:
+         if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 30, 137);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000L);
+      case 116:
+         return jjMoveStringLiteralDfa4_0(active0, 0xf00000000L);
+      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, 0xf00000000L);
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000L);
+      case 108:
+         if ((active0 & 0x80000L) != 0L)
+            return jjStopAtPos(4, 19);
+         break;
+      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, 0xf00000000L);
+      case 110:
+         if ((active0 & 0x2000000000L) != 0L)
+            return jjStopAtPos(5, 37);
+         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, 0xf00000000L);
+      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 & 0x100000000L) != 0L)
+         {
+            jjmatchedKind = 32;
+            jjmatchedPos = 7;
+         }
+         return jjMoveStringLiteralDfa8_0(active0, 0xe00000000L);
+      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, 0xe00000000L);
+      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, 0x400000000L);
+      case 110:
+         return jjMoveStringLiteralDfa10_0(active0, 0xa00000000L);
+      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, 0x400000000L);
+      case 111:
+         return jjMoveStringLiteralDfa11_0(active0, 0xa00000000L);
+      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 & 0x200000000L) != 0L)
+         {
+            jjmatchedKind = 33;
+            jjmatchedPos = 11;
+         }
+         return jjMoveStringLiteralDfa12_0(active0, 0x800000000L);
+      case 121:
+         if ((active0 & 0x400000000L) != 0L)
+            return jjStopAtPos(11, 34);
+         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, 0x800000000L);
+      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, 0x800000000L);
+      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, 0x800000000L);
+      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 & 0x800000000L) != 0L)
+            return jjStopAtPos(15, 35);
+         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 = 105;
-   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 101:
-                  if ((0x8c00847affffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  else if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 100;
-                  break;
-               case 55:
-               case 58:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 97:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 102:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 56:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 0:
-                  if ((0x8c00847affffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  else if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 8)
-                        kind = 8;
-                     jjCheckNAddStates(0, 8);
-                  }
-                  else if (curChar == 45)
-                     jjCheckNAddStates(9, 13);
-                  else if (curChar == 60)
-                  {
-                     if (kind > 27)
-                        kind = 27;
-                  }
-                  else if (curChar == 62)
-                  {
-                     if (kind > 25)
-                        kind = 25;
-                  }
-                  else if (curChar == 61)
-                     jjstateSet[jjnewStateCnt++] = 32;
-                  else if (curChar == 34)
-                     jjCheckNAddStates(14, 16);
-                  else if (curChar == 39)
-                     jjCheckNAddStates(17, 19);
-                  else if (curChar == 46)
-                     jjCheckNAdd(1);
-                  if (curChar == 33)
-                     jjstateSet[jjnewStateCnt++] = 34;
-                  else if (curChar == 38)
-                     jjstateSet[jjnewStateCnt++] = 15;
-                  break;
-               case 83:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 103:
-                  if ((0x8c00847affffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 54:
-                  if ((0x8c00847affffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  else if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 53;
-                  break;
-               case 1:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 10)
-                     kind = 10;
-                  jjCheckNAdd(1);
-                  break;
-               case 3:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(4);
-                  break;
-               case 4:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 11)
-                     kind = 11;
-                  jjCheckNAdd(4);
-                  break;
-               case 5:
-                  if (curChar == 39)
-                     jjCheckNAddStates(17, 19);
-                  break;
-               case 7:
-                  jjCheckNAddStates(17, 19);
-                  break;
-               case 8:
-                  if ((0xffffff7fffffffffL & l) != 0L)
-                     jjCheckNAddStates(17, 19);
-                  break;
-               case 9:
-                  if (curChar == 39 && kind > 13)
-                     kind = 13;
-                  break;
-               case 10:
-                  if (curChar == 34)
-                     jjCheckNAddStates(14, 16);
-                  break;
-               case 12:
-                  jjCheckNAddStates(14, 16);
-                  break;
-               case 13:
-                  if ((0xfffffffbffffffffL & l) != 0L)
-                     jjCheckNAddStates(14, 16);
-                  break;
-               case 14:
-                  if (curChar == 34 && kind > 13)
-                     kind = 13;
-                  break;
-               case 15:
-                  if (curChar == 38 && kind > 16)
-                     kind = 16;
-                  break;
-               case 16:
-                  if (curChar == 38)
-                     jjstateSet[jjnewStateCnt++] = 15;
-                  break;
-               case 32:
-                  if (curChar == 61 && kind > 23)
-                     kind = 23;
-                  break;
-               case 33:
-                  if (curChar == 61)
-                     jjstateSet[jjnewStateCnt++] = 32;
-                  break;
-               case 34:
-                  if (curChar == 61 && kind > 24)
-                     kind = 24;
-                  break;
-               case 35:
-                  if (curChar == 33)
-                     jjstateSet[jjnewStateCnt++] = 34;
-                  break;
-               case 36:
-                  if (curChar == 62 && kind > 25)
-                     kind = 25;
-                  break;
-               case 41:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 40;
-                  break;
-               case 49:
-                  if (curChar == 60 && kind > 27)
-                     kind = 27;
-                  break;
-               case 61:
-               case 62:
-                  jjCheckNAddStates(20, 22);
-                  break;
-               case 64:
-                  if (curChar == 45)
-                     jjCheckNAddStates(9, 13);
-                  break;
-               case 65:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
-                  jjCheckNAdd(65);
-                  break;
-               case 66:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(66, 67);
-                  break;
-               case 67:
-                  if (curChar == 46)
-                     jjCheckNAdd(68);
-                  break;
-               case 68:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
-                  jjCheckNAdd(68);
-                  break;
-               case 69:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(69, 70);
-                  break;
-               case 71:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(72);
-                  break;
-               case 72:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
-                  jjCheckNAdd(72);
-                  break;
-               case 73:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(73, 74);
-                  break;
-               case 74:
-                  if (curChar == 46)
-                     jjCheckNAdd(75);
-                  break;
-               case 75:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(75, 76);
-                  break;
-               case 77:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(78);
-                  break;
-               case 78:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
-                  jjCheckNAdd(78);
-                  break;
-               case 79:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 9)
-                     kind = 9;
-                  jjCheckNAdd(79);
-                  break;
-               case 80:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 8)
-                     kind = 8;
-                  jjCheckNAddStates(0, 8);
-                  break;
-               case 81:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 12)
-                     kind = 12;
-                  jjCheckNAdd(81);
-                  break;
-               case 87:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 86;
-                  break;
-               case 94:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 93;
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else if (curChar < 128)
-      {
-         long l = 1L << (curChar & 077);
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 101:
-               case 58:
-                  if ((0xffffffffd7ffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 55:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 54;
-                  break;
-               case 97:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 105)
-                     jjstateSet[jjnewStateCnt++] = 103;
-                  else if (curChar == 101)
-                     jjstateSet[jjnewStateCnt++] = 96;
-                  break;
-               case 102:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 101)
-                     jjstateSet[jjnewStateCnt++] = 101;
-                  break;
-               case 56:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 55;
-                  break;
-               case 0:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  else if (curChar == 91)
-                     jjCheckNAddStates(20, 22);
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(23, 24);
-                  else if (curChar == 108)
-                     jjAddStates(25, 26);
-                  else if (curChar == 105)
-                     jjAddStates(27, 28);
-                  else if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 56;
-                  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 83:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 87;
-                  if (curChar == 115)
-                  {
-                     if (kind > 23)
-                        kind = 23;
-                  }
-                  break;
-               case 103:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 37)
-                        kind = 37;
-                     jjCheckNAdd(58);
-                  }
-                  if (curChar == 107)
-                     jjstateSet[jjnewStateCnt++] = 102;
-                  break;
-               case 54:
-                  if ((0xffffffffd7ffffffL & l) == 0L)
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 2:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(23, 24);
-                  break;
-               case 6:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 7;
-                  break;
-               case 7:
-                  jjCheckNAddStates(17, 19);
-                  break;
-               case 8:
-                  if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(17, 19);
-                  break;
-               case 11:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 12;
-                  break;
-               case 12:
-                  jjCheckNAddStates(14, 16);
-                  break;
-               case 13:
-                  if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(14, 16);
-                  break;
-               case 17:
-                  if (curChar == 100 && kind > 16)
-                     kind = 16;
-                  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 > 17)
-                     kind = 17;
-                  break;
-               case 21:
-                  if (curChar == 124)
-                     jjstateSet[jjnewStateCnt++] = 20;
-                  break;
-               case 22:
-                  if (curChar == 114 && kind > 17)
-                     kind = 17;
-                  break;
-               case 23:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 22;
-                  break;
-               case 24:
-                  if (curChar == 101 && kind > 22)
-                     kind = 22;
-                  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 > 25)
-                     kind = 25;
-                  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 50:
-                  if (curChar == 101 && kind > 30)
-                     kind = 30;
-                  break;
-               case 51:
-                  if (curChar == 107)
-                     jjstateSet[jjnewStateCnt++] = 50;
-                  break;
-               case 52:
-                  if (curChar == 105)
-                     jjstateSet[jjnewStateCnt++] = 51;
-                  break;
-               case 53:
-                  if (curChar == 108)
-                     jjstateSet[jjnewStateCnt++] = 52;
-                  break;
-               case 57:
-                  if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 56;
-                  break;
-               case 59:
-                  if (curChar == 91)
-                     jjCheckNAddStates(20, 22);
-                  break;
-               case 60:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 61;
-                  break;
-               case 61:
-                  jjCheckNAddStates(20, 22);
-                  break;
-               case 62:
-                  if ((0xffffffffcfffffffL & l) != 0L)
-                     jjCheckNAddStates(20, 22);
-                  break;
-               case 63:
-                  if (curChar == 93 && kind > 38)
-                     kind = 38;
-                  break;
-               case 70:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(29, 30);
-                  break;
-               case 76:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(31, 32);
-                  break;
-               case 82:
-                  if (curChar == 105)
-                     jjAddStates(27, 28);
-                  break;
-               case 84:
-                  if (curChar == 116 && kind > 24)
-                     kind = 24;
-                  break;
-               case 85:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 84;
-                  break;
-               case 86:
-                  if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 85;
-                  break;
-               case 88:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 87;
-                  break;
-               case 89:
-                  if (curChar == 108)
-                     jjAddStates(25, 26);
-                  break;
-               case 90:
-                  if (curChar == 110 && kind > 27)
-                     kind = 27;
-                  break;
-               case 91:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 90;
-                  break;
-               case 92:
-                  if (curChar == 104)
-                     jjstateSet[jjnewStateCnt++] = 91;
-                  break;
-               case 93:
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 92;
-                  break;
-               case 95:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 94;
-                  break;
-               case 96:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 95;
-                  break;
-               case 98:
-                  if (curChar == 116 && kind > 30)
-                     kind = 30;
-                  break;
-               case 99:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 98;
-                  break;
-               case 100:
-                  if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 99;
-                  break;
-               case 104:
-                  if (curChar == 105)
-                     jjstateSet[jjnewStateCnt++] = 103;
-                  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 101:
-               case 58:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 55:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 97:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 102:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 56:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 0:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 83:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 103:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 54:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 37)
-                     kind = 37;
-                  jjCheckNAdd(58);
-                  break;
-               case 7:
-               case 8:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(17, 19);
-                  break;
-               case 12:
-               case 13:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(14, 16);
-                  break;
-               case 61:
-               case 62:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(20, 22);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      if (kind != 0x7fffffff)
-      {
-         jjmatchedKind = kind;
-         jjmatchedPos = curPos;
-         kind = 0x7fffffff;
-      }
-      ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 105 - (jjnewStateCnt = startsAt)))
-         return curPos;
-      try { curChar = input_stream.readChar(); }
-      catch(java.io.IOException e) { return curPos; }
-   }
-}
+};
+private int jjMoveNfa_0(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 141;
+   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 119:
+               case 58:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 138:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 55:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 0:
+                  if ((0x8c00847affffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  else if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 9)
+                        kind = 9;
+                     jjCheckNAddStates(0, 10);
+                  }
+                  else if (curChar == 45)
+                     jjCheckNAddStates(11, 16);
+                  else if (curChar == 60)
+                  {
+                     if (kind > 28)
+                        kind = 28;
+                  }
+                  else if (curChar == 62)
+                  {
+                     if (kind > 26)
+                        kind = 26;
+                  }
+                  else if (curChar == 61)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  else if (curChar == 34)
+                     jjCheckNAddStates(17, 19);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(20, 22);
+                  else if (curChar == 46)
+                     jjCheckNAdd(1);
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  else if (curChar == 38)
+                     jjstateSet[jjnewStateCnt++] = 15;
+                  break;
+               case 133:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 56:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 137:
+                  if ((0x8c00847affffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  else if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 136;
+                  break;
+               case 139:
+                  if ((0x8c00847affffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 54:
+                  if ((0x8c00847affffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  else if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 53;
+                  break;
+               case 1:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(4);
+                  break;
+               case 4:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(4);
+                  break;
+               case 5:
+                  if (curChar == 39)
+                     jjCheckNAddStates(20, 22);
+                  break;
+               case 7:
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 8:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(20, 22);
+                  break;
+               case 9:
+                  if (curChar == 39 && kind > 14)
+                     kind = 14;
+                  break;
+               case 10:
+                  if (curChar == 34)
+                     jjCheckNAddStates(17, 19);
+                  break;
+               case 12:
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 13:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(17, 19);
+                  break;
+               case 14:
+                  if (curChar == 34 && kind > 14)
+                     kind = 14;
+                  break;
+               case 15:
+                  if (curChar == 38 && kind > 17)
+                     kind = 17;
+                  break;
+               case 16:
+                  if (curChar == 38)
+                     jjstateSet[jjnewStateCnt++] = 15;
+                  break;
+               case 32:
+                  if (curChar == 61 && kind > 24)
+                     kind = 24;
+                  break;
+               case 33:
+                  if (curChar == 61)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  break;
+               case 34:
+                  if (curChar == 61 && kind > 25)
+                     kind = 25;
+                  break;
+               case 35:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  break;
+               case 36:
+                  if (curChar == 62 && kind > 26)
+                     kind = 26;
+                  break;
+               case 41:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 40;
+                  break;
+               case 49:
+                  if (curChar == 60 && kind > 28)
+                     kind = 28;
+                  break;
+               case 61:
+               case 62:
+                  jjCheckNAddStates(23, 25);
+                  break;
+               case 64:
+                  if (curChar == 45)
+                     jjCheckNAddStates(11, 16);
+                  break;
+               case 65:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(66, 100);
+                  break;
+               case 66:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 67;
+                  break;
+               case 67:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(68, 99);
+                  break;
+               case 68:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 69;
+                  break;
+               case 69:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(70, 98);
+                  break;
+               case 70:
+                  if (curChar == 45)
+                     jjCheckNAdd(71);
+                  break;
+               case 71:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 72:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 73;
+                  break;
+               case 73:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(74, 75);
+                  break;
+               case 74:
+                  if (curChar == 45)
+                     jjCheckNAdd(75);
+                  break;
+               case 75:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(75, 76);
+                  break;
+               case 76:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 77;
+                  break;
+               case 77:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 78;
+                  break;
+               case 78:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjstateSet[jjnewStateCnt++] = 79;
+                  break;
+               case 80:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 81;
+                  break;
+               case 81:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 82;
+                  break;
+               case 82:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 83;
+                  break;
+               case 83:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 84;
+                  break;
+               case 84:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjstateSet[jjnewStateCnt++] = 85;
+                  break;
+               case 85:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 86;
+                  break;
+               case 86:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 87;
+                  break;
+               case 87:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAddTwoStates(88, 92);
+                  break;
+               case 88:
+                  if (curChar == 46)
+                     jjstateSet[jjnewStateCnt++] = 89;
+                  break;
+               case 89:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 90;
+                  break;
+               case 90:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 91;
+                  break;
+               case 91:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAdd(92);
+                  break;
+               case 92:
+                  if ((0x280000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 93;
+                  break;
+               case 93:
+                  if ((0x7000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 94;
+                  break;
+               case 94:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 95;
+                  break;
+               case 95:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 96;
+                  break;
+               case 96:
+                  if ((0x3f000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 97;
+                  break;
+               case 97:
+                  if ((0x3ff000000000000L & l) != 0L && kind > 8)
+                     kind = 8;
+                  break;
+               case 98:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(26, 29);
+                  break;
+               case 99:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(30, 33);
+                  break;
+               case 100:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(34, 37);
+                  break;
+               case 101:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 9)
+                     kind = 9;
+                  jjCheckNAdd(101);
+                  break;
+               case 102:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(102, 103);
+                  break;
+               case 103:
+                  if (curChar == 46)
+                     jjCheckNAdd(104);
+                  break;
+               case 104:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 9)
+                     kind = 9;
+                  jjCheckNAdd(104);
+                  break;
+               case 105:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(105, 106);
+                  break;
+               case 107:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(108);
+                  break;
+               case 108:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 9)
+                     kind = 9;
+                  jjCheckNAdd(108);
+                  break;
+               case 109:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(109, 110);
+                  break;
+               case 110:
+                  if (curChar == 46)
+                     jjCheckNAdd(111);
+                  break;
+               case 111:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(111, 112);
+                  break;
+               case 113:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(114);
+                  break;
+               case 114:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 9)
+                     kind = 9;
+                  jjCheckNAdd(114);
+                  break;
+               case 115:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 10)
+                     kind = 10;
+                  jjCheckNAdd(115);
+                  break;
+               case 116:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 9)
+                     kind = 9;
+                  jjCheckNAddStates(0, 10);
+                  break;
+               case 117:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 13)
+                     kind = 13;
+                  jjCheckNAdd(117);
+                  break;
+               case 123:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 122;
+                  break;
+               case 130:
+                  if (curChar == 32)
+                     jjstateSet[jjnewStateCnt++] = 129;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 119:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 123;
+                  if (curChar == 115)
+                  {
+                     if (kind > 24)
+                        kind = 24;
+                  }
+                  break;
+               case 138:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 137;
+                  break;
+               case 55:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 54;
+                  break;
+               case 0:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  else if (curChar == 91)
+                     jjCheckNAddStates(23, 25);
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(38, 39);
+                  else if (curChar == 108)
+                     jjAddStates(40, 41);
+                  else if (curChar == 105)
+                     jjAddStates(42, 43);
+                  else if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 56;
+                  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 133:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 139;
+                  else if (curChar == 101)
+                     jjstateSet[jjnewStateCnt++] = 132;
+                  break;
+               case 56:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 55;
+                  break;
+               case 137:
+               case 58:
+                  if ((0xffffffffd7ffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 139:
+                  if ((0xffffffffd7ffffffL & l) != 0L)
+                  {
+                     if (kind > 38)
+                        kind = 38;
+                     jjCheckNAdd(58);
+                  }
+                  if (curChar == 107)
+                     jjstateSet[jjnewStateCnt++] = 138;
+                  break;
+               case 54:
+                  if ((0xffffffffd7ffffffL & l) == 0L)
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 2:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(38, 39);
+                  break;
+               case 6:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  break;
+               case 7:
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 8:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(20, 22);
+                  break;
+               case 11:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 12;
+                  break;
+               case 12:
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 13:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(17, 19);
+                  break;
+               case 17:
+                  if (curChar == 100 && kind > 17)
+                     kind = 17;
+                  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 > 18)
+                     kind = 18;
+                  break;
+               case 21:
+                  if (curChar == 124)
+                     jjstateSet[jjnewStateCnt++] = 20;
+                  break;
+               case 22:
+                  if (curChar == 114 && kind > 18)
+                     kind = 18;
+                  break;
+               case 23:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 22;
+                  break;
+               case 24:
+                  if (curChar == 101 && kind > 23)
+                     kind = 23;
+                  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 > 26)
+                     kind = 26;
+                  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 50:
+                  if (curChar == 101 && kind > 31)
+                     kind = 31;
+                  break;
+               case 51:
+                  if (curChar == 107)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 52:
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 51;
+                  break;
+               case 53:
+                  if (curChar == 108)
+                     jjstateSet[jjnewStateCnt++] = 52;
+                  break;
+               case 57:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 56;
+                  break;
+               case 59:
+                  if (curChar == 91)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 60:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 61;
+                  break;
+               case 61:
+                  jjCheckNAddStates(23, 25);
+                  break;
+               case 62:
+                  if ((0xffffffffcfffffffL & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 63:
+                  if (curChar == 93 && kind > 39)
+                     kind = 39;
+                  break;
+               case 79:
+                  if ((0x10000000100000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 80;
+                  break;
+               case 106:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(44, 45);
+                  break;
+               case 112:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(46, 47);
+                  break;
+               case 118:
+                  if (curChar == 105)
+                     jjAddStates(42, 43);
+                  break;
+               case 120:
+                  if (curChar == 116 && kind > 25)
+                     kind = 25;
+                  break;
+               case 121:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 120;
+                  break;
+               case 122:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 121;
+                  break;
+               case 124:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 123;
+                  break;
+               case 125:
+                  if (curChar == 108)
+                     jjAddStates(40, 41);
+                  break;
+               case 126:
+                  if (curChar == 110 && kind > 28)
+                     kind = 28;
+                  break;
+               case 127:
+                  if (curChar == 97)
+                     jjstateSet[jjnewStateCnt++] = 126;
+                  break;
+               case 128:
+                  if (curChar == 104)
+                     jjstateSet[jjnewStateCnt++] = 127;
+                  break;
+               case 129:
+                  if (curChar == 116)
+                     jjstateSet[jjnewStateCnt++] = 128;
+                  break;
+               case 131:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 130;
+                  break;
+               case 132:
+                  if (curChar == 115)
+                     jjstateSet[jjnewStateCnt++] = 131;
+                  break;
+               case 134:
+                  if (curChar == 116 && kind > 31)
+                     kind = 31;
+                  break;
+               case 135:
+                  if (curChar == 111)
+                     jjstateSet[jjnewStateCnt++] = 134;
+                  break;
+               case 136:
+                  if (curChar == 110)
+                     jjstateSet[jjnewStateCnt++] = 135;
+                  break;
+               case 140:
+                  if (curChar == 105)
+                     jjstateSet[jjnewStateCnt++] = 139;
+                  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 119:
+               case 58:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 138:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 55:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 0:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 133:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 56:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 137:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 139:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 54:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 38)
+                     kind = 38;
+                  jjCheckNAdd(58);
+                  break;
+               case 7:
+               case 8:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(20, 22);
+                  break;
+               case 12:
+               case 13:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(17, 19);
+                  break;
+               case 61:
+               case 62:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(23, 25);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 141 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
 static final int[] jjnextStates = {
-   65, 66, 67, 69, 70, 73, 74, 79, 81, 65, 66, 69, 73, 79, 11, 13, 
-   14, 6, 8, 9, 60, 62, 63, 3, 4, 97, 104, 83, 88, 71, 72, 77, 
-   78, 
-};
-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, "\40\156\165\154\154", "\50", "\51", "\54", null, null, 
-null, null, "\76\75", null, "\74\75", "\154\151\153\145", 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",
-};
+   66, 101, 102, 103, 105, 106, 109, 110, 115, 117, 100, 65, 101, 102, 105, 109, 
+   115, 11, 13, 14, 6, 8, 9, 60, 62, 63, 70, 71, 72, 98, 68, 70, 
+   98, 99, 66, 68, 99, 100, 3, 4, 133, 140, 119, 124, 107, 108, 113, 114, 
+};
+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, "\40\156\165\154\154", "\50", "\51", "\54", null, 
+null, null, null, "\76\75", null, "\74\75", "\154\151\153\145", 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 = {
-   0xffffff3f01L, 
-};
+   0x1fffffe7f01L, 
+};
 static final long[] jjtoSkip = {
    0x6L, 
-};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[105];
-private final int[] jjstateSet = new int[210];
-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 = 105; 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;
-
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[141];
+private final int[] jjstateSet = new int[282];
+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 = 141; 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;
-
-   jjmatchedKind = 0x7fffffff;
-   jjmatchedPos = 0;
-   curPos = jjMoveStringLiteralDfa0_0();
-   if (jjmatchedPos == 0 && jjmatchedKind > 39)
-   {
-      jjmatchedKind = 39;
-   }
-   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 13 :
-        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
-         break;
-      case 38 :
-        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);
-}
-
-}
+  for (;;)
+  {
+   try
+   {
+      curChar = input_stream.BeginToken();
+   }
+   catch(java.io.IOException e)
+   {
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      return matchedToken;
+   }
+   image = jjimage;
+   image.setLength(0);
+   jjimageLen = 0;
+
+   jjmatchedKind = 0x7fffffff;
+   jjmatchedPos = 0;
+   curPos = jjMoveStringLiteralDfa0_0();
+   if (jjmatchedPos == 0 && jjmatchedKind > 40)
+   {
+      jjmatchedKind = 40;
+   }
+   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 14 :
+        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
+         break;
+      case 39 :
+        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 c83c65e..66b4552 100644
--- a/streams/src/main/javacc/resourceFilter.jj
+++ b/streams/src/main/javacc/resourceFilter.jj
@@ -43,6 +43,7 @@ TOKEN :
 | < #MINUS: "-" >
 | < #DIGIT: [ "0"-"9" ] >
 | < #EXP: ["e","E"] ( < PLUS > | < MINUS > )? >
+| < DATE: <INTEGER> <INTEGER> <INTEGER> <INTEGER> <MINUS> ["0"-"2"] <INTEGER> <MINUS> ["0"-"3"] <DIGIT> (["t","T"] ["0"-"2"] <DIGIT> ":" ["0"-"5"] <DIGIT> ( ":" ["0"-"5"] <DIGIT> ("." <DIGIT>  <DIGIT>  <DIGIT>)? (["+","-"]["0"-"2"] <DIGIT> ":" ["0"-"5"] <DIGIT> )? )?  )? >
 | < NUMBER:  <INTEGER> | <INTEGER> <FRACTIONAL_DIGITS> | <INTEGER> <EXPONENT> | <INTEGER> <FRACTIONAL_DIGITS> <EXPONENT> >
 | < INTEGER: (<MINUS>)? ( <DIGITS> ) >
 | < FRACTIONAL_DIGITS: <DOT> <DIGITS> >
@@ -297,6 +298,7 @@ Node literal() :
   | < NUMBER >
   | < NULL >
   | < BOOLEAN >
+  | < DATE >
   )
   {
     return new Node(token.kind, token.image);
diff --git a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterDateTest.java b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterDateTest.java
index 7eef5a4..99fc96e 100644
--- a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterDateTest.java
+++ b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterDateTest.java
@@ -43,7 +43,7 @@ public class ResourceFilterDateTest {
 		List<Resource> found = handle(START_PATH, query);
 		assertEquals(3, found.size());
 
-		query = "[jcr:content/created] < '2013-08-08T16:32:59.000'";
+		query = "[jcr:content/created] < 2013-08-08T16:32:59.000";
 		found = handle(START_PATH, query);
 		assertEquals(3, found.size());
 
@@ -95,6 +95,6 @@ public class ResourceFilterDateTest {
 	
 	private List<Resource> handle(String path, String filter) throws ParseException {
 		Resource resource = context.resourceResolver().getResource(path);
-		return ResourceStream.from(resource).setChildSelector(filter).stream().collect(Collectors.toList());
+		return ResourceStream.from(resource).setResourceSelector(filter).stream().collect(Collectors.toList());
 	}
 }
diff --git a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterLogicTest.java b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterLogicTest.java
index 183e98f..4608098 100644
--- a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterLogicTest.java
+++ b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterLogicTest.java
@@ -61,6 +61,6 @@ public class ResourceFilterLogicTest {
 	
 	private List<Resource> handle(String path, String filter) throws ParseException {
 		Resource resource = context.resourceResolver().getResource(path);
-		return ResourceStream.from(resource).setChildSelector(filter).stream().collect(Collectors.toList());
+		return ResourceStream.from(resource).setResourceSelector(filter).stream().collect(Collectors.toList());
 	}
 }
diff --git a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterTest.java b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterTest.java
index 7951a28..840cbcf 100644
--- a/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterTest.java
+++ b/streams/src/test/java/org/apache/sling/resource/stream/ResourceFilterTest.java
@@ -261,6 +261,6 @@ public class ResourceFilterTest {
 	private List<Resource> handle(String path, String filter) throws ParseException {
 		Resource resource = context.resourceResolver().getResource(path);
 		Predicate<Resource> f = new ResourceFilter(filter);
-		return ResourceStream.from(resource).setChildSelector(f).stream().collect(Collectors.toList());
+		return ResourceStream.from(resource).setResourceSelector(f).stream().collect(Collectors.toList());
 	}
 }

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

Mime
View raw message