Index: annotrans/trunk/AnnotationTest copy.xml
===================================================================
--- annotrans/trunk/AnnotationTest copy.xml	(revision 6979)
+++ annotrans/trunk/AnnotationTest copy.xml	(revision 6979)
@@ -0,0 +1,8 @@
+<AnnotationTranslation>
+  <TranslationTable fromResource="FCSaggregator" fromLayer="PoS" fromFormalism="UD17" toResource="CGN" toLayer="PoS" toFormalism="CGN_PoS" transType="ReplaceAll">
+    <Pair from="N" to="Noun" />
+  </TranslationTable>
+  <TranslationTable fromResource="CGN" fromLayer="PoS" fromFormalism="CGN_PoS" toResource="FCSaggregator" toLayer="PoS" toFormalism="UD17" transType="ReplaceAll">
+    <Pair from="Noun" to="N" />
+  </TranslationTable>
+</AnnotationTranslation>
Index: annotrans/trunk/annotationTest_F2_OK_001.XML
===================================================================
--- annotrans/trunk/annotationTest_F2_OK_001.XML	(revision 6979)
+++ annotrans/trunk/annotationTest_F2_OK_001.XML	(revision 6979)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!-- 2016-02-03 Peter Beinema:-->
+  <!-- test file for AnnotationTranslator; a tool to translate Strings found in resource A to Strings in resource B, and back. -->
+  <!-- developed for Clarin FCS endpoints (translate input annotations from requesting side to database query and back), but possibly useful for more. -->
+<AnnotationTranslation title="annotationTest_F2_OK_001.XML" author="P. Beinema" date="2016-02-03" format="F2" version="OK_001" state="draft">
+  <Resources>
+    <ResourceLayer resource="FCSaggregator" layer="PoS" formalism="UD17" />
+    <ResourceLayer resource="FCSaggregator" layer="phonetic" formalism="X-Sampa" />
+    <ResourceLayer resource="CGN" layer="PoS" formalism="CGN-PoS" />
+    <ResourceLayer resource="CGN" layer="phonetic" formalism="CGN-Sampa" />
+  </Resources>
+  <Translations>
+    <TranslationTable fromResourceLayer="FCSaggregator/PoS" toResourceLayer="CGN/PoS" translationType="replaceWhole">
+      <Pair from="NOUN"   to="N" />
+      <Pair from="PROPN"  to="N" />
+      <Pair from="ADJ"    to="ADJ" />
+      <Pair from="VERB"   to="WW" />
+      <Pair from="NUM"    to="TW" />
+      <Pair from="ADJ"    to="TW" />
+      <Pair from="PRON"   to="VNW" />
+      <Pair from="DET"    to="VNW" />
+      <Pair from="ADV"    to="VNW" />
+      <Pair from="DET"    to="LID" />
+      <Pair from="ADP"    to="VZ" />
+      <Pair from="CONJ"   to="VG" />
+      <Pair from="SCONJ"  to="VG" />
+      <Pair from="ADV"    to="BIJW" />
+      <Pair from="INTJ"   to="TSW" />
+      <Pair from="PUNCT"  to="LET" />
+      <Pair from="X"      to="SPEC" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="CGN/PoS" toResourceLayer="FCSaggregator/PoS" translationType="replaceWhole">
+      <Pair from="N"    to="NOUN" />
+      <Pair from="N"    to="PROPN" />
+      <Pair from="ADJ"  to="ADJ" />
+      <Pair from="WW"   to="VERB" />
+      <Pair from="TW"   to="NUM" />
+      <Pair from="TW"   to="ADJ" />
+      <Pair from="VNW"  to="PRON" />
+      <Pair from="VNW"  to="DET" />
+      <Pair from="VNW"  to="ADV" />
+      <Pair from="LID"  to="DET" />
+      <Pair from="VZ"   to="ADP" />
+      <Pair from="VG"   to="CONJ" />
+      <Pair from="VG"   to="SCONJ" />
+      <Pair from="BIJW" to="ADV" />
+      <Pair from="TSW"  to="INTJ" />
+      <Pair from="LET"  to="PUNCT" />
+      <Pair from="SPEC" to="X" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="FCSaggregator/phonetic" toResourceLayer="CGN/phonetic" translationType="replaceSegments">
+      <Pair from="A:" to="A2\" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="CGN/phonetic" toResourceLayer="FCSaggregator/phonetic" translationType="replaceSegments">
+    </TranslationTable>
+  </Translations>
+</AnnotationTranslation>
Index: annotrans/trunk/annotationTest_OK_001.XML
===================================================================
--- annotrans/trunk/annotationTest_OK_001.XML	(revision 6979)
+++ annotrans/trunk/annotationTest_OK_001.XML	(revision 6979)
@@ -0,0 +1,8 @@
+<AnnotationTranslation>
+  <TranslationTable fromResource="FCSaggregator" fromLayer="PoS" fromFormalism="UD17" toResource="CGN" toLayer="PoS" toFormalism="CGN_PoS" translationType="ReplaceAll">
+    <Pair from="N" to="Noun" />
+  </TranslationTable>
+  <TranslationTable fromResource="CGN" fromLayer="PoS" fromFormalism="CGN_PoS" toResource="FCSaggregator" toLayer="PoS" toFormalism="UD17" translationType="ReplaceAll">
+    <Pair from="Noun" to="N" />
+  </TranslationTable>
+</AnnotationTranslation>
Index: annotrans/trunk/annotationTest_OK_002.XML
===================================================================
--- annotrans/trunk/annotationTest_OK_002.XML	(revision 6979)
+++ annotrans/trunk/annotationTest_OK_002.XML	(revision 6979)
@@ -0,0 +1,43 @@
+<AnnotationTranslation>
+  <TranslationTable fromResource="FCSaggregator" fromLayer="PoS" fromFormalism="UD17" toResource="CGN" toLayer="PoS" toFormalism="CGN_PoS" translationType="ReplaceAll">
+    <Pair from="N" to="Noun" />
+  </TranslationTable>
+  <TranslationTable fromResource="CGN" fromLayer="PoS" fromFormalism="CGN_PoS" toResource="FCSaggregator" toLayer="PoS" toFormalism="UD17" translationType="ReplaceAll">
+    <Pair from="N"    to="NOUN" />
+    <Pair from="N"    to="PROPNN" />
+    <Pair from="ADJ"  to="ADJ" />
+    <Pair from="WW"   to="VERB" />
+    <Pair from="TW"   to="NUM" />
+    <Pair from="TW"   to="ADJ" />
+    <Pair from="VNW"  to="PRON" />
+    <Pair from="VNW"  to="DET" />
+    <Pair from="VNW"  to="ADV" />
+    <Pair from="LID"  to="DET" />
+    <Pair from="VZ"   to="ADP" />
+    <Pair from="VG"   to="CONJ" />
+    <Pair from="VG"   to="SCONJ" />
+    <Pair from="BIJW" to="ADV" />
+    <Pair from="TSW"  to="INTJ" />
+    <Pair from="LET"  to="PUNCT" />
+    <Pair from="SPEC" to="X" />
+  </TranslationTable>
+  <TranslationTable fromResource="FCSaggregator" fromLayer="PoS" fromFormalism="UD17" toResource="CGN" toLayer="PoS" toFormalism="CGN_PoS" translationType="ReplaceAll">
+    <Pair from="NOUN"   to="N" />
+    <Pair from="PROPN"  to="N" />
+    <Pair from="ADJ"    to="ADJ" />
+    <Pair from="VERB"   to="WW" />
+    <Pair from="NUM"    to="TW" />
+    <Pair from="ADJ"    to="TW" />
+    <Pair from="PRON"   to="VNW" />
+    <Pair from="DET"    to="VNW" />
+    <Pair from="ADV"    to="VNW" />
+    <Pair from="DET"    to="LID" />
+    <Pair from="ADP"    to="VZ" />
+    <Pair from="CONJ"   to="VG" />
+    <Pair from="SCONJ"  to="VG" />
+    <Pair from="ADV"    to="BIJW" />
+    <Pair from="INTJ"   to="TSW" />
+    <Pair from="PUNCT"  to="LET" />
+    <Pair from="X"      to="SPEC" />
+  </TranslationTable>
+</AnnotationTranslation>
Index: annotrans/trunk/annotationTest_OK_003.XML
===================================================================
--- annotrans/trunk/annotationTest_OK_003.XML	(revision 6979)
+++ annotrans/trunk/annotationTest_OK_003.XML	(revision 6979)
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!-- 2016-02-03 Peter Beinema:-->
+  <!-- test file for AnnotationTranslator; a tool to translate Strings found in resource A to Strings in resource B, and back. -->
+  <!-- developed for Clarin FCS endpoints (translate input annotations from requesting side to database query and back), but possibly useful for more. -->
+<AnnotationTranslation title="annotationTest_F2_OK_001.XML" author="P. Beinema" date="2016-02-03" format="F2" version="OK_001" state="draft">
+  <Resources>
+    <ResourceLayer resource="FCSaggregator" layer="PoS" formalism="UD17" />
+    <ResourceLayer resource="FCSaggregator" layer="phonetic" formalism="X-Sampa" />
+    <ResourceLayer resource="CGN" layer="PoS" formalism="CGN-PoS" />
+    <ResourceLayer resource="CGN" layer="phonetic" formalism="CGN-Sampa" />
+  </Resources>
+  <Translations>
+    <TranslationTable fromResourceLayer="FCSaggregator/PoS" toResourceLayer="CGN/PoS" translationType="replaceWhole">
+      <Pair from="NOUN"   to="N" />
+      <Pair from="PROPN"  to="N" />
+      <Pair from="ADJ"    to="ADJ" />
+      <Pair from="VERB"   to="WW" />
+      <Pair from="NUM"    to="TW" />
+      <Pair from="ADJ"    to="TW" />
+      <Pair from="PRON"   to="VNW" />
+      <Pair from="DET"    to="VNW" />
+      <Pair from="ADV"    to="VNW" />
+      <Pair from="DET"    to="LID" />
+      <Pair from="ADP"    to="VZ" />
+      <Pair from="CONJ"   to="VG" />
+      <Pair from="SCONJ"  to="VG" />
+      <Pair from="ADV"    to="BIJW" />
+      <Pair from="INTJ"   to="TSW" />
+      <Pair from="PUNCT"  to="LET" />
+      <Pair from="X"      to="SPEC" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="CGN/PoS" toResourceLayer="FCSaggregator/PoS" translationType="replaceWhole">
+      <Pair from="N"    to="NOUN" />
+      <Pair from="N"    to="PROPN" />
+      <Pair from="ADJ"  to="ADJ" />
+      <Pair from="WW"   to="VERB" />
+      <Pair from="TW"   to="NUM" />
+      <Pair from="TW"   to="ADJ" />
+      <Pair from="VNW"  to="PRON" />
+      <Pair from="VNW"  to="DET" />
+      <Pair from="VNW"  to="ADV" />
+      <Pair from="LID"  to="DET" />
+      <Pair from="VZ"   to="ADP" />
+      <Pair from="VG"   to="CONJ" />
+      <Pair from="VG"   to="SCONJ" />
+      <Pair from="BIJW" to="ADV" />
+      <Pair from="TSW"  to="INTJ" />
+      <Pair from="LET"  to="PUNCT" />
+      <Pair from="SPEC" to="X" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="FCSaggregator/phonetic" toResourceLayer="CGN/phonetic" translationType="replaceSegments">
+      <Pair from="!"      to="" />
+      <Pair from="!\\"    to="" />
+      <Pair from="&quot;" to="" />
+      <Pair from="%"      to="" />
+      <Pair from="&amp;"  to="u" />
+      <Pair from="'"      to="" />
+      <Pair from="*"      to="" />
+      <Pair from="-"      to="" />
+      <Pair from="-\\"    to="" />
+      <Pair from="."      to="" />
+      <Pair from="/"      to="" />
+      <Pair from="1"      to="" />
+      <Pair from="2"      to="2" />
+      <Pair from="3"      to="" />
+      <Pair from="3\\"    to="u" />
+      <Pair from="4"      to="r" />
+      <Pair from="5"      to="l" />
+      <Pair from="6"      to="u" />
+      <Pair from="7"      to="u" />
+      <Pair from="8"      to="u" />
+      <Pair from="9"      to="u" />
+      <Pair from="9"      to="9:" />
+      <Pair from=":"      to="" />
+      <Pair from=":\\"    to="" />
+      <Pair from="&lt;"      to="" />
+      <Pair from="&lt;\\"    to="" />
+      <Pair from="&lt;F&gt;"    to="" />
+      <Pair from="&lt;R&gt;"    to="" />
+      <Pair from="="      to="" />
+      <Pair from="=\\"    to="" />
+      <Pair from="&gt;"      to="" />
+      <Pair from="&gt;\\"    to="" />
+      <Pair from="?"      to="" />
+      <Pair from="?\\"    to="" />
+      <Pair from="@@"     to="@@" />
+      <Pair from="@\\"    to="@" />
+      <Pair from="A"      to="A" />
+      <Pair from="A"      to="A:" />
+      <Pair from="A"      to="A+" />
+      <Pair from="A"      to="A~" />
+      <Pair from="B"      to="b" />
+      <Pair from="B\\"    to="b" />
+      <Pair from="C"      to="g" />
+      <Pair from="D"      to="t" />
+      <Pair from="E"      to="E" />
+      <Pair from="E"      to="E:" />
+      <Pair from="E"      to="E+" />
+      <Pair from="E"      to="E~" />
+      <Pair from="F"      to="f" />
+      <Pair from="G"      to="G" />
+      <Pair from="G\\"    to="G" />
+      <Pair from="G\\_&lt;"  to="G" />
+      <Pair from="H"      to="h" />
+      <Pair from="H\\"    to="h" />
+      <Pair from="I"      to="I" />
+      <Pair from="I\\"    to="I" />
+      <Pair from="J"      to="J" />
+      <Pair from="J\\"    to="J" />
+      <Pair from="J\\_&lt;"  to="J" />
+      <Pair from="K"      to="g" />
+      <Pair from="K\\"    to="g" />
+      <Pair from="L"      to="lj" />
+      <Pair from="L\\"    to="lj" />
+      <Pair from="M"      to="g" />
+      <Pair from="M\\"    to="g" />
+      <Pair from="N"      to="N" />
+      <Pair from="N\\"    to="N" />
+      <Pair from="O"      to="O" />
+      <Pair from="O\\"    to="" />
+      <Pair from="O"      to="O:" />
+      <Pair from="O"      to="O~" />
+      <Pair from="P"      to="v" />
+      <Pair from="Q"      to="O" />
+      <Pair from="R"      to="r" />
+      <Pair from="R\\"    to="r" />
+      <Pair from="S"      to="sj" />
+      <Pair from="T"      to="t" />
+      <Pair from="U"      to="u" />
+      <Pair from="U\\"    to="Y" />
+      <Pair from="V"      to="Y" />
+      <Pair from="W"      to="w" />
+      <Pair from="X"      to="g" />
+      <Pair from="X\\"    to="r" />
+      <Pair from="Y"      to="Y" />
+      <Pair from="Z"      to="Z" />
+      <Pair from="^"      to="" />
+      <Pair from="_&quot;"    to="" />
+      <Pair from="_+"     to="" />
+      <Pair from="_~"     to="" />
+      <Pair from="_/"     to="" />
+      <Pair from="_0"     to="" />
+      <Pair from="_&lt;"     to="" />
+      <Pair from="_="     to="" />
+      <Pair from="_&gt;"     to="" />
+      <Pair from="_?\\"   to="" />
+      <Pair from="_\\"    to="" />
+      <Pair from="_^"     to="" />
+      <Pair from="_}"     to="" />
+      <Pair from="_A"     to="" />
+      <Pair from="_a"     to="" />
+      <Pair from="_B"     to="" />
+      <Pair from="_B_L"   to="" />
+      <Pair from="_c"     to="" />
+      <Pair from="_c"     to="" />
+      <Pair from="_d"     to="" />
+      <Pair from="_e"     to="" />
+      <Pair from="_F"     to="" />
+      <Pair from="_G"     to="" />
+      <Pair from="_H"     to="" />
+      <Pair from="_H_T"   to="" />
+      <Pair from="_h"     to="" />
+      <Pair from="_j"     to="" />
+      <Pair from="_k"     to="" />
+      <Pair from="_L"     to="" />
+      <Pair from="_l"     to="" />
+      <Pair from="_M"     to="" />
+      <Pair from="_m"     to="" />
+      <Pair from="_N"     to="" />
+      <Pair from="_n"     to="" />
+      <Pair from="_O"     to="" />
+      <Pair from="_o"     to="" />
+      <Pair from="_q"     to="" />
+      <Pair from="_R"     to="" />
+      <Pair from="_R_F"   to="" />
+      <Pair from="_r"     to="" />
+      <Pair from="_T"     to="" />
+      <Pair from="_t"     to="" />
+      <Pair from="_v"     to="" />
+      <Pair from="_w"     to="" />
+      <Pair from="_X"     to="" />
+      <Pair from="_x"     to="" />
+      <Pair from="`"      to="" />
+      <Pair from="a"      to="a" />
+      <Pair from="b"      to="b" />
+      <Pair from="b_&lt;"    to="b" />
+      <Pair from="c"      to="" />
+      <Pair from="d"      to="d" />
+      <Pair from="d`"     to="d" />
+      <Pair from="d_&lt;"    to="d" />
+      <Pair from="e"      to="e" />
+      <Pair from="f"      to="f" />
+      <Pair from="g"      to="g" />
+      <Pair from="g_&lt;"    to="g" />
+      <Pair from="h"      to="" />
+      <Pair from="h\\"    to="" />
+      <Pair from="i"      to="i" />
+      <Pair from="j"      to="j" />
+      <Pair from="j\\"    to="j" />
+      <Pair from="k"      to="k" />
+      <Pair from="l"      to="" />
+      <Pair from="l`"     to="" />
+      <Pair from="l\\"    to="" />
+      <Pair from="m"      to="m" />
+      <Pair from="n"      to="n" />
+      <Pair from="n`"     to="n" />
+      <Pair from="o"      to="o" />
+      <Pair from="p"      to="p" />
+      <Pair from="p\\"    to="p" />
+      <Pair from="q"      to="k" />
+      <Pair from="r"      to="r" />
+      <Pair from="r`"     to="r" />
+      <Pair from="r\\"    to="r" />
+      <Pair from="r\\`"   to="" />
+      <Pair from="s"      to="s" />
+      <Pair from="s`"     to="s" />
+      <Pair from="s\\"    to="s" />
+      <Pair from="t"      to="t" />
+      <Pair from="t`"     to="t" />
+      <Pair from="u"      to="u" />
+      <Pair from="v"      to="v" />
+      <Pair from="v\\"    to="v" />
+      <Pair from="P"      to="v" />
+      <Pair from="w"      to="w" />
+      <Pair from="x"      to="x" />
+      <Pair from="x\\"    to="" />
+      <Pair from="y"      to="y" />
+      <Pair from="z"      to="z" />
+      <Pair from="z`"     to="z" />
+      <Pair from="z\\"    to="z" />
+      <Pair from="{"      to="E" />
+      <Pair from="|"      to="" />
+      <Pair from="|\\"    to="" />
+      <Pair from="||"     to="" />
+      <Pair from="|\\|\\" to="" />
+      <Pair from="}"      to="u" />
+      <Pair from="~"      to="" />
+    </TranslationTable>
+    <TranslationTable fromResourceLayer="CGN/phonetic" toResourceLayer="FCSaggregator/phonetic" translationType="replaceSegments">
+      <Pair from="u"    to="&amp;" />
+      <Pair from="2"    to="2" />
+      <Pair from="u"    to="3\\" />
+      <Pair from="r"    to="4" />
+      <Pair from="l"    to="5" />
+      <Pair from="u"    to="6" />
+      <Pair from="u"    to="7" />
+      <Pair from="u"    to="8" />
+      <Pair from="u"    to="9" />
+      <Pair from="9:"   to="9" />
+      <Pair from="@@"   to="@" />
+      <Pair from="@"    to="@\\" />
+      <Pair from="A"    to="A" />
+      <Pair from="A:"   to="A" />
+      <Pair from="A+"   to="A" />
+      <Pair from="A~"   to="A" />
+      <Pair from="b"    to="B" />
+      <Pair from="b"    to="B\\" />
+      <Pair from="g"    to="C" />
+      <Pair from="t"    to="D" />
+      <Pair from="E"    to="E" />
+      <Pair from="E:"   to="E" />
+      <Pair from="E+"   to="E" />
+      <Pair from="E~"   to="E" />
+      <Pair from="f"    to="F" />
+      <Pair from="G"    to="G" />
+      <Pair from="G"    to="G\\" />
+      <Pair from="G"    to="G\\_&lt;" />
+      <Pair from="h"    to="H" />
+      <Pair from="h"    to="H\\" />
+      <Pair from="I"    to="I" />
+      <Pair from="I"    to="I\\" />
+      <Pair from="J"    to="J" />
+      <Pair from="J"    to="J\\" />
+      <Pair from="J"    to="J\\_&lt;" />
+      <Pair from="g"    to="K" />
+      <Pair from="g"    to="K\\" />
+      <Pair from="lj"   to="L" />
+      <Pair from="lj"   to="L\\" />
+      <Pair from="g"    to="M" />
+      <Pair from="g"    to="M\\" />
+      <Pair from="N"    to="N" />
+      <Pair from="N"    to="N\\" />
+      <Pair from="O"    to="O" />
+      <Pair from="O:"   to="O" />
+      <Pair from="O~"   to="O" />
+      <Pair from="v"    to="P" />
+      <Pair from="O"    to="Q" />
+      <Pair from="r"    to="R" />
+      <Pair from="r"    to="R\\" />
+      <Pair from="sj"   to="S" />
+      <Pair from="t"    to="T" />
+      <Pair from="u"    to="U" />
+      <Pair from="Y"    to="U\\" />
+      <Pair from="Y"    to="V" />
+      <Pair from="w"    to="W" />
+      <Pair from="g"    to="X" />
+      <Pair from="r"    to="X\\" />
+      <Pair from="Y"    to="Y" />
+      <Pair from="Z"    to="Z" />
+      <Pair from="_&quot;"  to="" />
+      <Pair from="a"    to="a" />
+      <Pair from="b"    to="b" />
+      <Pair from="b"    to="b_&lt;" />
+      <Pair from="c"    to="c" />
+      <Pair from="d"    to="d" />
+      <Pair from="d"    to="d`" />
+      <Pair from="d"    to="d_&lt;" />
+      <Pair from="e"    to="e" />
+      <Pair from="f"    to="f" />
+      <Pair from="g"    to="g" />
+      <Pair from="g"    to="g_&lt;" />
+      <Pair from="i"    to="i" />
+      <Pair from="j"    to="j" />
+      <Pair from="j"    to="j\\" />
+      <Pair from="k"    to="k" />
+      <Pair from="m"    to="m" />
+      <Pair from="n"    to="n" />
+      <Pair from="n"    to="n`" />
+      <Pair from="o"    to="o" />
+      <Pair from="p"    to="p" />
+      <Pair from="p"    to="p\\" />
+      <Pair from="k"    to="q" />
+      <Pair from="r"    to="r" />
+      <Pair from="r"    to="r`" />
+      <Pair from="r"    to="r\\" />
+      <Pair from="s"    to="s" />
+      <Pair from="s"    to="s`" />
+      <Pair from="s"    to="s\\" />
+      <Pair from="t"    to="t" />
+      <Pair from="t"    to="t`" />
+      <Pair from="u"    to="u" />
+      <Pair from="v"    to="v" />
+      <Pair from="v"    to="v\\" />
+      <Pair from="v"    to="P" />
+      <Pair from="w"    to="w" />
+      <Pair from="x"    to="x" />
+      <Pair from="y"    to="y" />
+      <Pair from="z"    to="z" />
+      <Pair from="z"    to="z`" />
+      <Pair from="z"    to="z\\" />
+      <Pair from="E"    to="{" />
+      <Pair from="u"    to="}" />
+    </TranslationTable>
+  </Translations>
+</AnnotationTranslation>
Index: annotrans/trunk/nbactions.xml
===================================================================
--- annotrans/trunk/nbactions.xml	(revision 6979)
+++ annotrans/trunk/nbactions.xml	(revision 6979)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<actions>
+        <action>
+            <actionName>run</actionName>
+            <packagings>
+                <packaging>jar</packaging>
+            </packagings>
+            <goals>
+                <goal>process-classes</goal>
+                <goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
+            </goals>
+            <properties>
+                <exec.args>-classpath %classpath nl.mpi.annot.translate.AnnotationTranslatorTestDriver</exec.args>
+                <exec.executable>java</exec.executable>
+            </properties>
+        </action>
+    </actions>
Index: annotrans/trunk/pom.xml
===================================================================
--- annotrans/trunk/pom.xml	(revision 6979)
+++ annotrans/trunk/pom.xml	(revision 6979)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.mycompany</groupId>
+    <artifactId>AnnoTranns</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
+    </properties>
+    <name>AnnoTrans</name>
+</project>
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/ATException.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/ATException.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/ATException.java	(revision 6979)
@@ -0,0 +1,21 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.lang.Exception;
+
+/**
+ *
+ * @author petbei
+ */
+public class ATException extends Exception {
+    ATException(String msg) {
+        super(msg);
+    }
+    ATException(String msg, Throwable thr) {
+        super(msg, thr);
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnoTransMessage.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnoTransMessage.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnoTransMessage.java	(revision 6979)
@@ -0,0 +1,108 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author petbei
+ */
+public class AnnoTransMessage {
+    static enum AnnoTransMessageSeverity {
+        INFO,       // no irregularities encountered; no consequences for program execution
+        WARNING,    // possible irregularities encountered; not necessarily problematic. Program can continue execution.
+        ERROR,      // problematic irregularities encountered. Program can continue, but output will be incomplete or wrong.
+        FATAL       // problematic irregularities encountered. Prgram execution can not continue in a meaningful way, and should be halted.
+    };
+    
+    public static final String[] AnnoTransMessageSeverityText = {
+        "INFO",     // no irregularities encountered; no consequences for program execution
+        "WARNING",  // possible irregularities encountered; not necessarily problematic. Program can continue execution.
+        "ERROR",    // problematic irregularities encountered. Program can continue, but output will be incomplete or wrong.
+        "FATAL"     // problematic irregularities encountered. Prgram execution can not continue in a meaningful way, and should be halted.        
+    };
+    
+    static enum AnnoTransMessageCode {
+        AT_OK,                              // normal successful completion
+        AT_FAIL_XMLsourceNotFound,          // required XML uri not found
+        AT_FAIL_XMLparseError,              // problems in processing XML input
+        AT_FAIL_XMLincomplete,              // XML parses but required elements are not specified
+        AT_FAIL_noInput,                    // input String to be translated is null
+        AT_FAIL_emptyImput,                 // input String to be translated is empty
+        AT_FAIL_undefTransTable,            // requested translation table is not defined
+        AT_FAIL_undefAnnotationLayer,       // requested annotation layer is not defined
+        AT_FAIL_undefFromFormat,            // annotation format for input (source) String is not defined
+        AT_FAIL_undefToFormat,              // annotation format for output (target, destination) String is not defined
+        AT_FAIL_untranslatableInput,        // input String as a whole can not be translated
+        AT_FAIL_untranslatableInputParts,   // input String contains parts that can not be translated
+        AT_FAIL_wasInErrorState             // action can't be performed as a result of a previous error
+    };
+    
+    public static final String[] AnnoTransMessageCodeText = {
+        "Annotation Translation OK",                                    // normal successful completion
+        "FAILURE: required XML input resource can not be found",        // required XML uri not found
+        "FAILURE: XML input resource can not be processed",             // problems in processing XML input
+        "FAILURE: XML input resource is incomplete",                    // XML parses but required elements are not specified
+        "FAILURE: invalid (null) iput string",                          // input String to be translated is null
+        "FAILURE: invalid (empty) iput string",                         // input String to be translated is empty
+        "FAILURE: non-existent translation table",                      // requested translation table is not defined
+        "FAILURE: non-existent annotation layer",                       // requested annotation layer is not defined
+        "FAILURE: non-existent input format",                           // annotation format for input (source) String is not defined
+        "FAILURE: non-existent output format",                          // annotation format for output (target, destination) String is not defined
+        "FAILURE: no full-string translation possible",                 // input String as a whole can not be translated
+        "FAILURE: string parts can not be translated",                  // input String contains parts that can not be translated
+        "FAILURE: no translation possible because of previous errors"   // action can't be performed as a result of previous problems
+    };
+    
+    private static ArrayList<AnnoTransMessage> messages;
+    private AnnoTransMessageSeverity severity;
+    private AnnoTransMessageCode code;
+    private String text;
+    
+    public AnnoTransMessage(AnnoTransMessageSeverity s, AnnoTransMessageCode c, String t) {
+        severity = s;
+        code = c;
+        text = t;
+        messages.add(this);
+    }
+
+    public String getMessageText() {
+        return ("*** " + AnnoTransMessageSeverityText[severity.ordinal()] + " *** [" + AnnoTransMessageCodeText[code.ordinal()] + "] " + text);
+    }
+    
+    public void setSeverity(AnnoTransMessageSeverity s) {
+        severity = s;
+    }
+    
+    public void setCode(AnnoTransMessageCode c) {
+        code = c;
+    }
+    
+    public void setText(String t) {
+        text = t;
+    }
+    
+    public AnnoTransMessageSeverity getSeverity() {
+        return severity;
+    }
+    
+    public String getSeverityText() {
+        return AnnoTransMessageSeverityText[severity.ordinal()];
+    }
+    
+    public AnnoTransMessageCode getCode() {
+        return code;
+    }
+    
+    public String getCodeText() {
+        return AnnoTransMessageCodeText[code.ordinal()];
+    }
+    
+    public String getText() {
+        return text;
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslator.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslator.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslator.java	(revision 6979)
@@ -0,0 +1,69 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author petbei
+ * 
+ * 
+ */
+public class AnnotationTranslator {
+        
+    class TranslationPair {
+        String fromStr;
+        String toStr;
+        TranslationPair(String f, String t) {
+            fromStr = f;
+            toStr = t;
+        }
+    }
+    
+    //enum TranslationType {
+    //    TT_undefined,
+    //    TT_replaceLiteral,
+    //    TT_attributedReplace,
+    //    TT_replacePerSegment,
+    //    TT_replacePerSegmentAndSpellcheck
+    //}
+    
+    SymbolTable       resources;          //--- unique set of resources
+    SymbolTable       layers;             //--- unique set of layers/views
+    SymbolTable       formalisms;         //--- unique set of linguistic encoding formalisms (UD17, CGN PoS, X-Sampa, IPA, CG sampa, ...)
+    TranslationTypes  translationTypes;   //--- method to translate a String in formalism A to Formalism B
+    ResourceLayers    resourceLayers;     //--- unique resource/layer combinations
+    TranslationTables translationTables;  //--- unique translation tables
+
+    public AnnotationTranslator(String xmlUri) {
+        resources           = new SymbolTable();
+        layers              = new SymbolTable();
+        formalisms          = new SymbolTable();
+        translationTypes    = new TranslationTypes();
+        resourceLayers      = new ResourceLayers();
+        translationTables   = new TranslationTables();
+        XMLparser xp = new XMLparser(xmlUri, resources, layers, formalisms, translationTypes, resourceLayers, translationTables);
+    }
+    
+    TranslationType getTranslationType(String ttId) {
+        return translationTypes.getTranslationType(ttId);
+    }
+    
+    TranslationTable findTranslationTable(String fromRes, String fromLay, String toRes, String toLay, TranslationType ty) {
+        return translationTables.find(fromRes, fromLay, toRes, toLay, ty);
+    }
+    
+    public TranslationResult translateAnnotation(String tabId, String inStr) {
+        System.err.println("*** WARNING *** not implemented yet: \"AnnotationTranslator::AnnotationTranslator(void)\" -> AnnoTransResult");
+        return (TranslationResult) null;
+    }
+    
+    public TranslationTable getTranslationTableDetails(String tableId) {
+        System.err.println("*** WARNING *** not implemented yet: \"AnnotationTranslator::getTranslationTableDetails(String tableId)\" -> TranslationTable");
+        return (TranslationTable) null;
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslatorTestDriver.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslatorTestDriver.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/AnnotationTranslatorTestDriver.java	(revision 6979)
@@ -0,0 +1,176 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+/**
+ *
+ * @author petbei
+ */
+public class AnnotationTranslatorTestDriver {
+    TranslationType ttWhole = null;
+    TranslationType ttSegments = null;
+    
+    TranslationTable FcsCgnPos = null;
+    TranslationTable CgnFcsPos = null;
+    TranslationTable FcsCgnPhon = null;
+    TranslationTable CgnFcsPhon = null;
+    
+    final String AnnotationTranslationFileName = "AnnotationTest_OK_003.xml";
+    
+    boolean getTranslationTypeData(AnnotationTranslator at) {
+        ttWhole = at.getTranslationType("replaceWhole");
+        if (ttWhole == null) {
+            System.err.println("*** ERROR *** failed to find annotation TranslationType \"replaceWhole\"");
+            return false;
+        }
+        System.err.println("INFO found translation type \"replaceWhole\"");
+        ttSegments = at.getTranslationType("replaceSegments");
+        if (ttSegments == null) {
+            System.err.println("*** ERROR *** failed to find annotation TranslationType \"replaceSegments\"");
+            return false;
+        }
+        System.err.println("INFO found translation type \"replaceSegments\"");
+        return true;
+    }
+    
+    boolean getTranslationTableData(AnnotationTranslator at) {
+        //--- locate translation table data
+        FcsCgnPos = at.findTranslationTable("FCSaggregator", "PoS", "CGN", "PoS", ttWhole);
+        if (FcsCgnPos == null) {
+            System.err.println("*** ERROR *** failed to find TranslationTable \"FCSaggregator/PoS - CGN/PoS\"");
+            return false;
+        }
+        System.err.println("INFO found TranslationTable \"FCSaggregator/PoS - CGN/PoS\"");
+
+        CgnFcsPos = at.findTranslationTable("CGN", "PoS", "FCSaggregator", "PoS", ttWhole);
+        if (CgnFcsPos == null) {
+            System.err.println("*** ERROR *** failed to find TranslationTable \"CGN/PoS - FCSaggregator/PoS\"");
+            return false;
+        }
+        System.err.println("INFO found TranslationTable \"CGN/PoS - FCSaggregator/PoS\"");
+
+        FcsCgnPhon = at.findTranslationTable("FCSaggregator", "phonetic", "CGN", "phonetic", ttSegments);
+        if (FcsCgnPhon == null) {
+            System.err.println("*** ERROR *** failed to find TranslationTable \"FCSaggregator/Phon - CGN/Phon\"");
+            return false;
+        }
+        System.err.println("INFO found TranslationTable \"FCSaggregator/Phon - CGN/Phon\"");
+        
+        CgnFcsPhon = at.findTranslationTable("CGN", "phonetic", "FCSaggregator", "phonetic", ttSegments);
+        if (CgnFcsPhon == null) {
+            System.err.println("*** ERROR *** failed to find TranslationTable \"CGN/Phon - FCSaggregator/Phon\"");
+            return false;
+        }
+        System.err.println("INFO found TranslationTable \"CGN/Phon - FCSaggregator/Phon\"");
+        return true;
+    }
+    
+    void testPoSTranslations(AnnotationTranslator at) {
+        System.out.println("========== FCS aggregator -> CGN ==========");
+        FcsCgnPos.translate("NOUN").display();
+        FcsCgnPos.translate("Abu Dabhi").display();
+        FcsCgnPos.translate("").display();
+        FcsCgnPos.translate("ADJ").display();
+        System.out.println("========== CGN -> FCS aggregator ==========");
+        CgnFcsPos.translate("N").display();
+        CgnFcsPos.translate("ADJ").display();
+        System.out.println("========== FCS aggregator -> CGN -> FCS aggregator ==========");
+        TranslationResult tr1 = FcsCgnPos.translate("NOUN");
+        tr1.display();
+        for (String s: tr1.getOutText()) {
+            TranslationResult tr2 = CgnFcsPos.translate(s);
+            tr2.display();
+        }
+        System.out.println("---------- FCS aggregator -> CGN -> FCS aggregator (cont.)");
+        tr1 = FcsCgnPos.translate("ADV");
+        tr1.display();
+        for (String s: tr1.getOutText()) {
+            TranslationResult tr2 = CgnFcsPos.translate(s);
+            tr2.display();
+        }
+        System.out.println("========== CGN -> FCS aggregator -> CGN ==========");
+        TranslationResult tr3 = CgnFcsPos.translate("VNW");
+        tr3.display();
+        for (String s: tr3.getOutText()) {
+            TranslationResult tr4 = FcsCgnPos.translate(s);
+            tr4.display();
+        }
+    }
+    
+    void testPhonTranslations(AnnotationTranslator at) {
+        System.out.println("========== FCS aggregator -> CGN ==========");
+        FcsCgnPhon.translate("A:").display();
+        FcsCgnPhon.translate("A:bu Dabhi").display();
+        FcsCgnPhon.translate("A:A:").display();
+        FcsCgnPhon.translate("XA:YA:Z").display();
+    }
+    
+    void testTrellis() {
+        Trellis tr = new Trellis();
+        tr.addTranslationPair("bb", "BB");    // insert first node
+        tr.addTranslationPair("cc", "CC");    // insert before first
+        tr.addTranslationPair("ab", "AB1");   // append
+        tr.addTranslationPair("aa", "AA1");   // append
+        tr.addTranslationPair("ac", "AC1");   // append
+        tr.addTranslationPair("ac", "AC2");   // append
+        tr.addTranslationPair("d", "Drietand");
+        tr.addTranslationPair("d", "Viertand");
+        tr.addTranslationPair("a", "Avondrood");
+        tr.addTranslationPair("", "leeg");
+        tr.addTranslationPair(null, "null");
+        tr.addTranslationPair("notarget", null);
+        tr.addTranslationPair("waterschade", "een");
+        tr.addTranslationPair("waterschadde", "ander");
+        tr.display();
+        for (String s: tr.translate("ac")) {
+            System.out.println("ac" + " -> " + s);
+        }
+        for (String s: tr.translate("acbb")) {
+            System.out.println("acbb" + " -> " + s);
+        }
+        for (String s: tr.translate("acddwaterschaddebb")) {
+            System.out.println("acddwaterschaddebb" + " -> " + s);
+        }
+        for (String s: tr.translate("acXbb")) {
+            System.out.println("acXbb" + " -> " + s);
+        }
+        for (String s: tr.translate("Xacbb")) {
+            System.out.println("Xacbb" + " -> " + s);
+        }
+        for (String s: tr.translate("acbbX")) {
+            System.out.println("acbbX" + " -> " + s);
+        }
+        for (String s: tr.translate("XacYbbZ")) {
+            System.out.println("XacYbbZ" + " -> " + s);
+        }
+    }
+    
+    void testTranslator() {
+        //--- get translation information from XML file
+        AnnotationTranslator at = new AnnotationTranslator(AnnotationTranslationFileName);
+        if (at == null) {
+            System.err.println("*** ERROR *** failed to load AnnotationTranslator from file \"" + AnnotationTranslationFileName + "\"");
+            return;
+        }
+        if (!getTranslationTypeData(at)) {
+            return;
+        }
+        if (!getTranslationTableData(at)) {
+            return;
+        }
+        testPoSTranslations(at);
+        testPhonTranslations(at);        
+    }
+        
+    AnnotationTranslatorTestDriver() {
+        //testTrellis();
+        testTranslator();
+    }
+    
+    public static void main(String[] arguments) {
+        AnnotationTranslatorTestDriver attd = new AnnotationTranslatorTestDriver();
+    }
+};
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayer.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayer.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayer.java	(revision 6979)
@@ -0,0 +1,50 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+/**
+ *
+ * @author petbei
+ */
+public class ResourceLayer {
+    //--- this object defines a  Resource / Layer combination.
+    // Not only should this combination be unique (cf ATResourceLayers, which checks this),
+    // but they uniquely define a formalism, which must be checked too.
+    // ATResourceLayers is used to make sure only unique combinations can occur.
+    // ATResourceLayers is the only object that is allowed to call the ATResourceLayer constructor.
+    
+    private String res;
+    private String lay;
+    private String form;
+    private String name;
+    
+    public ResourceLayer(String r, String l, String f) {
+        res = r;
+        lay = l;
+        form = f;
+        name = res + "/" + lay;
+    }
+    
+    String getName() {
+        return name;    
+    }
+    
+    String getResource() {
+        return res;
+    }
+    
+    String getLayer() {
+        return lay;    
+    }
+    
+    String getFormalism() {
+        return form;
+    }
+    
+    void display() {
+        System.out.println("    ResourceLayer " + name + " => formalism \"" + form + "\"");
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayers.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayers.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/ResourceLayers.java	(revision 6979)
@@ -0,0 +1,86 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ *
+ * @author petbei
+ */
+public class ResourceLayers {
+    private ArrayList<ResourceLayer> resourceLayerArray = null;
+    private HashMap<String, Integer> resourceLayerMap = null;
+    
+    public ResourceLayers() {
+        // System.err.println("--- LOG --- created \"ResourceLayers\" object");
+        resourceLayerArray = new ArrayList<ResourceLayer>();
+        resourceLayerMap = new HashMap<String, Integer>();
+    }
+    
+    ResourceLayer addResourceLayer(String res, String lay, String form) throws ATException {
+        //--- check validity of parameters
+        if (res == (String) null || res.length() < 1) {
+            System.out.println("*** ERROR *** ResourceLayers: attempt to add NULL or empty Resource name - skipped");
+            throw new ATException("definition of Resource/Layer: null resource");
+        }
+        if (lay == (String) null || lay.length() < 1) {
+            System.out.println("*** ERROR *** ResourceLayers: attempt to add NULL or empty Layer name - skipped");
+            throw new ATException("definition of Resource/Layer: null layer");
+        }
+        if (form == (String) null || form.length() < 1) {
+            System.out.println("*** ERROR *** ResourceLayers: attempt to add NULL or empty Formalism object - skipped");
+            throw new ATException("definition of Resource/Layer: null formalism");
+        }
+        
+        //--- check if Resource/Layer combination is already defined
+        String resLayKey = res + "/" + lay;
+        if (!resourceLayerMap.containsKey(resLayKey)) {
+            //--- not defined; create new one
+            ResourceLayer nw = new ResourceLayer(res, lay, form);
+            resourceLayerArray.add(nw);
+            resourceLayerMap.put(resLayKey, resourceLayerArray.size() - 1);
+            return nw;
+        }
+        else {
+            //--- defined. Check if Formalism is the same (should be).
+            ResourceLayer rl = resourceLayerArray.get(resourceLayerMap.get(resLayKey));
+            String foundForm = rl.getFormalism();
+            if (foundForm.equals(form)) {
+                //--- Formalism is OK. Can return existing ResourceLayer object.
+                return rl;
+            }
+            else {
+                //--- conflicting formalisms. Generate error/exception.
+                System.err.println("*** ERROR *** ResourceLayers: attempt to redefine Resource/Layer object \""
+                            + res + "/" + lay + "\" with conflicting formalism (" + foundForm + " - " + form + ")- skipped");
+                throw new ATException("double definition of Resource/Layer" + resLayKey);
+            }
+        }
+    }
+    
+    ResourceLayer getResourceLayer(String resLayName) throws ATException {
+        if (resLayName == (String) null || resLayName.length() < 1) {
+            System.out.println("*** ERROR *** ResourceLayers: attempt to retrieve NULL or empty Resource name - skipped");
+            throw new ATException("definition of Resource/Layer: null resource");
+        }
+        if (resourceLayerMap.containsKey(resLayName)) {
+            return resourceLayerArray.get(resourceLayerMap.get(resLayName));
+        }
+        //--- not defined; error
+        System.out.println("*** ERROR *** ResourceLayers: attempt to retrieve undefined resource/layer combination " + resLayName);
+        throw new ATException("undefined Resource/Layer: " + resLayName);
+    }
+    
+    void display() {
+        System.out.println("========== START list of Resource/Layer combinations ==========");
+        for (ResourceLayer rl: resourceLayerArray) {
+            rl.display();
+        }
+        System.out.println("========== END list of Resource/Layer combinations ==========\n");
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/SymbolTable.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/SymbolTable.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/SymbolTable.java	(revision 6979)
@@ -0,0 +1,58 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ * @author petbei
+ */
+public class SymbolTable {
+    Map<String, Integer> stMap = new ConcurrentHashMap<String, Integer>();
+    
+    int getSize() {
+        return stMap.size();
+    }
+    
+    void add(String s) {
+        // precondition: 's' is not null. Empty String value ("") is allowed
+        if (stMap.containsKey(s)) {
+            stMap.put(s, stMap.get(s) + 1);
+            // System.out.println("SymbolTable.addSymbol(s): symbol \"" + s + "\" is already defined");
+        }
+        else {
+            // System.out.println("SymbolTable.addSymbol(s): new symbol \"" + s + "\" added");
+            stMap.put(s, 1);
+        }
+    }
+    
+    boolean isDefined(String s) {
+        // precondition: 's' is not null. Empty String value ("") is allowed
+        return (stMap.containsKey(s));
+    }
+    
+    Integer get(String s) {
+        // precondition: 's' is not null. Empty String value ("") is allowed
+        if (stMap.containsKey(s)) {
+            //System.out.println("SymbolTable.isDefined(s): symbol \"" + s + "\" is defined");
+            return stMap.get(s);
+        }
+        else {
+            //System.out.println("SymbolTable.isDefined(s): symbol \"" + s + "\" is NOT defined");
+            return null;
+        }
+    }
+    
+    void display() {
+        System.out.println("========== START symbol table: " + stMap.size() + " elements ==========");
+        for (String key: stMap.keySet()) {
+            System.out.println("    \"" + key + "\" -> " + stMap.get(key));
+        }      
+        System.out.println("========== END symbol table " + " ==========\n");
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationResult.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationResult.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationResult.java	(revision 6979)
@@ -0,0 +1,88 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationResult {
+    private String              inText;    // text to be translated
+    private String              inFormat;  // description of input format used
+    private ArrayList<String>   outTexts;   // result[s] of translation
+    private String              outFormat; // description of output format used
+    private ArrayList<String>   messages;   // messages generated during the translation process
+
+    public TranslationResult(String i, String iF, String[] o, String oF, String[] m) {
+        inText = i;
+        inFormat = iF;
+        outTexts = new ArrayList<String>();
+        for (String s: o) {
+            outTexts.add(s);
+        }
+        outFormat = oF;
+        for (String s: m) {
+            messages.add(s);
+        }
+    }
+    
+    public TranslationResult(String i, String iF) {
+        inText = i;
+        inFormat = iF;
+        outTexts = new ArrayList<String>();
+        outFormat = null;
+        messages = new ArrayList<String>();
+    }
+    
+    public void setOutTexts(ArrayList<String> texts) {
+        outTexts = texts;
+    }
+    
+    public void addOutText(String txt) {
+        outTexts.add(txt);
+    }
+
+    public void setOutFormat(String oF) {
+        outFormat = oF;
+    }
+    
+    public void addMessage(String msg) {
+        messages.add(msg);
+    }
+    
+    String getInText() {
+        return inText;
+    }
+    
+    String getInFormat() {
+        return inFormat;
+    }
+    
+    ArrayList<String> getOutText() {
+        return outTexts;
+    }
+    
+    String getOutFormat() {
+        return outFormat;
+    }
+    
+    ArrayList<String> getMessages() {
+        return messages;
+    }
+    
+    void display() {
+        System.out.println("translate \"" + inText + "\" (" + inFormat + " => " + outFormat + ", " + outTexts.size() + " results, " + messages.size() + " messages)");
+        for (String s: outTexts) {
+            System.out.println("          \"" + s + "\"");
+        }
+        for (String m: messages) {
+            System.out.println("  message " + m);
+        }
+    }
+}
+    
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTable.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTable.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTable.java	(revision 6979)
@@ -0,0 +1,96 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationTable {
+    private String                tableId;        //--- table identifier; unique
+    private ResourceLayer         fromRL;         //--- unique resource/layer combination, defines format
+    private ResourceLayer         toRL;           //--- unique resource/layer combination, defines format
+    private TranslationType       transType;      //--- definition of algoritm that defines how to translate 'from' to 'to'
+    Map<String, TranslationUnit>  translations;   //--- map of all 'from' translation
+    private Trellis               trellis;        //--- trellis data structure to handle segmented (phonetic) translations
+    
+    public TranslationTable(String tId, ResourceLayer f, ResourceLayer t, TranslationType tt) {
+        tableId = tId;  //--- unique ID: fromRL.id + "-" + toRL
+        fromRL = f;     //--- Resource/Layer combination
+        toRL = t;       //--- Resource/Layer combination
+        transType = tt; //--- translation method indication
+        translations = new ConcurrentHashMap<String, TranslationUnit>();
+        trellis = null;
+    }
+    
+    Trellis getTrellis() {
+        return trellis;
+    }
+    
+    void tryPopulateTrellis() {
+        if (!(transType.getId().equals("replaceSegments"))) {
+            // System.err.println("INFO: TranslationTable " + tableId + " is not converted to Trellis, wrong TranslationType (" + transType.getId() + ")");
+            return;
+        }
+        if (translations.size() <= 0) {
+            System.err.println("INFO: TranslationTable " + tableId + " is not converted to Trellis, no translation data");
+            return;
+        }
+        trellis = new Trellis();
+        for (String fStr: translations.keySet()) {
+            TranslationUnit tu = translations.get(fStr);
+            for (String tStr: tu.getTranslationValues()) {
+                //System.out.println("TranslationTable " + tableId + ": add trellis pair(" + fStr + "," + tStr+ ")");
+                trellis.addTranslationPair(fStr, tStr);
+            }
+        }
+    }
+    
+    void addTranslation(String f, String t) {
+        TranslationUnit tp;
+        if (translations.containsKey(f)) {
+            tp = translations.get(f);
+        }
+        else {
+            tp = new TranslationUnit(f);
+            translations.put(f, tp);
+        }
+        tp.addTranslation(t);
+    }
+    
+    TranslationResult translate(String fromValue) {
+        if (transType.getId().equals("replaceWhole")) {
+            TranslationResult result = new TranslationResult(fromValue, fromRL.getFormalism());
+            result.setOutFormat(toRL.getFormalism());
+            if (translations.containsKey(fromValue)) {
+                TranslationUnit tu = translations.get(fromValue);
+                result.setOutTexts(tu.getTranslationValues());
+            }
+            return result;
+        }
+        if (transType.getId().equals("replaceSegments")) {
+            TranslationResult result = new TranslationResult(fromValue, fromRL.getFormalism());
+            result.setOutFormat(toRL.getFormalism());
+            result.setOutTexts(trellis.translate(fromValue));
+            return result;
+        }
+        System.err.println("Can't translate " + fromValue + ", unknown translation type: " + transType.getId());
+        return (TranslationResult) null;
+    }
+    
+    void display() {
+        System.out.println("  from " + fromRL.getName() + "(" + fromRL.getFormalism() + ") to " + toRL.getName() + "(" + toRL.getFormalism() + ") => " + transType.getId());
+        for (String key: translations.keySet()) {
+            translations.get(key).display();
+        }
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTables.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTables.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTables.java	(revision 6979)
@@ -0,0 +1,77 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationTables {
+    private ArrayList<TranslationTable> translationTableArray = null;
+    private HashMap<String, Integer> translationTableMap = null;
+    
+    public TranslationTables() {
+        //System.err.println("--- LOG --- created \"TranslationTables\" object");
+        translationTableArray = new ArrayList<TranslationTable>();
+        translationTableMap = new HashMap<String, Integer>();
+    }
+    
+    TranslationTable addTranslationTable(ResourceLayer fromRL, ResourceLayer toRL, TranslationType transType) throws ATException {
+        //--- check validity of parameters
+        if (fromRL == null) {
+            System.out.println("*** ERROR *** TranslationTables: attempt to add NULL 'from' ResourceLayer name - skipped");
+            throw new ATException("definition of TranslationTable: null 'from' ResourceLayer");
+        }
+        if (toRL == null) {
+            System.out.println("*** ERROR *** TranslationTables: attempt to add NULL 'to' ResourceLayer name - skipped");
+            throw new ATException("definition of TranslationTable: null 'to' ResourceLayer");
+        }
+        if (transType == null) {
+            System.out.println("*** ERROR *** TranslationTables: attempt to add NULL or empty translation type object - skipped");
+            throw new ATException("definition of translationTable: null translation type");
+        }
+        
+        //--- check if Resource/Layer combination is already defined
+        if (fromRL.getName().equals(toRL.getName())) {
+            System.out.println("*** ERROR *** new TranslationTable: 'from' and 'to' Resource/Layers are the same - ignored");
+            throw new ATException("definition of translationTable: 'from' and 'to' Resource/Layers are the same");
+        }
+        String transTabKey = fromRL.getName() + "-" + toRL.getName() + "=" + transType.getId();
+        if (translationTableMap.containsKey(transTabKey)) {
+            System.out.println("*** ERROR *** TranslationTable \"" + transTabKey + "\" was already defined - ignored");
+            throw new ATException("definition of translationTable: '" + transTabKey + "' was already defined");            
+        }
+        //--- not defined; create new one
+        TranslationTable nw = new TranslationTable(transTabKey, fromRL, toRL, transType);
+        translationTableArray.add(nw);
+        translationTableMap.put(transTabKey, translationTableArray.size() - 1);
+        return nw;
+    }
+    
+    TranslationTable find(String fromRes, String fromLay, String toRes, String toLay, TranslationType ty) {
+        String fromResLayId = fromRes + "/" + fromLay;
+        String toResLayId = toRes + "/" + toLay;
+        String tableId = fromResLayId + "-" + toResLayId + "=" + ty.getId();
+        if (translationTableMap.containsKey(tableId)) {
+            return translationTableArray.get(translationTableMap.get(tableId));
+        }
+        else {
+            System.err.println("*** ERROR *** failed to find translation table " + tableId);
+            return null;
+        }
+    }
+    
+    void display() {
+        System.out.println("========== START list of TranslationTables ==========");
+        for (TranslationTable tt: translationTableArray) {
+            tt.display();
+        }
+        System.out.println("========== END list of TranslationTables ==========\n");
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationType.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationType.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationType.java	(revision 6979)
@@ -0,0 +1,38 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationType {
+    private String translationTypeId;
+    private static int errorCount = 0;
+    
+    public TranslationType(String id) {
+        if (id == (String) null || id.length() <= 0) {
+            errorCount++;
+            System.err.println("*** ERROR *** attempt to define TranslationType with null or empty identifier");
+            translationTypeId = "ERROR_TranslationTypeId_" + errorCount;
+        }
+        else {
+            translationTypeId = id;
+        }
+    }
+    
+    String getId() {
+        return translationTypeId;
+    }
+    
+    int getErrorCount() {
+        return errorCount;
+    }
+    
+    void display() {
+        System.out.println("    TranslationType: \"" + translationTypeId + "\"");
+    }    
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTypes.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTypes.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationTypes.java	(revision 6979)
@@ -0,0 +1,71 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationTypes {
+    private ArrayList<TranslationType> ttArray = new ArrayList<TranslationType>();
+    private HashMap<String, Integer> ttMap = new HashMap<String, Integer>();
+    private static int errorCount = 0;
+    
+    public TranslationType ErrorTranslationType;
+    
+    public TranslationTypes() {
+        ErrorTranslationType = new TranslationType("***_ERROR-AT-RESOURCE_***");
+    }
+    
+    TranslationType addTranslationType(String id) {
+        if (id == (String) null || id.length() <= 0) {
+            errorCount++;
+            System.out.println("*** ERROR *** TranslationTypes: attempt to define unique Formalism with illegal-value (null or empty) identifier");
+            return ErrorTranslationType;
+        }
+        if (ttMap.containsKey(id)) {
+            return ttArray.get(ttMap.get(id));
+        }
+        TranslationType nw = new TranslationType(id);
+        ttArray.add(nw);
+        ttMap.put(id, ttArray.size() - 1);
+        return nw;
+    }
+    
+    boolean haveTranslationType(String id) {
+        if (id == (String) null || id.length() <= 0) {
+            return false;
+        }
+        return (ttMap.containsKey(id));
+    }
+    
+    TranslationType getTranslationType(String id) {
+        if (id == (String) null || id.length() <= 0) {
+            return null;
+        }
+        if (ttMap.containsKey(id)) {
+            return ttArray.get(ttMap.get(id));
+        }
+        else {
+            return null;
+        }
+    }
+    
+    int getSize() {
+        return ttArray.size();
+    }
+    
+    void display() {
+        System.out.println("========== START TranslationTypes: " + ttArray.size() + " ==========");
+        for (TranslationType tt: ttArray) {
+            tt.display();
+        }
+        System.out.println("========== END TranslationTypes: " + ttArray.size() + " ==========\n");
+    } 
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationUnit.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationUnit.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TranslationUnit.java	(revision 6979)
@@ -0,0 +1,44 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ *
+ * @author petbei
+ */
+public class TranslationUnit {
+    private String fromStr;
+    private HashMap<String, Integer> toMap;
+    
+    public TranslationUnit(String f) {
+        fromStr = f;
+        toMap = new HashMap<String, Integer>();
+    }
+    
+    boolean haveToString(String s) {
+        return (toMap.containsKey(s));
+    }
+    
+    void addTranslation(String s) {
+        if (!haveToString(s)) {
+            toMap.put(s, 1);
+        }
+    }
+    
+    ArrayList<String> getTranslationValues() {
+        return new ArrayList<String>(toMap.keySet());
+    }
+    
+    void display() {
+        for (String value: toMap.keySet()) {
+            System.out.println("    \"" + fromStr + "\" => \"" + value + "\"");
+        }
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/Trellis.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/Trellis.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/Trellis.java	(revision 6979)
@@ -0,0 +1,127 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author petbei
+ * A Trellis (or this Trellis anyway) is a data structure to store words, 1 character per layer.
+ * At the top layer the 'root' node is the start of a linked list of alphabetically sorted TrellisNodes, each pointing to the next list element via the 'next' pointer:
+ *         .---.         .---.
+ * root -> | a | -next-> | f | -next-> NULL
+ *         '---'         '---'
+ * (so, in this example words starting with 'a' and 'f' are defined.)
+ * 
+ * Each node has a 'son' pointer to a (alphabetically sorted) linked list of TrellisNodes that define the continuation of the word:
+ *
+ *         .---.         .---.
+ * root -> | a | -next-> | f | -next-> NULL
+ *         '---'         '---'
+ *           |
+ *          son
+ *           |
+ *           V
+ *         .---.         .---.
+ *         | r | -next-> | s | -next-> NULL
+ *         '---'         '---'
+ * 
+ * so that the word (starts) 'ar', 'as' and 'f' are defined.
+ * 
+ * This trellis is used to store translation pairs for words or word segments. At the appropriate position in the trellis a list of 'targets' can be defined,
+ * that signifies that the "source" word in the trellis that ends here can be seen as a complete unit, and has translations.
+ * NB: the specific position in the Trellis can still have 'next siblings and 'son's.
+ */
+
+public class Trellis {
+    private TrellisNode root;   //--- pointer to the top level leftmost Trellis node. Initially null/undefined.
+    public Trellis() {
+        // System.out.println("Translation Trellis created");
+        root = null;
+    }
+    
+    //--- the trellis is built up using source/target String pairs. Adding nodes is done recursively, 1 source letter at the time.
+    public void addTranslationPair(String src, String tgt) {
+        //--- assertion: src and tgt are neither null nor empty. XML files are currently used to define them, and the nodes attributes are checked for validity during parsing.
+        if (root == null && src.length() > 0) {
+            //--- first node of trellis is defined here, using the first letter of the source string.
+            root = new TrellisNode(src.charAt(0));
+        }
+        //--- a full source word is added recursively, starting at the first character of the source
+        root = root.addTranslation(src, tgt);
+    }
+    
+    ArrayList<String> translate(String source) {
+        ArrayList<ArrayList<String>> inter = new ArrayList<ArrayList<String>>();    // intermediate translation results: for each segment recognised an array of Strings. 
+        if (root == null || source.length() <= 0) {
+            return new ArrayList<String>();
+        }
+        //=== perform translation per source segment.
+        // the TrellisNode 'translate' method
+        //     - tells how large the segment is that it recognised
+        //     - adds an array of partal translations to the intermediate results
+        // If nothing is recognised, the current character is skipped (not translated), and work continues with the next position
+        int offset = 0;
+        while (offset < source.length()) {
+            int processed = root.translate(source.substring(offset), inter);
+            if (processed > 0) {
+                offset = offset + processed;
+            }
+            else {
+                System.err.println("Segmented translation of " + source + ": position " + offset + " (" + source.charAt(offset) + ") skipped");
+                offset = offset + 1;
+            }
+        }
+        
+        //=== now, the partial results must be combined. This is done in an inefficient but simple way.
+        ArrayList<String> final1 = new ArrayList<String>();
+        ArrayList<String> final2 = new ArrayList<String>();
+        
+        for (ArrayList<String> al: inter) {
+            if (final2.size() == 0) {
+                //--- no final results yet, start with copying the initial segment's targts to the work-in-progress final1 list
+                for (String s: al) {
+                    final1.add(s);
+                }
+            }
+            else {
+                //--- we have already partial results. They must be combined with the next segment's targets.
+                for (String s1: final2) {
+                    for (String s2: al) {
+                        final1.add(s1 + s2);
+                    }
+                }
+            }
+            //--- move temporary results to input for the next round, reset temporary results
+            final2 = final1;
+            final1 = new ArrayList<String>();
+        }
+        
+        //=== so now the results (if any) are in final2
+        //for (String f: final2) {
+        //    System.out.println("result \"" + f + "\"");
+        //}
+        //=== move to a real array
+        //String[] result = new String[final2.size()];
+        //for (int i = 0; i < final2.size(); i++) {
+        //    result[i] = final2.get(i);
+        //}
+        return final2;
+    }
+    
+    //--- show contents of trellis
+    public void display() {
+        System.out.println("===== START Trellis =====");
+        if (root == null) {
+            System.out.println("    no root."); //--- empty trellis
+        }
+        else {
+            root.display(1);    //--- recursive display of nodes; integer parameter indicates indentation level.
+        }
+        System.out.println("===== END Trellis =====\n");
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/TrellisNode.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/TrellisNode.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/TrellisNode.java	(revision 6979)
@@ -0,0 +1,152 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import java.util.ArrayList;
+/**
+ *
+ * @author petbei
+ */
+public class TrellisNode {
+    private char content;
+    private ArrayList<String> targets;
+    private TrellisNode son;
+    private TrellisNode next;
+    
+    TrellisNode(char c) {
+        content = c;
+        son = null;
+        next = null;
+        targets = new ArrayList<String>();
+    }
+    
+    TrellisNode addTranslation(String src, String tgt) {
+        if (src == null) {
+            //--- nothing to add, maintain current status at calling side
+            System.err.println("TrellisNode.addTranslation(): parameter src is NULL");
+            return this;
+        }
+        if  (src.length() < 1) {
+            //--- nothing to add, maintain current status at calling side
+            System.err.println("TrellisNode.addTranslation(): parameter src is EMPTY");
+            return this;
+        }
+        if  (tgt == null) {
+            //--- nothing to add, maintain current status at calling side
+            System.err.println("TrellisNode.addTranslation(): parameter tgt is NULL");
+            return this;
+        }
+        //--- src is at leat length 1
+        char sourceChar = src.charAt(0);
+
+        if (sourceChar < content) {
+            //--- insert before current node
+            TrellisNode newNode = new TrellisNode(sourceChar);
+            newNode.next = this;
+            if (src.length() <= 1) {
+                //--- at end of source, add target
+                newNode.targets.add(tgt);
+                return newNode;
+            }
+            else {
+                //--- not at end of source, try add remainder of source as son node
+                newNode.son = new TrellisNode(src.charAt(1));
+                newNode.son = newNode.son.addTranslation(src.substring(1), tgt);
+                return newNode;
+            }
+        }
+        else if (sourceChar == content) {
+            //--- am at continuation node
+            if (src.length() <= 1) {
+                //--- at end of source, add target
+                targets.add(tgt);
+                return this;
+            }
+            if (son == null) {
+                //--- not at end of source, create new son
+                son = new TrellisNode(src.charAt(1));
+            }
+            //--- try to add remainder of source to existing son node
+            son = son.addTranslation(src.substring(1), tgt);                    
+            return this;
+        }
+        else {
+            //--- sourceChar > content
+            if (next == null) {
+                //--- at end of list, append new node
+                next = new TrellisNode(sourceChar);
+                if (src.length() <= 1) {
+                    //--- at end of source
+                    next.targets.add(tgt);
+                    return this;
+                }
+                next.son = new TrellisNode(src.charAt(1));
+                next.son = next.son.addTranslation(src.substring(1), tgt);
+                return this;
+            }
+            else {
+                next = next.addTranslation(src, tgt);
+                return this;
+            }
+        }
+    }
+    
+    int translate(String src, ArrayList<ArrayList<String>> inter) {
+        int processed = 0;
+        if (content < src.charAt(0)) {
+            //--- no match, but maybe in next;
+            if (next == null) {
+                return 0;
+            }
+            return next.translate(src, inter);
+        }
+        else if (content > src.charAt(0)) {
+            //--- past all possibilities of match
+            return 0;
+        }
+        if (content == src.charAt(0)) {
+            //--- match!
+            if (src.length() == 1) {
+                //--- match AND is last character
+                inter.add(targets);    //--- possibly empty targets
+                return 1;
+            }
+            else if (son == null) {
+                inter.add(targets);
+                return 1;
+            }
+            else {
+                int nextProcessed = son.translate(src.substring(1), inter);
+                if (nextProcessed == 0) {
+                    inter.add(targets);
+                    return 1;
+                }
+                else {
+                    return nextProcessed + 1;
+                }
+                //--- match, more characters available
+            }
+        }
+        return processed;
+    }
+    
+    void display(int indent) {
+        for (int i = 0; i < indent; i++) {
+            System.out.print("    ");
+        }
+        System.out.print("TrellisNode '" + content + "': ");
+        for (String tgt: targets) {
+            System.out.print("\"" + tgt + "\"");
+        }
+        System.out.println("");
+        if (son != null) {
+            son.display(indent + 1);
+        }
+        if (next != null) {
+            next.display(indent);
+        }
+    }
+}
Index: annotrans/trunk/src/main/java/nl/mpi/annot/translate/XMLparser.java
===================================================================
--- annotrans/trunk/src/main/java/nl/mpi/annot/translate/XMLparser.java	(revision 6979)
+++ annotrans/trunk/src/main/java/nl/mpi/annot/translate/XMLparser.java	(revision 6979)
@@ -0,0 +1,488 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nl.mpi.annot.translate;
+
+import javax.xml.parsers.*;
+import org.xml.sax.*;
+import org.xml.sax.helpers.*;
+
+import java.util.*;
+import java.io.*;
+
+/**
+ *
+ * @author petbei
+ */
+public class XMLparser extends DefaultHandler {
+    boolean inElement = false;
+    int indentation = 0;
+
+    private static class MyErrorHandler implements ErrorHandler {
+        private PrintStream out;
+
+        MyErrorHandler(PrintStream out) {
+            this.out = out;
+        }
+
+        private String getParseExceptionInfo(SAXParseException spe) {
+            String systemId = spe.getSystemId();
+            if (systemId == null) {
+                systemId = "null";
+            }
+
+            String info = "URI=" + systemId + " Line=" + spe.getLineNumber() + ": " + spe.getMessage();
+            return info;
+        }
+
+        public void warning(SAXParseException spe) throws SAXException {
+            out.println("Warning: " + getParseExceptionInfo(spe));
+        }
+        
+        public void error(SAXParseException spe) throws SAXException {
+            String message = "Error: " + getParseExceptionInfo(spe);
+            throw new SAXException(message);
+        }
+
+        public void fatalError(SAXParseException spe) throws SAXException {
+            String message = "Fatal Error: " + getParseExceptionInfo(spe);
+            throw new SAXException(message);
+        }
+    }
+
+    private SymbolTable       resources;
+    private SymbolTable       layers;
+    private ResourceLayers    resourcesLayers;
+    private SymbolTable       formalisms;
+    private TranslationTypes  translationTypes;
+    private TranslationTables translationTables;
+    
+    XMLparser(String fileName, SymbolTable atrs, SymbolTable atls, SymbolTable atfs, TranslationTypes tts, ResourceLayers atRLs, TranslationTables atTTs) {
+        resources = atrs;
+        layers = atls;
+        resourcesLayers = atRLs;
+        formalisms = atfs;
+        translationTypes = tts;
+        translationTables = atTTs;
+        
+        System.out.println("XMLparser input file name: " + fileName);
+        if (fileName == null) {
+            usage();
+        } 
+        else {
+            try {
+                SAXParserFactory spf = SAXParserFactory.newInstance();
+                spf.setNamespaceAware(true);
+                SAXParser saxParser = spf.newSAXParser();
+                XMLReader xmlReader = saxParser.getXMLReader();
+                //--- xmlReader.setContentHandler(new SAXLocalNameCount());
+                xmlReader.setContentHandler(this);
+                xmlReader.setErrorHandler(new MyErrorHandler(System.err));
+                xmlReader.parse(convertToFileURL(fileName));
+            }
+            catch (Exception e) {
+                System.err.println("*** ERROR *** exception in AnnotationTranslator SAX parser: " + e.getMessage());
+            }
+        }
+        //resources.display();
+        //layers.display();
+        //resourcesLayers.display();
+        //formalisms.display();
+        //translationTypes.display();
+        //translationTables.display();
+    }
+
+    private Hashtable<String,Integer> tags;
+
+    private static void usage() {
+        System.err.println("Usage: SAXLocalNameCount <file.xml>");
+        System.err.println("       -usage or -help = this message");
+        System.exit(1);
+    }
+
+    public void startDocument() throws SAXException {
+        tags = new Hashtable<String,Integer>();
+    }
+
+    private boolean amInAnnotationTranslation = false;  //--- part of state machine that is used in parsing the XML file
+    private boolean amInResources = false;              //--- part of state machine that is used in parsing the XML file
+    private boolean amInTranslations = false;           //--- part of state machine that is used in parsing the XML file
+    private boolean amInTranslationTable = false;       //--- part of state machine that is used in parsing the XML file
+
+    //--- keep track of current TranslationTable, so that we know what to add translation pairs to
+    private TranslationTable  curTable = null;
+    
+    //--- code to track file name / pare line / parse position (for error messages)
+    private Locator locator;
+    
+    public void setDocumentLocator(Locator locator) {
+        this.locator = locator;
+    }
+    
+    String getLocator() {
+        return ("[" + locator.getSystemId() + " " + locator.getLineNumber() + ":" + locator.getColumnNumber() + "]");
+    }
+    
+    //--- code to create a unique ResourceLayer object; Resource + Layer define Formalism
+    void tryAddResourceLayer(Attributes atts) {
+        //--- get parameters
+        if (atts.getLength() == 3) {
+            String resourceValue = null;
+            String layerValue = null;
+            String formalismValue = null;
+            for (int ix = 0; ix < atts.getLength(); ix++) {
+                if (atts.getLocalName(ix).equals("resource")) {
+                    resourceValue = atts.getValue(ix);
+                }
+                else if (atts.getLocalName(ix).equals("layer")) {
+                    layerValue = atts.getValue(ix);
+                }
+                else if (atts.getLocalName(ix).equals("formalism")) {
+                    formalismValue = atts.getValue(ix);
+                }
+                else {
+                    System.err.println("*** ERROR *** " + getLocator() + " unexpected attribute in \"ResourceLayer\": " + atts.getLocalName(ix) + " - ResourceLayer ignored");
+                    return;
+                }
+            }
+            if (resourceValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"resource\" attribute in \"ResourceLayer\": ");
+                return;
+            }
+            if (layerValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"layer\" attribute in \"ResourceLayer\": ");
+                return;
+            }
+            if (formalismValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"formalism\" attribute in \"ResourceLayer\": ");
+                return;
+            }
+            resources.add(resourceValue);
+            layers.add(layerValue);
+            formalisms.add(formalismValue);
+            try {
+                resourcesLayers.addResourceLayer(resourceValue, layerValue, formalismValue);
+                // System.err.println("INFO " + getLocator() + " added unique ResourceLayer (" + resourceValue + ", " + layerValue + ", " + formalismValue + ")");
+            }
+            catch (Exception e) {
+                System.err.println("*** ERROR *** " + getLocator() + " failed to add unique ResourceLayer (" + resourceValue + ", " + layerValue + ", " + formalismValue + "): " + e.getMessage());
+            }
+        }
+        else {
+            System.err.println("*** ERROR *** " + getLocator() + " \"ResourceLayer\" has wrong number of attributes: 3 expected, " + atts.getLength() + " found - ResourceLayer ignored");
+        }
+    }
+
+    //--- code to create a unique TranslationTable object (from/to ResourceLayer object, translation type object
+    void tryAddTranslationTable(Attributes atts) {
+        //--- get parameters
+        if (atts.getLength() == 3) {
+            String fromRLValue = null;
+            String toRLValue = null;
+            String translationTypeValue = null;
+            for (int ix = 0; ix < atts.getLength(); ix++) {
+                if (atts.getLocalName(ix).equals("fromResourceLayer")) {
+                    fromRLValue = atts.getValue(ix);
+                }
+                else if (atts.getLocalName(ix).equals("toResourceLayer")) {
+                    toRLValue = atts.getValue(ix);
+                }
+                else if (atts.getLocalName(ix).equals("translationType")) {
+                    translationTypeValue = atts.getValue(ix);
+                }
+                else {
+                    System.err.println("*** ERROR *** " + getLocator() + " unexpected attribute in \"TranslationTable\": " + atts.getLocalName(ix) + " - TranslationTable ignored");
+                    return;
+                }
+            }
+            if (fromRLValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"fromResourceLayer\" attribute in \"TranslationTable\": ");
+                return;
+            }
+            if (toRLValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"toResourceLayer\" attribute in \"TranslationTable\": ");
+                return;
+            }
+            if (translationTypeValue == null) {
+                System.err.println("*** ERROR *** " + getLocator() + " missing \"translationType\" attribute in \"TranslationTable\": ");
+                return;
+            }
+            try {
+                ResourceLayer fromRL = resourcesLayers.getResourceLayer(fromRLValue);
+                ResourceLayer toRL = resourcesLayers.getResourceLayer(toRLValue);
+                TranslationType tt = translationTypes.addTranslationType(translationTypeValue);
+                curTable = translationTables.addTranslationTable(fromRL, toRL, tt);
+                //System.err.println("INFO " + getLocator() + " added TranslationTable (" + fromRLValue + ", " + toRLValue + ", " + translationTypeValue);
+            }
+            catch (Exception e) {
+                System.err.println("*** ERROR *** " + getLocator() + " failed to add TranslationTable (" + fromRLValue + ", " + toRLValue + ", " + translationTypeValue + "): " + e.getMessage());
+            }
+        }
+        else {
+            System.err.println("*** ERROR *** " + getLocator() + " \"ResourceLayer\" has wrong number of attributes: 3 expected, " + atts.getLength() + " found - ResourceLayer ignored");
+        }
+    }
+
+    //--- code to add a from / to translation pair to a TranslationTable 
+    void tryAddTranslation(Attributes atts) {
+        //--- get parameters
+        if (curTable == null) {
+            System.err.println("*** ERROR *** " + getLocator() + " while processing \"Pair\": no valid TranslationTable available, Pair ignored");
+            return;
+        }
+        if (atts.getLength() != 2) {
+            System.err.println("*** ERROR *** " + getLocator() + " \"Pair\" has wrong number of attributes: 2 expected, " + atts.getLength() + " found - Pair ignored");
+        }
+        String fromValue = null;
+        String toValue = null;
+        for (int ix = 0; ix < atts.getLength(); ix++) {
+            if (atts.getLocalName(ix).equals("from")) {
+                fromValue = atts.getValue(ix);
+            }
+            else if (atts.getLocalName(ix).equals("to")) {
+                toValue = atts.getValue(ix);
+            }
+            else {
+                System.err.println("*** ERROR *** " + getLocator() + " unexpected attribute in \"Pair\": " + atts.getLocalName(ix) + " - Pair ignored");
+                return;
+            }
+        }
+        if (fromValue == null) {
+            System.err.println("*** ERROR *** " + getLocator() + " missing \"from\" attribute in \"Pair\": ");
+            return;
+        }
+        if (toValue == null) {
+            System.err.println("*** ERROR *** " + getLocator() + " missing \"to\" attribute in \"Pair\": ");
+            return;
+        }
+        try {
+            curTable.addTranslation(fromValue, toValue);
+            // System.out.println("INFO " + getLocator() + " added Translation Pair (" + fromValue + ", " + toValue + ")");
+        }
+        catch (Exception e) {
+            System.err.println("*** ERROR *** " + getLocator() + " failed to add Pair (" + fromValue + ", " + toValue + "): " + e.getMessage());
+        }
+    }
+
+    public void startElement(String namespaceURI,
+                             String localName,
+                             String qName, 
+                             Attributes atts) throws SAXException {
+        inElement = true;
+        String key = localName;
+        Integer value = tags.get(key);
+        // System.err.println("==> XML parse tag \"" + localName + "\"");
+        if (localName.equals("AnnotationTranslation")) {
+            if (amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " entered \"AnnotationTranslation\" TWICE, ignored");
+            }
+            else {
+                amInAnnotationTranslation = true;
+            }
+        }
+        else if (localName.equals("Resources")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Resources\" tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (amInResources){
+                System.err.println("*** WARNING *** " + getLocator() + " entered \"resources\" TWICE, ignored");
+            }
+            else {
+                amInResources = true;
+            }
+        }
+        else if (localName.equals("ResourceLayer")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"ResourceLayer\" tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (!amInResources){
+                System.err.println("*** WARNING *** " + getLocator() + " \"ResourceLayer\" tag encountered while not in \"Resources\"");
+                amInResources = true;
+            }
+            tryAddResourceLayer(atts);
+        }
+        else if (localName.equals("Translations")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Translations\" tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " entered \"Translations\" TWICE, ignored");
+            }
+            else {
+                amInTranslations = true;
+            }
+        }
+        else if (localName.equals("TranslationTable")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"TranslationTable\" tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (!amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " \"TranslationTable\" tag encountered while not in \"Translations\"");
+                amInTranslations = true;
+            }
+            if (amInTranslationTable){
+                System.err.println("*** WARNING *** " + getLocator() + " entered \"TranslationTable\" TWICE, ignored");
+            }
+            else {
+                amInTranslationTable = true;
+            }
+            tryAddTranslationTable(atts);
+        }
+        else if (localName.equals("Pair")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (!amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" tag encountered while not in \"Translations\"");
+                amInTranslations = true;
+            }
+            if (!amInTranslationTable){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" tag encountered while not in \"TranslationTable\"");
+                amInTranslationTable = true;
+            }
+            tryAddTranslation(atts);
+        }
+        else {
+            System.err.println("*** ERROR *** " + getLocator() + " unknown tag \"" + localName + "\", ignored");            
+        }
+        //--- commented out: code that displays detailed information on current tag attributes
+        //indent(indentation);
+        //System.out.print("" + namespaceURI + "\"" + localName + "\": " + atts.getLength() + " attributes");
+        //for (int i = 0; i < atts.getLength(); i++) {
+        //    String attsName = atts.getLocalName(i);
+        //    String attsValue = atts.getValue(i);
+        //    System.out.print("   [" + i + "] " + attsName + " = \"" + attsValue + "\"");
+        //}
+        //System.out.println("");
+    }
+
+    @Override
+    public void characters(char[] chars, int i, int i1) throws SAXException {
+        //if (inElement) {
+        //    System.out.println("characters: =>" + chars/*.toString()*/ + "<= " + i + "," + i1 + " ==>" + new String(chars, i, i1) + "<==");
+        //}
+        String data = new String(chars, i, i1);
+        // Whitespace makes up default StringTokenizer delimeters
+        StringTokenizer tok = new StringTokenizer(data);
+        if (tok.hasMoreTokens()) {  
+            indent(indentation);
+            System.out.print("==>" + tok.nextToken());
+            while (tok.hasMoreTokens()) {
+                System.out.print(" " + tok.nextToken());
+            }
+            System.out.println("<==");
+        }
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+        if (localName.equals("AnnotationTranslation")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " end of \"AnnotationTranslation\" while not in it, ignored");
+            }
+            else {
+                amInAnnotationTranslation = false;
+            }
+        }
+        else if (localName.equals("Resources")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Resources\" end tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = false;
+            }
+            if (!amInResources){
+                System.err.println("*** WARNING *** " + getLocator() + " end of \"resources\" while not in it, ignored");
+            }
+            else {
+                amInResources = false;
+            }
+        }
+        else if (localName.equals("ResourceLayer")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"ResourceLayer\" end tag encountered while not in \"AnnotationTranslation\"");
+            }
+            if (!amInResources){
+                System.err.println("*** WARNING *** " + getLocator() + " \"ResourceLayer\" end tag encountered while not in \"Resources\"");
+            }
+        }
+        else if (localName.equals("Translations")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Translations\" end tag encountered while not in \"AnnotationTranslation\"");
+            }
+            if (!amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " leaving \"Translations\" while not in translations, ignored");
+            }
+            else {
+                amInTranslations = false;
+            }
+        }
+        else if (localName.equals("TranslationTable")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"TranslationTable\" end tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (!amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " \"TranslationTable\" end tag encountered while not in \"Translations\"");
+                amInTranslations = true;
+            }
+            if (!amInTranslationTable){
+                System.err.println("*** WARNING *** " + getLocator() + " leaving \"TranslationTable\" TWICE, ignored");
+            }
+            else {
+                amInTranslationTable = false;
+                curTable.tryPopulateTrellis();
+                curTable = null;
+            }
+        }
+        else if (localName.equals("Pair")) {
+            if (!amInAnnotationTranslation){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" end tag encountered while not in \"AnnotationTranslation\"");
+                amInAnnotationTranslation = true;
+            }
+            if (!amInTranslations){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" end tag encountered while not in \"Translations\"");
+                amInTranslations = true;
+            }
+            if (!amInTranslationTable){
+                System.err.println("*** WARNING *** " + getLocator() + " \"Pair\" end tag encountered while not in \"TranslationTable\"");
+                amInTranslationTable = true;
+            }
+        }
+        else {
+            System.err.println("*** ERROR *** " + getLocator() + " unknown end tag \"" + localName + "\", ignored");            
+        }
+    }
+
+    private void indent(int indentation) {
+        for(int i=0; i<indentation; i++) {
+            System.out.print(" ");
+        }
+    }
+
+    public void endDocument() throws SAXException {
+        Enumeration e = tags.keys();
+        while (e.hasMoreElements()) {
+            String tag = (String)e.nextElement();
+            int count = ((Integer)tags.get(tag)).intValue();
+            System.out.println("Local Name \"" + tag + "\" occurs " + count + " times");
+        }    
+    }
+ 
+    private static String convertToFileURL(String fileName) {
+        String path = new File(fileName).getAbsolutePath();
+        if (File.separatorChar != '/') {
+            path = path.replace(File.separatorChar, '/');
+        }
+
+        if (!path.startsWith("/")) {
+            path = "/" + path;
+        }
+        return "file:" + path;
+    }
+}
Index: annotrans/trunk/target/maven-archiver/pom.properties
===================================================================
--- annotrans/trunk/target/maven-archiver/pom.properties	(revision 6979)
+++ annotrans/trunk/target/maven-archiver/pom.properties	(revision 6979)
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Feb 22 14:21:25 CET 2016
+version=1.0-SNAPSHOT
+groupId=com.mycompany
+artifactId=AnnoTranns
Index: annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
===================================================================
--- annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst	(revision 6979)
+++ annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst	(revision 6979)
@@ -0,0 +1,21 @@
+nl/mpi/annot/translate/AnnoTransMessage.class
+nl/mpi/annot/translate/TranslationTypes.class
+nl/mpi/annot/translate/TranslationTable.class
+nl/mpi/annot/translate/TranslationUnit.class
+nl/mpi/annot/translate/SymbolTable.class
+nl/mpi/annot/translate/ATException.class
+nl/mpi/annot/translate/Trellis.class
+nl/mpi/annot/translate/XMLparser.class
+nl/mpi/annot/translate/AnnoTransMessage$AnnoTransMessageCode.class
+nl/mpi/annot/translate/XMLparser$MyErrorHandler.class
+nl/mpi/annot/translate/AnnoTransMessage$AnnoTransMessageSeverity.class
+nl/mpi/annot/translate/ResourceLayer.class
+nl/mpi/annot/translate/AnnotationTranslatorTestDriver.class
+nl/mpi/annot/translate/AnnotationTranslator$TranslationPair.class
+nl/mpi/annot/translate/TranslationType.class
+nl/mpi/annot/translate/ResourceLayers.class
+nl/mpi/annot/translate/AnnotationTranslator.class
+nl/mpi/annot/translate/TrellisNode.class
+.netbeans_automatic_build
+nl/mpi/annot/translate/TranslationResult.class
+nl/mpi/annot/translate/TranslationTables.class
Index: annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
===================================================================
--- annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst	(revision 6979)
+++ annotrans/trunk/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst	(revision 6979)
@@ -0,0 +1,16 @@
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/SymbolTable.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationUnit.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/ResourceLayers.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationResult.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/XMLparser.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/AnnotationTranslator.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationTables.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/Trellis.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/ATException.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/ResourceLayer.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TrellisNode.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationTable.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/AnnotationTranslatorTestDriver.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationType.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/AnnoTransMessage.java
+/Users/petbei/NetBeansProjects/AnnoTranns/src/main/java/nl/mpi/annot/translate/TranslationTypes.java
