You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2015/10/21 14:47:20 UTC
svn commit: r1709820 - in /uima/ruta/trunk:
ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
ruta-docbook/src/docbook/tools.ruta.language.actions.xml
Author: pkluegl
Date: Wed Oct 21 12:47:20 2015
New Revision: 1709820
URL: http://svn.apache.org/viewvc?rev=1709820&view=rev
Log:
UIMA-4633
- extended test and fixed trivial case
- added documentation
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.actions.xml
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java?rev=1709820&r1=1709819&r2=1709820&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/SplitAction.java Wed Oct 21 12:47:20 2015
@@ -165,9 +165,14 @@ public class SplitAction extends Abstrac
private boolean trimInvisible(Annotation annotation, RutaStream stream) {
List<RutaBasic> basics = new ArrayList<>(stream.getAllBasicsInWindow(annotation));
+
int min = annotation.getEnd();
int max = annotation.getBegin();
+ if(min <= max) {
+ return false;
+ }
+
for (RutaBasic each : basics) {
if (stream.isVisible(each)) {
min = Math.min(min, each.getBegin());
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java?rev=1709820&r1=1709819&r2=1709820&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java Wed Oct 21 12:47:20 2015
@@ -41,248 +41,248 @@ import org.junit.Test;
public class SplitTest {
-// @Test
-// public void testDefault() {
-// String document = "Some text. More text , with 1 , and more. even more text.";
-// String script = "PERIOD #{-> T1} PERIOD;";
-// script += " #{-> T1} PERIOD;";
-// script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
-// script += "Complex{-> SPLIT(COMMA)};";
-//
-// Map<String, String> typeMap = new TreeMap<String, String>();
-// String typeName = "Complex";
-// typeMap.put(typeName, "uima.tcas.Annotation");
-//
-// Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
-// List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
-// featureMap.put(typeName, list);
-// String fn = "number";
-// list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
-//
-// CAS cas = null;
-// try {
-// cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
-// Ruta.apply(cas, script);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-//
-// Type t = null;
-// AnnotationIndex<AnnotationFS> ai = null;
-// FSIterator<AnnotationFS> iterator = null;
-//
-// t = cas.getTypeSystem().getType(typeName);
-// Feature f1 = t.getFeatureByBaseName(fn);
-// ai = cas.getAnnotationIndex(t);
-//
-// assertEquals(3, ai.size());
-// iterator = ai.iterator();
-// AnnotationFS next = iterator.next();
-// assertEquals("More text", next.getCoveredText());
-// FeatureStructure featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals("with 1", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals("and more", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// if (cas != null) {
-// cas.release();
-// }
-//
-// }
-//
-// @Test
-// public void testAddBegin() {
-// String document = "Some text. More text , with 1 , and more. even more text.";
-// String script = "PERIOD #{-> T1} PERIOD;";
-// script += " #{-> T1} PERIOD;";
-// script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
-// script += "Complex{-> SPLIT(COMMA, true, true, false)};";
-//
-// Map<String, String> typeMap = new TreeMap<String, String>();
-// String typeName = "Complex";
-// typeMap.put(typeName, "uima.tcas.Annotation");
-//
-// Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
-// List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
-// featureMap.put(typeName, list);
-// String fn = "number";
-// list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
-//
-// CAS cas = null;
-// try {
-// cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
-// Ruta.apply(cas, script);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-//
-// Type t = null;
-// AnnotationIndex<AnnotationFS> ai = null;
-// FSIterator<AnnotationFS> iterator = null;
-//
-// t = cas.getTypeSystem().getType(typeName);
-// Feature f1 = t.getFeatureByBaseName(fn);
-// ai = cas.getAnnotationIndex(t);
-//
-// assertEquals(3, ai.size());
-// iterator = ai.iterator();
-// AnnotationFS next = iterator.next();
-// assertEquals("More text", next.getCoveredText());
-// FeatureStructure featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals(", with 1", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals(", and more", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// if (cas != null) {
-// cas.release();
-// }
-//
-// }
-//
-// @Test
-// public void testAddEnd() {
-// String document = "Some text. More text , with 1 , and more. even more text.";
-// String script = "PERIOD #{-> T1} PERIOD;";
-// script += " #{-> T1} PERIOD;";
-// script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
-// script += "Complex{-> SPLIT(COMMA, true, false, true)};";
-//
-// Map<String, String> typeMap = new TreeMap<String, String>();
-// String typeName = "Complex";
-// typeMap.put(typeName, "uima.tcas.Annotation");
-//
-// Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
-// List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
-// featureMap.put(typeName, list);
-// String fn = "number";
-// list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
-//
-// CAS cas = null;
-// try {
-// cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
-// Ruta.apply(cas, script);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-//
-// Type t = null;
-// AnnotationIndex<AnnotationFS> ai = null;
-// FSIterator<AnnotationFS> iterator = null;
-//
-// t = cas.getTypeSystem().getType(typeName);
-// Feature f1 = t.getFeatureByBaseName(fn);
-// ai = cas.getAnnotationIndex(t);
-//
-// assertEquals(3, ai.size());
-// iterator = ai.iterator();
-// AnnotationFS next = iterator.next();
-// assertEquals("More text ,", next.getCoveredText());
-// FeatureStructure featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals("with 1 ,", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals("and more", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// if (cas != null) {
-// cas.release();
-// }
-//
-// }
-//
-// @Test
-// public void testAddBoth() {
-// String document = "Some text. More text , with 1 , and more. even more text.";
-// String script = "PERIOD #{-> T1} PERIOD;";
-// script += " #{-> T1} PERIOD;";
-// script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
-// script += "Complex{-> SPLIT(COMMA, true, true, true)};";
-//
-// Map<String, String> typeMap = new TreeMap<String, String>();
-// String typeName = "Complex";
-// typeMap.put(typeName, "uima.tcas.Annotation");
-//
-// Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
-// List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
-// featureMap.put(typeName, list);
-// String fn = "number";
-// list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
-//
-// CAS cas = null;
-// try {
-// cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
-// Ruta.apply(cas, script);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-//
-// Type t = null;
-// AnnotationIndex<AnnotationFS> ai = null;
-// FSIterator<AnnotationFS> iterator = null;
-//
-// t = cas.getTypeSystem().getType(typeName);
-// Feature f1 = t.getFeatureByBaseName(fn);
-// ai = cas.getAnnotationIndex(t);
-//
-// assertEquals(3, ai.size());
-// iterator = ai.iterator();
-// AnnotationFS next = iterator.next();
-// assertEquals("More text ,", next.getCoveredText());
-// FeatureStructure featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals(", with 1 ,", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// next = iterator.next();
-// assertEquals(", and more", next.getCoveredText());
-// featureValue = next.getFeatureValue(f1);
-// assertNotNull(featureValue);
-// assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
-//
-// if (cas != null) {
-// cas.release();
-// }
-//
-// }
+ @Test
+ public void testDefault() {
+ String document = "Some text. More text , with 1 , and more. even more text.";
+ String script = "PERIOD #{-> T1} PERIOD;";
+ script += " #{-> T1} PERIOD;";
+ script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
+ script += "Complex{-> SPLIT(COMMA)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Complex";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "number";
+ list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(3, ai.size());
+ iterator = ai.iterator();
+ AnnotationFS next = iterator.next();
+ assertEquals("More text", next.getCoveredText());
+ FeatureStructure featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals("with 1", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals("and more", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
@Test
- public void testBoundary() {
+ public void testAddBegin() {
+ String document = "Some text. More text , with 1 , and more. even more text.";
+ String script = "PERIOD #{-> T1} PERIOD;";
+ script += " #{-> T1} PERIOD;";
+ script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
+ script += "Complex{-> SPLIT(COMMA, true, true, false)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Complex";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "number";
+ list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(3, ai.size());
+ iterator = ai.iterator();
+ AnnotationFS next = iterator.next();
+ assertEquals("More text", next.getCoveredText());
+ FeatureStructure featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals(", with 1", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals(", and more", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
+
+ @Test
+ public void testAddEnd() {
+ String document = "Some text. More text , with 1 , and more. even more text.";
+ String script = "PERIOD #{-> T1} PERIOD;";
+ script += " #{-> T1} PERIOD;";
+ script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
+ script += "Complex{-> SPLIT(COMMA, true, false, true)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Complex";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "number";
+ list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(3, ai.size());
+ iterator = ai.iterator();
+ AnnotationFS next = iterator.next();
+ assertEquals("More text ,", next.getCoveredText());
+ FeatureStructure featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals("with 1 ,", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals("and more", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
+
+ @Test
+ public void testAddBoth() {
+ String document = "Some text. More text , with 1 , and more. even more text.";
+ String script = "PERIOD #{-> T1} PERIOD;";
+ script += " #{-> T1} PERIOD;";
+ script += "T1{CONTAINS(NUM)-> CREATE(Complex, \"number\"= NUM)};";
+ script += "Complex{-> SPLIT(COMMA, true, true, true)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Complex";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "number";
+ list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(3, ai.size());
+ iterator = ai.iterator();
+ AnnotationFS next = iterator.next();
+ assertEquals("More text ,", next.getCoveredText());
+ FeatureStructure featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals(", with 1 ,", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ next = iterator.next();
+ assertEquals(", and more", next.getCoveredText());
+ featureValue = next.getFeatureValue(f1);
+ assertNotNull(featureValue);
+ assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
+
+ @Test
+ public void testBoundarySplit() {
String document = "Some text. More text , with 1 , and more. even more text.";
String script = "PERIOD #{-> T1} PERIOD;";
script += "#{-> T1} PERIOD;";
@@ -339,6 +339,45 @@ public class SplitTest {
if (cas != null) {
cas.release();
+ }
+
+ }
+
+ @Test
+ public void testBoundary() {
+ String document = "Some text. More text , with 1 , and more. even more text.";
+ String script = "PERIOD #{-> T1} PERIOD;";
+ script += "#{-> T1} PERIOD;";
+ script += "T1{-> SPLIT(PERIOD, true, false, true)};";
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = RutaTestUtils.getTestType(cas, 1);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(3, ai.size());
+ iterator = ai.iterator();
+ AnnotationFS next = iterator.next();
+ assertEquals("Some text.", next.getCoveredText());
+
+ next = iterator.next();
+ assertEquals("More text , with 1 , and more.", next.getCoveredText());
+
+ next = iterator.next();
+ assertEquals("even more text.", next.getCoveredText());
+
+ if (cas != null) {
+ cas.release();
}
}
Modified: uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.actions.xml
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.actions.xml?rev=1709820&r1=1709819&r2=1709820&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.actions.xml (original)
+++ uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.actions.xml Wed Oct 21 12:47:20 2015
@@ -1288,6 +1288,40 @@ Document{-> MARKTABLE(Struct, 1, TestTab
</section>
</section>
+ <section id="ugr.tools.ruta.language.actions.split">
+ <title>SHIFT</title>
+ <para>
+ The SPLIT action is able to split the matched annotation for each occurence of annotation
+ of the given type. There are three additional parameters: The first one specifies if complete annotations of the given type
+ should be used to split the matched annotations. If set to false, then even the boundary of an annotation will cause splitting.
+ The third (addToBegin) and fourth (addToEnd) argument specify if the complete annotation (for splitting)
+ will be added to the begin or end of the splitted annotation.
+ The latter two are only utilized if the first one is set to true..
+ If omitted, the first argument is true and the other two arguments are false by default.
+ </para>
+ <section>
+ <title>
+ <emphasis role="bold">Definition:</emphasis>
+ </title>
+ <para>
+ <programlisting><![CDATA[SPLIT(TypeExpression(,BooleanExpression,
+ (BooleanExpression, BooleanExpression)? )?]]></programlisting>
+ </para>
+ </section>
+ <section>
+ <title>
+ <emphasis role="bold">Example:</emphasis>
+ </title>
+ <para>
+ <programlisting><![CDATA[Sentence{-> SPLIT(PERIOD, true, false, true)};]]></programlisting>
+ </para>
+ <para>
+ In this example, an annotation of the type <quote>Sentence</quote> is
+ splitted for each occurence of a period, which is added to the end of the new sentence.
+ </para>
+ </section>
+ </section>
+
<section id="ugr.tools.ruta.language.actions.transfer">
<title>TRANSFER</title>
<para>