Author: pkluegl
Date: Wed Mar  5 10:18:44 2014
New Revision: 1574412

URL: http://svn.apache.org/r1574412
Log:
UIMA-3666
- allow additional argument in INLIST
- fixed documentation

Added:
    
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/output/
    
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/output/
Modified:
    
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java
    
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
    uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml
    
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g

Modified: 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
 Wed Mar  5 10:18:44 2014
@@ -1196,14 +1196,18 @@ conditionCurrentCount returns [AbstractR
     (COMMA var = numberVariable)? RPAREN
     {cond = ConditionFactory.createConditionCurrentCount(type, min, max, 
var,$blockDeclaration::env);}
     ;
+    
 conditionInList returns [AbstractRutaCondition cond = null]
  options {
        backtrack = true;
 }
     :
-    INLIST LPAREN ((list2 = stringListExpression)=>list2 = 
stringListExpression | list1 = wordListExpression) (COMMA dist = 
numberExpression (COMMA rel = booleanExpression)?)? RPAREN
-    {if(list1 != null) {cond = ConditionFactory.createConditionInList(list1, 
dist, rel,$blockDeclaration::env);}
-    else {cond = ConditionFactory.createConditionInList(list2, dist, 
rel,$blockDeclaration::env);};}
+    INLIST LPAREN ((list2 = stringListExpression)=>list2 = 
stringListExpression | list1 = wordListExpression) 
+    (COMMA arg = stringExpression)?
+    //(COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? 
+    RPAREN
+    {if(list1 != null) {cond = ConditionFactory.createConditionInList(list1, 
arg,$blockDeclaration::env);}
+    else {cond = ConditionFactory.createConditionInList(list2, 
arg,$blockDeclaration::env);};}
     ;
 
     

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
 Wed Mar  5 10:18:44 2014
@@ -95,8 +95,8 @@ public class ConditionFactory {
   }
 
   public static AbstractRutaCondition createConditionInList(WordListExpression 
listExpr,
-          INumberExpression dist, IBooleanExpression rel, RutaBlock parent) {
-    return new InListCondition(listExpr, dist, rel);
+          IStringExpression arg, RutaBlock parent) {
+    return new InListCondition(listExpr, arg);
   }
 
   public static AbstractRutaCondition 
createConditionMOfN(List<AbstractRutaCondition> conds,
@@ -237,8 +237,8 @@ public class ConditionFactory {
   }
 
   public static AbstractRutaCondition 
createConditionInList(StringListExpression list,
-          INumberExpression dist, IBooleanExpression rel, RutaBlock env) {
-    return new InListCondition(list, dist, rel);
+          IStringExpression arg, RutaBlock env) {
+    return new InListCondition(list, arg);
   }
 
   public static AbstractRutaCondition 
createConditionCount(ListExpression<Object> type,

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java
 Wed Mar  5 10:18:44 2014
@@ -23,10 +23,9 @@ import java.util.List;
 
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
-import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.list.StringListExpression;
-import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.resource.WordListExpression;
+import org.apache.uima.ruta.expression.string.IStringExpression;
 import org.apache.uima.ruta.resource.RutaWordList;
 import org.apache.uima.ruta.rule.EvaluatedCondition;
 import org.apache.uima.ruta.rule.RuleElement;
@@ -34,51 +33,40 @@ import org.apache.uima.ruta.visitor.Infe
 
 public class InListCondition extends TerminalRutaCondition {
 
-  private IBooleanExpression relative;
-
-  private final INumberExpression distance;
-
   private WordListExpression listExpr;
 
   private StringListExpression stringList;
 
-  public InListCondition(WordListExpression listExpr, INumberExpression 
distance,
-          IBooleanExpression relative) {
+  private IStringExpression arg;
+
+  public InListCondition(WordListExpression listExpr, IStringExpression arg) {
     super();
     this.listExpr = listExpr;
-    this.distance = distance;
-    this.relative = relative;
+    this.arg = arg;
   }
 
-  public InListCondition(StringListExpression list, INumberExpression distance,
-          IBooleanExpression relative) {
+  public InListCondition(StringListExpression list, IStringExpression arg) {
     super();
-    this.distance = distance;
-    this.relative = relative;
     this.stringList = list;
+    this.arg = arg;
   }
 
   @Override
   public EvaluatedCondition eval(AnnotationFS annotation, RuleElement element, 
RutaStream stream,
           InferenceCrowd crowd) {
-    String coveredText = annotation.getCoveredText();
+    String text = annotation.getCoveredText();
+    if(arg != null) {
+      text = arg.getStringValue(element.getParent(), annotation, stream);
+    }
     if (stringList == null) {
       RutaWordList wordList = listExpr.getList(element.getParent());
-      return new EvaluatedCondition(this, wordList.contains(coveredText, 
false, 0, null, 0, true));
+      return new EvaluatedCondition(this, wordList.contains(text, false, 0, 
null, 0, true));
     }
     List<String> sList = stringList.getList(element.getParent(), stream);
-    boolean contains = sList.contains(coveredText);
+    boolean contains = sList.contains(text);
     return new EvaluatedCondition(this, contains);
   }
 
-  public IBooleanExpression getRelative() {
-    return relative;
-  }
-
-  public INumberExpression getDistance() {
-    return distance;
-  }
-
   public WordListExpression getListExpression() {
     return listExpr;
   }
@@ -87,4 +75,8 @@ public class InListCondition extends Ter
     return stringList;
   }
 
+  public IStringExpression getArg() {
+    return arg;
+  }
+
 }

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java
 Wed Mar  5 10:18:44 2014
@@ -226,16 +226,12 @@ public class ConditionVerbalizer {
       } else {
         list = verbalizer.verbalize(c.getStringList());
       }
-      INumberExpression distE = c.getDistance();
-      String dist = "";
-      String rel = "";
-      if (distE != null) {
-        dist = ", " + verbalizer.verbalize(distE);
-      }
-      if (c.getRelative() != null) {
-        rel = ", " + verbalizer.verbalize(c.getRelative());
+      IStringExpression a = c.getArg();
+      String arg = "";
+      if (a != null) {
+        arg = ", " + verbalizer.verbalize(a);
       }
-      return name + list + dist + rel + ")";
+      return name + list +arg + ")";
     } else if (condition instanceof LastCondition) {
       LastCondition c = (LastCondition) condition;
       return name + verbalizer.verbalize(c.getType()) + ")";

Modified: 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
 Wed Mar  5 10:18:44 2014
@@ -180,9 +180,9 @@ public class ConditionVerbalizerTest {
     assertEquals("IF(true)", s);
 
     // INLIST
-    c = new InListCondition(stringListExpr, numExpr1, boolExpr1);
+    c = new InListCondition(stringListExpr, stringExpr);
     s = v.verbalize(c);
-    assertEquals("INLIST({\"string\"}, 4, true)", s);
+    assertEquals("INLIST({\"string\"}, \"string\")", s);
 
     // IS
     c = new IsCondition(typeExpr1);

Modified: 
uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml 
(original)
+++ uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml 
Wed Mar  5 10:18:44 2014
@@ -383,20 +383,18 @@
     <title>INLIST</title>
     <para>
       The INLIST condition is fulfilled, if the matched annotation is listed
-      in a given word or string list. The (relative) edit distance
-      is currently disabled.
-      <!-- ATTENTION: it seems the edit distance is still disabled? what does 
-        this mean? -->
+      in a given word or string list. If an optional agrument is given, then 
+      the value of the argument is used instead of the covered text of the 
matched annotation
     </para>
     <section>
       <title>
         <emphasis role="bold">Definition:</emphasis>
       </title>
       <para>
-        
<programlisting><![CDATA[INLIST(WordList(,NumberExpression,(BooleanExpression)?)?)
 ]]></programlisting>
+        <programlisting><![CDATA[INLIST(WordList(,StringExpression)?) 
]]></programlisting>
       </para>
       <para>
-        
<programlisting><![CDATA[INLIST(StringList(,NumberExpression,(BooleanExpression)?)?)
 ]]></programlisting>
+        <programlisting><![CDATA[INLIST(StringList(,StringExpression)?) 
]]></programlisting>
       </para>
     </section>
     <section>
@@ -404,12 +402,19 @@
         <emphasis role="bold">Example:</emphasis>
       </title>
       <para>
-        
<programlisting><![CDATA[Keyword{INLIST(specialKeywords.txt)->MARK(SpecialKeyword)};]]></programlisting>
+        
<programlisting><![CDATA[Keyword{INLIST(SpecialKeywordList)->MARK(SpecialKeyword)};]]></programlisting>
       </para>
       <para>
         A Keyword is annotated with the type SpecialKeyword, if the text
-        of the Keyword annotation is listed in the word list
-        'specialKeywords.txt'.
+        of the Keyword annotation is listed in the word list or string list
+        SpecialKeywordList.
+      </para>
+      <para>
+        <programlisting><![CDATA[Token{INLIST(MyLemmaList, 
Token.lemma)->MARK(SpecialLemma)};]]></programlisting>
+      </para>
+      <para>
+        This rule creates an annotation of the type SpecialLemma for each 
token that provides a feature value 
+        of the feature "lemma" that is present in the string list or word list 
MyLemmaList.
       </para>
     </section>
   </section>

Modified: 
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1574412&r1=1574411&r2=1574412&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
 (original)
+++ 
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
 Wed Mar  5 10:18:44 2014
@@ -1174,9 +1174,10 @@ conditionInList returns [RutaCondition c
 }
     :
     name = INLIST LPAREN ((list2 = stringListExpression)=>list2 = 
stringListExpression | list1 = wordListExpression) 
-    (COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? 
-     {if(list1 != null) {cond = ConditionFactory.createCondition(name, list1, 
dist, rel);}
-    else {cond = ConditionFactory.createCondition(name, list2, dist, rel);};}
+    (COMMA arg = stringExpression)?
+    //(COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? 
+     {if(list1 != null) {cond = ConditionFactory.createCondition(name, list1, 
arg);}
+    else {cond = ConditionFactory.createCondition(name, list2, arg);};}
     RPAREN
     ;
             


Reply via email to