Author: bpoussin Date: 2012-09-10 07:42:27 +0200 (Mon, 10 Sep 2012) New Revision: 1510 Url: http://nuiton.org/repositories/revision/wikitty/1510 Log: Evolution #2307: Enhance parser to support #depth as WikittyFieldSearchDepth Evolution #2308: enhance parser to support empty query as True Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-08-30 14:44:42 UTC (rev 1509) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-09-10 05:42:27 UTC (rev 1510) @@ -128,9 +128,11 @@ public static final String OFFSET = "#OFFSET"; public static final String LIMIT = "#LIMIT"; + public static final String DEPTH = "#DEPTH"; public Rule icOFFSET = IgnoreCase(OFFSET); public Rule icLIMIT = IgnoreCase(LIMIT); + public Rule icDEPTH = IgnoreCase(DEPTH); public Rule icEXTENSION = IgnoreCase(Element.EXTENSION.getValue()); public Rule icID = IgnoreCase(Element.ID.getValue()); @@ -309,10 +311,14 @@ } Rule start() { - return Sequence(or(), push(new WikittyQuery((Condition)pop())), - offset(), limit(), space(), EOI); + return Sequence(FirstOf(or(), empty()), push(new WikittyQuery((Condition)pop())), + offset(), limit(), depth(), space(), EOI); } + Rule empty() { + return Sequence(EMPTY, push(new True())); + } + Rule offset() { return Optional(space(), icOFFSET, FirstOf(EQUALS, space()), OneOrMore(AnyOf("1234567890")), push(((WikittyQuery)pop()).setOffset(toInt(match()))) @@ -325,6 +331,12 @@ ); } + Rule depth() { + return Optional(space(), icDEPTH, FirstOf(EQUALS, space()), OneOrMore(AnyOf("1234567890")), + push(((WikittyQuery)pop()).setWikittyFieldSearchDepth(toInt(match()))) + ); + } + Rule or() { return Sequence(and(), ZeroOrMore(space(), icOR, space(), and(), push(new Or((Condition)pop(1), (Condition)pop()))));