use of lucee.runtime.interpreter.ref.op.NCT in project Lucee by lucee.
the class CFMLExpressionInterpreter method decsionOp.
/**
* <font f>Transfomiert eine Vergleichs Operation.
* <br />
* EBNF:<br />
* <code>concatOp {("neq"|"eq"|"gte"|"gt"|"lte"|"lt"|"ct"|
* "contains"|"nct"|"does not contain") spaces concatOp};
* (* "ct"=conatains und "nct"=does not contain; Existiert in CFMX nicht *)</code>
* @return CFXD Element
* @throws PageException
*/
private Ref decsionOp() throws PageException {
Ref ref = concatOp();
boolean hasChanged = false;
// ct, contains
if (cfml.isValidIndex()) {
do {
hasChanged = false;
if (cfml.isCurrent('c')) {
if (cfml.forwardIfCurrent("ct")) {
cfml.removeSpace();
ref = new CT(ref, concatOp(), limited);
hasChanged = true;
} else if (cfml.forwardIfCurrent("contains")) {
cfml.removeSpace();
ref = new CT(ref, concatOp(), limited);
hasChanged = true;
}
} else // does not contain
if (cfml.forwardIfCurrent("does", "not", "contain")) {
cfml.removeSpace();
ref = new NCT(ref, concatOp(), limited);
hasChanged = true;
} else // equal, eq
if (cfml.isCurrent("eq") && !cfml.isCurrent("eqv")) {
cfml.setPos(cfml.getPos() + 2);
cfml.forwardIfCurrent("ual");
cfml.removeSpace();
ref = new EQ(ref, concatOp(), limited);
hasChanged = true;
} else // ==
if (cfml.forwardIfCurrent("==")) {
if (cfml.forwardIfCurrent('=')) {
cfml.removeSpace();
ref = new EEQ(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new EQ(ref, concatOp(), limited);
}
hasChanged = true;
} else // !=
if (cfml.forwardIfCurrent("!=")) {
if (cfml.forwardIfCurrent('=')) {
cfml.removeSpace();
ref = new NEEQ(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new NEQ(ref, concatOp(), limited);
}
hasChanged = true;
} else // <=/</<>
if (cfml.forwardIfCurrent('<')) {
if (cfml.forwardIfCurrent('=')) {
cfml.removeSpace();
ref = new LTE(ref, concatOp(), limited);
} else if (cfml.forwardIfCurrent('>')) {
cfml.removeSpace();
ref = new NEQ(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new LT(ref, concatOp(), limited);
}
hasChanged = true;
} else // >/>=
if (cfml.forwardIfCurrent('>')) {
if (cfml.forwardIfCurrent('=')) {
cfml.removeSpace();
ref = new GTE(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new GT(ref, concatOp(), limited);
}
hasChanged = true;
} else // gt, gte, greater than or equal to, greater than
if (cfml.isCurrent('g')) {
if (cfml.forwardIfCurrent("gt")) {
if (cfml.forwardIfCurrent('e')) {
cfml.removeSpace();
ref = new GTE(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new GT(ref, concatOp(), limited);
}
hasChanged = true;
} else if (cfml.forwardIfCurrent("greater", "than")) {
if (cfml.forwardIfCurrent("or", "equal", "to", true)) {
cfml.removeSpace();
ref = new GTE(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new GT(ref, concatOp(), limited);
}
hasChanged = true;
} else if (cfml.forwardIfCurrent("ge")) {
cfml.removeSpace();
ref = new GTE(ref, concatOp(), limited);
hasChanged = true;
}
} else // is, is not
if (cfml.forwardIfCurrent("is")) {
if (cfml.forwardIfCurrent("not", true)) {
cfml.removeSpace();
ref = new NEQ(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new EQ(ref, concatOp(), limited);
}
hasChanged = true;
} else // lt, lte, less than, less than or equal to
if (cfml.isCurrent('l')) {
if (cfml.forwardIfCurrent("lt")) {
if (cfml.forwardIfCurrent('e')) {
cfml.removeSpace();
ref = new LTE(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new LT(ref, concatOp(), limited);
}
hasChanged = true;
} else if (cfml.forwardIfCurrent("less", "than")) {
if (cfml.forwardIfCurrent("or", "equal", "to", true)) {
cfml.removeSpace();
ref = new LTE(ref, concatOp(), limited);
} else {
cfml.removeSpace();
ref = new LT(ref, concatOp(), limited);
}
hasChanged = true;
} else if (cfml.forwardIfCurrent("le")) {
cfml.removeSpace();
ref = new LTE(ref, concatOp(), limited);
hasChanged = true;
}
} else // neq, not equal, nct
if (cfml.isCurrent('n')) {
// Not Equal
if (cfml.forwardIfCurrent("neq")) {
cfml.removeSpace();
ref = new NEQ(ref, concatOp(), limited);
hasChanged = true;
} else // Not Equal (Alias)
if (cfml.forwardIfCurrent("not", "equal")) {
cfml.removeSpace();
ref = new NEQ(ref, concatOp(), limited);
hasChanged = true;
} else // nct
if (cfml.forwardIfCurrent("nct")) {
cfml.removeSpace();
ref = new NCT(ref, concatOp(), limited);
hasChanged = true;
}
}
} while (hasChanged);
}
return ref;
}
Aggregations