You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2025/11/26 12:18:52 UTC

(sling-org-apache-sling-resource-filter) branch feature/SLING-13013-parent-62 created (now 897117c)

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

sseifert pushed a change to branch feature/SLING-13013-parent-62
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git


      at 897117c  SLING-13013 apply spotless formatting

This branch includes the following new commits:

     new c8f20c0  SLING-13013 Update to Parent 62
     new 897117c  SLING-13013 apply spotless formatting

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sling-org-apache-sling-resource-filter) 02/02: SLING-13013 apply spotless formatting

Posted by ss...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch feature/SLING-13013-parent-62
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git

commit 897117c9aeb1f97de29e89474189a02e676a16f4
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Wed Nov 26 13:18:41 2025 +0100

    SLING-13013 apply spotless formatting
---
 pom.xml                                            |   58 +-
 .../resource/filter/ResourceFilterStream.java      |   38 +-
 .../sling/resource/filter/ResourcePredicates.java  |   16 +-
 .../sling/resource/filter/ResourceStream.java      |  120 +-
 .../resource/filter/impl/ComparisonVisitor.java    |  141 +-
 .../apache/sling/resource/filter/impl/Context.java |   56 +-
 .../sling/resource/filter/impl/DefaultContext.java |   26 +-
 .../sling/resource/filter/impl/LogicVisitor.java   |   44 +-
 .../filter/impl/ResourceFilterAdapter.java         |   12 +-
 .../filter/impl/ResourceFilterFunction.java        |   29 +-
 .../filter/impl/ResourcePredicateImpl.java         |   27 +-
 .../apache/sling/resource/filter/impl/Visitor.java |   24 +-
 .../sling/resource/filter/impl/node/Node.java      |   37 +-
 .../predicates/ComparisonPredicateFactory.java     |   91 +-
 .../impl/predicates/ComparisonPredicates.java      |   59 +-
 .../resource/filter/impl/predicates/Null.java      |   24 +-
 .../resource/filter/impl/script/FilterParser.java  |  987 +++---
 .../filter/impl/script/FilterParserConstants.java  |  299 +-
 .../impl/script/FilterParserTokenManager.java      | 3135 +++++++++-----------
 .../filter/impl/script/ParseException.java         |  328 +-
 .../filter/impl/script/SimpleCharStream.java       |  863 +++---
 .../sling/resource/filter/impl/script/Token.java   |  239 +-
 .../resource/filter/impl/script/TokenMgrError.java |  278 +-
 .../apache/sling/resource/filter/package-info.java |    2 +-
 .../resource/filter/ResourceFilterArgTest.java     |   54 +-
 .../resource/filter/ResourceFilterDateTest.java    |   33 +-
 .../resource/filter/ResourceFilterLogicTest.java   |   44 +-
 .../sling/resource/filter/ResourceFilterTest.java  |   49 +-
 28 files changed, 3504 insertions(+), 3609 deletions(-)

diff --git a/pom.xml b/pom.xml
index 72cdb87..ec43117 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--Licensed under the Apache License, Version 2.0 (the "License"); you may 
     not use this file except in compliance with the License. You may obtain a 
     copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
@@ -21,39 +21,16 @@
     <name>Apache Sling Resource Filter</name>
     <description>provides a set of utilities to create and handle streams</description>
 
-    <properties>
-        <sling.java.version>11</sling.java.version>
-    </properties>
-
     <scm>
-        <url>https://github.com/apache/sling-org-apache-sling-resource-filter.git</url>
         <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</connection>
         <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</developerConnection>
         <tag>HEAD</tag>
+        <url>https://github.com/apache/sling-org-apache-sling-resource-filter.git</url>
     </scm>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>javacc-maven-plugin</artifactId>
-                <version>3.0.0</version>
-                <executions>
-                    <execution>
-                        <id>javacc</id>
-                        <goals>
-                            <goal>javacc</goal>
-                        </goals>
-                        <configuration>
-                            <jdkVersion>1.8</jdkVersion>
-                            <javadocFriendlyComments>true</javadocFriendlyComments>
-                            <outputDirectory>${basedir}/src/main/java</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
+    <properties>
+        <sling.java.version>11</sling.java.version>
+    </properties>
     <dependencies>
         <dependency>
             <groupId>org.apache.commons</groupId>
@@ -67,7 +44,7 @@
             <version>2.16.4</version>
             <scope>provided</scope>
         </dependency>
-        
+
         <!-- OSGi dependencies -->
         <dependency>
             <groupId>org.osgi</groupId>
