From: <jbo...@li...> - 2006-01-24 03:23:02
|
Author: mic...@jb... Date: 2006-01-23 22:22:52 -0500 (Mon, 23 Jan 2006) New Revision: 2181 Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java Log: better space handling Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java 2006-01-24 03:12:21 UTC (rev 2180) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java 2006-01-24 03:22:52 UTC (rev 2181) @@ -20,26 +20,30 @@ */ class Chunk { + //the chunk of text from the dicitonary String text; + Chunk next; - //value if it is a hole, starts out as null. + //for building the substitution string, remember how the {0} was spaced with the rest of the string + //for example: date of '{0}' ---- this needs to be handled as well as: date of ' {0} ' + String padL = ""; + String padR = ""; + + //value parsed out if it is a hole, starts out as null. String value; - Chunk(String text) { this.text = text; } - - /** * This will build up a key to use to substitute the original string with. * Can then swap it with the target text. */ void buildSubtitutionKey(StringBuffer buffer) { if (isHole()) { - buffer.append(" " + value + " "); + buffer.append(padL + value + padR); } else { buffer.append(text); } @@ -56,9 +60,12 @@ if (isHole()) { //value = text until next next.text is found if (next == null || next.text == null) { + storeSpacePadding( expression ); value = expression.trim(); } else { - value = StringUtils.substringBefore(expression, next.text).trim(); + String val = StringUtils.substringBefore(expression, next.text); + storeSpacePadding( val ); + value = val.trim(); } } else { @@ -68,6 +75,11 @@ next.process(StringUtils.substringAfter(expression, value)); } } + + private void storeSpacePadding(String val) { + if (val.startsWith(" ")) padL = " "; + if (val.endsWith(" ")) padR = " "; + } void buildValueMap(Map map) { if (this.isHole()) { Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-24 03:12:21 UTC (rev 2180) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-24 03:22:52 UTC (rev 2181) @@ -82,14 +82,13 @@ grammar = new NLGrammar(); - grammar.addNLItem(new NLMappingItem(1, "date of ' {0} '", "dateOf({0})")); + grammar.addNLItem(new NLMappingItem(1, "date of '{0}'", "dateOf({0})")); grammar.addNLItem(new NLMappingItem(2, "age of [ {0} ]", "{0}.getAge()")); grammar.addNLItem(new NLMappingItem(3, "Today", "new java.util.Date()")); grammar.addNLItem(new NLMappingItem(4, "{0} is before {1}", "({0}).compareTo({1}) > 0")); + nl = "date of '10-jul-2006' is before Today"; - nl = "date of ' 10-jul-2006 ' is before Today"; - compiler = new NLExpressionCompiler(grammar); expected = "(dateOf(10-jul-2006)).compareTo(new java.util.Date()) > 0"; assertEquals(expected, compiler.compile(nl)); |