documentation updates
diff --git a/README.md b/README.md
index 976e35a..9887c4f 100644
--- a/README.md
+++ b/README.md
@@ -29,28 +29,30 @@
### Operators
-| Name | Comparison Type | Description |
-| --------- | --------------- | -------------------------------- |
-| and | NA | Logical AND |
-| && | NA | Logical AND |
-| or | NA | Logical OR |
-|||| NA | Logical OR |
-| == | String | Equal operator for Strings |
-| < | Number | Less than operator for Numbers |
-| <= | Number | Less than or equal operator for Numbers |
-| > | Number | Greater than operator for Numbers |
-| >= | Number | Greater than or equal operator for Numbers |
-| != | String | Is not equal to for Strings |
-| less than | Number | less than operator for Numbers |
-| greater than| Number | greater than operator for Numbers |
-| is | String | Equal operator for Strings |
-| is not | String | Is not equal operator for Strings |
-| like | String - Regex | Regex match against String |
-| like not | String - Regex | Regex match against String |
-| contains | String[] | String[] | String[] contains all of items |
-| contains not | String[] | String[] does not contain all of the items |
-| contains any | String[] | String[] contains at least one of items |
-| contains not any | String[] | String[] does not contain any of the items |
+| Name | Comparison Type | Description |
+| --------- | --------------- | -------------------------------- |
+| and | NA | Logical AND |
+| && | NA | Logical AND |
+| or | NA | Logical OR |
+||| | NA | Logical OR |
+| == | String | Equal operator for Strings |
+| < | Number | Less than operator for Numbers |
+| <= | Number | Less than or equal operator for Numbers |
+| > | Number | Greater than operator for Numbers |
+| >= | Number | Greater than or equal operator for Numbers |
+| != | String | Is not equal to for Strings |
+| ~= | String - Regex | Regex match against String |
+| less than | Number | less than operator for Numbers |
+| greater than | Number | greater than operator for Numbers |
+| is | String | Equal operator for Strings |
+| is not | String | Is not equal operator for Strings |
+| like | String - Regex | Regex match against String |
+| is like | String - Regex | Regex match against String |
+| not like | String - Regex | Regex does not match String |
+| contains | String[] | String[] contains all of items |
+| contains not | String[] | String[] does not contain all of the items |
+| contains any | String[] | String[] contains at least one of items |
+| contains not any | String[] | String[] does not contain any of the items |
### Logical Operators
The 'and' and 'or' operators are logical operators that string together conditions. 'And' operators take precedence. 'Or' operators evaluate from left to right
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceFilterException.java b/src/main/java/org/apache/sling/resource/filter/ResourceFilterException.java
index 5829f29..99db709 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilterException.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilterException.java
@@ -19,8 +19,8 @@
package org.apache.sling.resource.filter;
/**
- * Used to wrap internally generated Parser exceptions when a malformed scipt is
- * provided
+ * Used to wrap internally generated Parser exceptions when a malformed script
+ * is provided
*
*
*/
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 225d4d2..83a4ed0 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
@@ -142,7 +142,7 @@
"\"contains not\"",
"\"contains any\"",
"\"contains not any\"",
- "\"in\"",
+ "<IN>",
"\"not in\"",
"\"$\"",
"<FUNCTION_NAME>",
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 f2060f4..5965356 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
@@ -22,11 +22,6 @@
jjmatchedKind = 32;
return -1;
}
- if ((active0 & 0x10000000000L) != 0L)
- {
- jjmatchedKind = 43;
- return 168;
- }
if ((active0 & 0xf000000000L) != 0L)
{
jjmatchedKind = 43;
@@ -61,8 +56,6 @@
jjmatchedPos = 1;
return 57;
}
- if ((active0 & 0x10000000000L) != 0L)
- return 60;
if ((active0 & 0x80000000L) != 0L)
{
if (jjmatchedPos == 0)
@@ -192,8 +185,6 @@
return jjMoveStringLiteralDfa1_0(0x80000000L);
case 99:
return jjMoveStringLiteralDfa1_0(0xf000000000L);
- case 105:
- return jjMoveStringLiteralDfa1_0(0x10000000000L);
case 110:
return jjMoveStringLiteralDfa1_0(0x20000800000L);
default :
@@ -215,10 +206,6 @@
else if ((active0 & 0x200000000L) != 0L)
return jjStopAtPos(1, 33);
break;
- case 110:
- if ((active0 & 0x10000000000L) != 0L)
- return jjStartNfaWithStates_0(1, 40, 60);
- break;
case 111:
return jjMoveStringLiteralDfa2_0(active0, 0x2f000000000L);
case 117:
@@ -533,7 +520,7 @@
private int jjMoveNfa_0(int startState, int curPos)
{
int startsAt = 0;
- jjnewStateCnt = 193;
+ jjnewStateCnt = 202;
int i = 1;
jjstateSet[0] = startState;
int kind = 0x7fffffff;
@@ -556,6 +543,23 @@
kind = 43;
jjCheckNAdd(60);
break;
+ case 56:
+ if ((0x8c00846affffffffL & l) != 0L)
+ {
+ if (kind > 43)
+ kind = 43;
+ jjCheckNAdd(60);
+ }
+ else if (curChar == 32)
+ jjstateSet[jjnewStateCnt++] = 55;
+ break;
+ case 58:
+ if ((0x8c00846affffffffL & l) == 0L)
+ break;
+ if (kind > 43)
+ kind = 43;
+ jjCheckNAdd(60);
+ break;
case 0:
if ((0x8c00846affffffffL & l) != 0L)
{
@@ -594,30 +598,6 @@
else if (curChar == 38)
jjstateSet[jjnewStateCnt++] = 15;
break;
- case 168:
- if ((0x8c00846affffffffL & l) == 0L)
- break;
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- break;
- case 56:
- if ((0x8c00846affffffffL & l) != 0L)
- {
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- }
- else if (curChar == 32)
- jjstateSet[jjnewStateCnt++] = 55;
- break;
- case 58:
- if ((0x8c00846affffffffL & l) == 0L)
- break;
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- break;
case 1:
if ((0x3ff000000000000L & l) == 0L)
break;
@@ -1129,14 +1109,18 @@
if (curChar == 32)
jjstateSet[jjnewStateCnt++] = 171;
break;
- case 179:
+ case 178:
if (curChar == 32)
- jjstateSet[jjnewStateCnt++] = 178;
+ jjstateSet[jjnewStateCnt++] = 177;
break;
case 189:
if (curChar == 32)
jjstateSet[jjnewStateCnt++] = 188;
break;
+ case 198:
+ if (curChar == 32)
+ jjstateSet[jjnewStateCnt++] = 197;
+ break;
default : break;
}
} while(i != startsAt);
@@ -1158,53 +1142,6 @@
if (curChar == 116)
jjstateSet[jjnewStateCnt++] = 56;
break;
- case 0:
- if ((0xffffffffd7ffffffL & l) != 0L)
- {
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- }
- else if (curChar == 91)
- jjCheckNAddStates(29, 31);
- if ((0x2000000020L & l) != 0L)
- jjAddStates(68, 69);
- else if (curChar == 108)
- jjAddStates(70, 72);
- else if (curChar == 105)
- jjAddStates(73, 74);
- else if (curChar == 110)
- jjstateSet[jjnewStateCnt++] = 58;
- else if (curChar == 126)
- jjstateSet[jjnewStateCnt++] = 50;
- else if (curChar == 103)
- jjstateSet[jjnewStateCnt++] = 47;
- else if (curChar == 102)
- jjstateSet[jjnewStateCnt++] = 30;
- else if (curChar == 116)
- jjstateSet[jjnewStateCnt++] = 26;
- else if (curChar == 111)
- jjstateSet[jjnewStateCnt++] = 22;
- else if (curChar == 124)
- jjstateSet[jjnewStateCnt++] = 20;
- else if (curChar == 97)
- jjstateSet[jjnewStateCnt++] = 18;
- break;
- case 168:
- if ((0xffffffffd7ffffffL & l) != 0L)
- {
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- }
- if (curChar == 115)
- jjstateSet[jjnewStateCnt++] = 172;
- if (curChar == 115)
- {
- if (kind > 28)
- kind = 28;
- }
- break;
case 56:
case 60:
if ((0xffffffffd7ffffffL & l) == 0L)
@@ -1223,6 +1160,38 @@
if (curChar == 111)
jjstateSet[jjnewStateCnt++] = 57;
break;
+ case 0:
+ if ((0xffffffffd7ffffffL & l) != 0L)
+ {
+ if (kind > 43)
+ kind = 43;
+ jjCheckNAdd(60);
+ }
+ else if (curChar == 91)
+ jjCheckNAddStates(29, 31);
+ if ((0x2000000020L & l) != 0L)
+ jjAddStates(68, 69);
+ else if (curChar == 108)
+ jjAddStates(70, 72);
+ else if (curChar == 105)
+ jjCheckNAddStates(73, 77);
+ else if (curChar == 110)
+ jjstateSet[jjnewStateCnt++] = 58;
+ else if (curChar == 126)
+ jjstateSet[jjnewStateCnt++] = 50;
+ else if (curChar == 103)
+ jjstateSet[jjnewStateCnt++] = 47;
+ else if (curChar == 102)
+ jjstateSet[jjnewStateCnt++] = 30;
+ else if (curChar == 116)
+ jjstateSet[jjnewStateCnt++] = 26;
+ else if (curChar == 111)
+ jjstateSet[jjnewStateCnt++] = 22;
+ else if (curChar == 124)
+ jjstateSet[jjnewStateCnt++] = 20;
+ else if (curChar == 97)
+ jjstateSet[jjnewStateCnt++] = 18;
+ break;
case 2:
if ((0x2000000020L & l) != 0L)
jjAddStates(68, 69);
@@ -1406,15 +1375,19 @@
break;
case 155:
if ((0x2000000020L & l) != 0L)
- jjAddStates(75, 76);
+ jjAddStates(78, 79);
break;
case 161:
if ((0x2000000020L & l) != 0L)
- jjAddStates(77, 78);
+ jjAddStates(80, 81);
break;
case 167:
if (curChar == 105)
- jjAddStates(73, 74);
+ jjCheckNAddStates(73, 77);
+ break;
+ case 168:
+ if (curChar == 115 && kind > 28)
+ kind = 28;
break;
case 169:
if (curChar == 116 && kind > 29)
@@ -1433,73 +1406,102 @@
jjstateSet[jjnewStateCnt++] = 172;
break;
case 174:
- if (curChar == 108)
- jjAddStates(70, 72);
- break;
- case 175:
- if (curChar == 110 && kind > 32)
- kind = 32;
- break;
- case 176:
- if (curChar == 97)
- jjstateSet[jjnewStateCnt++] = 175;
- break;
- case 177:
- if (curChar == 104)
- jjstateSet[jjnewStateCnt++] = 176;
- break;
- case 178:
- if (curChar == 116)
- jjstateSet[jjnewStateCnt++] = 177;
- break;
- case 180:
- if (curChar == 115)
- jjstateSet[jjnewStateCnt++] = 179;
- break;
- case 181:
- if (curChar == 115)
- jjstateSet[jjnewStateCnt++] = 180;
- break;
- case 182:
- if (curChar == 101)
- jjstateSet[jjnewStateCnt++] = 181;
- break;
- case 183:
if (curChar == 101 && kind > 34)
kind = 34;
break;
- case 184:
+ case 175:
+ case 193:
if (curChar == 107)
- jjstateSet[jjnewStateCnt++] = 183;
+ jjCheckNAdd(174);
+ break;
+ case 176:
+ if (curChar == 105)
+ jjstateSet[jjnewStateCnt++] = 175;
+ break;
+ case 177:
+ if (curChar == 108)
+ jjstateSet[jjnewStateCnt++] = 176;
+ break;
+ case 179:
+ if (curChar == 115)
+ jjstateSet[jjnewStateCnt++] = 178;
+ break;
+ case 180:
+ if (curChar == 110 && kind > 40)
+ kind = 40;
+ break;
+ case 181:
+ if (curChar == 105)
+ jjCheckNAdd(180);
+ break;
+ case 182:
+ if (curChar == 95)
+ jjstateSet[jjnewStateCnt++] = 181;
+ break;
+ case 183:
+ if (curChar == 115)
+ jjstateSet[jjnewStateCnt++] = 182;
+ break;
+ case 184:
+ if (curChar == 108)
+ jjAddStates(70, 72);
break;
case 185:
- if (curChar == 105)
- jjstateSet[jjnewStateCnt++] = 184;
+ if (curChar == 110 && kind > 32)
+ kind = 32;
break;
case 186:
- if (curChar == 116 && kind > 35)
- kind = 35;
+ if (curChar == 97)
+ jjstateSet[jjnewStateCnt++] = 185;
break;
case 187:
- if (curChar == 111)
+ if (curChar == 104)
jjstateSet[jjnewStateCnt++] = 186;
break;
case 188:
- if (curChar == 110)
+ if (curChar == 116)
jjstateSet[jjnewStateCnt++] = 187;
break;
case 190:
- if (curChar == 101)
+ if (curChar == 115)
jjstateSet[jjnewStateCnt++] = 189;
break;
case 191:
- if (curChar == 107)
+ if (curChar == 115)
jjstateSet[jjnewStateCnt++] = 190;
break;
case 192:
- if (curChar == 105)
+ if (curChar == 101)
jjstateSet[jjnewStateCnt++] = 191;
break;
+ case 194:
+ if (curChar == 105)
+ jjstateSet[jjnewStateCnt++] = 193;
+ break;
+ case 195:
+ if (curChar == 116 && kind > 35)
+ kind = 35;
+ break;
+ case 196:
+ if (curChar == 111)
+ jjstateSet[jjnewStateCnt++] = 195;
+ break;
+ case 197:
+ if (curChar == 110)
+ jjstateSet[jjnewStateCnt++] = 196;
+ break;
+ case 199:
+ if (curChar == 101)
+ jjstateSet[jjnewStateCnt++] = 198;
+ break;
+ case 200:
+ if (curChar == 107)
+ jjstateSet[jjnewStateCnt++] = 199;
+ break;
+ case 201:
+ if (curChar == 105)
+ jjstateSet[jjnewStateCnt++] = 200;
+ break;
default : break;
}
} while(i != startsAt);
@@ -1523,20 +1525,6 @@
kind = 43;
jjCheckNAdd(60);
break;
- case 0:
- if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- break;
- case 168:
- if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 43)
- kind = 43;
- jjCheckNAdd(60);
- break;
case 56:
if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
break;
@@ -1551,6 +1539,13 @@
kind = 43;
jjCheckNAdd(60);
break;
+ case 0:
+ if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 43)
+ kind = 43;
+ jjCheckNAdd(60);
+ break;
case 7:
case 8:
if (jjCanMove_0(hiByte, i1, i2, l1, l2))
@@ -1577,7 +1572,7 @@
kind = 0x7fffffff;
}
++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 193 - (jjnewStateCnt = startsAt)))
+ if ((i = jjnewStateCnt) == (startsAt = 202 - (jjnewStateCnt = startsAt)))
return curPos;
try { curChar = input_stream.readChar(); }
catch(java.io.IOException e) { return curPos; }
@@ -1588,7 +1583,8 @@
103, 133, 150, 151, 154, 158, 164, 11, 13, 14, 6, 8, 9, 62, 64, 65,
72, 73, 74, 100, 70, 72, 100, 101, 68, 70, 101, 102, 108, 109, 110, 130,
106, 108, 130, 131, 104, 106, 131, 132, 138, 139, 140, 147, 136, 138, 147, 148,
- 134, 136, 148, 149, 3, 4, 182, 185, 192, 168, 173, 156, 157, 162, 163,
+ 134, 136, 148, 149, 3, 4, 192, 194, 201, 168, 173, 179, 183, 180, 156, 157,
+ 162, 163,
};
private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
{
@@ -1609,7 +1605,7 @@
null, null, null, null, null, null, null, null, null, null, "\156\165\154\154",
"\50", "\51", "\54", null, null, null, null, "\76\75", null, "\74\75", null, null,
"\143\157\156\164\141\151\156\163", "\143\157\156\164\141\151\156\163\40\156\157\164",
-"\143\157\156\164\141\151\156\163\40\141\156\171", "\143\157\156\164\141\151\156\163\40\156\157\164\40\141\156\171", "\151\156",
+"\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, };
/** Lexer state names. */
@@ -1623,8 +1619,8 @@
0x6L,
};
protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[193];
-private final int[] jjstateSet = new int[386];
+private final int[] jjrounds = new int[202];
+private final int[] jjstateSet = new int[404];
private final StringBuilder jjimage = new StringBuilder();
private StringBuilder image = jjimage;
private int jjimageLen;
@@ -1655,7 +1651,7 @@
{
int i;
jjround = 0x80000001;
- for (i = 193; i-- > 0;)
+ for (i = 202; i-- > 0;)
jjrounds[i] = 0x80000000;
}
diff --git a/src/main/javacc/resourceFilter.jj b/src/main/javacc/resourceFilter.jj
index c1c1cd7..3570900 100644
--- a/src/main/javacc/resourceFilter.jj
+++ b/src/main/javacc/resourceFilter.jj
@@ -96,13 +96,13 @@
| < GREATER_THAN_OR_EQUAL : ">=" >
| < LESS_THAN : "<" | "less than" >
| < LESS_THAN_OR_EQUAL : "<=" >
-| < LIKE : "~=" | "like" >
-| < LIKE_NOT : "like not" | "not like" >
+| < LIKE : "~=" | "like" | "is like" >
+| < LIKE_NOT : "not like" >
| < CONTAINS : "contains" >
| < CONTAINS_NOT : "contains not" >
| < CONTAINS_ANY : "contains any" >
| < CONTAINS_NOT_ANY : "contains not any" >
-| < IN : "in" >
+| < IN : "is in" | "in" >
| < NOT_IN : "not in" >
| < DYNAMIC_ARG : "$" >
| < FUNCTION_NAME : (~[ "\"", "'", "$", "(", ")", ",", "=", "<", ">", " ", "[", "]","+","-",".","0"-"9" ])+ >