X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fz3950%2Fzing%2Fcql%2FCQLParser.java;h=90e9f59a5c45b9a2e9bb31e9ac4531f1d5f2b8df;hb=67054ebf3e57c9570fab3d6e2c962f816487848e;hp=7580959cf328718a342e0c9e3df2fff87e8b6c3d;hpb=7d8ec6eaa2b799a2c466605af660e381644c48cc;p=cql-java-moved-to-github.git diff --git a/src/main/java/org/z3950/zing/cql/CQLParser.java b/src/main/java/org/z3950/zing/cql/CQLParser.java index 7580959..90e9f59 100644 --- a/src/main/java/org/z3950/zing/cql/CQLParser.java +++ b/src/main/java/org/z3950/zing/cql/CQLParser.java @@ -192,7 +192,12 @@ public class CQLParser { debug("non-parenthesised term"); word = matchSymbol("index or term"); - if (!isSymbolicRelation() && lexer.ttype != lexer.TT_WORD) + while (lexer.ttype == lexer.TT_WORD && !isRelation()) { + word = word + " " + lexer.sval; + match(lexer.TT_WORD); + } + + if (!isRelation()) break; index = word; @@ -231,7 +236,23 @@ public class CQLParser { return new CQLPrefixNode(name, identifier, node); } - // Checks for a relation + private boolean isRelation() { + debug("isRelation: checking ttype=" + lexer.ttype + + " (" + lexer.render() + ")"); + if (lexer.ttype == lexer.TT_WORD && + (lexer.sval.indexOf('.') >= 0 || + lexer.sval.equals("any") || + lexer.sval.equals("all") || + lexer.sval.equals("within") || + lexer.sval.equals("encloses") || + (lexer.sval.equals("exact") && compat != V1POINT2) || + (lexer.sval.equals("scr") && compat != V1POINT2) || + (lexer.sval.equals("adj") && compat == V1POINT2))) + return true; + + return isSymbolicRelation(); + } + private boolean isSymbolicRelation() { debug("isSymbolicRelation: checking ttype=" + lexer.ttype + " (" + lexer.render() + ")");