@@ -97,4 +74,27 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>javacc-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <id>javacc</id>
+                        <goals>
+                            <goal>javacc</goal>
+                        </goals>
+                        <configuration>
+                            <jdkVersion>1.8</jdkVersion>
+                            <javadocFriendlyComments>true</javadocFriendlyComments>
+                            <outputDirectory>${basedir}/src/main/java</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
index ce9545c..a05894c 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
@@ -19,7 +24,6 @@ import java.util.function.Predicate;
 import java.util.stream.Stream;
 
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.resource.filter.ResourceFilterStream;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -37,8 +41,8 @@ public class ResourceFilterStream {
     private Predicate<Resource> branchSelector = resource -> true;
 
     private Predicate<Resource> childSelector = resource -> true;
-    
-    private Map<String,Object> parameters = new HashMap<>();
+
+    private Map<String, Object> parameters = new HashMap<>();
 
     public ResourceFilterStream(Resource resource, ResourcePredicates filter) {
         this.resources = new ResourceStream(resource);
@@ -48,7 +52,7 @@ public class ResourceFilterStream {
     /**
      * Adds a branchSelector to define which child resource are acceptable to travel
      * down as part of the Resource traversal
-     * 
+     *
      * @param branchSelector
      *            resourcePredicate script for traversal control
      * @return ResourceStreamFilter
@@ -62,7 +66,7 @@ public class ResourceFilterStream {
     /**
      * Adds a childSelector to define which child resources should be part of the
      * stream
-     * 
+     *
      * @param childSelector
      *            resourcePredicate script to identify child resources to return
      * @return ResourceStreamFilter
@@ -75,7 +79,7 @@ public class ResourceFilterStream {
 
     /**
      * Add a key - value pair that can then be evaluated as part of the Script
-     * 
+     *
      * @param params
      * @return
      */
@@ -87,7 +91,7 @@ public class ResourceFilterStream {
     /**
      * Add a series of key - value pairs that can then be evaluated as part of the
      * ScriptFilter
-     * 
+     *
      * @param params
      * @return
      */
@@ -99,7 +103,7 @@ public class ResourceFilterStream {
     /**
      * Stream<Resource> which uses the branchSelector as the basis of the traversal
      * and then filters the resources based on the childSelector that was provided
-     * 
+     *
      * @return pre filterd Stream<Resource>
      */
     public Stream<Resource> stream() {
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourcePredicates.java b/src/main/java/org/apache/sling/resource/filter/ResourcePredicates.java
index 9a50750..f5e1a75 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourcePredicates.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourcePredicates.java
@@ -34,7 +34,7 @@ public interface ResourcePredicates {
 
     /**
      * Creates a Predicate<Resource> based on the provided script
-     * 
+     *
      * @param filter
      * @return
      * @throws ResourceFilterException
@@ -43,7 +43,7 @@ public interface ResourcePredicates {
 
     /**
      * Creates a Predicate<Resource> based on the provided script
-     * 
+     *
      * @param filter
      * @param charEncoding
      * @return
@@ -54,7 +54,7 @@ public interface ResourcePredicates {
     /**
      * Add a series of key - value pairs that can then be evaluated as part of the
      * Predicate<Resource> creation
-     * 
+     *
      * @param params
      *            Map of Key - Value pairs
      * @return ResourcePredicateBuilder
@@ -64,7 +64,7 @@ public interface ResourcePredicates {
     /**
      * Adds a key - value pair that can then be evaluated as part of the
      * Predicate<Resource> creation
-     * 
+     *
      * @param key
      * @param value
      * @return ResourcePredicateBuilder
@@ -74,7 +74,7 @@ public interface ResourcePredicates {
     /**
      * Replaces the existing parameter map with the supplied Map<String,Object>
      * object, all prior provided parameters will be replaced
-     * 
+     *
      * @return ResourcePredicateBuilder
      */
     ResourcePredicateBuilder usingParameterMap(Map<String, Object> params);
@@ -82,9 +82,7 @@ public interface ResourcePredicates {
     /**
      * Provides a transitional state where multiple parameters can be applied before
      * creating the Predicate
-     * 
+     *
      */
-    public static interface ResourcePredicateBuilder extends ResourcePredicates {
-
-    }
+    public static interface ResourcePredicateBuilder extends ResourcePredicates {}
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceStream.java b/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
index 99f4d7b..8cda4b0 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
@@ -45,71 +50,76 @@ public class ResourceStream {
      * tree starting with the current resource. The traversal is controlled by the
      * provided predicate which determines if a given child is traversed. If no
      * children matches the predicate, the traversal for that branch ends
-     * 
+     *
      * @param branchSelector
      *            used to determine whether a given child resource is traversed
      * @return {@code Stream<Resource>} of unknown size.
      */
     public Stream<Resource> stream(Predicate<Resource> branchSelector) {
 
-        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(new Iterator<Resource>() {
+        return StreamSupport.stream(
+                Spliterators.spliteratorUnknownSize(
+                        new Iterator<Resource>() {
 
-            private final Deque<Iterator<Resource>> resources = new LinkedList<>();
-            private Resource current = resource;
+                            private final Deque<Iterator<Resource>> resources = new LinkedList<>();
+                            private Resource current = resource;
 
-            {
-                resources.push(resource.getChildren().iterator());
-            }
+                            {
+                                resources.push(resource.getChildren().iterator());
+                            }
 
-            @Override
-            public boolean hasNext() {
-                if (current == null) {
-                    return seek();
-                }
-                return true;
-            }
+                            @Override
+                            public boolean hasNext() {
+                                if (current == null) {
+                                    return seek();
+                                }
+                                return true;
+                            }
 
-            @Override
-            public Resource next() {
-                if (current == null) {
-                    seek();
-                }
-                if (current == null) {
-                    throw new NoSuchElementException();
-                }
-                Resource next = current;
-                current = null;
-                return next;
-            }
+                            @Override
+                            public Resource next() {
+                                if (current == null) {
+                                    seek();
+                                }
+                                if (current == null) {
+                                    throw new NoSuchElementException();
+                                }
+                                Resource next = current;
+                                current = null;
+                                return next;
+                            }
 
-            private boolean seek() {
-                while (!resources.isEmpty()) {
-                    Iterator<Resource> iterator = resources.peek();
-                    if (iterator.hasNext()) {
-                        current = iterator.next();
-                        if (branchSelector.test(current)) {
-                            resources.push(current.getChildren().iterator());
-                        }
-                        return true;
-                    }
-                    resources.pop();
-                }
-                return false;
-            }
-
-        }, Spliterator.ORDERED | Spliterator.IMMUTABLE), false);
+                            private boolean seek() {
+                                while (!resources.isEmpty()) {
+                                    Iterator<Resource> iterator = resources.peek();
+                                    if (iterator.hasNext()) {
+                                        current = iterator.next();
+                                        if (branchSelector.test(current)) {
+                                            resources.push(current.getChildren().iterator());
+                                        }
+                                        return true;
+                                    }
+                                    resources.pop();
+                                }
+                                return false;
+                            }
+                        },
+                        Spliterator.ORDERED | Spliterator.IMMUTABLE),
+                false);
     }
 
     /**
      * Provides a stream of the child resources of the base resource. The predicate
      * is a filter to determine which of the children are returned
-     * 
+     *
      * @param childSelector
      * @return
      */
     public Stream<Resource> listChildren(Predicate<Resource> childSelector) {
-        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(resource.listChildren(),
-                Spliterator.ORDERED | Spliterator.IMMUTABLE), false).filter(childSelector);
+        return StreamSupport.stream(
+                        Spliterators.spliteratorUnknownSize(
+                                resource.listChildren(), Spliterator.ORDERED | Spliterator.IMMUTABLE),
+                        false)
+                .filter(childSelector);
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
index 55a3533..90f2338 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -48,40 +53,42 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
     @Override
     public Function<Resource, Object> visit(Node node) {
         switch (node.kind) {
-        case FilterParserConstants.FUNCTION_NAME:
-            return functionHandler(node);
-        case FilterParserConstants.NULL:
-            return resource -> new Null();
-        case FilterParserConstants.NUMBER:
-            return resource -> numericHandler(node.text);
-        case FilterParserConstants.OFFSETDATETIME:
-            return resource -> OffsetDateTime.parse(node.text).toInstant();
-        case FilterParserConstants.DATETIME:
-            return resource -> LocalDateTime.parse(node.text).atOffset(ZoneOffset.UTC).toInstant();
-        case FilterParserConstants.DATE:
-            return resource -> LocalDate.parse(node.text).atStartOfDay(ZoneOffset.UTC).toInstant();
-        case FilterParserConstants.PROPERTY:
-            return resource -> {
-                Object value = valueMapOf(resource).get(node.text);
-                if (value instanceof Boolean) {
-                    return value.toString();
-                }
-                if (value instanceof Calendar) {
-                    return ((Calendar) value).toInstant();
-                }
-                return value;
-            };
-        case FilterParserConstants.DYNAMIC_ARG:
-            return resource -> {
-                String argument = node.text;
-                Optional<Object> arg = context.getParameter(argument);
-                if (!arg.isPresent()) {
-                    throw new NoSuchElementException(String.format("No value present for '%s'",argument));
-                }
-                return arg.get();
-            };
-        default:
-            return resource -> node.text;
+            case FilterParserConstants.FUNCTION_NAME:
+                return functionHandler(node);
+            case FilterParserConstants.NULL:
+                return resource -> new Null();
+            case FilterParserConstants.NUMBER:
+                return resource -> numericHandler(node.text);
+            case FilterParserConstants.OFFSETDATETIME:
+                return resource -> OffsetDateTime.parse(node.text).toInstant();
+            case FilterParserConstants.DATETIME:
+                return resource ->
+                        LocalDateTime.parse(node.text).atOffset(ZoneOffset.UTC).toInstant();
+            case FilterParserConstants.DATE:
+                return resource ->
+                        LocalDate.parse(node.text).atStartOfDay(ZoneOffset.UTC).toInstant();
+            case FilterParserConstants.PROPERTY:
+                return resource -> {
+                    Object value = valueMapOf(resource).get(node.text);
+                    if (value instanceof Boolean) {
+                        return value.toString();
+                    }
+                    if (value instanceof Calendar) {
+                        return ((Calendar) value).toInstant();
+                    }
+                    return value;
+                };
+            case FilterParserConstants.DYNAMIC_ARG:
+                return resource -> {
+                    String argument = node.text;
+                    Optional<Object> arg = context.getParameter(argument);
+                    if (!arg.isPresent()) {
+                        throw new NoSuchElementException(String.format("No value present for '%s'", argument));
+                    }
+                    return arg.get();
+                };
+            default:
+                return resource -> node.text;
         }
     }
 
@@ -107,36 +114,41 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
                 return null;
             }
         } else {
-            return DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(dateString, OffsetDateTime::from).toInstant();
+            return DateTimeFormatter.ISO_OFFSET_DATE_TIME
+                    .parse(dateString, OffsetDateTime::from)
+                    .toInstant();
         }
     }
-    
-    private Function<Resource, Object> functionHandler(Node node){
+
+    private Function<Resource, Object> functionHandler(Node node) {
         // will only get here in the case of the 'FUNCTION' switch case
         switch (node.text) {
-        case "name":
-            return Resource::getName;
-        case "path":
-            return Resource::getPath;
-        case "date":
-            return resource -> {
-                Object[] arguments = node.visitChildren(this).stream().map(funct -> funct.apply(resource))
-                        .toArray();
-                return dateHandler(arguments);
-            };
-        default:
-            Optional<BiFunction<Object[], Resource, Object>> temp = context.getFunction(node.text);
-            if (temp.isPresent()) {
-                final List<Function<Resource, Object>> children2 = node.visitChildren(this);
+            case "name":
+                return Resource::getName;
+            case "path":
+                return Resource::getPath;
+            case "date":
                 return resource -> {
-                    Object[] arguments = children2.stream().map(funct -> funct.apply(resource)).toArray();
-                    return temp.get().apply(arguments, resource);
+                    Object[] arguments = node.visitChildren(this).stream()
+                            .map(funct -> funct.apply(resource))
+                            .toArray();
+                    return dateHandler(arguments);
                 };
-            }
+            default:
+                Optional<BiFunction<Object[], Resource, Object>> temp = context.getFunction(node.text);
+                if (temp.isPresent()) {
+                    final List<Function<Resource, Object>> children2 = node.visitChildren(this);
+                    return resource -> {
+                        Object[] arguments = children2.stream()
+                                .map(funct -> funct.apply(resource))
+                                .toArray();
+                        return temp.get().apply(arguments, resource);
+                    };
+                }
         }
         return null;
     }
-    
+
     private static Number numericHandler(String numberText) {
         Number numericValue = null;
         try {
@@ -150,5 +162,4 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> {
         }
         return numericValue;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/Context.java b/src/main/java/org/apache/sling/resource/filter/impl/Context.java
index e30d10c..7007489 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/Context.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/Context.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -24,9 +29,9 @@ import org.apache.sling.api.resource.Resource;
 public interface Context {
 
     /**
-     * Adds a Function to the script to allow for customization. 
-     * 
-     * 
+     * Adds a Function to the script to allow for customization.
+     *
+     *
      * @param name
      *            of the function as it appears in the script
      * @param functionImpl
@@ -38,44 +43,43 @@ public interface Context {
 
     /**
      * Remove the function with the given name from the context.
-     * 
+     *
      * @param name
      * @return
      */
     Context removeFunction(String name);
 
-
     /**
-     * Retrieve the currently defined Logic Visitor 
-     * 
+     * Retrieve the currently defined Logic Visitor
+     *
      * @return Visitor
      */
     Visitor<Predicate<Resource>> getLogicVisitor();
 
     /**
-     * Retrieve the currently defined Comparison Visitor 
-     * 
+     * Retrieve the currently defined Comparison Visitor
+     *
      * @return Visitor
      */
     Visitor<Function<Resource, Object>> getComparisonVisitor();
 
     /**
      * Replaces the existing Logic Visitor, if present, with the provided Visitor
-     * 
+     *
      * @param Visitor
      */
     void setLogicVisitor(Visitor<Predicate<Resource>> logicVisitor);
 
     /**
      * Replaces the existing Comparison Visitor, if present, with the provided Visitor
-     * 
+     *
      * @param comparisonVisitor
      */
     void setComparionVisitor(Visitor<Function<Resource, Object>> comparisonVisitor);
 
     /**
      * Used to retrieve the function during script processing
-     * 
+     *
      * @param name of the function in the context
      * @return Optional BiFunction object representing the name
      */
@@ -83,7 +87,7 @@ public interface Context {
 
     /**
      * Retrieves the value object associated with the name
-     * 
+     *
      * @param name of the argument
      * @return Optional object represented by the name
      */
@@ -91,23 +95,23 @@ public interface Context {
 
     /**
      * Allows an object to be represented in the script for evaluation.
-     * 
+     *
      * @param name of the argument
      * @param object value that is represented
      * @return this Context
      */
     Context addParameter(String name, Object object);
-    
+
     /**
      * Adds the provided Map to the underlying parameter map.
-     * 
+     *
      * @param params
      */
     void addParameters(Map<String, Object> params);
 
     /**
      * Replaces the underlying parameter Map with the one provided
-     * 
+     *
      * @param name of the argument
      * @param object value that is represented
      * @return this Context
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/DefaultContext.java b/src/main/java/org/apache/sling/resource/filter/impl/DefaultContext.java
index 95158d9..389ca51 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/DefaultContext.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/DefaultContext.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -63,13 +68,11 @@ public class DefaultContext implements Context {
     @Override
     public void setLogicVisitor(Visitor<Predicate<Resource>> logicVisitor) {
         this.logicVisitor = logicVisitor;
-
     }
 
     @Override
     public void setComparionVisitor(Visitor<Function<Resource, Object>> comparisonVisitor) {
         this.comparisonVisitor = comparisonVisitor;
-
     }
 
     @Override
@@ -92,5 +95,4 @@ public class DefaultContext implements Context {
         parameters = params;
         return this;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/LogicVisitor.java b/src/main/java/org/apache/sling/resource/filter/impl/LogicVisitor.java
index 7431f36..8199832 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/LogicVisitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/LogicVisitor.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -24,10 +29,10 @@ import org.apache.sling.resource.filter.impl.script.FilterParserConstants;
 /**
  * Visitor implementation that handles the high level handling of logic between
  * statements that define the comparisons that would be performed.
- * 
+ *
  * In practical terms this handles the "and" and "or" predicates, if it
  * encounters a COMPARISON node, it then hands off the internal ValueVisitor
- * 
+ *
  */
 public class LogicVisitor implements Visitor<Predicate<Resource>> {
 
@@ -41,12 +46,12 @@ public class LogicVisitor implements Visitor<Predicate<Resource>> {
     @Override
     public Predicate<Resource> visit(Node node) {
         switch (node.kind) {
-        case FilterParserConstants.AND:
-            return createAndPredicate(node);
-        case FilterParserConstants.OR:
-            return createOrPredicate(node);
-        default:
-            return createComparisonPredicate(node);
+            case FilterParserConstants.AND:
+                return createAndPredicate(node);
+            case FilterParserConstants.OR:
+                return createOrPredicate(node);
+            default:
+                return createComparisonPredicate(node);
         }
     }
 
@@ -61,7 +66,7 @@ public class LogicVisitor implements Visitor<Predicate<Resource>> {
 
     /**
      * Returns a predicate which consists of a series of Or statements
-     * 
+     *
      * @param node
      * @param param
      * @return
@@ -80,5 +85,4 @@ public class LogicVisitor implements Visitor<Predicate<Resource>> {
         Function<Resource, Object> rightValue = comparisonNode.rightNode.accept(context.getComparisonVisitor());
         return ComparisonPredicateFactory.toPredicate(comparisonNode.kind, leftValue, rightValue);
     }
-
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterAdapter.java b/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterAdapter.java
index 6f568ce..95c62bf 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterAdapter.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterAdapter.java
@@ -25,10 +25,13 @@ import org.apache.sling.resource.filter.ResourcePredicates;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
-
-@Component(property= {"adaptables=org.apache.sling.api.resource.Resource","adapters=org.apache.sling.resource.filter.ResourceFilterStream"})
+@Component(
+        property = {
+            "adaptables=org.apache.sling.api.resource.Resource",
+            "adapters=org.apache.sling.resource.filter.ResourceFilterStream"
+        })
 public class ResourceFilterAdapter implements AdapterFactory {
-    
+
     @Reference
     private volatile ResourcePredicates filter;
 
@@ -36,9 +39,8 @@ public class ResourceFilterAdapter implements AdapterFactory {
     @Override
     public <T> T getAdapter(Object adaptable, Class<T> type) {
         if (adaptable instanceof Resource) {
-            return (T) new ResourceFilterStream((Resource)adaptable, filter);
+            return (T) new ResourceFilterStream((Resource) adaptable, filter);
         }
         return null;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterFunction.java b/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterFunction.java
index aa47fc8..7082f57 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterFunction.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ResourceFilterFunction.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -20,13 +25,13 @@ import org.apache.sling.api.resource.Resource;
 /**
  * A ResourceFilterFunction implementation is used to translate a command in a
  * script to a value object that will be used as part of a comparison
- * 
+ *
  */
 public interface ResourceFilterFunction extends BiFunction<Object[], Resource, Object> {
 
     /**
      * This method returns a {@code Object} to be used as part of a comparison.
-     * 
+     *
      * @param arguments
      *            A list of {@code Function}'s which provides the arguments defined
      *            in the script, to obtain the arguments, each argument must be
@@ -35,6 +40,4 @@ public interface ResourceFilterFunction extends BiFunction<Object[], Resource, O
      *         used as part of a comparison or Function
      */
     Object apply(Object[] arguments, Resource resource);
-
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/ResourcePredicateImpl.java b/src/main/java/org/apache/sling/resource/filter/impl/ResourcePredicateImpl.java
index 304f38d..7ef0389 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ResourcePredicateImpl.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ResourcePredicateImpl.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -46,7 +51,7 @@ public class ResourcePredicateImpl implements ResourcePredicates {
     public ResourcePredicateBuilder withParameter(String key, Object value) {
         return new ResourcePredicateBuilderImpl().withParameter(key, value);
     }
-    
+
     @Override
     public ResourcePredicateBuilder usingParameterMap(Map<String, Object> params) {
         return new ResourcePredicateBuilderImpl().usingParameterMap(params);
@@ -101,7 +106,5 @@ public class ResourcePredicateImpl implements ResourcePredicates {
             context.replaceParameterMap(params);
             return this;
         }
-
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
index b9c234d..106fc97 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl;
 
@@ -26,5 +31,4 @@ import org.apache.sling.resource.filter.impl.node.Node;
 public interface Visitor<R> {
 
     R visit(Node abstractNode);
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/node/Node.java b/src/main/java/org/apache/sling/resource/filter/impl/node/Node.java
index 6a26f45..bc606c5 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/node/Node.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/node/Node.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl.node;
 
@@ -20,7 +25,7 @@ import java.util.stream.Collectors;
 import org.apache.sling.resource.filter.impl.Visitor;
 
 /**
- * 
+ *
  */
 public class Node {
 
@@ -32,7 +37,7 @@ public class Node {
 
     /**
      * creates a node which represents a literal
-     * 
+     *
      * @param value
      */
     public Node(int kind, String text) {
@@ -42,7 +47,7 @@ public class Node {
 
     /**
      * creates a logical node
-     * 
+     *
      * @param value
      */
     public Node(int kind, List<Node> children) {
@@ -52,7 +57,7 @@ public class Node {
 
     /**
      * Node with children
-     * 
+     *
      * @param value
      */
     public Node(int kind, String text, List<Node> children) {
@@ -63,7 +68,7 @@ public class Node {
 
     /**
      * Node used for comparison
-     * 
+     *
      * @param kind
      *            nominally of type comparison
      * @param operator
@@ -106,12 +111,10 @@ public class Node {
 
     @Override
     public String toString() {
-        return text
-                + children.stream().map(Node::toString).collect(Collectors.joining(text, "(", ")"));
+        return text + children.stream().map(Node::toString).collect(Collectors.joining(text, "(", ")"));
     }
 
     public <R> List<R> visitChildren(Visitor<R> visitor) {
         return children.stream().map(child -> child.accept(visitor)).collect(Collectors.toList());
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicateFactory.java b/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicateFactory.java
index 5c61320..bf56a8d 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicateFactory.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicateFactory.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl.predicates;
 
@@ -20,43 +25,41 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.resource.filter.impl.script.FilterParserConstants;
 
 public class ComparisonPredicateFactory {
-    
-    private ComparisonPredicateFactory() {
-    }
 
-    public static Predicate<Resource> toPredicate(int kind, Function<Resource, Object> leftValue,
-            Function<Resource, Object> rightValue) {
+    private ComparisonPredicateFactory() {}
+
+    public static Predicate<Resource> toPredicate(
+            int kind, Function<Resource, Object> leftValue, Function<Resource, Object> rightValue) {
         switch (kind) {
-        case FilterParserConstants.EQUAL:
-            return ComparisonPredicates.is(leftValue, rightValue);
-        case FilterParserConstants.NOT_EQUAL:
-            return ComparisonPredicates.isNot(leftValue, rightValue);
-        case FilterParserConstants.GREATER_THAN:
-            return ComparisonPredicates.gt(leftValue, rightValue);
-        case FilterParserConstants.GREATER_THAN_OR_EQUAL:
-            return ComparisonPredicates.gte(leftValue, rightValue);
-        case FilterParserConstants.LESS_THAN:
-            return ComparisonPredicates.lt(leftValue, rightValue);
-        case FilterParserConstants.LESS_THAN_OR_EQUAL:
-            return ComparisonPredicates.lte(leftValue, rightValue);
-        case FilterParserConstants.LIKE:
-            return ComparisonPredicates.like(leftValue, rightValue);
-        case FilterParserConstants.LIKE_NOT:
-            return ComparisonPredicates.like(leftValue, rightValue).negate();
-        case FilterParserConstants.CONTAINS:
-            return ComparisonPredicates.contains(leftValue, rightValue);
-        case FilterParserConstants.CONTAINS_NOT:
-            return ComparisonPredicates.contains(leftValue, rightValue).negate();
-        case FilterParserConstants.CONTAINS_ANY:
-            return ComparisonPredicates.containsAny(leftValue, rightValue);
-        case FilterParserConstants.CONTAINS_NOT_ANY:
-            return ComparisonPredicates.containsAny(leftValue, rightValue).negate();
-        case FilterParserConstants.IN:
-            return ComparisonPredicates.in(leftValue, rightValue);
-        case FilterParserConstants.NOT_IN:
-            return ComparisonPredicates.in(leftValue, rightValue).negate();
+            case FilterParserConstants.EQUAL:
+                return ComparisonPredicates.is(leftValue, rightValue);
+            case FilterParserConstants.NOT_EQUAL:
+                return ComparisonPredicates.isNot(leftValue, rightValue);
+            case FilterParserConstants.GREATER_THAN:
+                return ComparisonPredicates.gt(leftValue, rightValue);
+            case FilterParserConstants.GREATER_THAN_OR_EQUAL:
+                return ComparisonPredicates.gte(leftValue, rightValue);
+            case FilterParserConstants.LESS_THAN:
+                return ComparisonPredicates.lt(leftValue, rightValue);
+            case FilterParserConstants.LESS_THAN_OR_EQUAL:
+                return ComparisonPredicates.lte(leftValue, rightValue);
+            case FilterParserConstants.LIKE:
+                return ComparisonPredicates.like(leftValue, rightValue);
+            case FilterParserConstants.LIKE_NOT:
+                return ComparisonPredicates.like(leftValue, rightValue).negate();
+            case FilterParserConstants.CONTAINS:
+                return ComparisonPredicates.contains(leftValue, rightValue);
+            case FilterParserConstants.CONTAINS_NOT:
+                return ComparisonPredicates.contains(leftValue, rightValue).negate();
+            case FilterParserConstants.CONTAINS_ANY:
+                return ComparisonPredicates.containsAny(leftValue, rightValue);
+            case FilterParserConstants.CONTAINS_NOT_ANY:
+                return ComparisonPredicates.containsAny(leftValue, rightValue).negate();
+            case FilterParserConstants.IN:
+                return ComparisonPredicates.in(leftValue, rightValue);
+            case FilterParserConstants.NOT_IN:
+                return ComparisonPredicates.in(leftValue, rightValue).negate();
         }
         return null;
     }
-
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicates.java b/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicates.java
index 0ab09eb..006eb57 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicates.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/predicates/ComparisonPredicates.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl.predicates;
 
@@ -37,7 +42,7 @@ public class ComparisonPredicates {
 
     /**
      * Values are converted to Strings.
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -54,12 +59,11 @@ public class ComparisonPredicates {
             }
             return lhValue.equals(rhValue);
         };
-
     }
 
     /**
      * Values are converted to Strings.
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -76,13 +80,12 @@ public class ComparisonPredicates {
             }
             return !lhValue.equals(rhValue);
         };
-
     }
 
     /**
      * Values are converted to Strings. Right hand value is treated as a Regular
      * expression.
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -99,13 +102,12 @@ public class ComparisonPredicates {
             }
             return Pattern.matches(rhValue.toString(), lhValue);
         };
-
     }
 
     /**
      * Values are converted to a Number, and then additionally converted to a common
      * type as the basis of comparison
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -128,13 +130,12 @@ public class ComparisonPredicates {
             }
             return false;
         };
-
     }
 
     /**
      * Values are converted to a Number, and then additionally converted to a common
      * type as the basis of comparison
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -162,7 +163,7 @@ public class ComparisonPredicates {
     /**
      * Values are converted to a Number, and then additionally converted to a common
      * type as the basis of comparison
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -185,13 +186,12 @@ public class ComparisonPredicates {
             }
             return false;
         };
-
     }
 
     /**
      * Values are converted to a Number, and then additionally converted to a common
      * type as the basis of comparison
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -218,7 +218,7 @@ public class ComparisonPredicates {
 
     /**
      * Right and Left values are converted to String arrays
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -237,7 +237,8 @@ public class ComparisonPredicates {
                 return false;
             }
             for (String rhValue : rhValues) {
-                innerLoop: {
+                innerLoop:
+                {
                     for (String lhValue : lhValues) {
                         if (lhValue.equals(rhValue)) {
                             break innerLoop;
@@ -254,7 +255,7 @@ public class ComparisonPredicates {
 
     /**
      * Right and Left values are converted to String arrays
-     * 
+     *
      * @param lhs
      *            Function which provides comparison value
      * @param rhs
@@ -281,7 +282,7 @@ public class ComparisonPredicates {
 
     /**
      * Right and Left values are converted to String arrays
-     * 
+     *
      * @param lhs
      *            Function which provides value for comparison
      * @param rhs
@@ -298,7 +299,8 @@ public class ComparisonPredicates {
                 return false;
             }
             for (String lhValue : lhValues) {
-                innerLoop: {
+                innerLoop:
+                {
                     for (String rhValue : rhValues) {
                         if (rhValue.equals(lhValue)) {
                             break innerLoop;
@@ -352,7 +354,6 @@ public class ComparisonPredicates {
         } else {
             return initialValue.toString();
         }
-
     }
 
     private static Number getNumber(final Object initialValue) {
@@ -375,7 +376,8 @@ public class ComparisonPredicates {
                     return new BigDecimal(value);
                 } catch (NumberFormatException nfe2) {
                     try {
-                        return LocalDateTime.parse(value, DateTimeFormatter.ISO_DATE_TIME).toInstant(ZoneOffset.UTC)
+                        return LocalDateTime.parse(value, DateTimeFormatter.ISO_DATE_TIME)
+                                .toInstant(ZoneOffset.UTC)
                                 .toEpochMilli();
                     } catch (DateTimeParseException dtpe) {
                         // swallow
@@ -385,5 +387,4 @@ public class ComparisonPredicates {
             }
         }
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/predicates/Null.java b/src/main/java/org/apache/sling/resource/filter/impl/predicates/Null.java
index 4cd60d6..33e1087 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/predicates/Null.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/predicates/Null.java
@@ -1,15 +1,20 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter.impl.predicates;
 
@@ -60,5 +65,4 @@ public class Null extends Number implements CharSequence {
     public double doubleValue() {
         return Double.NaN;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParser.java b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParser.java
index 872531b..26601d1 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParser.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParser.java
@@ -1,493 +1,550 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParser.java */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.sling.resource.filter.impl.node.*;
 
 public final class FilterParser implements FilterParserConstants {
 
-  final public Node parse() throws ParseException {
-  final Node node;
-    node = or();
-    jj_consume_token(0);
-    {if (true) return node;}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node or() throws ParseException {
-  final List < Node > nodes = new ArrayList < Node > (3);
-  Node node;
-    node = and();
-    nodes.add(node);
-    label_1:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case OR:
-        ;
-        break;
-      default:
-        jj_la1[0] = jj_gen;
-        break label_1;
-      }
-      jj_consume_token(OR);
-      node = and();
-      nodes.add(node);
+    public final 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");
     }
-    {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);
+
+    public final 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");
     }
-    {if (true) return nodes.size() != 1 ? new Node(FilterParserConstants.AND, nodes) : nodes.get(0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node constraint() throws ParseException {
-  final Node node;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case LPAREN:
-      node = group();
-      break;
-    case OFFSETDATETIME:
-    case DATETIME:
-    case DATE:
-    case NUMBER:
-    case STRING:
-    case NULL:
-    case BOOLEAN:
-    case DYNAMIC_ARG:
-    case FUNCTION_NAME:
-    case PROPERTY:
-      node = comparison();
-      break;
-    default:
-      jj_la1[2] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
+
+    public final 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");
     }
-    {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();
+
+    public final Node constraint() throws ParseException {
+        final Node node;
+        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+            case LPAREN:
+                node = group();
+                break;
+            case OFFSETDATETIME:
+            case DATETIME:
+            case DATE:
+            case NUMBER:
+            case STRING:
+            case NULL:
+            case BOOLEAN:
+            case DYNAMIC_ARG:
+            case FUNCTION_NAME:
+            case PROPERTY:
+                node = comparison();
+                break;
+            default:
+                jj_la1[2] = jj_gen;
+                jj_consume_token(-1);
+                throw new ParseException();
+        }
+        {
+            if (true) return node;
+        }
+        throw new Error("Missing return statement in function");
     }
-    {if (true) return token;}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public List < Node > Arguments() throws ParseException {
-  Object value = new ArrayList();
-    jj_consume_token(LPAREN);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case OFFSETDATETIME:
-    case DATETIME:
-    case DATE:
-    case NUMBER:
-    case STRING:
-    case NULL:
-    case BOOLEAN:
-    case DYNAMIC_ARG:
-    case FUNCTION_NAME:
-    case PROPERTY:
-      value = commaSepArguments();
-      break;
-    default:
-      jj_la1[4] = jj_gen;
-      ;
+
+    public final 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");
     }
-    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);
+
+    public final 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");
     }
-    {if (true) return list;}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node argument() throws ParseException {
-  Node selector = null;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case OFFSETDATETIME:
-    case DATETIME:
-    case DATE:
-    case NUMBER:
-    case STRING:
-    case NULL:
-    case BOOLEAN:
-      selector = literal();
-      break;
-    case PROPERTY:
-      selector = property();
-      break;
-    case DYNAMIC_ARG:
-      selector = dynamicArg();
-      break;
-    case FUNCTION_NAME:
-      selector = function();
-      break;
-    default:
-      jj_la1[6] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
+
+    public final 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");
     }
-    {if (true) return selector;}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node function() throws ParseException {
-  String functionName = null;
-  List < Node > children = null;
-    jj_consume_token(FUNCTION_NAME);
-    functionName = token.image;
-    jj_consume_token(LPAREN);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case OFFSETDATETIME:
-    case DATETIME:
-    case DATE:
-    case NUMBER:
-    case STRING:
-    case NULL:
-    case BOOLEAN:
-    case DYNAMIC_ARG:
-    case FUNCTION_NAME:
-    case PROPERTY:
-      children = commaSepArguments();
-      break;
-    default:
-      jj_la1[7] = jj_gen;
-      ;
+
+    public final List<Node> Arguments() throws ParseException {
+        Object value = new ArrayList();
+        jj_consume_token(LPAREN);
+        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+            case OFFSETDATETIME:
+            case DATETIME:
+            case DATE:
+            case NUMBER:
+            case STRING:
+            case NULL:
+            case BOOLEAN:
+            case DYNAMIC_ARG:
+            case FUNCTION_NAME:
+            case PROPERTY:
+                value = commaSepArguments();
+                break;
+            default:
+                jj_la1[4] = jj_gen;
+                ;
+        }
+        jj_consume_token(RPAREN);
+        {
+            if (true) return (List) value;
+        }
+        throw new Error("Missing return statement in function");
     }
-    jj_consume_token(RPAREN);
-    {if (true) return new Node(FilterParserConstants.FUNCTION_NAME, functionName, children);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node dynamicArg() throws ParseException {
-  String functionName = null;
-    jj_consume_token(DYNAMIC_ARG);
-    jj_consume_token(FUNCTION_NAME);
-    functionName = token.image;
-    {if (true) return new Node(FilterParserConstants.DYNAMIC_ARG, functionName);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node literal() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case STRING:
-      jj_consume_token(STRING);
-      break;
-    case NUMBER:
-      jj_consume_token(NUMBER);
-      break;
-    case NULL:
-      jj_consume_token(NULL);
-      break;
-    case BOOLEAN:
-      jj_consume_token(BOOLEAN);
-      break;
-    case DATE:
-      jj_consume_token(DATE);
-      break;
-    case DATETIME:
-      jj_consume_token(DATETIME);
-      break;
-    case OFFSETDATETIME:
-      jj_consume_token(OFFSETDATETIME);
-      break;
-    default:
-      jj_la1[8] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
+
+    public final 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");
     }
-    {if (true) return new Node(token.kind, token.image);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Node property() throws ParseException {
-    jj_consume_token(PROPERTY);
-    {if (true) return new Node(token.kind, token.image);}
-    throw new Error("Missing return statement in function");
-  }
-
-  /** Generated Token Manager. */
-  public FilterParserTokenManager token_source;
-  SimpleCharStream jj_input_stream;
-  /** Current token. */
-  public Token token;
-  /** Next token. */
-  public Token jj_nt;
-  private int jj_ntk;
-  private int jj_gen;
-  final private int[] jj_la1 = new int[9];
-  static private int[] jj_la1_0;
-  static private int[] jj_la1_1;
-  static {
-      jj_la1_init_0();
-      jj_la1_init_1();
-   }
-   private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x400000,0x200000,0x9843c00,0xf0000000,0x8843c00,0x4000000,0x8843c00,0x8843c00,0x8843c00,};
-   }
-   private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x1c00,0x3ff,0x1c00,0x0,0x1c00,0x1c00,0x0,};
-   }
-
-  /** Constructor with InputStream. */
-  public FilterParser(java.io.InputStream stream) {
-     this(stream, null);
-  }
-  /** Constructor with InputStream and supplied encoding */
-  public FilterParser(java.io.InputStream stream, String encoding) {
-    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
-    token_source = new FilterParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream stream) {
-     ReInit(stream, null);
-  }
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream stream, String encoding) {
-    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  /** Constructor. */
-  public FilterParser(java.io.Reader stream) {
-    jj_input_stream = new SimpleCharStream(stream, 1, 1);
-    token_source = new FilterParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.Reader stream) {
-    jj_input_stream.ReInit(stream, 1, 1);
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  /** Constructor with generated Token Manager. */
-  public FilterParser(FilterParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  /** Reinitialise. */
-  public void ReInit(FilterParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 9; i++) jj_la1[i] = -1;
-  }
-
-  private Token jj_consume_token(int kind) throws ParseException {
-    Token oldToken;
-    if ((oldToken = token).next != null) token = token.next;
-    else token = token.next = token_source.getNextToken();
-    jj_ntk = -1;
-    if (token.kind == kind) {
-      jj_gen++;
-      return token;
+
+    public final Node argument() throws ParseException {
+        Node selector = null;
+        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+            case OFFSETDATETIME:
+            case DATETIME:
+            case DATE:
+            case NUMBER:
+            case STRING:
+            case NULL:
+            case BOOLEAN:
+                selector = literal();
+                break;
+            case PROPERTY:
+                selector = property();
+                break;
+            case DYNAMIC_ARG:
+                selector = dynamicArg();
+                break;
+            case FUNCTION_NAME:
+                selector = function();
+                break;
+            default:
+                jj_la1[6] = jj_gen;
+                jj_consume_token(-1);
+                throw new ParseException();
+        }
+        {
+            if (true) return selector;
+        }
+        throw new Error("Missing return statement in function");
     }
-    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();
+
+    public final Node function() throws ParseException {
+        String functionName = null;
+        List<Node> children = null;
+        jj_consume_token(FUNCTION_NAME);
+        functionName = token.image;
+        jj_consume_token(LPAREN);
+        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+            case OFFSETDATETIME:
+            case DATETIME:
+            case DATE:
+            case NUMBER:
+            case STRING:
+            case NULL:
+            case BOOLEAN:
+            case DYNAMIC_ARG:
+            case FUNCTION_NAME:
+            case PROPERTY:
+                children = commaSepArguments();
+                break;
+            default:
+                jj_la1[7] = jj_gen;
+                ;
+        }
+        jj_consume_token(RPAREN);
+        {
+            if (true) return new Node(FilterParserConstants.FUNCTION_NAME, functionName, children);
+        }
+        throw new Error("Missing return statement in function");
     }
-    return t;
-  }
-
-  private int jj_ntk() {
-    if ((jj_nt=token.next) == null)
-      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
-    else
-      return (jj_ntk = jj_nt.kind);
-  }
-
-  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
-  private int[] jj_expentry;
-  private int jj_kind = -1;
-
-  /** Generate ParseException. */
-  public ParseException generateParseException() {
-    jj_expentries.clear();
-    boolean[] la1tokens = new boolean[46];
-    if (jj_kind >= 0) {
-      la1tokens[jj_kind] = true;
-      jj_kind = -1;
+
+    public final Node dynamicArg() throws ParseException {
+        String functionName = null;
+        jj_consume_token(DYNAMIC_ARG);
+        jj_consume_token(FUNCTION_NAME);
+        functionName = token.image;
+        {
+            if (true) return new Node(FilterParserConstants.DYNAMIC_ARG, functionName);
+        }
+        throw new Error("Missing return statement in function");
     }
-    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;
-          }
+
+    public final Node literal() throws ParseException {
+        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+            case STRING:
+                jj_consume_token(STRING);
+                break;
+            case NUMBER:
+                jj_consume_token(NUMBER);
+                break;
+            case NULL:
+                jj_consume_token(NULL);
+                break;
+            case BOOLEAN:
+                jj_consume_token(BOOLEAN);
+                break;
+            case DATE:
+                jj_consume_token(DATE);
+                break;
+            case DATETIME:
+                jj_consume_token(DATETIME);
+                break;
+            case OFFSETDATETIME:
+                jj_consume_token(OFFSETDATETIME);
+                break;
+            default:
+                jj_la1[8] = jj_gen;
+                jj_consume_token(-1);
+                throw new ParseException();
+        }
+        {
+            if (true) return new Node(token.kind, token.image);
         }
-      }
+        throw new Error("Missing return statement in function");
     }
-    for (int i = 0; i < 46; i++) {
-      if (la1tokens[i]) {
-        jj_expentry = new int[1];
-        jj_expentry[0] = i;
-        jj_expentries.add(jj_expentry);
-      }
+
+    public final 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");
     }
-    int[][] exptokseq = new int[jj_expentries.size()][];
-    for (int i = 0; i < jj_expentries.size(); i++) {
-      exptokseq[i] = jj_expentries.get(i);
+
+    /** 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;
+    private final int[] jj_la1 = new int[9];
+    private static int[] jj_la1_0;
+    private static int[] jj_la1_1;
+
+    static {
+        jj_la1_init_0();
+        jj_la1_init_1();
+    }
+
+    private static void jj_la1_init_0() {
+        jj_la1_0 = new int[] {
+            0x400000, 0x200000, 0x9843c00, 0xf0000000, 0x8843c00, 0x4000000, 0x8843c00, 0x8843c00, 0x8843c00,
+        };
+    }
+
+    private static void jj_la1_init_1() {
+        jj_la1_1 = new int[] {
+            0x0, 0x0, 0x1c00, 0x3ff, 0x1c00, 0x0, 0x1c00, 0x1c00, 0x0,
+        };
+    }
+
+    /** Constructor with InputStream. */
+    public FilterParser(java.io.InputStream stream) {
+        this(stream, null);
+    }
+    /** Constructor with InputStream and supplied encoding */
+    public FilterParser(java.io.InputStream stream, String encoding) {
+        try {
+            jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1);
+        } catch (java.io.UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+        token_source = new FilterParserTokenManager(jj_input_stream);
+        token = new Token();
+        jj_ntk = -1;
+        jj_gen = 0;
+        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
     }
-    return new ParseException(token, exptokseq, tokenImage);
-  }
 
-  /** Enable tracing. */
-  final public void enable_tracing() {
-  }
+    /** 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. */
+    public final 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. */
+    public final Token getToken(int index) {
+        Token t = token;
+        for (int i = 0; i < index; i++) {
+            if (t.next != null) t = t.next;
+            else t = t.next = token_source.getNextToken();
+        }
+        return t;
+    }
+
+    private int jj_ntk() {
+        if ((jj_nt = token.next) == null) return (jj_ntk = (token.next = token_source.getNextToken()).kind);
+        else return (jj_ntk = jj_nt.kind);
+    }
+
+    private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
+    private int[] jj_expentry;
+    private int jj_kind = -1;
+
+    /** Generate ParseException. */
+    public ParseException generateParseException() {
+        jj_expentries.clear();
+        boolean[] la1tokens = new boolean[46];
+        if (jj_kind >= 0) {
+            la1tokens[jj_kind] = true;
+            jj_kind = -1;
+        }
+        for (int i = 0; i < 9; i++) {
+            if (jj_la1[i] == jj_gen) {
+                for (int j = 0; j < 32; j++) {
+                    if ((jj_la1_0[i] & (1 << j)) != 0) {
+                        la1tokens[j] = true;
+                    }
+                    if ((jj_la1_1[i] & (1 << j)) != 0) {
+                        la1tokens[32 + j] = true;
+                    }
+                }
+            }
+        }
+        for (int i = 0; i < 46; i++) {
+            if (la1tokens[i]) {
+                jj_expentry = new int[1];
+                jj_expentry[0] = i;
+                jj_expentries.add(jj_expentry);
+            }
+        }
+        int[][] exptokseq = new int[jj_expentries.size()][];
+        for (int i = 0; i < jj_expentries.size(); i++) {
+            exptokseq[i] = jj_expentries.get(i);
+        }
+        return new ParseException(token, exptokseq, tokenImage);
+    }
 
-  /** Disable tracing. */
-  final public void disable_tracing() {
-  }
+    /** Enable tracing. */
+    public final void enable_tracing() {}
 
+    /** Disable tracing. */
+    public final void disable_tracing() {}
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserConstants.java b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserConstants.java
index d8e2b7d..8aea3ec 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserConstants.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserConstants.java
@@ -1,153 +1,168 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserConstants.java */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
-
 /**
  * Token literal values and constants.
  * Generated by org.javacc.parser.OtherFilesGen#start()
  */
 public interface FilterParserConstants {
 
-  /** End of File. */
-  int EOF = 0;
-  /** RegularExpression Id. */
-  int PLUS = 3;
-  /** RegularExpression Id. */
-  int MINUS = 4;
-  /** RegularExpression Id. */
-  int DIGIT = 5;
-  /** RegularExpression Id. */
-  int EXP = 6;
-  /** RegularExpression Id. */
-  int OFFSET = 7;
-  /** RegularExpression Id. */
-  int YYYYMMDD = 8;
-  /** RegularExpression Id. */
-  int TIME = 9;
-  /** RegularExpression Id. */
-  int OFFSETDATETIME = 10;
-  /** RegularExpression Id. */
-  int DATETIME = 11;
-  /** RegularExpression Id. */
-  int DATE = 12;
-  /** RegularExpression Id. */
-  int NUMBER = 13;
-  /** RegularExpression Id. */
-  int INTEGER = 14;
-  /** RegularExpression Id. */
-  int FRACTIONAL_DIGITS = 15;
-  /** RegularExpression Id. */
-  int EXPONENT = 16;
-  /** RegularExpression Id. */
-  int DIGITS = 17;
-  /** RegularExpression Id. */
-  int STRING = 18;
-  /** RegularExpression Id. */
-  int SQUOTE = 19;
-  /** RegularExpression Id. */
-  int DQUOTE = 20;
-  /** RegularExpression Id. */
-  int AND = 21;
-  /** RegularExpression Id. */
-  int OR = 22;
-  /** RegularExpression Id. */
-  int NULL = 23;
-  /** RegularExpression Id. */
-  int LPAREN = 24;
-  /** RegularExpression Id. */
-  int RPAREN = 25;
-  /** RegularExpression Id. */
-  int COMMA = 26;
-  /** RegularExpression Id. */
-  int BOOLEAN = 27;
-  /** RegularExpression Id. */
-  int EQUAL = 28;
-  /** RegularExpression Id. */
-  int NOT_EQUAL = 29;
-  /** RegularExpression Id. */
-  int GREATER_THAN = 30;
-  /** RegularExpression Id. */
-  int GREATER_THAN_OR_EQUAL = 31;
-  /** RegularExpression Id. */
-  int LESS_THAN = 32;
-  /** RegularExpression Id. */
-  int LESS_THAN_OR_EQUAL = 33;
-  /** RegularExpression Id. */
-  int LIKE = 34;
-  /** RegularExpression Id. */
-  int LIKE_NOT = 35;
-  /** RegularExpression Id. */
-  int CONTAINS = 36;
-  /** RegularExpression Id. */
-  int CONTAINS_NOT = 37;
-  /** RegularExpression Id. */
-  int CONTAINS_ANY = 38;
-  /** RegularExpression Id. */
-  int CONTAINS_NOT_ANY = 39;
-  /** RegularExpression Id. */
-  int IN = 40;
-  /** RegularExpression Id. */
-  int NOT_IN = 41;
-  /** RegularExpression Id. */
-  int DYNAMIC_ARG = 42;
-  /** RegularExpression Id. */
-  int FUNCTION_NAME = 43;
-  /** RegularExpression Id. */
-  int PROPERTY = 44;
-  /** RegularExpression Id. */
-  int UNKNOWN = 45;
-
-  /** Lexical state. */
-  int DEFAULT = 0;
+    /** End of File. */
+    int EOF = 0;
+    /** RegularExpression Id. */
+    int PLUS = 3;
+    /** RegularExpression Id. */
+    int MINUS = 4;
+    /** RegularExpression Id. */
+    int DIGIT = 5;
+    /** RegularExpression Id. */
+    int EXP = 6;
+    /** RegularExpression Id. */
+    int OFFSET = 7;
+    /** RegularExpression Id. */
+    int YYYYMMDD = 8;
+    /** RegularExpression Id. */
+    int TIME = 9;
+    /** RegularExpression Id. */
+    int OFFSETDATETIME = 10;
+    /** RegularExpression Id. */
+    int DATETIME = 11;
+    /** RegularExpression Id. */
+    int DATE = 12;
+    /** RegularExpression Id. */
+    int NUMBER = 13;
+    /** RegularExpression Id. */
+    int INTEGER = 14;
+    /** RegularExpression Id. */
+    int FRACTIONAL_DIGITS = 15;
+    /** RegularExpression Id. */
+    int EXPONENT = 16;
+    /** RegularExpression Id. */
+    int DIGITS = 17;
+    /** RegularExpression Id. */
+    int STRING = 18;
+    /** RegularExpression Id. */
+    int SQUOTE = 19;
+    /** RegularExpression Id. */
+    int DQUOTE = 20;
+    /** RegularExpression Id. */
+    int AND = 21;
+    /** RegularExpression Id. */
+    int OR = 22;
+    /** RegularExpression Id. */
+    int NULL = 23;
+    /** RegularExpression Id. */
+    int LPAREN = 24;
+    /** RegularExpression Id. */
+    int RPAREN = 25;
+    /** RegularExpression Id. */
+    int COMMA = 26;
+    /** RegularExpression Id. */
+    int BOOLEAN = 27;
+    /** RegularExpression Id. */
+    int EQUAL = 28;
+    /** RegularExpression Id. */
+    int NOT_EQUAL = 29;
+    /** RegularExpression Id. */
+    int GREATER_THAN = 30;
+    /** RegularExpression Id. */
+    int GREATER_THAN_OR_EQUAL = 31;
+    /** RegularExpression Id. */
+    int LESS_THAN = 32;
+    /** RegularExpression Id. */
+    int LESS_THAN_OR_EQUAL = 33;
+    /** RegularExpression Id. */
+    int LIKE = 34;
+    /** RegularExpression Id. */
+    int LIKE_NOT = 35;
+    /** RegularExpression Id. */
+    int CONTAINS = 36;
+    /** RegularExpression Id. */
+    int CONTAINS_NOT = 37;
+    /** RegularExpression Id. */
+    int CONTAINS_ANY = 38;
+    /** RegularExpression Id. */
+    int CONTAINS_NOT_ANY = 39;
+    /** RegularExpression Id. */
+    int IN = 40;
+    /** RegularExpression Id. */
+    int NOT_IN = 41;
+    /** RegularExpression Id. */
+    int DYNAMIC_ARG = 42;
+    /** RegularExpression Id. */
+    int FUNCTION_NAME = 43;
+    /** RegularExpression Id. */
+    int PROPERTY = 44;
+    /** RegularExpression Id. */
+    int UNKNOWN = 45;
 
-  /** Literal token values. */
-  String[] tokenImage = {
-    "<EOF>",
-    "\" \"",
-    "\"\\t\"",
-    "\"+\"",
-    "\"-\"",
-    "<DIGIT>",
-    "<EXP>",
-    "<OFFSET>",
-    "<YYYYMMDD>",
-    "<TIME>",
-    "<OFFSETDATETIME>",
-    "<DATETIME>",
-    "<DATE>",
-    "<NUMBER>",
-    "<INTEGER>",
-    "<FRACTIONAL_DIGITS>",
-    "<EXPONENT>",
-    "<DIGITS>",
-    "<STRING>",
-    "<SQUOTE>",
-    "<DQUOTE>",
-    "<AND>",
-    "<OR>",
-    "\"null\"",
-    "\"(\"",
-    "\")\"",
-    "\",\"",
-    "<BOOLEAN>",
-    "<EQUAL>",
-    "<NOT_EQUAL>",
-    "<GREATER_THAN>",
-    "\">=\"",
-    "<LESS_THAN>",
-    "\"<=\"",
-    "<LIKE>",
-    "\"not like\"",
-    "\"contains\"",
-    "\"contains not\"",
-    "\"contains any\"",
-    "\"contains not any\"",
-    "<IN>",
-    "\"not in\"",
-    "\"$\"",
-    "<FUNCTION_NAME>",
-    "<PROPERTY>",
-    "<UNKNOWN>",
-  };
+    /** Lexical state. */
+    int DEFAULT = 0;
 
+    /** Literal token values. */
+    String[] tokenImage = {
+        "<EOF>",
+        "\" \"",
+        "\"\\t\"",
+        "\"+\"",
+        "\"-\"",
+        "<DIGIT>",
+        "<EXP>",
+        "<OFFSET>",
+        "<YYYYMMDD>",
+        "<TIME>",
+        "<OFFSETDATETIME>",
+        "<DATETIME>",
+        "<DATE>",
+        "<NUMBER>",
+        "<INTEGER>",
+        "<FRACTIONAL_DIGITS>",
+        "<EXPONENT>",
+        "<DIGITS>",
+        "<STRING>",
+        "<SQUOTE>",
+        "<DQUOTE>",
+        "<AND>",
+        "<OR>",
+        "\"null\"",
+        "\"(\"",
+        "\")\"",
+        "\",\"",
+        "<BOOLEAN>",
+        "<EQUAL>",
+        "<NOT_EQUAL>",
+        "<GREATER_THAN>",
+        "\">=\"",
+        "<LESS_THAN>",
+        "\"<=\"",
+        "<LIKE>",
+        "\"not like\"",
+        "\"contains\"",
+        "\"contains not\"",
+        "\"contains any\"",
+        "\"contains not any\"",
+        "<IN>",
+        "\"not in\"",
+        "\"$\"",
+        "<FUNCTION_NAME>",
+        "<PROPERTY>",
+        "<UNKNOWN>",
+    };
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserTokenManager.java b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserTokenManager.java
index e1899cd..8bff85c 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserTokenManager.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/FilterParserTokenManager.java
@@ -1,1720 +1,1465 @@
-/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
-import java.util.ArrayList;
-import java.util.List;
+
 import org.apache.sling.resource.filter.impl.node.*;
 
 /** Token Manager. */
-public class FilterParserTokenManager implements FilterParserConstants
-{
+public class FilterParserTokenManager implements FilterParserConstants {
 
-  /** Debug output. */
-  public  java.io.PrintStream debugStream = System.out;
-  /** Set debug output. */
-  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_0(int pos, long active0)
-{
-   switch (pos)
-   {
-      case 0:
-         if ((active0 & 0x200000000L) != 0L)
-         {
-            jjmatchedKind = 32;
-            return -1;
-         }
-         if ((active0 & 0x80000000L) != 0L)
-         {
-            jjmatchedKind = 30;
-            return -1;
-         }
-         if ((active0 & 0x2f800800000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            return 52;
-         }
-         if ((active0 & 0x4L) != 0L)
-            return 52;
-         return -1;
-      case 1:
-         if ((active0 & 0x2f800800000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 1;
-            return 52;
-         }
-         if ((active0 & 0x200000000L) != 0L)
-         {
-            if (jjmatchedPos == 0)
-            {
-               jjmatchedKind = 32;
-               jjmatchedPos = 0;
-            }
-            return -1;
-         }
-         if ((active0 & 0x80000000L) != 0L)
-         {
-            if (jjmatchedPos == 0)
-            {
-               jjmatchedKind = 30;
-               jjmatchedPos = 0;
-            }
-            return -1;
-         }
-         return -1;
-      case 2:
-         if ((active0 & 0x2f800800000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 2;
-            return 52;
-         }
-         return -1;
-      case 3:
-         if ((active0 & 0xf000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 3;
-            return 52;
-         }
-         if ((active0 & 0x800000L) != 0L)
-            return 52;
-         if ((active0 & 0x20800000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 43;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 4:
-         if ((active0 & 0xf000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 4;
-            return 52;
-         }
-         if ((active0 & 0x20800000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 43;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 5:
-         if ((active0 & 0xf000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 5;
-            return 52;
-         }
-         if ((active0 & 0x20800000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 43;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 6:
-         if ((active0 & 0xf000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 6;
-            return 52;
-         }
-         if ((active0 & 0x800000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 43;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         return -1;
-      case 7:
-         if ((active0 & 0xf000000000L) != 0L)
-            return 52;
-         if ((active0 & 0x800000000L) != 0L)
-         {
-            if (jjmatchedPos < 2)
-            {
-               jjmatchedKind = 43;
-               jjmatchedPos = 2;
-            }
-            return -1;
-         }
-         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, 52);
-      case 36:
-         return jjStopAtPos(0, 42);
-      case 40:
-         return jjStopAtPos(0, 24);
-      case 41:
-         return jjStopAtPos(0, 25);
-      case 44:
-         return jjStopAtPos(0, 26);
-      case 60:
-         return jjMoveStringLiteralDfa1_0(0x200000000L);
-      case 62:
-         return jjMoveStringLiteralDfa1_0(0x80000000L);
-      case 99:
-         return jjMoveStringLiteralDfa1_0(0xf000000000L);
-      case 110:
-         return jjMoveStringLiteralDfa1_0(0x20800800000L);
-      default :
-         return jjMoveNfa_0(0, 0);
-   }
-}
-private int jjMoveStringLiteralDfa1_0(long active0)
-{
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(0, active0);
-      return 1;
-   }
-   switch(curChar)
-   {
-      case 61:
-         if ((active0 & 0x80000000L) != 0L)
-            return jjStopAtPos(1, 31);
-         else if ((active0 & 0x200000000L) != 0L)
-            return jjStopAtPos(1, 33);
-         break;
-      case 111:
-         return jjMoveStringLiteralDfa2_0(active0, 0x2f800000000L);
-      case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(0, active0);
-}
-private int jjMoveStringLiteralDfa2_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(0, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(1, active0);
-      return 2;
-   }
-   switch(curChar)
-   {
-      case 108:
-         return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
-      case 110:
-         return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
-      case 116:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20800000000L);
-      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, 0x20800000000L);
-      case 108:
-         if ((active0 & 0x800000L) != 0L)
-            return jjStartNfaWithStates_0(3, 23, 52);
-         break;
-      case 116:
-         return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(2, active0);
-}
-private int jjMoveStringLiteralDfa4_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(2, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(3, active0);
-      return 4;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
-      case 105:
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
-      case 108:
-         return jjMoveStringLiteralDfa5_0(active0, 0x800000000L);
-      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, 0xf800000000L);
-      case 110:
-         if ((active0 & 0x20000000000L) != 0L)
-            return jjStopAtPos(5, 41);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(4, active0);
-}
-private int jjMoveStringLiteralDfa6_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(4, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(5, active0);
-      return 6;
-   }
-   switch(curChar)
-   {
-      case 107:
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000000L);
-      case 110:
-         return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(5, active0);
-}
-private int jjMoveStringLiteralDfa7_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(5, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(6, active0);
-      return 7;
-   }
-   switch(curChar)
-   {
-      case 101:
-         if ((active0 & 0x800000000L) != 0L)
-            return jjStopAtPos(7, 35);
-         break;
-      case 115:
-         if ((active0 & 0x1000000000L) != 0L)
-         {
-            jjmatchedKind = 36;
-            jjmatchedPos = 7;
-         }
-         return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(6, active0);
-}
-private int jjMoveStringLiteralDfa8_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(6, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(7, active0);
-      return 8;
-   }
-   switch(curChar)
-   {
-      case 32:
-         return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(7, active0);
-}
-private int jjMoveStringLiteralDfa9_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(7, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(8, active0);
-      return 9;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
-      case 110:
-         return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(8, active0);
-}
-private int jjMoveStringLiteralDfa10_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(8, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(9, active0);
-      return 10;
-   }
-   switch(curChar)
-   {
-      case 110:
-         return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
-      case 111:
-         return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(9, active0);
-}
-private int jjMoveStringLiteralDfa11_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(9, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(10, active0);
-      return 11;
-   }
-   switch(curChar)
-   {
-      case 116:
-         if ((active0 & 0x2000000000L) != 0L)
-         {
-            jjmatchedKind = 37;
-            jjmatchedPos = 11;
-         }
-         return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
-      case 121:
-         if ((active0 & 0x4000000000L) != 0L)
-            return jjStopAtPos(11, 38);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(10, active0);
-}
-private int jjMoveStringLiteralDfa12_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(10, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(11, active0);
-      return 12;
-   }
-   switch(curChar)
-   {
-      case 32:
-         return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(11, active0);
-}
-private int jjMoveStringLiteralDfa13_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(11, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(12, active0);
-      return 13;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(12, active0);
-}
-private int jjMoveStringLiteralDfa14_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(12, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(13, active0);
-      return 14;
-   }
-   switch(curChar)
-   {
-      case 110:
-         return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(13, active0);
-}
-private int jjMoveStringLiteralDfa15_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(13, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(14, active0);
-      return 15;
-   }
-   switch(curChar)
-   {
-      case 121:
-         if ((active0 & 0x8000000000L) != 0L)
-            return jjStopAtPos(15, 39);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(14, active0);
-}
-private int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) { return pos + 1; }
-   return jjMoveNfa_0(state, pos + 1);
-}
-static final long[] jjbitVec0 = {
-   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec2 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private int jjMoveNfa_0(int startState, int curPos)
-{
-   int startsAt = 0;
-   jjnewStateCnt = 187;
-   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 0:
-                  if ((0x8c00846affffffffL & l) != 0L)
-                  {
-                     if (kind > 43)
-                        kind = 43;
-                     jjCheckNAdd(52);
-                  }
-                  else if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 13)
-                        kind = 13;
-                     jjCheckNAddStates(0, 14);
-                  }
-                  else if (curChar == 45)
-                     jjCheckNAddStates(15, 22);
-                  else if (curChar == 60)
-                  {
-                     if (kind > 32)
-                        kind = 32;
-                  }
-                  else if (curChar == 62)
-                  {
-                     if (kind > 30)
-                        kind = 30;
-                  }
-                  else if (curChar == 61)
-                     jjstateSet[jjnewStateCnt++] = 32;
-                  else if (curChar == 34)
-                     jjCheckNAddStates(23, 25);
-                  else if (curChar == 39)
-                     jjCheckNAddStates(26, 28);
-                  else if (curChar == 46)
-                     jjCheckNAdd(1);
-                  if (curChar == 33)
-                     jjstateSet[jjnewStateCnt++] = 34;
-                  else if (curChar == 38)
-                     jjstateSet[jjnewStateCnt++] = 15;
-                  break;
-               case 1:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 15)
-                     kind = 15;
-                  jjCheckNAdd(1);
-                  break;
-               case 3:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(4);
-                  break;
-               case 4:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 16)
-                     kind = 16;
-                  jjCheckNAdd(4);
-                  break;
-               case 5:
-                  if (curChar == 39)
-                     jjCheckNAddStates(26, 28);
-                  break;
-               case 7:
-                  jjCheckNAddStates(26, 28);
-                  break;
-               case 8:
-                  if ((0xffffff7fffffffffL & l) != 0L)
-                     jjCheckNAddStates(26, 28);
-                  break;
-               case 9:
-                  if (curChar == 39 && kind > 18)
-                     kind = 18;
-                  break;
-               case 10:
-                  if (curChar == 34)
-                     jjCheckNAddStates(23, 25);
-                  break;
-               case 12:
-                  jjCheckNAddStates(23, 25);
-                  break;
-               case 13:
-                  if ((0xfffffffbffffffffL & l) != 0L)
-                     jjCheckNAddStates(23, 25);
-                  break;
-               case 14:
-                  if (curChar == 34 && kind > 18)
-                     kind = 18;
-                  break;
-               case 15:
-                  if (curChar == 38 && kind > 21)
-                     kind = 21;
-                  break;
-               case 16:
-                  if (curChar == 38)
-                     jjstateSet[jjnewStateCnt++] = 15;
-                  break;
-               case 32:
-                  if (curChar == 61 && kind > 28)
-                     kind = 28;
-                  break;
-               case 33:
-                  if (curChar == 61)
-                     jjstateSet[jjnewStateCnt++] = 32;
-                  break;
-               case 34:
-                  if (curChar == 61 && kind > 29)
-                     kind = 29;
-                  break;
-               case 35:
-                  if (curChar == 33)
-                     jjstateSet[jjnewStateCnt++] = 34;
-                  break;
-               case 36:
-                  if (curChar == 62 && kind > 30)
-                     kind = 30;
-                  break;
-               case 41:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 40;
-                  break;
-               case 49:
-                  if (curChar == 60 && kind > 32)
-                     kind = 32;
-                  break;
-               case 50:
-                  if (curChar == 61 && kind > 34)
-                     kind = 34;
-                  break;
-               case 52:
-                  if ((0x8c00846affffffffL & l) == 0L)
-                     break;
-                  if (kind > 43)
-                     kind = 43;
-                  jjCheckNAdd(52);
-                  break;
-               case 55:
-               case 56:
-                  jjCheckNAddStates(29, 31);
-                  break;
-               case 58:
-                  if (curChar == 45)
-                     jjCheckNAddStates(15, 22);
-                  break;
-               case 59:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(60, 94);
-                  break;
-               case 60:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 61;
-                  break;
-               case 61:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(62, 93);
-                  break;
-               case 62:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 63;
-                  break;
-               case 63:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(64, 92);
-                  break;
-               case 64:
-                  if (curChar == 45)
-                     jjCheckNAdd(65);
-                  break;
-               case 65:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(65, 66);
-                  break;
-               case 66:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 67;
-                  break;
-               case 67:
-                  if ((0x3000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(68, 69);
-                  break;
-               case 68:
-                  if (curChar == 45)
-                     jjCheckNAdd(69);
-                  break;
-               case 69:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(69, 70);
-                  break;
-               case 70:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 71;
-                  break;
-               case 71:
-                  if ((0xf000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 72;
-                  break;
-               case 72:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 73;
-                  break;
-               case 74:
-                  if ((0x7000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 75;
-                  break;
-               case 75:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 76;
-                  break;
-               case 76:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 77;
-                  break;
-               case 77:
-                  if ((0x3f000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 78;
-                  break;
-               case 78:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(79, 86);
-                  break;
-               case 79:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 80;
-                  break;
-               case 80:
-                  if ((0x3f000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 81;
-                  break;
-               case 81:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(82, 86);
-                  break;
-               case 82:
-                  if (curChar == 46)
-                     jjstateSet[jjnewStateCnt++] = 83;
-                  break;
-               case 83:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 84;
-                  break;
-               case 84:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 85;
-                  break;
-               case 85:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAdd(86);
-                  break;
-               case 86:
-                  if ((0x280000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 87;
-                  break;
-               case 87:
-                  if ((0x7000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 88;
-                  break;
-               case 88:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 89;
-                  break;
-               case 89:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 90;
-                  break;
-               case 90:
-                  if ((0x3f000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 91;
-                  break;
-               case 91:
-                  if ((0x3ff000000000000L & l) != 0L && kind > 10)
-                     kind = 10;
-                  break;
-               case 92:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(32, 35);
-                  break;
-               case 93:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(36, 39);
-                  break;
-               case 94:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(40, 43);
-                  break;
-               case 95:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(96, 124);
-                  break;
-               case 96:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 97;
-                  break;
-               case 97:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(98, 123);
-                  break;
-               case 98:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 99;
-                  break;
-               case 99:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(100, 122);
-                  break;
-               case 100:
-                  if (curChar == 45)
-                     jjCheckNAdd(101);
-                  break;
-               case 101:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(101, 102);
-                  break;
-               case 102:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 103;
-                  break;
-               case 103:
-                  if ((0x3000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(104, 105);
-                  break;
-               case 104:
-                  if (curChar == 45)
-                     jjCheckNAdd(105);
-                  break;
-               case 105:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(105, 106);
-                  break;
-               case 106:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 107;
-                  break;
-               case 107:
-                  if ((0xf000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 108;
-                  break;
-               case 108:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 109;
-                  break;
-               case 110:
-                  if ((0x7000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 111;
-                  break;
-               case 111:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 112;
-                  break;
-               case 112:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 113;
-                  break;
-               case 113:
-                  if ((0x3f000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 114;
-                  break;
-               case 114:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 11)
-                     kind = 11;
-                  jjstateSet[jjnewStateCnt++] = 115;
-                  break;
-               case 115:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 116;
-                  break;
-               case 116:
-                  if ((0x3f000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 117;
-                  break;
-               case 117:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 11)
-                     kind = 11;
-                  jjstateSet[jjnewStateCnt++] = 118;
-                  break;
-               case 118:
-                  if (curChar == 46)
-                     jjstateSet[jjnewStateCnt++] = 119;
-                  break;
-               case 119:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 120;
-                  break;
-               case 120:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 121;
-                  break;
-               case 121:
-                  if ((0x3ff000000000000L & l) != 0L && kind > 11)
-                     kind = 11;
-                  break;
-               case 122:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(44, 47);
-                  break;
-               case 123:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(48, 51);
-                  break;
-               case 124:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(52, 55);
-                  break;
-               case 125:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(126, 141);
-                  break;
-               case 126:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 127;
-                  break;
-               case 127:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(128, 140);
-                  break;
-               case 128:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 129;
-                  break;
-               case 129:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(130, 139);
-                  break;
-               case 130:
-                  if (curChar == 45)
-                     jjCheckNAdd(131);
-                  break;
-               case 131:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(131, 132);
-                  break;
-               case 132:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 133;
-                  break;
-               case 133:
-                  if ((0x3000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(134, 135);
-                  break;
-               case 134:
-                  if (curChar == 45)
-                     jjCheckNAdd(135);
-                  break;
-               case 135:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(135, 136);
-                  break;
-               case 136:
-                  if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 137;
-                  break;
-               case 137:
-                  if ((0xf000000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 138;
-                  break;
-               case 138:
-                  if ((0x3ff000000000000L & l) != 0L && kind > 12)
-                     kind = 12;
-                  break;
-               case 139:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(56, 59);
-                  break;
-               case 140:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(60, 63);
-                  break;
-               case 141:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(64, 67);
-                  break;
-               case 142:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 13)
-                     kind = 13;
-                  jjCheckNAdd(142);
-                  break;
-               case 143:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(143, 144);
-                  break;
-               case 144:
-                  if (curChar == 46)
-                     jjCheckNAdd(145);
-                  break;
-               case 145:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 13)
-                     kind = 13;
-                  jjCheckNAdd(145);
-                  break;
-               case 146:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(146, 147);
-                  break;
-               case 148:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(149);
-                  break;
-               case 149:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 13)
-                     kind = 13;
-                  jjCheckNAdd(149);
-                  break;
-               case 150:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(150, 151);
-                  break;
-               case 151:
-                  if (curChar == 46)
-                     jjCheckNAdd(152);
-                  break;
-               case 152:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(152, 153);
-                  break;
-               case 154:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(155);
-                  break;
-               case 155:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 13)
-                     kind = 13;
-                  jjCheckNAdd(155);
-                  break;
-               case 156:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 14)
-                     kind = 14;
-                  jjCheckNAdd(156);
-                  break;
-               case 157:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 13)
-                     kind = 13;
-                  jjCheckNAddStates(0, 14);
-                  break;
-               case 158:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 17)
-                     kind = 17;
-                  jjCheckNAdd(158);
-                  break;
-               case 164:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 163;
-                  break;
-               case 170:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 169;
-                  break;
-               case 174:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 173;
-                  break;
-               case 181:
-                  if (curChar == 32)
-                     jjstateSet[jjnewStateCnt++] = 180;
-                  break;
-               default : break;
+    /** Debug output. */
+    public java.io.PrintStream debugStream = System.out;
+    /** Set debug output. */
+    public void setDebugStream(java.io.PrintStream ds) {
+        debugStream = ds;
+    }
+
+    private final int jjStopStringLiteralDfa_0(int pos, long active0) {
+        switch (pos) {
+            case 0:
+                if ((active0 & 0x200000000L) != 0L) {
+                    jjmatchedKind = 32;
+                    return -1;
+                }
+                if ((active0 & 0x80000000L) != 0L) {
+                    jjmatchedKind = 30;
+                    return -1;
+                }
+                if ((active0 & 0x2f800800000L) != 0L) {
+                    jjmatchedKind = 43;
+                    return 52;
+                }
+                if ((active0 & 0x4L) != 0L) return 52;
+                return -1;
+            case 1:
+                if ((active0 & 0x2f800800000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 1;
+                    return 52;
+                }
+                if ((active0 & 0x200000000L) != 0L) {
+                    if (jjmatchedPos == 0) {
+                        jjmatchedKind = 32;
+                        jjmatchedPos = 0;
+                    }
+                    return -1;
+                }
+                if ((active0 & 0x80000000L) != 0L) {
+                    if (jjmatchedPos == 0) {
+                        jjmatchedKind = 30;
+                        jjmatchedPos = 0;
+                    }
+                    return -1;
+                }
+                return -1;
+            case 2:
+                if ((active0 & 0x2f800800000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 2;
+                    return 52;
+                }
+                return -1;
+            case 3:
+                if ((active0 & 0xf000000000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 3;
+                    return 52;
+                }
+                if ((active0 & 0x800000L) != 0L) return 52;
+                if ((active0 & 0x20800000000L) != 0L) {
+                    if (jjmatchedPos < 2) {
+                        jjmatchedKind = 43;
+                        jjmatchedPos = 2;
+                    }
+                    return -1;
+                }
+                return -1;
+            case 4:
+                if ((active0 & 0xf000000000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 4;
+                    return 52;
+                }
+                if ((active0 & 0x20800000000L) != 0L) {
+                    if (jjmatchedPos < 2) {
+                        jjmatchedKind = 43;
+                        jjmatchedPos = 2;
+                    }
+                    return -1;
+                }
+                return -1;
+            case 5:
+                if ((active0 & 0xf000000000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 5;
+                    return 52;
+                }
+                if ((active0 & 0x20800000000L) != 0L) {
+                    if (jjmatchedPos < 2) {
+                        jjmatchedKind = 43;
+                        jjmatchedPos = 2;
+                    }
+                    return -1;
+                }
+                return -1;
+            case 6:
+                if ((active0 & 0xf000000000L) != 0L) {
+                    jjmatchedKind = 43;
+                    jjmatchedPos = 6;
+                    return 52;
+                }
+                if ((active0 & 0x800000000L) != 0L) {
+                    if (jjmatchedPos < 2) {
+                        jjmatchedKind = 43;
+                        jjmatchedPos = 2;
+                    }
+                    return -1;
+                }
+                return -1;
+            case 7:
+                if ((active0 & 0xf000000000L) != 0L) return 52;
+                if ((active0 & 0x800000000L) != 0L) {
+                    if (jjmatchedPos < 2) {
+                        jjmatchedKind = 43;
+                        jjmatchedPos = 2;
+                    }
+                    return -1;
+                }
+                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, 52);
+            case 36:
+                return jjStopAtPos(0, 42);
+            case 40:
+                return jjStopAtPos(0, 24);
+            case 41:
+                return jjStopAtPos(0, 25);
+            case 44:
+                return jjStopAtPos(0, 26);
+            case 60:
+                return jjMoveStringLiteralDfa1_0(0x200000000L);
+            case 62:
+                return jjMoveStringLiteralDfa1_0(0x80000000L);
+            case 99:
+                return jjMoveStringLiteralDfa1_0(0xf000000000L);
+            case 110:
+                return jjMoveStringLiteralDfa1_0(0x20800800000L);
+            default:
+                return jjMoveNfa_0(0, 0);
+        }
+    }
+
+    private int jjMoveStringLiteralDfa1_0(long active0) {
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(0, active0);
+            return 1;
+        }
+        switch (curChar) {
+            case 61:
+                if ((active0 & 0x80000000L) != 0L) return jjStopAtPos(1, 31);
+                else if ((active0 & 0x200000000L) != 0L) return jjStopAtPos(1, 33);
+                break;
+            case 111:
+                return jjMoveStringLiteralDfa2_0(active0, 0x2f800000000L);
+            case 117:
+                return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(0, active0);
+    }
+
+    private int jjMoveStringLiteralDfa2_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(0, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(1, active0);
+            return 2;
+        }
+        switch (curChar) {
+            case 108:
+                return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
+            case 110:
+                return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
+            case 116:
+                return jjMoveStringLiteralDfa3_0(active0, 0x20800000000L);
+            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, 0x20800000000L);
+            case 108:
+                if ((active0 & 0x800000L) != 0L) return jjStartNfaWithStates_0(3, 23, 52);
+                break;
+            case 116:
+                return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(2, active0);
+    }
+
+    private int jjMoveStringLiteralDfa4_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(2, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(3, active0);
+            return 4;
+        }
+        switch (curChar) {
+            case 97:
+                return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
+            case 105:
+                return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
+            case 108:
+                return jjMoveStringLiteralDfa5_0(active0, 0x800000000L);
+            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, 0xf800000000L);
+            case 110:
+                if ((active0 & 0x20000000000L) != 0L) return jjStopAtPos(5, 41);
+                break;
+            default:
+                break;
+        }
+        return jjStartNfa_0(4, active0);
+    }
+
+    private int jjMoveStringLiteralDfa6_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(4, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(5, active0);
+            return 6;
+        }
+        switch (curChar) {
+            case 107:
+                return jjMoveStringLiteralDfa7_0(active0, 0x800000000L);
+            case 110:
+                return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(5, active0);
+    }
+
+    private int jjMoveStringLiteralDfa7_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(5, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(6, active0);
+            return 7;
+        }
+        switch (curChar) {
+            case 101:
+                if ((active0 & 0x800000000L) != 0L) return jjStopAtPos(7, 35);
+                break;
+            case 115:
+                if ((active0 & 0x1000000000L) != 0L) {
+                    jjmatchedKind = 36;
+                    jjmatchedPos = 7;
+                }
+                return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(6, active0);
+    }
+
+    private int jjMoveStringLiteralDfa8_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(6, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(7, active0);
+            return 8;
+        }
+        switch (curChar) {
+            case 32:
+                return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(7, active0);
+    }
+
+    private int jjMoveStringLiteralDfa9_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(7, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(8, active0);
+            return 9;
+        }
+        switch (curChar) {
+            case 97:
+                return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
+            case 110:
+                return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(8, active0);
+    }
+
+    private int jjMoveStringLiteralDfa10_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(8, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(9, active0);
+            return 10;
+        }
+        switch (curChar) {
+            case 110:
+                return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
+            case 111:
+                return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(9, active0);
+    }
+
+    private int jjMoveStringLiteralDfa11_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(9, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(10, active0);
+            return 11;
+        }
+        switch (curChar) {
+            case 116:
+                if ((active0 & 0x2000000000L) != 0L) {
+                    jjmatchedKind = 37;
+                    jjmatchedPos = 11;
+                }
+                return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
+            case 121:
+                if ((active0 & 0x4000000000L) != 0L) return jjStopAtPos(11, 38);
+                break;
+            default:
+                break;
+        }
+        return jjStartNfa_0(10, active0);
+    }
+
+    private int jjMoveStringLiteralDfa12_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(10, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(11, active0);
+            return 12;
+        }
+        switch (curChar) {
+            case 32:
+                return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(11, active0);
+    }
+
+    private int jjMoveStringLiteralDfa13_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(11, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(12, active0);
+            return 13;
+        }
+        switch (curChar) {
+            case 97:
+                return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(12, active0);
+    }
+
+    private int jjMoveStringLiteralDfa14_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(12, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(13, active0);
+            return 14;
+        }
+        switch (curChar) {
+            case 110:
+                return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
+            default:
+                break;
+        }
+        return jjStartNfa_0(13, active0);
+    }
+
+    private int jjMoveStringLiteralDfa15_0(long old0, long active0) {
+        if (((active0 &= old0)) == 0L) return jjStartNfa_0(13, old0);
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            jjStopStringLiteralDfa_0(14, active0);
+            return 15;
+        }
+        switch (curChar) {
+            case 121:
+                if ((active0 & 0x8000000000L) != 0L) return jjStopAtPos(15, 39);
+                break;
+            default:
+                break;
+        }
+        return jjStartNfa_0(14, active0);
+    }
+
+    private int jjStartNfaWithStates_0(int pos, int kind, int state) {
+        jjmatchedKind = kind;
+        jjmatchedPos = pos;
+        try {
+            curChar = input_stream.readChar();
+        } catch (java.io.IOException e) {
+            return pos + 1;
+        }
+        return jjMoveNfa_0(state, pos + 1);
+    }
+
+    static final long[] jjbitVec0 = {0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+    };
+    static final long[] jjbitVec2 = {0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL};
+
+    private int jjMoveNfa_0(int startState, int curPos) {
+        int startsAt = 0;
+        jjnewStateCnt = 187;
+        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 0:
+                            if ((0x8c00846affffffffL & l) != 0L) {
+                                if (kind > 43) kind = 43;
+                                jjCheckNAdd(52);
+                            } else if ((0x3ff000000000000L & l) != 0L) {
+                                if (kind > 13) kind = 13;
+                                jjCheckNAddStates(0, 14);
+                            } else if (curChar == 45) jjCheckNAddStates(15, 22);
+                            else if (curChar == 60) {
+                                if (kind > 32) kind = 32;
+                            } else if (curChar == 62) {
+                                if (kind > 30) kind = 30;
+                            } else if (curChar == 61) jjstateSet[jjnewStateCnt++] = 32;
+                            else if (curChar == 34) jjCheckNAddStates(23, 25);
+                            else if (curChar == 39) jjCheckNAddStates(26, 28);
+                            else if (curChar == 46) jjCheckNAdd(1);
+                            if (curChar == 33) jjstateSet[jjnewStateCnt++] = 34;
+                            else if (curChar == 38) jjstateSet[jjnewStateCnt++] = 15;
+                            break;
+                        case 1:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 15) kind = 15;
+                            jjCheckNAdd(1);
+                            break;
+                        case 3:
+                            if ((0x280000000000L & l) != 0L) jjCheckNAdd(4);
+                            break;
+                        case 4:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 16) kind = 16;
+                            jjCheckNAdd(4);
+                            break;
+                        case 5:
+                            if (curChar == 39) jjCheckNAddStates(26, 28);
+                            break;
+                        case 7:
+                            jjCheckNAddStates(26, 28);
+                            break;
+                        case 8:
+                            if ((0xffffff7fffffffffL & l) != 0L) jjCheckNAddStates(26, 28);
+                            break;
+                        case 9:
+                            if (curChar == 39 && kind > 18) kind = 18;
+                            break;
+                        case 10:
+                            if (curChar == 34) jjCheckNAddStates(23, 25);
+                            break;
+                        case 12:
+                            jjCheckNAddStates(23, 25);
+                            break;
+                        case 13:
+                            if ((0xfffffffbffffffffL & l) != 0L) jjCheckNAddStates(23, 25);
+                            break;
+                        case 14:
+                            if (curChar == 34 && kind > 18) kind = 18;
+                            break;
+                        case 15:
+                            if (curChar == 38 && kind > 21) kind = 21;
+                            break;
+                        case 16:
+                            if (curChar == 38) jjstateSet[jjnewStateCnt++] = 15;
+                            break;
+                        case 32:
+                            if (curChar == 61 && kind > 28) kind = 28;
+                            break;
+                        case 33:
+                            if (curChar == 61) jjstateSet[jjnewStateCnt++] = 32;
+                            break;
+                        case 34:
+                            if (curChar == 61 && kind > 29) kind = 29;
+                            break;
+                        case 35:
+                            if (curChar == 33) jjstateSet[jjnewStateCnt++] = 34;
+                            break;
+                        case 36:
+                            if (curChar == 62 && kind > 30) kind = 30;
+                            break;
+                        case 41:
+                            if (curChar == 32) jjstateSet[jjnewStateCnt++] = 40;
+                            break;
+                        case 49:
+                            if (curChar == 60 && kind > 32) kind = 32;
+                            break;
+                        case 50:
+                            if (curChar == 61 && kind > 34) kind = 34;
+                            break;
+                        case 52:
+                            if ((0x8c00846affffffffL & l) == 0L) break;
+                            if (kind > 43) kind = 43;
+                            jjCheckNAdd(52);
+                            break;
+                        case 55:
+                        case 56:
+                            jjCheckNAddStates(29, 31);
+                            break;
+                        case 58:
+                            if (curChar == 45) jjCheckNAddStates(15, 22);
+                            break;
+                        case 59:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(60, 94);
+                            break;
+                        case 60:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 61;
+                            break;
+                        case 61:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(62, 93);
+                            break;
+                        case 62:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 63;
+                            break;
+                        case 63:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(64, 92);
+                            break;
+                        case 64:
+                            if (curChar == 45) jjCheckNAdd(65);
+                            break;
+                        case 65:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(65, 66);
+                            break;
+                        case 66:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 67;
+                            break;
+                        case 67:
+                            if ((0x3000000000000L & l) != 0L) jjCheckNAddTwoStates(68, 69);
+                            break;
+                        case 68:
+                            if (curChar == 45) jjCheckNAdd(69);
+                            break;
+                        case 69:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(69, 70);
+                            break;
+                        case 70:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 71;
+                            break;
+                        case 71:
+                            if ((0xf000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 72;
+                            break;
+                        case 72:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 73;
+                            break;
+                        case 74:
+                            if ((0x7000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 75;
+                            break;
+                        case 75:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 76;
+                            break;
+                        case 76:
+                            if (curChar == 58) jjstateSet[jjnewStateCnt++] = 77;
+                            break;
+                        case 77:
+                            if ((0x3f000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 78;
+                            break;
+                        case 78:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(79, 86);
+                            break;
+                        case 79:
+                            if (curChar == 58) jjstateSet[jjnewStateCnt++] = 80;
+                            break;
+                        case 80:
+                            if ((0x3f000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 81;
+                            break;
+                        case 81:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(82, 86);
+                            break;
+                        case 82:
+                            if (curChar == 46) jjstateSet[jjnewStateCnt++] = 83;
+                            break;
+                        case 83:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 84;
+                            break;
+                        case 84:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 85;
+                            break;
+                        case 85:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAdd(86);
+                            break;
+                        case 86:
+                            if ((0x280000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 87;
+                            break;
+                        case 87:
+                            if ((0x7000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 88;
+                            break;
+                        case 88:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 89;
+                            break;
+                        case 89:
+                            if (curChar == 58) jjstateSet[jjnewStateCnt++] = 90;
+                            break;
+                        case 90:
+                            if ((0x3f000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 91;
+                            break;
+                        case 91:
+                            if ((0x3ff000000000000L & l) != 0L && kind > 10) kind = 10;
+                            break;
+                        case 92:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(32, 35);
+                            break;
+                        case 93:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(36, 39);
+                            break;
+                        case 94:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(40, 43);
+                            break;
+                        case 95:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(96, 124);
+                            break;
+                        case 96:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 97;
+                            break;
+                        case 97:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(98, 123);
+                            break;
+                        case 98:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 99;
+                            break;
+                        case 99:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(100, 122);
+                            break;
+                        case 100:
+                            if (curChar == 45) jjCheckNAdd(101);
+                            break;
+                        case 101:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(101, 102);
+                            break;
+                        case 102:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 103;
+                            break;
+                        case 103:
+                            if ((0x3000000000000L & l) != 0L) jjCheckNAddTwoStates(104, 105);
+                            break;
+                        case 104:
+                            if (curChar == 45) jjCheckNAdd(105);
+                            break;
+                        case 105:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(105, 106);
+                            break;
+                        case 106:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 107;
+                            break;
+                        case 107:
+                            if ((0xf000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 108;
+                            break;
+                        case 108:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 109;
+                            break;
+                        case 110:
+                            if ((0x7000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 111;
+                            break;
+                        case 111:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 112;
+                            break;
+                        case 112:
+                            if (curChar == 58) jjstateSet[jjnewStateCnt++] = 113;
+                            break;
+                        case 113:
+                            if ((0x3f000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 114;
+                            break;
+                        case 114:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 11) kind = 11;
+                            jjstateSet[jjnewStateCnt++] = 115;
+                            break;
+                        case 115:
+                            if (curChar == 58) jjstateSet[jjnewStateCnt++] = 116;
+                            break;
+                        case 116:
+                            if ((0x3f000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 117;
+                            break;
+                        case 117:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 11) kind = 11;
+                            jjstateSet[jjnewStateCnt++] = 118;
+                            break;
+                        case 118:
+                            if (curChar == 46) jjstateSet[jjnewStateCnt++] = 119;
+                            break;
+                        case 119:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 120;
+                            break;
+                        case 120:
+                            if ((0x3ff000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 121;
+                            break;
+                        case 121:
+                            if ((0x3ff000000000000L & l) != 0L && kind > 11) kind = 11;
+                            break;
+                        case 122:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(44, 47);
+                            break;
+                        case 123:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(48, 51);
+                            break;
+                        case 124:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(52, 55);
+                            break;
+                        case 125:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(126, 141);
+                            break;
+                        case 126:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 127;
+                            break;
+                        case 127:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(128, 140);
+                            break;
+                        case 128:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 129;
+                            break;
+                        case 129:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(130, 139);
+                            break;
+                        case 130:
+                            if (curChar == 45) jjCheckNAdd(131);
+                            break;
+                        case 131:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(131, 132);
+                            break;
+                        case 132:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 133;
+                            break;
+                        case 133:
+                            if ((0x3000000000000L & l) != 0L) jjCheckNAddTwoStates(134, 135);
+                            break;
+                        case 134:
+                            if (curChar == 45) jjCheckNAdd(135);
+                            break;
+                        case 135:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(135, 136);
+                            break;
+                        case 136:
+                            if (curChar == 45) jjstateSet[jjnewStateCnt++] = 137;
+                            break;
+                        case 137:
+                            if ((0xf000000000000L & l) != 0L) jjstateSet[jjnewStateCnt++] = 138;
+                            break;
+                        case 138:
+                            if ((0x3ff000000000000L & l) != 0L && kind > 12) kind = 12;
+                            break;
+                        case 139:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(56, 59);
+                            break;
+                        case 140:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(60, 63);
+                            break;
+                        case 141:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddStates(64, 67);
+                            break;
+                        case 142:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 13) kind = 13;
+                            jjCheckNAdd(142);
+                            break;
+                        case 143:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(143, 144);
+                            break;
+                        case 144:
+                            if (curChar == 46) jjCheckNAdd(145);
+                            break;
+                        case 145:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 13) kind = 13;
+                            jjCheckNAdd(145);
+                            break;
+                        case 146:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(146, 147);
+                            break;
+                        case 148:
+                            if ((0x280000000000L & l) != 0L) jjCheckNAdd(149);
+                            break;
+                        case 149:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 13) kind = 13;
+                            jjCheckNAdd(149);
+                            break;
+                        case 150:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(150, 151);
+                            break;
+                        case 151:
+                            if (curChar == 46) jjCheckNAdd(152);
+                            break;
+                        case 152:
+                            if ((0x3ff000000000000L & l) != 0L) jjCheckNAddTwoStates(152, 153);
+                            break;
+                        case 154:
+                            if ((0x280000000000L & l) != 0L) jjCheckNAdd(155);
+                            break;
+                        case 155:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 13) kind = 13;
+                            jjCheckNAdd(155);
+                            break;
+                        case 156:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 14) kind = 14;
+                            jjCheckNAdd(156);
+                            break;
+                        case 157:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 13) kind = 13;
+                            jjCheckNAddStates(0, 14);
+                            break;
+                        case 158:
+                            if ((0x3ff000000000000L & l) == 0L) break;
+                            if (kind > 17) kind = 17;
+                            jjCheckNAdd(158);
+                            break;
+                        case 164:
+                            if (curChar == 32) jjstateSet[jjnewStateCnt++] = 163;
+                            break;
+                        case 170:
+                            if (curChar == 32) jjstateSet[jjnewStateCnt++] = 169;
+                            break;
+                        case 174:
+                            if (curChar == 32) jjstateSet[jjnewStateCnt++] = 173;
+                            break;
+                        case 181:
+                            if (curChar == 32) jjstateSet[jjnewStateCnt++] = 180;
+                            break;
+                        default:
+                            break;
+                    }
+                } while (i != startsAt);
+            } else if (curChar < 128) {
+                long l = 1L << (curChar & 077);
+                do {
+                    switch (jjstateSet[--i]) {
+                        case 0:
+                            if ((0xffffffffd7ffffffL & l) != 0L) {
+                                if (kind > 43) kind = 43;
+                                jjCheckNAdd(52);
+                            } else if (curChar == 91) jjCheckNAddStates(29, 31);
+                            if ((0x2000000020L & l) != 0L) jjAddStates(68, 69);
+                            else if (curChar == 108) jjAddStates(70, 71);
+                            else if (curChar == 105) jjCheckNAddStates(72, 76);
+                            else if (curChar == 126) jjstateSet[jjnewStateCnt++] = 50;
+                            else if (curChar == 103) jjstateSet[jjnewStateCnt++] = 47;
+                            else if (curChar == 102) jjstateSet[jjnewStateCnt++] = 30;
+                            else if (curChar == 116) jjstateSet[jjnewStateCnt++] = 26;
+                            else if (curChar == 111) jjstateSet[jjnewStateCnt++] = 22;
+                            else if (curChar == 124) jjstateSet[jjnewStateCnt++] = 20;
+                            else if (curChar == 97) jjstateSet[jjnewStateCnt++] = 18;
+                            break;
+                        case 2:
+                            if ((0x2000000020L & l) != 0L) jjAddStates(68, 69);
+                            break;
+                        case 6:
+                            if (curChar == 92) jjstateSet[jjnewStateCnt++] = 7;
+                            break;
+                        case 7:
+                            jjCheckNAddStates(26, 28);
+                            break;
+                        case 8:
+                            if ((0xffffffffefffffffL & l) != 0L) jjCheckNAddStates(26, 28);
+                            break;
+                        case 11:
+                            if (curChar == 92) jjstateSet[jjnewStateCnt++] = 12;
+                            break;
+                        case 12:
+                            jjCheckNAddStates(23, 25);
+                            break;
+                        case 13:
+                            if ((0xffffffffefffffffL & l) != 0L) jjCheckNAddStates(23, 25);
+                            break;
+                        case 17:
+                            if (curChar == 100 && kind > 21) kind = 21;
+                            break;
+                        case 18:
+                            if (curChar == 110) jjstateSet[jjnewStateCnt++] = 17;
+                            break;
+                        case 19:
+                            if (curChar == 97) jjstateSet[jjnewStateCnt++] = 18;
+                            break;
+                        case 20:
+                            if (curChar == 124 && kind > 22) kind = 22;
+                            break;
+                        case 21:
+                            if (curChar == 124) jjstateSet[jjnewStateCnt++] = 20;
+                            break;
+                        case 22:
+                            if (curChar == 114 && kind > 22) kind = 22;
+                            break;
+                        case 23:
+                            if (curChar == 111) jjstateSet[jjnewStateCnt++] = 22;
+                            break;
+                        case 24:
+                            if (curChar == 101 && kind > 27) kind = 27;
+                            break;
+                        case 25:
+                            if (curChar == 117) jjCheckNAdd(24);
+                            break;
+                        case 26:
+                            if (curChar == 114) jjstateSet[jjnewStateCnt++] = 25;
+                            break;
+                        case 27:
+                            if (curChar == 116) jjstateSet[jjnewStateCnt++] = 26;
+                            break;
+                        case 28:
+                            if (curChar == 115) jjCheckNAdd(24);
+                            break;
+                        case 29:
+                            if (curChar == 108) jjstateSet[jjnewStateCnt++] = 28;
+                            break;
+                        case 30:
+                            if (curChar == 97) jjstateSet[jjnewStateCnt++] = 29;
+                            break;
+                        case 31:
+                            if (curChar == 102) jjstateSet[jjnewStateCnt++] = 30;
+                            break;
+                        case 37:
+                            if (curChar == 110 && kind > 30) kind = 30;
+                            break;
+                        case 38:
+                            if (curChar == 97) jjstateSet[jjnewStateCnt++] = 37;
+                            break;
+                        case 39:
+                            if (curChar == 104) jjstateSet[jjnewStateCnt++] = 38;
+                            break;
+                        case 40:
+                            if (curChar == 116) jjstateSet[jjnewStateCnt++] = 39;
+                            break;
+                        case 42:
+                            if (curChar == 114) jjstateSet[jjnewStateCnt++] = 41;
+                            break;
+                        case 43:
+                            if (curChar == 101) jjstateSet[jjnewStateCnt++] = 42;
+                            break;
+                        case 44:
+                            if (curChar == 116) jjstateSet[jjnewStateCnt++] = 43;
+                            break;
+                        case 45:
+                            if (curChar == 97) jjstateSet[jjnewStateCnt++] = 44;
+                            break;
+                        case 46:
+                            if (curChar == 101) jjstateSet[jjnewStateCnt++] = 45;
+                            break;
+                        case 47:
+                            if (curChar == 114) jjstateSet[jjnewStateCnt++] = 46;
+                            break;
+                        case 48:
+                            if (curChar == 103) jjstateSet[jjnewStateCnt++] = 47;
+                            break;
+                        case 51:
+                            if (curChar == 126) jjstateSet[jjnewStateCnt++] = 50;
+                            break;
+                        case 52:
+                            if ((0xffffffffd7ffffffL & l) == 0L) break;
+                            if (kind > 43) kind = 43;
+                            jjCheckNAdd(52);
+                            break;
+                        case 53:
+                            if (curChar == 91) jjCheckNAddStates(29, 31);
+                            break;
+                        case 54:
+                            if (curChar == 92) jjstateSet[jjnewStateCnt++] = 55;
+                            break;
+                        case 55:
+                            jjCheckNAddStates(29, 31);
+                            break;
+                        case 56:
+                            if ((0xffffffffcfffffffL & l) != 0L) jjCheckNAddStates(29, 31);
+                            break;
+                        case 57:
+                            if (curChar == 93 && kind > 44) kind = 44;
+                            break;
+                        case 73:
+                            if (curChar == 84) jjstateSet[jjnewStateCnt++] = 74;
+                            break;
+                        case 109:
+                            if (curChar == 84) jjstateSet[jjnewStateCnt++] = 110;
+                            break;
+                        case 147:
+                            if ((0x2000000020L & l) != 0L) jjAddStates(77, 78);
+                            break;
+                        case 153:
+                            if ((0x2000000020L & l) != 0L) jjAddStates(79, 80);
+                            break;
+                        case 159:
+                            if (curChar == 105) jjCheckNAddStates(72, 76);
+                            break;
+                        case 160:
+                            if (curChar == 115 && kind > 28) kind = 28;
+                            break;
+                        case 161:
+                            if (curChar == 116 && kind > 29) kind = 29;
+                            break;
+                        case 162:
+                            if (curChar == 111) jjstateSet[jjnewStateCnt++] = 161;
+                            break;
+                        case 163:
+                            if (curChar == 110) jjstateSet[jjnewStateCnt++] = 162;
+                            break;
+                        case 165:
+                            if (curChar == 115) jjstateSet[jjnewStateCnt++] = 164;
+                            break;
+                        case 166:
+                            if (curChar == 101 && kind > 34) kind = 34;
+                            break;
+                        case 167:
+                        case 185:
+                            if (curChar == 107) jjCheckNAdd(166);
+                            break;
+                        case 168:
+                            if (curChar == 105) jjstateSet[jjnewStateCnt++] = 167;
+                            break;
+                        case 169:
+                            if (curChar == 108) jjstateSet[jjnewStateCnt++] = 168;
+                            break;
+                        case 171:
+                            if (curChar == 115) jjstateSet[jjnewStateCnt++] = 170;
+                            break;
+                        case 172:
+                            if (curChar == 110 && kind > 40) kind = 40;
+                            break;
+                        case 173:
+                            if (curChar == 105) jjCheckNAdd(172);
+                            break;
+                        case 175:
+                            if (curChar == 115) jjstateSet[jjnewStateCnt++] = 174;
+                            break;
+                        case 176:
+                            if (curChar == 108) jjAddStates(70, 71);
+                            break;
+                        case 177:
+                            if (curChar == 110 && kind > 32) kind = 32;
+                            break;
+                        case 178:
+                            if (curChar == 97) jjstateSet[jjnewStateCnt++] = 177;
+                            break;
+                        case 179:
+                            if (curChar == 104) jjstateSet[jjnewStateCnt++] = 178;
+                            break;
+                        case 180:
+                            if (curChar == 116) jjstateSet[jjnewStateCnt++] = 179;
+                            break;
+                        case 182:
+                            if (curChar == 115) jjstateSet[jjnewStateCnt++] = 181;
+                            break;
+                        case 183:
+                            if (curChar == 115) jjstateSet[jjnewStateCnt++] = 182;
+                            break;
+                        case 184:
+                            if (curChar == 101) jjstateSet[jjnewStateCnt++] = 183;
+                            break;
+                        case 186:
+                            if (curChar == 105) jjstateSet[jjnewStateCnt++] = 185;
+                            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 0:
+                        case 52:
+                            if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) break;
+                            if (kind > 43) kind = 43;
+                            jjCheckNAdd(52);
+                            break;
+                        case 7:
+                        case 8:
+                            if (jjCanMove_0(hiByte, i1, i2, l1, l2)) jjCheckNAddStates(26, 28);
+                            break;
+                        case 12:
+                        case 13:
+                            if (jjCanMove_0(hiByte, i1, i2, l1, l2)) jjCheckNAddStates(23, 25);
+                            break;
+                        case 55:
+                        case 56:
+                            if (jjCanMove_0(hiByte, i1, i2, l1, l2)) jjCheckNAddStates(29, 31);
+                            break;
+                        default:
+                            break;
+                    }
+                } while (i != startsAt);
             }
-         } while(i != startsAt);
-      }
-      else if (curChar < 128)
-      {
-         long l = 1L << (curChar & 077);
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 0:
-                  if ((0xffffffffd7ffffffL & l) != 0L)
-                  {
-                     if (kind > 43)
-                        kind = 43;
-                     jjCheckNAdd(52);
-                  }
-                  else if (curChar == 91)
-                     jjCheckNAddStates(29, 31);
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(68, 69);
-                  else if (curChar == 108)
-                     jjAddStates(70, 71);
-                  else if (curChar == 105)
-                     jjCheckNAddStates(72, 76);
-                  else if (curChar == 126)
-                     jjstateSet[jjnewStateCnt++] = 50;
-                  else if (curChar == 103)
-                     jjstateSet[jjnewStateCnt++] = 47;
-                  else if (curChar == 102)
-                     jjstateSet[jjnewStateCnt++] = 30;
-                  else if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 26;
-                  else if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 22;
-                  else if (curChar == 124)
-                     jjstateSet[jjnewStateCnt++] = 20;
-                  else if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 18;
-                  break;
-               case 2:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(68, 69);
-                  break;
-               case 6:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 7;
-                  break;
-               case 7:
-                  jjCheckNAddStates(26, 28);
-                  break;
-               case 8:
-                  if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(26, 28);
-                  break;
-               case 11:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 12;
-                  break;
-               case 12:
-                  jjCheckNAddStates(23, 25);
-                  break;
-               case 13:
-                  if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(23, 25);
-                  break;
-               case 17:
-                  if (curChar == 100 && kind > 21)
-                     kind = 21;
-                  break;
-               case 18:
-                  if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 17;
-                  break;
-               case 19:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 18;
-                  break;
-               case 20:
-                  if (curChar == 124 && kind > 22)
-                     kind = 22;
-                  break;
-               case 21:
-                  if (curChar == 124)
-                     jjstateSet[jjnewStateCnt++] = 20;
-                  break;
-               case 22:
-                  if (curChar == 114 && kind > 22)
-                     kind = 22;
-                  break;
-               case 23:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 22;
-                  break;
-               case 24:
-                  if (curChar == 101 && kind > 27)
-                     kind = 27;
-                  break;
-               case 25:
-                  if (curChar == 117)
-                     jjCheckNAdd(24);
-                  break;
-               case 26:
-                  if (curChar == 114)
-                     jjstateSet[jjnewStateCnt++] = 25;
-                  break;
-               case 27:
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 26;
-                  break;
-               case 28:
-                  if (curChar == 115)
-                     jjCheckNAdd(24);
-                  break;
-               case 29:
-                  if (curChar == 108)
-                     jjstateSet[jjnewStateCnt++] = 28;
-                  break;
-               case 30:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 29;
-                  break;
-               case 31:
-                  if (curChar == 102)
-                     jjstateSet[jjnewStateCnt++] = 30;
-                  break;
-               case 37:
-                  if (curChar == 110 && kind > 30)
-                     kind = 30;
-                  break;
-               case 38:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 37;
-                  break;
-               case 39:
-                  if (curChar == 104)
-                     jjstateSet[jjnewStateCnt++] = 38;
-                  break;
-               case 40:
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 39;
-                  break;
-               case 42:
-                  if (curChar == 114)
-                     jjstateSet[jjnewStateCnt++] = 41;
-                  break;
-               case 43:
-                  if (curChar == 101)
-                     jjstateSet[jjnewStateCnt++] = 42;
-                  break;
-               case 44:
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 43;
-                  break;
-               case 45:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 44;
-                  break;
-               case 46:
-                  if (curChar == 101)
-                     jjstateSet[jjnewStateCnt++] = 45;
-                  break;
-               case 47:
-                  if (curChar == 114)
-                     jjstateSet[jjnewStateCnt++] = 46;
-                  break;
-               case 48:
-                  if (curChar == 103)
-                     jjstateSet[jjnewStateCnt++] = 47;
-                  break;
-               case 51:
-                  if (curChar == 126)
-                     jjstateSet[jjnewStateCnt++] = 50;
-                  break;
-               case 52:
-                  if ((0xffffffffd7ffffffL & l) == 0L)
-                     break;
-                  if (kind > 43)
-                     kind = 43;
-                  jjCheckNAdd(52);
-                  break;
-               case 53:
-                  if (curChar == 91)
-                     jjCheckNAddStates(29, 31);
-                  break;
-               case 54:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 55;
-                  break;
-               case 55:
-                  jjCheckNAddStates(29, 31);
-                  break;
-               case 56:
-                  if ((0xffffffffcfffffffL & l) != 0L)
-                     jjCheckNAddStates(29, 31);
-                  break;
-               case 57:
-                  if (curChar == 93 && kind > 44)
-                     kind = 44;
-                  break;
-               case 73:
-                  if (curChar == 84)
-                     jjstateSet[jjnewStateCnt++] = 74;
-                  break;
-               case 109:
-                  if (curChar == 84)
-                     jjstateSet[jjnewStateCnt++] = 110;
-                  break;
-               case 147:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(77, 78);
-                  break;
-               case 153:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(79, 80);
-                  break;
-               case 159:
-                  if (curChar == 105)
-                     jjCheckNAddStates(72, 76);
-                  break;
-               case 160:
-                  if (curChar == 115 && kind > 28)
-                     kind = 28;
-                  break;
-               case 161:
-                  if (curChar == 116 && kind > 29)
-                     kind = 29;
-                  break;
-               case 162:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 161;
-                  break;
-               case 163:
-                  if (curChar == 110)
-                     jjstateSet[jjnewStateCnt++] = 162;
-                  break;
-               case 165:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 164;
-                  break;
-               case 166:
-                  if (curChar == 101 && kind > 34)
-                     kind = 34;
-                  break;
-               case 167:
-               case 185:
-                  if (curChar == 107)
-                     jjCheckNAdd(166);
-                  break;
-               case 168:
-                  if (curChar == 105)
-                     jjstateSet[jjnewStateCnt++] = 167;
-                  break;
-               case 169:
-                  if (curChar == 108)
-                     jjstateSet[jjnewStateCnt++] = 168;
-                  break;
-               case 171:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 170;
-                  break;
-               case 172:
-                  if (curChar == 110 && kind > 40)
-                     kind = 40;
-                  break;
-               case 173:
-                  if (curChar == 105)
-                     jjCheckNAdd(172);
-                  break;
-               case 175:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 174;
-                  break;
-               case 176:
-                  if (curChar == 108)
-                     jjAddStates(70, 71);
-                  break;
-               case 177:
-                  if (curChar == 110 && kind > 32)
-                     kind = 32;
-                  break;
-               case 178:
-                  if (curChar == 97)
-                     jjstateSet[jjnewStateCnt++] = 177;
-                  break;
-               case 179:
-                  if (curChar == 104)
-                     jjstateSet[jjnewStateCnt++] = 178;
-                  break;
-               case 180:
-                  if (curChar == 116)
-                     jjstateSet[jjnewStateCnt++] = 179;
-                  break;
-               case 182:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 181;
-                  break;
-               case 183:
-                  if (curChar == 115)
-                     jjstateSet[jjnewStateCnt++] = 182;
-                  break;
-               case 184:
-                  if (curChar == 101)
-                     jjstateSet[jjnewStateCnt++] = 183;
-                  break;
-               case 186:
-                  if (curChar == 105)
-                     jjstateSet[jjnewStateCnt++] = 185;
-                  break;
-               default : break;
+            if (kind != 0x7fffffff) {
+                jjmatchedKind = kind;
+                jjmatchedPos = curPos;
+                kind = 0x7fffffff;
             }
-         } 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 0:
-               case 52:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 43)
-                     kind = 43;
-                  jjCheckNAdd(52);
-                  break;
-               case 7:
-               case 8:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(26, 28);
-                  break;
-               case 12:
-               case 13:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(23, 25);
-                  break;
-               case 55:
-               case 56:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddStates(29, 31);
-                  break;
-               default : break;
+            ++curPos;
+            if ((i = jjnewStateCnt) == (startsAt = 187 - (jjnewStateCnt = startsAt))) return curPos;
+            try {
+                curChar = input_stream.readChar();
+            } catch (java.io.IOException e) {
+                return curPos;
             }
-         } while(i != startsAt);
-      }
-      if (kind != 0x7fffffff)
-      {
-         jjmatchedKind = kind;
-         jjmatchedPos = curPos;
-         kind = 0x7fffffff;
-      }
-      ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 187 - (jjnewStateCnt = startsAt)))
-         return curPos;
-      try { curChar = input_stream.readChar(); }
-      catch(java.io.IOException e) { return curPos; }
-   }
-}
-static final int[] jjnextStates = {
-   60, 96, 126, 142, 143, 144, 146, 147, 150, 151, 156, 158, 141, 124, 94, 59, 
-   95, 125, 142, 143, 146, 150, 156, 11, 13, 14, 6, 8, 9, 54, 56, 57, 
-   64, 65, 66, 92, 62, 64, 92, 93, 60, 62, 93, 94, 100, 101, 102, 122, 
-   98, 100, 122, 123, 96, 98, 123, 124, 130, 131, 132, 139, 128, 130, 139, 140, 
-   126, 128, 140, 141, 3, 4, 184, 186, 160, 165, 171, 175, 172, 148, 149, 154, 
-   155, 
-};
-private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
-{
-   switch(hiByte)
-   {
-      case 0:
-         return ((jjbitVec2[i2] & l2) != 0L);
-      default :
-         if ((jjbitVec0[i1] & l1) != 0L)
-            return true;
-         return false;
-   }
-}
+        }
+    }
 
-/** Token literal values. */
-public static final String[] jjstrLiteralImages = {
-"", null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, null, null, null, null, null, null, "\156\165\154\154", 
-"\50", "\51", "\54", null, null, null, null, "\76\75", null, "\74\75", null, 
-"\156\157\164\40\154\151\153\145", "\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", null, "\156\157\164\40\151\156", "\44", null, null, null, };
+    static final int[] jjnextStates = {
+        60, 96, 126, 142, 143, 144, 146, 147, 150, 151, 156, 158, 141, 124, 94, 59,
+        95, 125, 142, 143, 146, 150, 156, 11, 13, 14, 6, 8, 9, 54, 56, 57,
+        64, 65, 66, 92, 62, 64, 92, 93, 60, 62, 93, 94, 100, 101, 102, 122,
+        98, 100, 122, 123, 96, 98, 123, 124, 130, 131, 132, 139, 128, 130, 139, 140,
+        126, 128, 140, 141, 3, 4, 184, 186, 160, 165, 171, 175, 172, 148, 149, 154,
+        155,
+    };
 
-/** Lexer state names. */
-public static final String[] lexStateNames = {
-   "DEFAULT",
-};
-static final long[] jjtoToken = {
-   0x3fffffe7fc01L, 
-};
-static final long[] jjtoSkip = {
-   0x6L, 
-};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[187];
-private final int[] jjstateSet = new int[374];
-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;
-}
+    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;
+        }
+    }
 
-/** Constructor. */
-public FilterParserTokenManager(SimpleCharStream stream, int lexState){
-   this(stream);
-   SwitchTo(lexState);
-}
+    /** Token literal values. */
+    public static final String[] jjstrLiteralImages = {
+        "",
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        null,
+        "\156\165\154\154",
+        "\50",
+        "\51",
+        "\54",
+        null,
+        null,
+        null,
+        null,
+        "\76\75",
+        null,
+        "\74\75",
+        null,
+        "\156\157\164\40\154\151\153\145",
+        "\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",
+        null,
+        "\156\157\164\40\151\156",
+        "\44",
+        null,
+        null,
+        null,
+    };
 
-/** 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 = 187; i-- > 0;)
-      jjrounds[i] = 0x80000000;
-}
+    /** Lexer state names. */
+    public static final String[] lexStateNames = {
+        "DEFAULT",
+    };
 
-/** Reinitialise parser. */
-public void ReInit(SimpleCharStream stream, int lexState)
-{
-   ReInit(stream);
-   SwitchTo(lexState);
-}
+    static final long[] jjtoToken = {
+        0x3fffffe7fc01L,
+    };
+    static final long[] jjtoSkip = {
+        0x6L,
+    };
+    protected SimpleCharStream input_stream;
+    private final int[] jjrounds = new int[187];
+    private final int[] jjstateSet = new int[374];
+    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;
+    }
 
-/** 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;
-}
+    /** Constructor. */
+    public FilterParserTokenManager(SimpleCharStream stream, int lexState) {
+        this(stream);
+        SwitchTo(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);
+    /** Reinitialise parser. */
+    public void ReInit(SimpleCharStream stream) {
+        jjmatchedPos = jjnewStateCnt = 0;
+        curLexState = defaultLexState;
+        input_stream = stream;
+        ReInitRounds();
+    }
 
-   t.beginLine = beginLine;
-   t.endLine = endLine;
-   t.beginColumn = beginColumn;
-   t.endColumn = endColumn;
+    private void ReInitRounds() {
+        int i;
+        jjround = 0x80000001;
+        for (i = 187; i-- > 0; ) jjrounds[i] = 0x80000000;
+    }
 
-   return t;
-}
+    /** Reinitialise parser. */
+    public void ReInit(SimpleCharStream stream, int lexState) {
+        ReInit(stream);
+        SwitchTo(lexState);
+    }
 
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
+    /** 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;
+    }
 
-/** Get the next Token. */
-public Token getNextToken() 
-{
-  Token matchedToken;
-  int curPos = 0;
+    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);
 
-  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;
+        t.beginLine = beginLine;
+        t.endLine = endLine;
+        t.beginColumn = beginColumn;
+        t.endColumn = endColumn;
 
-   try { input_stream.backup(0);
-      while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
-         curChar = input_stream.BeginToken();
-   }
-   catch (java.io.IOException e1) { continue EOFLoop; }
-   jjmatchedKind = 0x7fffffff;
-   jjmatchedPos = 0;
-   curPos = jjMoveStringLiteralDfa0_0();
-   if (jjmatchedPos == 0 && jjmatchedKind > 45)
-   {
-      jjmatchedKind = 45;
-   }
-   if (jjmatchedKind != 0x7fffffff)
-   {
-      if (jjmatchedPos + 1 < curPos)
-         input_stream.backup(curPos - jjmatchedPos - 1);
-      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
-      {
-         matchedToken = jjFillToken();
-         TokenLexicalActions(matchedToken);
-         return matchedToken;
-      }
-      else
-      {
-         continue EOFLoop;
-      }
-   }
-   int error_line = input_stream.getEndLine();
-   int error_column = input_stream.getEndColumn();
-   String error_after = null;
-   boolean EOFSeen = false;
-   try { input_stream.readChar(); input_stream.backup(1); }
-   catch (java.io.IOException e1) {
-      EOFSeen = true;
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-      if (curChar == '\n' || curChar == '\r') {
-         error_line++;
-         error_column = 0;
-      }
-      else
-         error_column++;
-   }
-   if (!EOFSeen) {
-      input_stream.backup(1);
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-   }
-   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-  }
-}
+        return t;
+    }
 
-void TokenLexicalActions(Token matchedToken)
-{
-   switch(jjmatchedKind)
-   {
-      case 18 :
-        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
-         break;
-      case 44 :
-        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
-                                                        matchedToken.image = image.substring(1, lengthOfMatch - 1);
-         break;
-      default :
-         break;
-   }
-}
-private void jjCheckNAdd(int state)
-{
-   if (jjrounds[state] != jjround)
-   {
-      jjstateSet[jjnewStateCnt++] = state;
-      jjrounds[state] = jjround;
-   }
-}
-private void jjAddStates(int start, int end)
-{
-   do {
-      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-   } while (start++ != end);
-}
-private void jjCheckNAddTwoStates(int state1, int state2)
-{
-   jjCheckNAdd(state1);
-   jjCheckNAdd(state2);
-}
+    int curLexState = 0;
+    int defaultLexState = 0;
+    int jjnewStateCnt;
+    int jjround;
+    int jjmatchedPos;
+    int jjmatchedKind;
 
-private void jjCheckNAddStates(int start, int end)
-{
-   do {
-      jjCheckNAdd(jjnextStates[start]);
-   } while (start++ != end);
-}
+    /** Get the next Token. */
+    public Token getNextToken() {
+        Token matchedToken;
+        int curPos = 0;
+
+        EOFLoop:
+        for (; ; ) {
+            try {
+                curChar = input_stream.BeginToken();
+            } catch (java.io.IOException e) {
+                jjmatchedKind = 0;
+                matchedToken = jjFillToken();
+                return matchedToken;
+            }
+            image = jjimage;
+            image.setLength(0);
+            jjimageLen = 0;
+
+            try {
+                input_stream.backup(0);
+                while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L) curChar = input_stream.BeginToken();
+            } catch (java.io.IOException e1) {
+                continue EOFLoop;
+            }
+            jjmatchedKind = 0x7fffffff;
+            jjmatchedPos = 0;
+            curPos = jjMoveStringLiteralDfa0_0();
+            if (jjmatchedPos == 0 && jjmatchedKind > 45) {
+                jjmatchedKind = 45;
+            }
+            if (jjmatchedKind != 0x7fffffff) {
+                if (jjmatchedPos + 1 < curPos) input_stream.backup(curPos - jjmatchedPos - 1);
+                if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
+                    matchedToken = jjFillToken();
+                    TokenLexicalActions(matchedToken);
+                    return matchedToken;
+                } else {
+                    continue EOFLoop;
+                }
+            }
+            int error_line = input_stream.getEndLine();
+            int error_column = input_stream.getEndColumn();
+            String error_after = null;
+            boolean EOFSeen = false;
+            try {
+                input_stream.readChar();
+                input_stream.backup(1);
+            } catch (java.io.IOException e1) {
+                EOFSeen = true;
+                error_after = curPos <= 1 ? "" : input_stream.GetImage();
+                if (curChar == '\n' || curChar == '\r') {
+                    error_line++;
+                    error_column = 0;
+                } else error_column++;
+            }
+            if (!EOFSeen) {
+                input_stream.backup(1);
+                error_after = curPos <= 1 ? "" : input_stream.GetImage();
+            }
+            throw new TokenMgrError(
+                    EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+        }
+    }
+
+    void TokenLexicalActions(Token matchedToken) {
+        switch (jjmatchedKind) {
+            case 18:
+                image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                matchedToken.image = image.substring(1, lengthOfMatch - 1);
+                break;
+            case 44:
+                image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                matchedToken.image = image.substring(1, lengthOfMatch - 1);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void jjCheckNAdd(int state) {
+        if (jjrounds[state] != jjround) {
+            jjstateSet[jjnewStateCnt++] = state;
+            jjrounds[state] = jjround;
+        }
+    }
+
+    private void jjAddStates(int start, int end) {
+        do {
+            jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+        } while (start++ != end);
+    }
+
+    private void jjCheckNAddTwoStates(int state1, int state2) {
+        jjCheckNAdd(state1);
+        jjCheckNAdd(state2);
+    }
 
+    private void jjCheckNAddStates(int start, int end) {
+        do {
+            jjCheckNAdd(jjnextStates[start]);
+        } while (start++ != end);
+    }
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/ParseException.java b/src/main/java/org/apache/sling/resource/filter/impl/script/ParseException.java
index bcb102c..76b1cfb 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/ParseException.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/ParseException.java
@@ -1,5 +1,21 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 5.0 */
-/* JavaCCOptions:KEEP_LINE_COL=null */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
 /**
@@ -13,175 +29,165 @@ package org.apache.sling.resource.filter.impl.script;
  */
 public class ParseException extends Exception {
 
-  /**
-   * The version identifier for this Serializable class.
-   * Increment only if the <i>serialized</i> form of the
-   * class changes.
-   */
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * This constructor is used by the method "generateParseException"
-   * in the generated parser.  Calling this constructor generates
-   * a new object of this type with the fields "currentToken",
-   * "expectedTokenSequences", and "tokenImage" set.
-   */
-  public ParseException(Token currentTokenVal,
-                        int[][] expectedTokenSequencesVal,
-                        String[] tokenImageVal
-                       )
-  {
-    super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));
-    currentToken = currentTokenVal;
-    expectedTokenSequences = expectedTokenSequencesVal;
-    tokenImage = tokenImageVal;
-  }
+    /**
+     * The version identifier for this Serializable class.
+     * Increment only if the <i>serialized</i> form of the
+     * class changes.
+     */
+    private static final long serialVersionUID = 1L;
 
-  /**
-   * The following constructors are for use by you for whatever
-   * purpose you can think of.  Constructing the exception in this
-   * manner makes the exception behave in the normal way - i.e., as
-   * documented in the class "Throwable".  The fields "errorToken",
-   * "expectedTokenSequences", and "tokenImage" do not contain
-   * relevant information.  The JavaCC generated code does not use
-   * these constructors.
-   */
-
-  public ParseException() {
-    super();
-  }
+    /**
+     * This constructor is used by the method "generateParseException"
+     * in the generated parser.  Calling this constructor generates
+     * a new object of this type with the fields "currentToken",
+     * "expectedTokenSequences", and "tokenImage" set.
+     */
+    public ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, String[] tokenImageVal) {
+        super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));
+        currentToken = currentTokenVal;
+        expectedTokenSequences = expectedTokenSequencesVal;
+        tokenImage = tokenImageVal;
+    }
 
-  /** Constructor with message. */
-  public ParseException(String message) {
-    super(message);
-  }
+    /**
+     * The following constructors are for use by you for whatever
+     * purpose you can think of.  Constructing the exception in this
+     * manner makes the exception behave in the normal way - i.e., as
+     * documented in the class "Throwable".  The fields "errorToken",
+     * "expectedTokenSequences", and "tokenImage" do not contain
+     * relevant information.  The JavaCC generated code does not use
+     * these constructors.
+     */
+    public ParseException() {
+        super();
+    }
 
+    /** Constructor with message. */
+    public ParseException(String message) {
+        super(message);
+    }
 
-  /**
-   * This is the last token that has been consumed successfully.  If
-   * this object has been created due to a parse error, the token
-   * followng this token will (therefore) be the first error token.
-   */
-  public Token currentToken;
+    /**
+     * This is the last token that has been consumed successfully.  If
+     * this object has been created due to a parse error, the token
+     * followng this token will (therefore) be the first error token.
+     */
+    public Token currentToken;
 
-  /**
-   * Each entry in this array is an array of integers.  Each array
-   * of integers represents a sequence of tokens (by their ordinal
-   * values) that is expected at this point of the parse.
-   */
-  public int[][] expectedTokenSequences;
+    /**
+     * Each entry in this array is an array of integers.  Each array
+     * of integers represents a sequence of tokens (by their ordinal
+     * values) that is expected at this point of the parse.
+     */
+    public int[][] expectedTokenSequences;
 
-  /**
-   * This is a reference to the "tokenImage" array of the generated
-   * parser within which the parse error occurred.  This array is
-   * defined in the generated ...Constants interface.
-   */
-  public String[] tokenImage;
+    /**
+     * This is a reference to the "tokenImage" array of the generated
+     * parser within which the parse error occurred.  This array is
+     * defined in the generated ...Constants interface.
+     */
+    public String[] tokenImage;
 
-  /**
-   * It uses "currentToken" and "expectedTokenSequences" to generate a parse
-   * error message and returns it.  If this object has been created
-   * due to a parse error, and you do not catch it (it gets thrown
-   * from the parser) the correct error message
-   * gets displayed.
-   */
-  private static String initialise(Token currentToken,
-                           int[][] expectedTokenSequences,
-                           String[] tokenImage) {
-    String eol = System.getProperty("line.separator", "\n");
-    StringBuffer expected = new StringBuffer();
-    int maxSize = 0;
-    for (int i = 0; i < expectedTokenSequences.length; i++) {
-      if (maxSize < expectedTokenSequences[i].length) {
-        maxSize = expectedTokenSequences[i].length;
-      }
-      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
-        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
-      }
-      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
-        expected.append("...");
-      }
-      expected.append(eol).append("    ");
-    }
-    String retval = "Encountered \"";
-    Token tok = currentToken.next;
-    for (int i = 0; i < maxSize; i++) {
-      if (i != 0) retval += " ";
-      if (tok.kind == 0) {
-        retval += tokenImage[0];
-        break;
-      }
-      retval += " " + tokenImage[tok.kind];
-      retval += " \"";
-      retval += add_escapes(tok.image);
-      retval += " \"";
-      tok = tok.next;
-    }
-    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
-    retval += "." + eol;
-    if (expectedTokenSequences.length == 1) {
-      retval += "Was expecting:" + eol + "    ";
-    } else {
-      retval += "Was expecting one of:" + eol + "    ";
+    /**
+     * It uses "currentToken" and "expectedTokenSequences" to generate a parse
+     * error message and returns it.  If this object has been created
+     * due to a parse error, and you do not catch it (it gets thrown
+     * from the parser) the correct error message
+     * gets displayed.
+     */
+    private static String initialise(Token currentToken, int[][] expectedTokenSequences, String[] tokenImage) {
+        String eol = System.getProperty("line.separator", "\n");
+        StringBuffer expected = new StringBuffer();
+        int maxSize = 0;
+        for (int i = 0; i < expectedTokenSequences.length; i++) {
+            if (maxSize < expectedTokenSequences[i].length) {
+                maxSize = expectedTokenSequences[i].length;
+            }
+            for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+                expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
+            }
+            if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+                expected.append("...");
+            }
+            expected.append(eol).append("    ");
+        }
+        String retval = "Encountered \"";
+        Token tok = currentToken.next;
+        for (int i = 0; i < maxSize; i++) {
+            if (i != 0) retval += " ";
+            if (tok.kind == 0) {
+                retval += tokenImage[0];
+                break;
+            }
+            retval += " " + tokenImage[tok.kind];
+            retval += " \"";
+            retval += add_escapes(tok.image);
+            retval += " \"";
+            tok = tok.next;
+        }
+        retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+        retval += "." + eol;
+        if (expectedTokenSequences.length == 1) {
+            retval += "Was expecting:" + eol + "    ";
+        } else {
+            retval += "Was expecting one of:" + eol + "    ";
+        }
+        retval += expected.toString();
+        return retval;
     }
-    retval += expected.toString();
-    return retval;
-  }
 
-  /**
-   * The end of line string for this machine.
-   */
-  protected String eol = System.getProperty("line.separator", "\n");
+    /**
+     * The end of line string for this machine.
+     */
+    protected String eol = System.getProperty("line.separator", "\n");
 
-  /**
-   * Used to convert raw characters to their escaped version
-   * when these raw version cannot be used as part of an ASCII
-   * string literal.
-   */
-  static String add_escapes(String str) {
-      StringBuffer retval = new StringBuffer();
-      char ch;
-      for (int i = 0; i < str.length(); i++) {
-        switch (str.charAt(i))
-        {
-           case 0 :
-              continue;
-           case '\b':
-              retval.append("\\b");
-              continue;
-           case '\t':
-              retval.append("\\t");
-              continue;
-           case '\n':
-              retval.append("\\n");
-              continue;
-           case '\f':
-              retval.append("\\f");
-              continue;
-           case '\r':
-              retval.append("\\r");
-              continue;
-           case '\"':
-              retval.append("\\\"");
-              continue;
-           case '\'':
-              retval.append("\\\'");
-              continue;
-           case '\\':
-              retval.append("\\\\");
-              continue;
-           default:
-              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-                 String s = "0000" + Integer.toString(ch, 16);
-                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-              } else {
-                 retval.append(ch);
-              }
-              continue;
+    /**
+     * Used to convert raw characters to their escaped version
+     * when these raw version cannot be used as part of an ASCII
+     * string literal.
+     */
+    static String add_escapes(String str) {
+        StringBuffer retval = new StringBuffer();
+        char ch;
+        for (int i = 0; i < str.length(); i++) {
+            switch (str.charAt(i)) {
+                case 0:
+                    continue;
+                case '\b':
+                    retval.append("\\b");
+                    continue;
+                case '\t':
+                    retval.append("\\t");
+                    continue;
+                case '\n':
+                    retval.append("\\n");
+                    continue;
+                case '\f':
+                    retval.append("\\f");
+                    continue;
+                case '\r':
+                    retval.append("\\r");
+                    continue;
+                case '\"':
+                    retval.append("\\\"");
+                    continue;
+                case '\'':
+                    retval.append("\\\'");
+                    continue;
+                case '\\':
+                    retval.append("\\\\");
+                    continue;
+                default:
+                    if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                        String s = "0000" + Integer.toString(ch, 16);
+                        retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+                    } else {
+                        retval.append(ch);
+                    }
+                    continue;
+            }
         }
-      }
-      return retval.toString();
-   }
-
+        return retval.toString();
+    }
 }
 /* JavaCC - OriginalChecksum=7990cc1c323066975a65d0828d2118e8 (do not edit this line) */
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/SimpleCharStream.java b/src/main/java/org/apache/sling/resource/filter/impl/script/SimpleCharStream.java
index 4562b55..2ca429b 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/SimpleCharStream.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/SimpleCharStream.java
@@ -1,471 +1,418 @@
-/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */
-/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
 /**
  * An implementation of interface CharStream, where the stream is assumed to
  * contain only ASCII characters (without unicode processing).
  */
+public class SimpleCharStream {
+    /** Whether parser is static. */
+    public static final boolean staticFlag = false;
+
+    int bufsize;
+    int available;
+    int tokenBegin;
+    /** Position in buffer. */
+    public int bufpos = -1;
+
+    protected int bufline[];
+    protected int bufcolumn[];
+
+    protected int column = 0;
+    protected int line = 1;
+
+    protected boolean prevCharIsCR = false;
+    protected boolean prevCharIsLF = false;
+
+    protected java.io.Reader inputStream;
+
+    protected char[] buffer;
+    protected int maxNextCharInd = 0;
+    protected int inBuf = 0;
+    protected int tabSize = 8;
+
+    protected void setTabSize(int i) {
+        tabSize = i;
+    }
+
+    protected int getTabSize(int i) {
+        return tabSize;
+    }
+
+    protected void ExpandBuff(boolean wrapAround) {
+        char[] newbuffer = new char[bufsize + 2048];
+        int newbufline[] = new int[bufsize + 2048];
+        int newbufcolumn[] = new int[bufsize + 2048];
+
+        try {
+            if (wrapAround) {
+                System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+                System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
+                buffer = newbuffer;
+
+                System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+                System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+                bufline = newbufline;
 
-public class SimpleCharStream
-{
-/** Whether parser is static. */
-  public static final boolean staticFlag = false;
-  int bufsize;
-  int available;
-  int tokenBegin;
-/** Position in buffer. */
-  public int bufpos = -1;
-  protected int bufline[];
-  protected int bufcolumn[];
-
-  protected int column = 0;
-  protected int line = 1;
-
-  protected boolean prevCharIsCR = false;
-  protected boolean prevCharIsLF = false;
-
-  protected java.io.Reader inputStream;
-
-  protected char[] buffer;
-  protected int maxNextCharInd = 0;
-  protected int inBuf = 0;
-  protected int tabSize = 8;
-
-  protected void setTabSize(int i) { tabSize = i; }
-  protected int getTabSize(int i) { return tabSize; }
-
-
-  protected void ExpandBuff(boolean wrapAround)
-  {
-    char[] newbuffer = new char[bufsize + 2048];
-    int newbufline[] = new int[bufsize + 2048];
-    int newbufcolumn[] = new int[bufsize + 2048];
-
-    try
-    {
-      if (wrapAround)
-      {
-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
-        buffer = newbuffer;
-
-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
-        bufline = newbufline;
-
-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
-        bufcolumn = newbufcolumn;
-
-        maxNextCharInd = (bufpos += (bufsize - tokenBegin));
-      }
-      else
-      {
-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-        buffer = newbuffer;
-
-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-        bufline = newbufline;
-
-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-        bufcolumn = newbufcolumn;
-
-        maxNextCharInd = (bufpos -= tokenBegin);
-      }
-    }
-    catch (Throwable t)
-    {
-      throw new Error(t.getMessage());
-    }
-
-
-    bufsize += 2048;
-    available = bufsize;
-    tokenBegin = 0;
-  }
-
-  protected void FillBuff() throws java.io.IOException
-  {
-    if (maxNextCharInd == available)
-    {
-      if (available == bufsize)
-      {
-        if (tokenBegin > 2048)
-        {
-          bufpos = maxNextCharInd = 0;
-          available = tokenBegin;
+                System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+                System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+                bufcolumn = newbufcolumn;
+
+                maxNextCharInd = (bufpos += (bufsize - tokenBegin));
+            } else {
+                System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+                buffer = newbuffer;
+
+                System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+                bufline = newbufline;
+
+                System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+                bufcolumn = newbufcolumn;
+
+                maxNextCharInd = (bufpos -= tokenBegin);
+            }
+        } catch (Throwable t) {
+            throw new Error(t.getMessage());
         }
-        else if (tokenBegin < 0)
-          bufpos = maxNextCharInd = 0;
-        else
-          ExpandBuff(false);
-      }
-      else if (available > tokenBegin)
+
+        bufsize += 2048;
         available = bufsize;
-      else if ((tokenBegin - available) < 2048)
-        ExpandBuff(true);
-      else
-        available = tokenBegin;
-    }
-
-    int i;
-    try {
-      if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)
-      {
-        inputStream.close();
-        throw new java.io.IOException();
-      }
-      else
-        maxNextCharInd += i;
-      return;
-    }
-    catch(java.io.IOException e) {
-      --bufpos;
-      backup(0);
-      if (tokenBegin == -1)
+        tokenBegin = 0;
+    }
+
+    protected void FillBuff() throws java.io.IOException {
+        if (maxNextCharInd == available) {
+            if (available == bufsize) {
+                if (tokenBegin > 2048) {
+                    bufpos = maxNextCharInd = 0;
+                    available = tokenBegin;
+                } else if (tokenBegin < 0) bufpos = maxNextCharInd = 0;
+                else ExpandBuff(false);
+            } else if (available > tokenBegin) available = bufsize;
+            else if ((tokenBegin - available) < 2048) ExpandBuff(true);
+            else available = tokenBegin;
+        }
+
+        int i;
+        try {
+            if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) {
+                inputStream.close();
+                throw new java.io.IOException();
+            } else maxNextCharInd += i;
+            return;
+        } catch (java.io.IOException e) {
+            --bufpos;
+            backup(0);
+            if (tokenBegin == -1) tokenBegin = bufpos;
+            throw e;
+        }
+    }
+
+    /** Start. */
+    public char BeginToken() throws java.io.IOException {
+        tokenBegin = -1;
+        char c = readChar();
         tokenBegin = bufpos;
-      throw e;
-    }
-  }
-
-/** Start. */
-  public char BeginToken() throws java.io.IOException
-  {
-    tokenBegin = -1;
-    char c = readChar();
-    tokenBegin = bufpos;
-
-    return c;
-  }
-
-  protected void UpdateLineColumn(char c)
-  {
-    column++;
-
-    if (prevCharIsLF)
-    {
-      prevCharIsLF = false;
-      line += (column = 1);
-    }
-    else if (prevCharIsCR)
-    {
-      prevCharIsCR = false;
-      if (c == '\n')
-      {
-        prevCharIsLF = true;
-      }
-      else
-        line += (column = 1);
-    }
-
-    switch (c)
-    {
-      case '\r' :
-        prevCharIsCR = true;
-        break;
-      case '\n' :
-        prevCharIsLF = true;
-        break;
-      case '\t' :
-        column--;
-        column += (tabSize - (column % tabSize));
-        break;
-      default :
-        break;
-    }
-
-    bufline[bufpos] = line;
-    bufcolumn[bufpos] = column;
-  }
-
-/** Read a character. */
-  public char readChar() throws java.io.IOException
-  {
-    if (inBuf > 0)
-    {
-      --inBuf;
-
-      if (++bufpos == bufsize)
-        bufpos = 0;
-
-      return buffer[bufpos];
-    }
-
-    if (++bufpos >= maxNextCharInd)
-      FillBuff();
-
-    char c = buffer[bufpos];
-
-    UpdateLineColumn(c);
-    return c;
-  }
-
-  @Deprecated
-  /**
-   * @deprecated
-   * @see #getEndColumn
-   */
-
-  public int getColumn() {
-    return bufcolumn[bufpos];
-  }
-
-  @Deprecated
-  /**
-   * @deprecated
-   * @see #getEndLine
-   */
-
-  public int getLine() {
-    return bufline[bufpos];
-  }
-
-  /** Get token end column number. */
-  public int getEndColumn() {
-    return bufcolumn[bufpos];
-  }
-
-  /** Get token end line number. */
-  public int getEndLine() {
-     return bufline[bufpos];
-  }
-
-  /** Get token beginning column number. */
-  public int getBeginColumn() {
-    return bufcolumn[tokenBegin];
-  }
-
-  /** Get token beginning line number. */
-  public int getBeginLine() {
-    return bufline[tokenBegin];
-  }
-
-/** Backup a number of characters. */
-  public void backup(int amount) {
-
-    inBuf += amount;
-    if ((bufpos -= amount) < 0)
-      bufpos += bufsize;
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.Reader dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    available = bufsize = buffersize;
-    buffer = new char[buffersize];
-    bufline = new int[buffersize];
-    bufcolumn = new int[buffersize];
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.Reader dstream, int startline,
-                          int startcolumn)
-  {
-    this(dstream, startline, startcolumn, 4096);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.Reader dstream)
-  {
-    this(dstream, 1, 1, 4096);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.Reader dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    if (buffer == null || buffersize != buffer.length)
-    {
-      available = bufsize = buffersize;
-      buffer = new char[buffersize];
-      bufline = new int[buffersize];
-      bufcolumn = new int[buffersize];
-    }
-    prevCharIsLF = prevCharIsCR = false;
-    tokenBegin = inBuf = maxNextCharInd = 0;
-    bufpos = -1;
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.Reader dstream, int startline,
-                     int startcolumn)
-  {
-    ReInit(dstream, startline, startcolumn, 4096);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.Reader dstream)
-  {
-    ReInit(dstream, 1, 1, 4096);
-  }
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
-  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
-  {
-    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
-                          int startcolumn) throws java.io.UnsupportedEncodingException
-  {
-    this(dstream, encoding, startline, startcolumn, 4096);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream, int startline,
-                          int startcolumn)
-  {
-    this(dstream, startline, startcolumn, 4096);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
-  {
-    this(dstream, encoding, 1, 1, 4096);
-  }
-
-  /** Constructor. */
-  public SimpleCharStream(java.io.InputStream dstream)
-  {
-    this(dstream, 1, 1, 4096);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
-                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
-  {
-    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream, int startline,
-                          int startcolumn, int buffersize)
-  {
-    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
-  {
-    ReInit(dstream, encoding, 1, 1, 4096);
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream)
-  {
-    ReInit(dstream, 1, 1, 4096);
-  }
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
-                     int startcolumn) throws java.io.UnsupportedEncodingException
-  {
-    ReInit(dstream, encoding, startline, startcolumn, 4096);
-  }
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream dstream, int startline,
-                     int startcolumn)
-  {
-    ReInit(dstream, startline, startcolumn, 4096);
-  }
-  /** Get token literal value. */
-  public String GetImage()
-  {
-    if (bufpos >= tokenBegin)
-      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
-    else
-      return new String(buffer, tokenBegin, bufsize - tokenBegin) +
-                            new String(buffer, 0, bufpos + 1);
-  }
-
-  /** Get the suffix. */
-  public char[] GetSuffix(int len)
-  {
-    char[] ret = new char[len];
-
-    if ((bufpos + 1) >= len)
-      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
-    else
-    {
-      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
-                                                        len - bufpos - 1);
-      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
-    }
-
-    return ret;
-  }
-
-  /** Reset buffer when finished. */
-  public void Done()
-  {
-    buffer = null;
-    bufline = null;
-    bufcolumn = null;
-  }
-
-  /**
-   * Method to adjust line and column numbers for the start of a token.
-   */
-  public void adjustBeginLineColumn(int newLine, int newCol)
-  {
-    int start = tokenBegin;
-    int len;
-
-    if (bufpos >= tokenBegin)
-    {
-      len = bufpos - tokenBegin + inBuf + 1;
-    }
-    else
-    {
-      len = bufsize - tokenBegin + bufpos + 1 + inBuf;
-    }
-
-    int i = 0, j = 0, k = 0;
-    int nextColDiff = 0, columnDiff = 0;
-
-    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
-    {
-      bufline[j] = newLine;
-      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
-      bufcolumn[j] = newCol + columnDiff;
-      columnDiff = nextColDiff;
-      i++;
-    }
-
-    if (i < len)
-    {
-      bufline[j] = newLine++;
-      bufcolumn[j] = newCol + columnDiff;
-
-      while (i++ < len)
-      {
-        if (bufline[j = start % bufsize] != bufline[++start % bufsize])
-          bufline[j] = newLine++;
-        else
-          bufline[j] = newLine;
-      }
-    }
-
-    line = bufline[j];
-    column = bufcolumn[j];
-  }
 
+        return c;
+    }
+
+    protected void UpdateLineColumn(char c) {
+        column++;
+
+        if (prevCharIsLF) {
+            prevCharIsLF = false;
+            line += (column = 1);
+        } else if (prevCharIsCR) {
+            prevCharIsCR = false;
+            if (c == '\n') {
+                prevCharIsLF = true;
+            } else line += (column = 1);
+        }
+
+        switch (c) {
+            case '\r':
+                prevCharIsCR = true;
+                break;
+            case '\n':
+                prevCharIsLF = true;
+                break;
+            case '\t':
+                column--;
+                column += (tabSize - (column % tabSize));
+                break;
+            default:
+                break;
+        }
+
+        bufline[bufpos] = line;
+        bufcolumn[bufpos] = column;
+    }
+
+    /** Read a character. */
+    public char readChar() throws java.io.IOException {
+        if (inBuf > 0) {
+            --inBuf;
+
+            if (++bufpos == bufsize) bufpos = 0;
+
+            return buffer[bufpos];
+        }
+
+        if (++bufpos >= maxNextCharInd) FillBuff();
+
+        char c = buffer[bufpos];
+
+        UpdateLineColumn(c);
+        return c;
+    }
+
+    @Deprecated
+    /**
+     * @deprecated
+     * @see #getEndColumn
+     */
+    public int getColumn() {
+        return bufcolumn[bufpos];
+    }
+
+    @Deprecated
+    /**
+     * @deprecated
+     * @see #getEndLine
+     */
+    public int getLine() {
+        return bufline[bufpos];
+    }
+
+    /** Get token end column number. */
+    public int getEndColumn() {
+        return bufcolumn[bufpos];
+    }
+
+    /** Get token end line number. */
+    public int getEndLine() {
+        return bufline[bufpos];
+    }
+
+    /** Get token beginning column number. */
+    public int getBeginColumn() {
+        return bufcolumn[tokenBegin];
+    }
+
+    /** Get token beginning line number. */
+    public int getBeginLine() {
+        return bufline[tokenBegin];
+    }
+
+    /** Backup a number of characters. */
+    public void backup(int amount) {
+
+        inBuf += amount;
+        if ((bufpos -= amount) < 0) bufpos += bufsize;
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {
+        inputStream = dstream;
+        line = startline;
+        column = startcolumn - 1;
+
+        available = bufsize = buffersize;
+        buffer = new char[buffersize];
+        bufline = new int[buffersize];
+        bufcolumn = new int[buffersize];
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn) {
+        this(dstream, startline, startcolumn, 4096);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.Reader dstream) {
+        this(dstream, 1, 1, 4096);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {
+        inputStream = dstream;
+        line = startline;
+        column = startcolumn - 1;
+
+        if (buffer == null || buffersize != buffer.length) {
+            available = bufsize = buffersize;
+            buffer = new char[buffersize];
+            bufline = new int[buffersize];
+            bufcolumn = new int[buffersize];
+        }
+        prevCharIsLF = prevCharIsCR = false;
+        tokenBegin = inBuf = maxNextCharInd = 0;
+        bufpos = -1;
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.Reader dstream, int startline, int startcolumn) {
+        ReInit(dstream, startline, startcolumn, 4096);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.Reader dstream) {
+        ReInit(dstream, 1, 1, 4096);
+    }
+    /** Constructor. */
+    public SimpleCharStream(
+            java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)
+            throws java.io.UnsupportedEncodingException {
+        this(
+                encoding == null
+                        ? new java.io.InputStreamReader(dstream)
+                        : new java.io.InputStreamReader(dstream, encoding),
+                startline,
+                startcolumn,
+                buffersize);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {
+        this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, int startcolumn)
+            throws java.io.UnsupportedEncodingException {
+        this(dstream, encoding, startline, startcolumn, 4096);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn) {
+        this(dstream, startline, startcolumn, 4096);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {
+        this(dstream, encoding, 1, 1, 4096);
+    }
+
+    /** Constructor. */
+    public SimpleCharStream(java.io.InputStream dstream) {
+        this(dstream, 1, 1, 4096);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)
+            throws java.io.UnsupportedEncodingException {
+        ReInit(
+                encoding == null
+                        ? new java.io.InputStreamReader(dstream)
+                        : new java.io.InputStreamReader(dstream, encoding),
+                startline,
+                startcolumn,
+                buffersize);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {
+        ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {
+        ReInit(dstream, encoding, 1, 1, 4096);
+    }
+
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream) {
+        ReInit(dstream, 1, 1, 4096);
+    }
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn)
+            throws java.io.UnsupportedEncodingException {
+        ReInit(dstream, encoding, startline, startcolumn, 4096);
+    }
+    /** Reinitialise. */
+    public void ReInit(java.io.InputStream dstream, int startline, int startcolumn) {
+        ReInit(dstream, startline, startcolumn, 4096);
+    }
+    /** Get token literal value. */
+    public String GetImage() {
+        if (bufpos >= tokenBegin) return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+        else return new String(buffer, tokenBegin, bufsize - tokenBegin) + new String(buffer, 0, bufpos + 1);
+    }
+
+    /** Get the suffix. */
+    public char[] GetSuffix(int len) {
+        char[] ret = new char[len];
+
+        if ((bufpos + 1) >= len) System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+        else {
+            System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, len - bufpos - 1);
+            System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+        }
+
+        return ret;
+    }
+
+    /** Reset buffer when finished. */
+    public void Done() {
+        buffer = null;
+        bufline = null;
+        bufcolumn = null;
+    }
+
+    /**
+     * Method to adjust line and column numbers for the start of a token.
+     */
+    public void adjustBeginLineColumn(int newLine, int newCol) {
+        int start = tokenBegin;
+        int len;
+
+        if (bufpos >= tokenBegin) {
+            len = bufpos - tokenBegin + inBuf + 1;
+        } else {
+            len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+        }
+
+        int i = 0, j = 0, k = 0;
+        int nextColDiff = 0, columnDiff = 0;
+
+        while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) {
+            bufline[j] = newLine;
+            nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+            bufcolumn[j] = newCol + columnDiff;
+            columnDiff = nextColDiff;
+            i++;
+        }
+
+        if (i < len) {
+            bufline[j] = newLine++;
+            bufcolumn[j] = newCol + columnDiff;
+
+            while (i++ < len) {
+                if (bufline[j = start % bufsize] != bufline[++start % bufsize]) bufline[j] = newLine++;
+                else bufline[j] = newLine;
+            }
+        }
+
+        line = bufline[j];
+        column = bufcolumn[j];
+    }
 }
 /* JavaCC - OriginalChecksum=1850574c97b96fb7da7c0739a62db015 (do not edit this line) */
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/Token.java b/src/main/java/org/apache/sling/resource/filter/impl/script/Token.java
index df61628..d8fca90 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/Token.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/Token.java
@@ -1,131 +1,140 @@
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 5.0 */
-/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
 /**
  * Describes the input token stream.
  */
-
 public class Token implements java.io.Serializable {
 
-  /**
-   * The version identifier for this Serializable class.
-   * Increment only if the <i>serialized</i> form of the
-   * class changes.
-   */
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * An integer that describes the kind of this token.  This numbering
-   * system is determined by JavaCCParser, and a table of these numbers is
-   * stored in the file ...Constants.java.
-   */
-  public int kind;
-
-  /** The line number of the first character of this Token. */
-  public int beginLine;
-  /** The column number of the first character of this Token. */
-  public int beginColumn;
-  /** The line number of the last character of this Token. */
-  public int endLine;
-  /** The column number of the last character of this Token. */
-  public int endColumn;
-
-  /**
-   * The string image of the token.
-   */
-  public String image;
-
-  /**
-   * A reference to the next regular (non-special) token from the input
-   * stream.  If this is the last token from the input stream, or if the
-   * token manager has not read tokens beyond this one, this field is
-   * set to null.  This is true only if this token is also a regular
-   * token.  Otherwise, see below for a description of the contents of
-   * this field.
-   */
-  public Token next;
-
-  /**
-   * This field is used to access special tokens that occur prior to this
-   * token, but after the immediately preceding regular (non-special) token.
-   * If there are no such special tokens, this field is set to null.
-   * When there are more than one such special token, this field refers
-   * to the last of these special tokens, which in turn refers to the next
-   * previous special token through its specialToken field, and so on
-   * until the first special token (whose specialToken field is null).
-   * The next fields of special tokens refer to other special tokens that
-   * immediately follow it (without an intervening regular token).  If there
-   * is no such token, this field is null.
-   */
-  public Token specialToken;
-
-  /**
-   * An optional attribute value of the Token.
-   * Tokens which are not used as syntactic sugar will often contain
-   * meaningful values that will be used later on by the compiler or
-   * interpreter. This attribute value is often different from the image.
-   * Any subclass of Token that actually wants to return a non-null value can
-   * override this method as appropriate.
-   */
-  public Object getValue() {
-    return null;
-  }
-
-  /**
-   * No-argument constructor
-   */
-  public Token() {}
+    /**
+     * The version identifier for this Serializable class.
+     * Increment only if the <i>serialized</i> form of the
+     * class changes.
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * An integer that describes the kind of this token.  This numbering
+     * system is determined by JavaCCParser, and a table of these numbers is
+     * stored in the file ...Constants.java.
+     */
+    public int kind;
+
+    /** The line number of the first character of this Token. */
+    public int beginLine;
+    /** The column number of the first character of this Token. */
+    public int beginColumn;
+    /** The line number of the last character of this Token. */
+    public int endLine;
+    /** The column number of the last character of this Token. */
+    public int endColumn;
+
+    /**
+     * The string image of the token.
+     */
+    public String image;
+
+    /**
+     * A reference to the next regular (non-special) token from the input
+     * stream.  If this is the last token from the input stream, or if the
+     * token manager has not read tokens beyond this one, this field is
+     * set to null.  This is true only if this token is also a regular
+     * token.  Otherwise, see below for a description of the contents of
+     * this field.
+     */
+    public Token next;
+
+    /**
+     * This field is used to access special tokens that occur prior to this
+     * token, but after the immediately preceding regular (non-special) token.
+     * If there are no such special tokens, this field is set to null.
+     * When there are more than one such special token, this field refers
+     * to the last of these special tokens, which in turn refers to the next
+     * previous special token through its specialToken field, and so on
+     * until the first special token (whose specialToken field is null).
+     * The next fields of special tokens refer to other special tokens that
+     * immediately follow it (without an intervening regular token).  If there
+     * is no such token, this field is null.
+     */
+    public Token specialToken;
+
+    /**
+     * An optional attribute value of the Token.
+     * Tokens which are not used as syntactic sugar will often contain
+     * meaningful values that will be used later on by the compiler or
+     * interpreter. This attribute value is often different from the image.
+     * Any subclass of Token that actually wants to return a non-null value can
+     * override this method as appropriate.
+     */
+    public Object getValue() {
+        return null;
+    }
 
-  /**
-   * Constructs a new token for the specified Image.
-   */
-  public Token(int kind)
-  {
-    this(kind, null);
-  }
+    /**
+     * No-argument constructor
+     */
+    public Token() {}
 
-  /**
-   * Constructs a new token for the specified Image and Kind.
-   */
-  public Token(int kind, String image)
-  {
-    this.kind = kind;
-    this.image = image;
-  }
+    /**
+     * Constructs a new token for the specified Image.
+     */
+    public Token(int kind) {
+        this(kind, null);
+    }
 
-  /**
-   * Returns the image.
-   */
-  public String toString()
-  {
-    return image;
-  }
+    /**
+     * Constructs a new token for the specified Image and Kind.
+     */
+    public Token(int kind, String image) {
+        this.kind = kind;
+        this.image = image;
+    }
 
-  /**
-   * Returns a new Token object, by default. However, if you want, you
-   * can create and return subclass objects based on the value of ofKind.
-   * Simply add the cases to the switch for all those special cases.
-   * For example, if you have a subclass of Token called IDToken that
-   * you want to create if ofKind is ID, simply add something like :
-   *
-   *    case MyParserConstants.ID : return new IDToken(ofKind, image);
-   *
-   * to the following switch statement. Then you can cast matchedToken
-   * variable to the appropriate type and use sit in your lexical actions.
-   */
-  public static Token newToken(int ofKind, String image)
-  {
-    switch(ofKind)
-    {
-      default : return new Token(ofKind, image);
+    /**
+     * Returns the image.
+     */
+    public String toString() {
+        return image;
     }
-  }
 
-  public static Token newToken(int ofKind)
-  {
-    return newToken(ofKind, null);
-  }
+    /**
+     * Returns a new Token object, by default. However, if you want, you
+     * can create and return subclass objects based on the value of ofKind.
+     * Simply add the cases to the switch for all those special cases.
+     * For example, if you have a subclass of Token called IDToken that
+     * you want to create if ofKind is ID, simply add something like :
+     *
+     *    case MyParserConstants.ID : return new IDToken(ofKind, image);
+     *
+     * to the following switch statement. Then you can cast matchedToken
+     * variable to the appropriate type and use sit in your lexical actions.
+     */
+    public static Token newToken(int ofKind, String image) {
+        switch (ofKind) {
+            default:
+                return new Token(ofKind, image);
+        }
+    }
 
+    public static Token newToken(int ofKind) {
+        return newToken(ofKind, null);
+    }
 }
 /* JavaCC - OriginalChecksum=5a202246aab57b11466ea18db296577a (do not edit this line) */
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/script/TokenMgrError.java b/src/main/java/org/apache/sling/resource/filter/impl/script/TokenMgrError.java
index d189562..2cecd01 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/script/TokenMgrError.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/script/TokenMgrError.java
@@ -1,147 +1,171 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */
-/* JavaCCOptions: */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.resource.filter.impl.script;
 
 /** Token Manager Error. */
-public class TokenMgrError extends Error
-{
+public class TokenMgrError extends Error {
 
-  /**
-   * The version identifier for this Serializable class.
-   * Increment only if the <i>serialized</i> form of the
-   * class changes.
-   */
-  private static final long serialVersionUID = 1L;
+    /**
+     * The version identifier for this Serializable class.
+     * Increment only if the <i>serialized</i> form of the
+     * class changes.
+     */
+    private static final long serialVersionUID = 1L;
 
-  /*
-   * Ordinals for various reasons why an Error of this type can be thrown.
-   */
+    /*
+     * Ordinals for various reasons why an Error of this type can be thrown.
+     */
 
-  /**
-   * Lexical error occurred.
-   */
-  static final int LEXICAL_ERROR = 0;
+    /**
+     * Lexical error occurred.
+     */
+    static final int LEXICAL_ERROR = 0;
 
-  /**
-   * An attempt was made to create a second instance of a static token manager.
-   */
-  static final int STATIC_LEXER_ERROR = 1;
+    /**
+     * An attempt was made to create a second instance of a static token manager.
+     */
+    static final int STATIC_LEXER_ERROR = 1;
 
-  /**
-   * Tried to change to an invalid lexical state.
-   */
-  static final int INVALID_LEXICAL_STATE = 2;
+    /**
+     * Tried to change to an invalid lexical state.
+     */
+    static final int INVALID_LEXICAL_STATE = 2;
 
-  /**
-   * Detected (and bailed out of) an infinite loop in the token manager.
-   */
-  static final int LOOP_DETECTED = 3;
+    /**
+     * Detected (and bailed out of) an infinite loop in the token manager.
+     */
+    static final int LOOP_DETECTED = 3;
 
-  /**
-   * Indicates the reason why the exception is thrown. It will have
-   * one of the above 4 values.
-   */
-  int errorCode;
+    /**
+     * Indicates the reason why the exception is thrown. It will have
+     * one of the above 4 values.
+     */
+    int errorCode;
 
-  /**
-   * Replaces unprintable characters by their escaped (or unicode escaped)
-   * equivalents in the given string
-   */
-  protected static final String addEscapes(String str) {
-    StringBuffer retval = new StringBuffer();
-    char ch;
-    for (int i = 0; i < str.length(); i++) {
-      switch (str.charAt(i))
-      {
-        case 0 :
-          continue;
-        case '\b':
-          retval.append("\\b");
-          continue;
-        case '\t':
-          retval.append("\\t");
-          continue;
-        case '\n':
-          retval.append("\\n");
-          continue;
-        case '\f':
-          retval.append("\\f");
-          continue;
-        case '\r':
-          retval.append("\\r");
-          continue;
-        case '\"':
-          retval.append("\\\"");
-          continue;
-        case '\'':
-          retval.append("\\\'");
-          continue;
-        case '\\':
-          retval.append("\\\\");
-          continue;
-        default:
-          if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-            String s = "0000" + Integer.toString(ch, 16);
-            retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-          } else {
-            retval.append(ch);
-          }
-          continue;
-      }
+    /**
+     * Replaces unprintable characters by their escaped (or unicode escaped)
+     * equivalents in the given string
+     */
+    protected static final String addEscapes(String str) {
+        StringBuffer retval = new StringBuffer();
+        char ch;
+        for (int i = 0; i < str.length(); i++) {
+            switch (str.charAt(i)) {
+                case 0:
+                    continue;
+                case '\b':
+                    retval.append("\\b");
+                    continue;
+                case '\t':
+                    retval.append("\\t");
+                    continue;
+                case '\n':
+                    retval.append("\\n");
+                    continue;
+                case '\f':
+                    retval.append("\\f");
+                    continue;
+                case '\r':
+                    retval.append("\\r");
+                    continue;
+                case '\"':
+                    retval.append("\\\"");
+                    continue;
+                case '\'':
+                    retval.append("\\\'");
+                    continue;
+                case '\\':
+                    retval.append("\\\\");
+                    continue;
+                default:
+                    if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                        String s = "0000" + Integer.toString(ch, 16);
+                        retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+                    } else {
+                        retval.append(ch);
+                    }
+                    continue;
+            }
+        }
+        return retval.toString();
     }
-    return retval.toString();
-  }
 
-  /**
-   * Returns a detailed message for the Error when it is thrown by the
-   * token manager to indicate a lexical error.
-   * Parameters :
-   *    EOFSeen     : indicates if EOF caused the lexical error
-   *    curLexState : lexical state in which this error occurred
-   *    errorLine   : line number when the error occurred
-   *    errorColumn : column number when the error occurred
-   *    errorAfter  : prefix that was seen before this error occurred
-   *    curchar     : the offending character
-   * Note: You can customize the lexical error message by modifying this method.
-   */
-  protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
-    return("Lexical error at line " +
-          errorLine + ", column " +
-          errorColumn + ".  Encountered: " +
-          (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
-          "after : \"" + addEscapes(errorAfter) + "\"");
-  }
+    /**
+     * Returns a detailed message for the Error when it is thrown by the
+     * token manager to indicate a lexical error.
+     * Parameters :
+     *    EOFSeen     : indicates if EOF caused the lexical error
+     *    curLexState : lexical state in which this error occurred
+     *    errorLine   : line number when the error occurred
+     *    errorColumn : column number when the error occurred
+     *    errorAfter  : prefix that was seen before this error occurred
+     *    curchar     : the offending character
+     * Note: You can customize the lexical error message by modifying this method.
+     */
+    protected static String LexicalError(
+            boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+        return ("Lexical error at line " + errorLine
+                + ", column " + errorColumn
+                + ".  Encountered: "
+                + (EOFSeen
+                        ? "<EOF> "
+                        : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int) curChar + "), ")
+                + "after : \""
+                + addEscapes(errorAfter) + "\"");
+    }
 
-  /**
-   * You can also modify the body of this method to customize your error messages.
-   * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
-   * of end-users concern, so you can return something like :
-   *
-   *     "Internal Error : Please file a bug report .... "
-   *
-   * from this method for such cases in the release version of your parser.
-   */
-  public String getMessage() {
-    return super.getMessage();
-  }
+    /**
+     * You can also modify the body of this method to customize your error messages.
+     * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+     * of end-users concern, so you can return something like :
+     *
+     *     "Internal Error : Please file a bug report .... "
+     *
+     * from this method for such cases in the release version of your parser.
+     */
+    public String getMessage() {
+        return super.getMessage();
+    }
 
-  /*
-   * Constructors of various flavors follow.
-   */
+    /*
+     * Constructors of various flavors follow.
+     */
 
-  /** No arg constructor. */
-  public TokenMgrError() {
-  }
+    /** No arg constructor. */
+    public TokenMgrError() {}
 
-  /** Constructor with message and reason. */
-  public TokenMgrError(String message, int reason) {
-    super(message);
-    errorCode = reason;
-  }
+    /** Constructor with message and reason. */
+    public TokenMgrError(String message, int reason) {
+        super(message);
+        errorCode = reason;
+    }
 
-  /** Full Constructor. */
-  public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
-    this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
-  }
+    /** Full Constructor. */
+    public TokenMgrError(
+            boolean EOFSeen,
+            int lexState,
+            int errorLine,
+            int errorColumn,
+            String errorAfter,
+            char curChar,
+            int reason) {
+        this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+    }
 }
 /* JavaCC - OriginalChecksum=dbe5a6666bbc652e32d3390ed4ce7c37 (do not edit this line) */
diff --git a/src/main/java/org/apache/sling/resource/filter/package-info.java b/src/main/java/org/apache/sling/resource/filter/package-info.java
index 4005c2b..2ca267f 100644
--- a/src/main/java/org/apache/sling/resource/filter/package-info.java
+++ b/src/main/java/org/apache/sling/resource/filter/package-info.java
@@ -12,4 +12,4 @@
  * limitations under the License.
  */
 @org.osgi.annotation.versioning.Version("1.0.0")
-package org.apache.sling.resource.filter;
\ No newline at end of file
+package org.apache.sling.resource.filter;
diff --git a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
index 773d7e0..e9d0716 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
@@ -1,20 +1,23 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
-import static org.junit.Assert.assertEquals;
-
 import java.text.ParseException;
 import java.util.HashMap;
 import java.util.List;
@@ -29,47 +32,59 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class ResourceFilterArgTest {
 
     private static final String START_PATH = "/content/sample/en";
+
     @Rule
     public final SlingContext context = new SlingContext();
 
     Resource resource;
-    
+
     ResourcePredicates resourceFilter = new ResourcePredicateImpl();
-    
+
     @Before
     public void setUp() throws ParseException {
         context.load().json("/data.json", "/content/sample/en");
         resource = context.resourceResolver().getResource(START_PATH);
-        context.registerAdapter(Resource.class, ResourceFilterStream.class, new ResourceFilterStream(resource,new ResourcePredicateImpl()));
+        context.registerAdapter(
+                Resource.class,
+                ResourceFilterStream.class,
+                new ResourceFilterStream(resource, new ResourcePredicateImpl()));
         context.registerAdapter(Resource.class, ResourcePredicates.class, new ResourcePredicateImpl());
     }
 
     @Test
     public void testMatchingNameInArg() throws Exception {
-        Map<String,Object> params = new HashMap<>();
+        Map<String, Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
         ResourceFilterStream rfs = resource.adaptTo(ResourceFilterStream.class);
-        List<Resource> found = rfs.addParams(params).setChildSelector("[jcr:content/jcr:title] == $lang").stream().collect(Collectors.toList());
+        List<Resource> found = rfs.addParams(params).setChildSelector("[jcr:content/jcr:title] == $lang").stream()
+                .collect(Collectors.toList());
         assertEquals(1, found.size());
     }
 
     @Test
     public void testMatchingNameAndMultipleArgs() throws Exception {
-        Map<String,Object> params = new HashMap<>();
+        Map<String, Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
         ResourceFilterStream rfs = resource.adaptTo(ResourceFilterStream.class);
-        long size = rfs.addParams(params).setChildSelector("[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang").stream().count();
+        long size = rfs
+                .addParams(params)
+                .setChildSelector("[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang")
+                .stream()
+                .count();
         assertEquals(1, size);
     }
 
     @Test
     public void testNameFunctionAgainstRegex() throws ParseException, Exception {
-        Predicate<Resource> filter = resourceFilter.withParameter("regex", "testpage[1-2]").parse("name() like $regex");
+        Predicate<Resource> filter =
+                resourceFilter.withParameter("regex", "testpage[1-2]").parse("name() like $regex");
         List<Resource> found = handle(new ResourceStream(resource), filter);
         assertEquals(2, found.size());
     }
@@ -77,5 +92,4 @@ public class ResourceFilterArgTest {
     private List<Resource> handle(ResourceStream streamer, Predicate<Resource> childSelector) {
         return streamer.stream(r -> true).filter(childSelector).collect(Collectors.toList());
     }
-
 }
diff --git a/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java b/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java
index 210b493..cfd294e 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java
@@ -1,20 +1,23 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
-import static org.junit.Assert.assertEquals;
-
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -26,13 +29,15 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class ResourceFilterDateTest {
 
     @Rule
     public final SlingContext context = new SlingContext();
 
     private Resource resource;
-    
+
     ResourcePredicates resourceFilter = new ResourcePredicateImpl();
 
     private static String START_PATH = "/content/sample/en";
@@ -99,7 +104,7 @@ public class ResourceFilterDateTest {
     }
 
     private List<Resource> handle(String path, String filter) {
-        return new ResourceStream(resource).stream(r -> true).filter(resourceFilter.parse(filter))
-                .collect(Collectors.toList());
+        return new ResourceStream(resource)
+                .stream(r -> true).filter(resourceFilter.parse(filter)).collect(Collectors.toList());
     }
 }
diff --git a/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java b/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java
index 7afeddf..5edf2b1 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java
@@ -1,20 +1,23 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
-import static org.junit.Assert.assertEquals;
-
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -26,6 +29,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class ResourceFilterLogicTest {
 
     @Rule
@@ -34,7 +39,7 @@ public class ResourceFilterLogicTest {
     private static String START_PATH = "/content/sample/en";
 
     private Resource resource;
-    
+
     ResourcePredicates resourceFilter = new ResourcePredicateImpl();
 
     @Before
@@ -49,21 +54,24 @@ public class ResourceFilterLogicTest {
         List<Resource> found = handle(START_PATH, query);
         assertEquals(1, found.size());
 
-        query = "([jcr:content/created] < '2013-08-08T16:32' and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'";
+        query =
+                "([jcr:content/created] < '2013-08-08T16:32' and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'";
         found = handle(START_PATH, query);
         assertEquals(4, found.size());
 
-        query = "[jcr:content/created] < '2013-08-08T16:32' and ([jcr:content/jcr:title] == 'English' or [jcr:content/jcr:title] == 'Mongolian')";
+        query =
+                "[jcr:content/created] < '2013-08-08T16:32' and ([jcr:content/jcr:title] == 'English' or [jcr:content/jcr:title] == 'Mongolian')";
         found = handle(START_PATH, query);
         assertEquals(3, found.size());
 
-        query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'";
+        query =
+                "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'";
         found = handle(START_PATH, query);
         assertEquals(4, found.size());
     }
 
-    private List<Resource> handle(String path, String filter)  {
-        return new ResourceStream(resource).stream(r -> true).filter(resourceFilter.parse(filter))
-                .collect(Collectors.toList());
+    private List<Resource> handle(String path, String filter) {
+        return new ResourceStream(resource)
+                .stream(r -> true).filter(resourceFilter.parse(filter)).collect(Collectors.toList());
     }
 }
diff --git a/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java b/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java
index cb6554b..29aea53 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java
@@ -1,20 +1,23 @@
 /*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.resource.filter;
 
-import static org.junit.Assert.assertEquals;
-
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -25,6 +28,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class ResourceFilterTest {
 
     @Rule
@@ -33,7 +38,7 @@ public class ResourceFilterTest {
     private static String START_PATH = "/content/sample/en";
 
     private Resource resource;
-    
+
     ResourcePredicates resourceFilter = new ResourcePredicateImpl();
 
     @Before
@@ -79,21 +84,24 @@ public class ResourceFilterTest {
 
     @Test
     public void testDateAndProperty() {
-        String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English'";
+        String query =
+                "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English'";
         List<Resource> found = handle(START_PATH, query);
         assertEquals(3, found.size());
     }
 
     @Test
     public void testDateAndPropertyTwice() {
-        String query = "([jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'";
+        String query =
+                "([jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'";
         List<Resource> found = handle(START_PATH, query);
         assertEquals(4, found.size());
     }
 
     @Test
     public void testDateOrProperty() {
-        String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'";
+        String query =
+                "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'";
         List<Resource> found = handle(START_PATH, query);
         assertEquals(4, found.size());
     }
@@ -108,8 +116,8 @@ public class ResourceFilterTest {
     @Test
     public void testNullPropertyAndLimit() {
         String query = "[jcr:content/foo] == null ";
-        List<Resource> found = new ResourceStream(resource).stream(r -> true).filter(resourceFilter.parse(query)).limit(3)
-                .collect(Collectors.toList());
+        List<Resource> found = new ResourceStream(resource)
+                .stream(r -> true).filter(resourceFilter.parse(query)).limit(3).collect(Collectors.toList());
         assertEquals(3, found.size());
     }
 
@@ -249,11 +257,12 @@ public class ResourceFilterTest {
             error = e;
         }
         assert (error.getMessage()
-                .startsWith("org.apache.sling.resource.filter.impl.script.ParseException: Encountered \" <PROPERTY> \"jcr:content/monkey \"\" at line 1, column 15."));
+                .startsWith(
+                        "org.apache.sling.resource.filter.impl.script.ParseException: Encountered \" <PROPERTY> \"jcr:content/monkey \"\" at line 1, column 15."));
     }
 
     private List<Resource> handle(String path, String filter) {
-        return new ResourceStream(resource).stream(r -> true).filter(resourceFilter.parse(filter))
-                .collect(Collectors.toList());
+        return new ResourceStream(resource)
+                .stream(r -> true).filter(resourceFilter.parse(filter)).collect(Collectors.toList());
     }
 }


(sling-org-apache-sling-resource-filter) 01/02: SLING-13013 Update to Parent 62

Posted by ss...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch feature/SLING-13013-parent-62
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git

commit c8f20c05c3fc697fe4823425800c7643e682dd99
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Wed Nov 26 12:55:16 2025 +0100

    SLING-13013 Update to Parent 62
---
 .sling-module.json           |  5 +++++
 pom.xml                      | 22 ++++++++++++++--------
 src/test/resources/data.json | 28 ++++++++++++++--------------
 3 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/.sling-module.json b/.sling-module.json
new file mode 100644
index 0000000..cfad4d2
--- /dev/null
+++ b/.sling-module.json
@@ -0,0 +1,5 @@
+{
+  "jenkins": {
+    "jdks": [17, 21]
+  }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 9c67efd..72cdb87 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>49</version>
+        <version>62</version>
         <relativePath />
     </parent>
 
@@ -22,7 +22,7 @@
     <description>provides a set of utilities to create and handle streams</description>
 
     <properties>
-        <sling.java.version>8</sling.java.version>
+        <sling.java.version>11</sling.java.version>
     </properties>
 
     <scm>
@@ -61,12 +61,6 @@
             <version>3.4</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>2.2.10</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
@@ -90,5 +84,17 @@
             <artifactId>org.osgi.service.component.annotations</artifactId>
             <scope>provided</scope>
         </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
+            <version>3.5.6</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/test/resources/data.json b/src/test/resources/data.json
index 8778ad5..c26f5df 100644
--- a/src/test/resources/data.json
+++ b/src/test/resources/data.json
@@ -4,9 +4,9 @@
 		"jcr:primaryType": "app:PageContent",
 		"jcr:title": "English",
 		"app:template": "/apps/sample/templates/homepage",
-		"sling:resourceType": "sample/components/homepage",
-		"jcr:createdBy": "admin",
-		"created": "Thu Aug 07 2011 16:32:59 GMT+0200",
+		"sling:resourceType": "sample/components/homepage",
+		"jcr:createdBy": "admin",
+		"created": "2011-08-07T16:32:59.000+02:00",
 		"par": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "foundation/components/parsys",
@@ -23,9 +23,9 @@
 			"jcr:primaryType": "app:PageContent",
 			"jcr:title": "English",
 			"app:template": "/apps/sample/templates/homepage",
-			"sling:resourceType": "sample/components/homepage",
-			"jcr:createdBy": "admin",
-			"created": "Thu Aug 07 2012 16:32:59 GMT+0200",
+			"sling:resourceType": "sample/components/homepage",
+			"jcr:createdBy": "admin",
+			"created": "2012-08-07T16:32:59.000+02:00",
 			"published": true,
 			"views" : 10,
 			"monkey": ["foo", "fish"],
@@ -46,9 +46,9 @@
 			"jcr:primaryType": "app:PageContent",
 			"jcr:title": "English",
 			"app:template": "/apps/sample/templates/homepage",
-			"sling:resourceType": "sample/components/homepage",
-			"jcr:createdBy": "admin",
-			"created": "Thu Aug 07 2013 16:32:59 GMT+0200",
+			"sling:resourceType": "sample/components/homepage",
+			"jcr:createdBy": "admin",
+			"created": "2013-08-07T16:32:59.000+02:00",
 			"par": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "foundation/components/parsys",
@@ -67,8 +67,8 @@
 			"jcr:title": "English",
 			"app:template": "/apps/sample/templates/homepage",
 			"sling:resourceType": "sample/components/homepage",
-			"jcr:createdBy": "admin",
-			"created": "Thu Aug 07 2014 16:32:59 GMT+0200",
+			"jcr:createdBy": "admin",
+			"created": "2014-08-07T16:32:59.000+02:00",
 			"count" : 1.345666,
 			"par": {
 				"jcr:primaryType": "nt:unstructured",
@@ -88,9 +88,9 @@
 			"jcr:title": "Mongolian",
 			"app:template": "/apps/sample/templates/homepage",
 			"sling:resourceType": "sample/components/homepage",
-			"views" : 3,
-			"jcr:createdBy": "admin",
-			"created": "Thu Aug 07 2015 16:30:59 GMT+0200",
+			"views" : 3,
+			"jcr:createdBy": "admin",
+			"created": "2015-08-07T16:30:59.000+02:00",
 			"par": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "foundation/components/parsys",