From 964579d7fbc6aed6d95e2b232aa39c3a0c0ac82b Mon Sep 17 00:00:00 2001
From: Michał Lenart <michall@ipipan.waw.pl>
Date: Wed, 13 Aug 2014 14:25:18 +0000
Subject: [PATCH] - dodanie podstawowych testów generatora - dostosowanie skryptu buildAll.sh do nowych warunków - usunięcie nazw własnych z tagsetu - zintegrowanie słowników analizatora i generatora - kompilowanie na 32bit - poprawki w konsolowej wersji

---
 CMakeLists.txt                                   |  28 +++++++++++++++++++---------
 buildAll.sh                                      |  26 ++++++++++----------------
 fsabuilder/morfeusz_builder                      |  75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
 fsabuilder/morfeuszbuilder/fsa/convertinput.py   |  41 ++++++++++++++++++++++++++---------------
 fsabuilder/morfeuszbuilder/fsa/encode.py         |  33 +++++++++++++++++----------------
 fsabuilder/morfeuszbuilder/fsa/serializer.py     |  30 ++++++++++++++++++------------
 fsabuilder/morfeuszbuilder/tagset/tagset.py      |  33 ++++++++++++++-------------------
 initializeAnalyzerTest.sh                        |  13 +++++++------
 initializeGeneratorTest.sh                       |  20 ++++++++++++++++++++
 input/morfeusz-sgjp.tagset                       |  28 ----------------------------
 morfeusz/DictionariesRepository.cpp              |   6 +++---
 morfeusz/Dictionary.cpp                          |   8 ++++++++
 morfeusz/Dictionary.hpp                          |   2 ++
 morfeusz/Environment.cpp                         |  12 ++++++------
 morfeusz/Environment.hpp                         |   9 +++++----
 morfeusz/IdResolverImpl.cpp                      |   6 ++++++
 morfeusz/IdResolverImpl.hpp                      |   4 +++-
 morfeusz/Morfeusz.cpp                            |   5 +++++
 morfeusz/MorfeuszImpl.cpp                        |  45 +++++++++++++++++++++++++++++++++++----------
 morfeusz/MorfeuszImpl.hpp                        |   3 +++
 morfeusz/morfeusz2.h                             |   6 ++++++
 morfeusz/wrappers/java/CMakeLists.txt            |   1 -
 morfeusz/wrappers/python/CMakeLists.txt          |   1 -
 nbproject/configurations.xml                     | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------
 tests/analyzer/test_digits/tagset.dat            |  29 -----------------------------
 tests/analyzer/test_names/ARGS                   |   1 +
 tests/analyzer/test_names/dictionary.tab         |   3 +++
 tests/analyzer/test_names/input.txt              |   1 +
 tests/analyzer/test_names/output.txt             |   4 ++++
 tests/analyzer/test_names/segmentation.dat       |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/analyzer/test_names/tagset.dat             | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/analyzer/test_qualifiers/ARGS              |   1 +
 tests/analyzer/test_qualifiers/dictionary.tab    |   4 ++++
 tests/analyzer/test_qualifiers/input.txt         |   1 +
 tests/analyzer/test_qualifiers/output.txt        |   5 +++++
 tests/analyzer/test_qualifiers/segmentation.dat  |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/analyzer/test_qualifiers/tagset.dat        | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_digits/ARGS                 |   1 +
 tests/generator/test_digits/dictionary.tab       |  10 ++++++++++
 tests/generator/test_digits/input.txt            |   7 +++++++
 tests/generator/test_digits/output.txt           |   8 ++++++++
 tests/generator/test_digits/segmentation.dat     |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_digits/tagset.dat           | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_names/ARGS                  |   1 +
 tests/generator/test_names/dictionary.tab        |   3 +++
 tests/generator/test_names/input.txt             |   1 +
 tests/generator/test_names/output.txt            |   4 ++++
 tests/generator/test_names/segmentation.dat      |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_names/tagset.dat            | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_qualifiers/ARGS             |   1 +
 tests/generator/test_qualifiers/dictionary.tab   |   4 ++++
 tests/generator/test_qualifiers/input.txt        |   1 +
 tests/generator/test_qualifiers/output.txt       |   5 +++++
 tests/generator/test_qualifiers/segmentation.dat |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/generator/test_qualifiers/tagset.dat       | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 55 files changed, 4298 insertions(+), 241 deletions(-)
 create mode 100755 initializeGeneratorTest.sh
 create mode 100644 tests/analyzer/test_names/ARGS
 create mode 100644 tests/analyzer/test_names/dictionary.tab
 create mode 100644 tests/analyzer/test_names/input.txt
 create mode 100644 tests/analyzer/test_names/output.txt
 create mode 100644 tests/analyzer/test_names/segmentation.dat
 create mode 100644 tests/analyzer/test_names/tagset.dat
 create mode 100644 tests/analyzer/test_qualifiers/ARGS
 create mode 100644 tests/analyzer/test_qualifiers/dictionary.tab
 create mode 100644 tests/analyzer/test_qualifiers/input.txt
 create mode 100644 tests/analyzer/test_qualifiers/output.txt
 create mode 100644 tests/analyzer/test_qualifiers/segmentation.dat
 create mode 100644 tests/analyzer/test_qualifiers/tagset.dat
 create mode 100644 tests/generator/test_digits/ARGS
 create mode 100644 tests/generator/test_digits/dictionary.tab
 create mode 100644 tests/generator/test_digits/input.txt
 create mode 100644 tests/generator/test_digits/output.txt
 create mode 100644 tests/generator/test_digits/segmentation.dat
 create mode 100644 tests/generator/test_digits/tagset.dat
 create mode 100644 tests/generator/test_names/ARGS
 create mode 100644 tests/generator/test_names/dictionary.tab
 create mode 100644 tests/generator/test_names/input.txt
 create mode 100644 tests/generator/test_names/output.txt
 create mode 100644 tests/generator/test_names/segmentation.dat
 create mode 100644 tests/generator/test_names/tagset.dat
 create mode 100644 tests/generator/test_qualifiers/ARGS
 create mode 100644 tests/generator/test_qualifiers/dictionary.tab
 create mode 100644 tests/generator/test_qualifiers/input.txt
 create mode 100644 tests/generator/test_qualifiers/output.txt
 create mode 100644 tests/generator/test_qualifiers/segmentation.dat
 create mode 100644 tests/generator/test_qualifiers/tagset.dat

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 69b639f..c255e28 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,16 +6,17 @@ set (Morfeusz_VERSION_MAJOR 2)
 set (Morfeusz_VERSION_MINOR 0)
 set (Morfeusz_VERSION_PATCH 0)
 set (Morfeusz_VERSION "${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morfeusz_VERSION_PATCH}")
-if (VERSION_SUFFIX)
-    set (Morfeusz_VERSION_TWEAK "${VERSION_SUFFIX}")
+if (DEFAULT_DICT_NAME)
+    set (Morfeusz_VERSION_TWEAK "${DEFAULT_DICT_NAME}")
     set (Morfeusz_VERSION "${Morfeusz_VERSION}_${Morfeusz_VERSION_TWEAK}")
 endif ()
-set (CMAKE_BUILD_TYPE Debug)
+set (CMAKE_BUILD_TYPE Release)
 #~ set (CMAKE_SKIP_RPATH ON)
 
 message ("Version=${Morfeusz_VERSION}")
 
 add_definitions (-DMORFEUSZ2_VERSION="${Morfeusz_VERSION}")
+add_definitions (-DDEFAULT_DICT_NAME="${DEFAULT_DICT_NAME}")
 add_definitions (-DBUILDING_MORFEUSZ)
 
 if (NOT CMAKE_CROSSCOMPILING AND NOT SKIP_TESTING)
@@ -34,7 +35,8 @@ elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "")
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
     set (ARCHITECTURE "amd64")
 else ()
-    message (FATAL_ERROR "Invalid architecture: ${CMAKE_SYSTEM_PROCESSOR}")
+    set (ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
+#    message (FATAL_ERROR "Invalid architecture: ${CMAKE_SYSTEM_PROCESSOR}")
 endif ()
 
 # PROJECT_VERSION
@@ -157,11 +159,6 @@ include (CPack)
 ##### END initialize some vars #####
 file (COPY fsabuilder doTest.sh testJavaWrapper.sh testPythonWrapper.sh morfeusz/wrappers/python/test.py DESTINATION .)
 
-#~ configure_file (
-  #~ "${PROJECT_SOURCE_DIR}/morfeusz/morfeusz2_version.h.in"
-  #~ "${PROJECT_BINARY_DIR}/morfeusz2_version.h"
-#~ )
-#~ include_directories("${PROJECT_BINARY_DIR}" )
 ###### add main sources ########
 
 add_subdirectory (morfeusz)
@@ -175,6 +172,12 @@ macro (test_analyzer analyzerDir)
     add_test(TestAnalyzer_${dirname} ./doTest.sh morfeusz analyzer ${analyzerDir})
 endmacro()
 
+macro (test_generator generatorDir)
+    message ("adding test dir ${generatorDir}")
+    get_filename_component (dirname ${generatorTestDir} NAME)
+    add_test(TestGenerator_${dirname} ./doTest.sh morfeusz generator ${generatorDir})
+endmacro()
+
 file (GLOB analyzerTestDirs "tests/analyzer/*")
 if (UNIX)
     foreach (analyzerTestDir ${analyzerTestDirs})
@@ -182,6 +185,13 @@ if (UNIX)
     endforeach()
 endif()
 
+file (GLOB generatorTestDirs "tests/generator/*")
+if (UNIX)
+    foreach (generatorTestDir ${generatorTestDirs})
+        test_generator(${generatorTestDir})
+    endforeach()
+endif()
+
 if (UNIX)
     add_test(TestJavaWrapper ./testJavaWrapper.sh "${CMAKE_CURRENT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
     add_test(TestPythonWrapper ./testPythonWrapper.sh "${PROJECT_BINARY_DIR}")
diff --git a/buildAll.sh b/buildAll.sh
index 6fc5ab9..b0344d2 100755
--- a/buildAll.sh
+++ b/buildAll.sh
@@ -3,36 +3,30 @@
 set -e -o pipefail
 
 if [ "$#" -ne 3 ]; then
-    echo "Must provide exactly 3 arguments: <CROSSMORFEUSZ_ROOT> <INPUT_DICTIONARIES> <VERSION_SUFFIX>"
+    echo "Must provide exactly 3 arguments: <CROSSMORFEUSZ_ROOT> <INPUT_DICTIONARIES> <DEFAULT_DICT_NAME>"
     exit 1
 fi
 
 export CROSSMORFEUSZ_ROOT="$1"
 export INPUT_DICTIONARIES="$2"
-export VERSION_SUFFIX="$3"
+export DEFAULT_DICT_NAME="$3"
 export ANALYZER_DICTIONARY_CPP=`mktemp`.cpp
 export GENERATOR_DICTIONARY_CPP=`mktemp`.cpp
+export DICT_DIR=`mktemp -d`
 
 function buildDictionaries {
     
-    INPUT_TAGSET=input/sgjp-morfeusz.tagset
+    INPUT_TAGSET=input/morfeusz-sgjp.tagset
     SEGMENT_RULES_FILE=input/segmenty.dat
     
     python fsabuilder/morfeusz_builder \
-        --analyzer \
         --input-files="$INPUT_DICTIONARIES" \
         --tagset-file="$INPUT_TAGSET" \
         --segments-file="$SEGMENT_RULES_FILE" \
-        --cpp --serialization-method=V1 \
-        -o "$ANALYZER_DICTIONARY_CPP"
-    
-    python fsabuilder/morfeusz_builder \
-        --generator \
-        --input-files="$INPUT_DICTIONARIES" \
-        --tagset-file="$INPUT_TAGSET" \
-        --segments-file="$SEGMENT_RULES_FILE" \
-        --cpp --serialization-method=V1 \
-        -o "$GENERATOR_DICTIONARY_CPP"
+        --analyzer-cpp="$ANALYZER_DICTIONARY_CPP" \
+        --generator-cpp="$GENERATOR_DICTIONARY_CPP" \
+        --dict="$DEFAULT_DICT_NAME" \
+        --dict-dir="$DICT_DIR"
     
     echo "DONE building dictionaries" >&2
 }
@@ -62,7 +56,7 @@ function build {
         -D TARGET_DIR=$targetDir \
         -D ANALYZER_DICTIONARY_CPP=$ANALYZER_DICTIONARY_CPP \
         -D GENERATOR_DICTIONARY_CPP=$GENERATOR_DICTIONARY_CPP \
-        -D VERSION_SUFFIX=$VERSION_SUFFIX \
+        -D DEFAULT_DICT_NAME=$DEFAULT_DICT_NAME \
         -D SKIP_DICTIONARY_BUILDING=1 \
         $srcDir 2>&1
     echo "building $toolchain" >&2
@@ -97,6 +91,6 @@ buildDictionaries 2>&1 | log All all
     echo "build Windows amd64 package package-java 2>&1 | log Windows amd64"
     echo "build Windows i386 package package-java 2>&1 | log Windows i386"
     echo "build Darwin amd64 package package-java 2>&1 | log Darwin amd64"
-} | xargs -n1 -P3 -d$'\n' bash -c
+} | xargs -n1 -P2 -d$'\n' bash -c
 
 
diff --git a/fsabuilder/morfeusz_builder b/fsabuilder/morfeusz_builder
index d6f40d6..9c6be2e 100644
--- a/fsabuilder/morfeusz_builder
+++ b/fsabuilder/morfeusz_builder
@@ -15,6 +15,7 @@ from morfeuszbuilder.fsa.fsa import FSA
 from morfeuszbuilder.fsa.serializer import Serializer, SerializationMethod
 from morfeuszbuilder.tagset.tagset import Tagset
 from morfeuszbuilder.segrules import rulesParser
+from morfeuszbuilder.utils import exceptions, limits
 from optparse import OptionParser
 
 def _checkOption(opt, parser, msg):
@@ -168,7 +169,6 @@ def _parseOptions():
     return opts
 
 def _concatFiles(inputFiles):
-#     return open(inputFiles[0], 'r')
     for inputFile in inputFiles:
         if inputFile:
             with open(inputFile, 'r') as f:
@@ -178,14 +178,31 @@ def _concatFiles(inputFiles):
                     else:
                         logging.warn(u'Ignoring line: "%s" - contains space in text form or lemma' % line.strip().decode('utf8'))
 
-def _readPolimorfInput4Analyzer(inputFiles, tagset, encoder, segmentRulesManager):
+def _readNamesAndQualifiers(inputFiles):
+    names = set([u''])
+    qualifiers = set([tuple(frozenset([u'']))])
+    for line in _concatFiles(inputFiles):
+        line = line.strip().decode('utf8')
+        if line:
+            _, _, _, name, qualifier = convertinput.parseLine(line)
+            names.add(name)
+            qualifiers.add(tuple(sorted(qualifier.split(u'|'))))
+    namesMap = dict([(name, idx) for idx, name in enumerate(sorted(list(names)))])
+    qualifiersMap = dict([(frozenset(quals), idx) for idx, quals in enumerate(sorted(list(qualifiers)))])
+    exceptions.validate(
+                    len(qualifiersMap) <= limits.MAX_QUALIFIERS_COMBINATIONS, 
+                    u'Too many qualifiers combinations. The limit is %d' % limits.MAX_QUALIFIERS_COMBINATIONS)
+    
+    return namesMap, qualifiersMap
+
+def _readPolimorfInput4Analyzer(inputFiles, tagset, namesMap, qualifiersMap, encoder, segmentRulesManager):
     logging.info('reading analyzer data from %s', str(inputFiles))
-    for entry in convertinput.PolimorfConverter4Analyzer(tagset, encoder, 'utf8', segmentRulesManager).convert(_concatFiles(inputFiles)):
+    for entry in convertinput.PolimorfConverter4Analyzer(tagset, namesMap, qualifiersMap, encoder, 'utf8', segmentRulesManager).convert(_concatFiles(inputFiles)):
         yield entry
 
-def _readPolimorfInput4Generator(inputFiles, tagset, encoder, segmentRulesManager):
+def _readPolimorfInput4Generator(inputFiles, tagset, namesMap, qualifiersMap, encoder, segmentRulesManager):
     logging.info('reading generator data from %s', str(inputFiles))
-    for entry in convertinput.PolimorfConverter4Generator(tagset, encoder, 'utf8', segmentRulesManager).convert(_concatFiles(inputFiles)):
+    for entry in convertinput.PolimorfConverter4Generator(tagset, namesMap, qualifiersMap, encoder, 'utf8', segmentRulesManager).convert(_concatFiles(inputFiles)):
         yield entry
 
 def _readTrainData(trainFile):
@@ -210,10 +227,10 @@ def _printStats(fsa):
     logging.info('sink states num: '+str(sinkNum))
     logging.info('array states num: '+str(arrayNum))
 
-def buildAnalyzerFromPoliMorf(inputFiles, tagset, segmentRulesManager):
+def buildAnalyzerFromPoliMorf(inputFiles, tagset, namesMap, qualifiersMap, segmentRulesManager):
     encoder = encode.MorphEncoder()
     fsa = FSA(encoder, tagset)
-    for word, data in _readPolimorfInput4Analyzer(inputFiles, tagset, encoder, segmentRulesManager):
+    for word, data in _readPolimorfInput4Analyzer(inputFiles, tagset, namesMap, qualifiersMap, encoder, segmentRulesManager):
 #         print word, data
         fsa.addEntry(word, data)
         del word
@@ -223,12 +240,12 @@ def buildAnalyzerFromPoliMorf(inputFiles, tagset, segmentRulesManager):
     logging.info('Analyzer FSA stats:')
     logging.info('------')
     _printStats(fsa)
-    return fsa, encoder.qualifiersMap
+    return fsa
 
-def buildGeneratorFromPoliMorf(inputFiles, tagset, segmentRulesManager):
+def buildGeneratorFromPoliMorf(inputFiles, tagset, namesMap, qualifiersMap, segmentRulesManager):
     encoder = encode.Encoder4Generator()
     fsa = FSA(encoder, tagset)
-    inputData = _readPolimorfInput4Generator(inputFiles, tagset, encoder, segmentRulesManager)
+    inputData = _readPolimorfInput4Generator(inputFiles, tagset, namesMap, qualifiersMap, encoder, segmentRulesManager)
     for word, data in inputData:
         fsa.addEntry(word, data)
     fsa.close()
@@ -236,21 +253,32 @@ def buildGeneratorFromPoliMorf(inputFiles, tagset, segmentRulesManager):
     logging.info('Generator FSA stats:')
     logging.info('------')
     _printStats(fsa)
-    return fsa, encoder.qualifiersMap
+    return fsa
 
-def _doBuildDictionaryPart(opts, isGenerator):
-    tagset = Tagset(opts.tagsetFile)
+def _doBuildDictionaryPart(opts, tagset, namesMap, qualifiersMap, isGenerator):
+    
+    logging.info('reading segmentation rules')
     rulesParserVersion = rulesParser.RulesParser.PARSE4ANALYZER if not isGenerator else rulesParser.RulesParser.PARSE4GENERATOR
     segmentRulesManager = rulesParser.RulesParser(tagset, rulesParserVersion).parse(opts.segmentsFile)
-    fsa, qualifiersMap = buildAnalyzerFromPoliMorf(opts.inputFiles, tagset, segmentRulesManager)
     segmentationRulesData = segmentRulesManager.serialize()
+    logging.info('done reading segmentation rules')
+    
+    logging.info('building automaton')
+    buildFunction = buildAnalyzerFromPoliMorf if not isGenerator else buildGeneratorFromPoliMorf
+    fsa = buildFunction(opts.inputFiles, tagset, namesMap, qualifiersMap, segmentRulesManager)
+    logging.info('done building automaton')
     
-    if opts.analyzerTrainFile:
-        logging.info('training with '+opts.analyzerTrainFile+' ...')
+    if not isGenerator and opts.analyzerTrainFile:
+        logging.info('training analyzer automaton with '+opts.analyzerTrainFile+' ...')
         fsa.train(_readTrainData(opts.analyzerTrainFile))
         logging.info('done training')
     
-    serializer = Serializer.getSerializer(opts.serializationMethod, fsa, tagset, qualifiersMap, segmentationRulesData)
+    if isGenerator and opts.generatorTrainFile:
+        logging.info('training generator automaton with '+opts.generatorTrainFile+' ...')
+        fsa.train(_readTrainData(opts.analyzerTrainFile))
+        logging.info('done training')
+    
+    serializer = Serializer.getSerializer(opts.serializationMethod, fsa, tagset, namesMap, qualifiersMap, segmentationRulesData)
     if opts.generatorCpp and isGenerator:
         serializer.serialize2CppFile(opts.generatorCpp, isGenerator=isGenerator)
     if opts.analyzerCpp and not isGenerator:
@@ -267,14 +295,19 @@ def main(opts):
     else:
         logging.basicConfig(level=logging.INFO)
     
-    logging.info('reading tagset from %s', opts.tagsetFile)
+    logging.info('reading tagset')
     tagset = Tagset(opts.tagsetFile)
+    logging.info('done reading tagset')
+    
+    logging.info('reading names and qualifiers')
+    namesMap, qualifiersMap = _readNamesAndQualifiers(opts.inputFiles)
+    logging.info('done reading names and qualifiers')
     
     if not opts.onlyGenerator:
-        _doBuildDictionaryPart(opts, isGenerator=False)
+        _doBuildDictionaryPart(opts, tagset, namesMap, qualifiersMap, isGenerator=False)
 
-    if not opts.onlyGenerator:
-        _doBuildDictionaryPart(opts, isGenerator=True)
+    if not opts.onlyAnalyzer:
+        _doBuildDictionaryPart(opts, tagset, namesMap, qualifiersMap, isGenerator=True)
 
 if __name__ == '__main__':
     import os
diff --git a/fsabuilder/morfeuszbuilder/fsa/convertinput.py b/fsabuilder/morfeuszbuilder/fsa/convertinput.py
index 701e544..43cfdb2 100644
--- a/fsabuilder/morfeuszbuilder/fsa/convertinput.py
+++ b/fsabuilder/morfeuszbuilder/fsa/convertinput.py
@@ -27,7 +27,7 @@ def _mergeEntries(inputLines, lowercase):
     if prevInterps:
         yield (prevKey, frozenset(prevInterps))
 
-def _parseLine(line):
+def parseLine(line):
     splitLine = line.strip().split(u'\t')
     if len(splitLine) == 5:
         orth, base, tag, name, qualifier = splitLine
@@ -44,8 +44,10 @@ def _parseLine(line):
 
 class PolimorfConverter4Analyzer(object):
     
-    def __init__(self, tagset, encoder, inputEncoding, segmentRulesManager):
+    def __init__(self, tagset, namesMap, qualifiersMap, encoder, inputEncoding, segmentRulesManager):
         self.tagset = tagset
+        self.namesMap = namesMap
+        self.qualifiersMap = qualifiersMap
         self.encoder = encoder
         self.inputEncoding = inputEncoding
         self.segmentRulesManager = segmentRulesManager
@@ -55,18 +57,21 @@ class PolimorfConverter4Analyzer(object):
         for line in inputLines:
             line = line.decode(self.inputEncoding).strip('\n')
             if line:
-                orth, base, tag, name, qualifier = _parseLine(line)
+                orth, base, tag, name, qualifier = parseLine(line)
                 
                 tagnum = self.tagset.getTagnum4Tag(tag)
-                namenum = self.tagset.getNamenum4Name(name)
+                namenum = self.namesMap[name]
                 typenum = self.segmentRulesManager.lexeme2SegmentTypeNum(base, tagnum)
+                qualifiers = qualifier.split('|') if qualifier else frozenset([u''])
+                qualsnum = self.qualifiersMap[frozenset(qualifiers)]
                 yield '\t'.join((
                             orth.encode(self.inputEncoding),
                             base.encode(self.inputEncoding),
                             str(tagnum),
                             str(namenum),
                             str(typenum), 
-                            qualifier.encode(self.inputEncoding)))
+                            str(qualsnum)))
+                            #~ qualifier.encode(self.inputEncoding)))
     
     # input lines are encoded and partially parsed
     def _sortLines(self, inputLines):
@@ -77,20 +82,23 @@ class PolimorfConverter4Analyzer(object):
         for line in inputLines:
             line = line.decode(self.inputEncoding).strip(u'\n')
             if line:
-                orth, base, tagnum, namenum, typenum, qualifierStr = line.split(u'\t')
+                orth, base, tagnum, namenum, typenum, qualsnum = line.split(u'\t')
                 tagnum = int(tagnum)
                 namenum = int(namenum)
                 typenum = int(typenum)
-                qualifiers = qualifierStr.split('|') if qualifierStr else []
-                yield (orth, Interpretation4Analyzer(orth, base, tagnum, namenum, typenum, qualifiers))
+                #~ qualifiers = qualifierStr.split('|') if qualifierStr else []
+                qualsnum = int(qualsnum)
+                yield (orth, Interpretation4Analyzer(orth, base, tagnum, namenum, typenum, qualsnum))
     
     def convert(self, inputLines):
         return _mergeEntries(self._reallyParseLines(self._sortLines(self._partiallyParseLines(inputLines))), lowercase=True)
 
 class PolimorfConverter4Generator(object):
     
-    def __init__(self, tagset, encoder, inputEncoding, segmentRulesManager):
+    def __init__(self, tagset, namesMap, qualifiersMap, encoder, inputEncoding, segmentRulesManager):
         self.tagset = tagset
+        self.namesMap = namesMap
+        self.qualifiersMap = qualifiersMap
         self.encoder = encoder
         self.inputEncoding = inputEncoding
         self.segmentRulesManager = segmentRulesManager
@@ -100,7 +108,7 @@ class PolimorfConverter4Generator(object):
         for line in inputLines:
             line = line.decode(self.inputEncoding).strip('\n')
             if line:
-                orth, base, tag, name, qualifier = _parseLine(line)
+                orth, base, tag, name, qualifier = parseLine(line)
                 if base:
                     homonymId = u''
                     if u':' in base:
@@ -108,7 +116,9 @@ class PolimorfConverter4Generator(object):
                         if assumedBase != u'' and assumedHomonymId != u'' and assumedHomonymId.isalnum():
                             base, homonymId = assumedBase, assumedHomonymId
                     tagnum = self.tagset.getTagnum4Tag(tag)
-                    namenum = self.tagset.getNamenum4Name(name)
+                    namenum = self.namesMap[name]
+                    qualifiers = qualifier.split('|') if qualifier else frozenset([u''])
+                    qualsnum = self.qualifiersMap[frozenset(qualifiers)]
                     typenum = self.segmentRulesManager.lexeme2SegmentTypeNum(base, tagnum)
                     
                     #~ print '\t'.join((
@@ -126,7 +136,7 @@ class PolimorfConverter4Generator(object):
                                 str(namenum), 
                                 str(typenum),
                                 homonymId.encode(self.inputEncoding), 
-                                qualifier.encode(self.inputEncoding)))
+                                str(qualsnum)))
                 else:
                     logging.warn('Ignoring line: "%s" - contains empty lemma', line.strip())
     
@@ -139,15 +149,16 @@ class PolimorfConverter4Generator(object):
         for line in inputLines:
             line = line.decode(self.inputEncoding).strip(u'\n')
             if line and line != prevLine:
-                orth, base, tagnum, namenum, typenum, homonymId, qualifierStr = line.split(u'\t')
+                orth, base, tagnum, namenum, typenum, homonymId, qualsnum = line.split(u'\t')
 #                 print orth.encode('utf8'), base.encode('utf8'), homonymId
                 tagnum = int(tagnum)
                 namenum = int(namenum)
                 typenum = int(typenum)
                 del prevLine
                 prevLine = line
-                qualifiers = qualifierStr.split('|') if qualifierStr else ()
-                yield (base, Interpretation4Generator(orth, base, tagnum, namenum, typenum, homonymId, qualifiers))
+                qualsnum = int(qualsnum)
+                #~ qualifiers = qualifierStr.split('|') if qualifierStr else ()
+                yield (base, Interpretation4Generator(orth, base, tagnum, namenum, typenum, homonymId, qualsnum))
     
     def convert(self, inputLines):
         return _mergeEntries(self._reallyParseLines(self._sortLines(self._partiallyParseLines(inputLines))), lowercase=False)
diff --git a/fsabuilder/morfeuszbuilder/fsa/encode.py b/fsabuilder/morfeuszbuilder/fsa/encode.py
index 430ab37..86b634c 100644
--- a/fsabuilder/morfeuszbuilder/fsa/encode.py
+++ b/fsabuilder/morfeuszbuilder/fsa/encode.py
@@ -21,7 +21,7 @@ class Encoder(object):
         '''
         self.lowercase = lowercase
         self.encoding = encoding
-        self.qualifiersMap = { frozenset(): 0}
+        #~ self.qualifiersMap = { frozenset(): 0}
     
     def encodeWord(self, word, lowercase=True):
         assert type(word) == unicode
@@ -47,19 +47,20 @@ class Encoder(object):
                             u'Too many segment types. The limit is %d' % limits.MAX_SEGMENT_TYPES)
         return bytearray([typenum])
     
-    def _encodeQualifiers(self, qualifiers):
-        res = bytearray()
-        key = frozenset(qualifiers)
-        if key in self.qualifiersMap:
-            n = self.qualifiersMap[key]
-        else:
-            n = len(self.qualifiersMap)
-            self.qualifiersMap[key] = n
-        exceptions.validate(
-                            n <= limits.MAX_QUALIFIERS_COMBINATIONS, 
-                            u'Too many qualifiers combinations. The limit is %d' % limits.MAX_QUALIFIERS_COMBINATIONS)
-        res.extend(htons(n))
-        return res
+    #~ def _encodeQualifiers(self, qualifiers):
+        #~ res = bytearray()
+        #~ key = frozenset(qualifiers)
+        #~ if key in self.qualifiersMap:
+        #~ exceptions.validate(key in self.qualifiersMap, u'Unknown qualifiers: %s' % qualifiers)
+        #~ n = self.qualifiersMap[key]
+        #~ else:
+            #~ n = len(self.qualifiersMap)
+            #~ self.qualifiersMap[key] = n
+        #~ exceptions.validate(
+                            #~ n <= limits.MAX_QUALIFIERS_COMBINATIONS, 
+                            #~ u'Too many qualifiers combinations. The limit is %d' % limits.MAX_QUALIFIERS_COMBINATIONS)
+        #~ res.extend(htons(n))
+        #~ return res
     
     def _hasUpperPrefix(self, casePattern):
         for i in range(len(casePattern) + 1):
@@ -213,7 +214,7 @@ class MorphEncoder(Encoder):
                 encodedInterpsList.extend(self._encodeCasePattern(interp.encodedForm.casePattern))
             encodedInterpsList.extend(htons(interp.tagnum))
             encodedInterpsList.append(interp.namenum)
-            encodedInterpsList.extend(self._encodeQualifiers(interp.qualifiers))
+            encodedInterpsList.extend(htons(interp.qualifiers))
         
         res.extend(htons(len(encodedInterpsList)))
         res.extend(encodedInterpsList)
@@ -238,7 +239,7 @@ class Encoder4Generator(Encoder):
             encodedInterpsList.extend(serializeString(interp.encodedForm.suffixToAdd))
             encodedInterpsList.extend(htons(interp.tagnum))
             encodedInterpsList.append(interp.namenum)
-            encodedInterpsList.extend(self._encodeQualifiers(interp.qualifiers))
+            encodedInterpsList.extend(htons(interp.qualifiers))
         
         res.extend(htons(len(encodedInterpsList)))
         res.extend(encodedInterpsList)
diff --git a/fsabuilder/morfeuszbuilder/fsa/serializer.py b/fsabuilder/morfeuszbuilder/fsa/serializer.py
index fdc689b..32a8fbe 100644
--- a/fsabuilder/morfeuszbuilder/fsa/serializer.py
+++ b/fsabuilder/morfeuszbuilder/fsa/serializer.py
@@ -21,17 +21,19 @@ class Serializer(object):
     def __init__(self, fsa):
         self._fsa = fsa
         self.tagset = None
+        self.namesMap = None
         self.qualifiersMap = None
         self.segmentationRulesData = None
     
     @staticmethod
-    def getSerializer(serializationMethod, fsa, tagset, qualifiersMap, segmentationRulesData):
+    def getSerializer(serializationMethod, fsa, tagset, namesMap, qualifiersMap, segmentationRulesData):
         res = {
             SerializationMethod.SIMPLE: SimpleSerializer,
             SerializationMethod.V1: VLengthSerializer1,
             SerializationMethod.V2: VLengthSerializer2,
         }[serializationMethod](fsa)
         res.tagset = tagset
+        res.namesMap = namesMap
         res.qualifiersMap = qualifiersMap
         res.segmentationRulesData = segmentationRulesData
         return res
@@ -77,8 +79,10 @@ class Serializer(object):
         raise NotImplementedError('Not implemented')
     
     def fsa2bytearray(self, isGenerator):
-        tagsetData = self.serializeTagset(self.tagset)
+        tagsetData = self._serializeTags(self.tagset.tag2tagnum)
+        tagsetData.extend(self._serializeTags(self.namesMap))
         qualifiersData = self.serializeQualifiersMap()
+        #~ qualifiersData = self._serializeTags(self.qualifiersMap)
         segmentationRulesData = self.segmentationRulesData
         res = bytearray()
         res.extend(self.serializePrologue())
@@ -103,24 +107,26 @@ class Serializer(object):
         return res
     
     # serialize tagset data
-    def serializeTagset(self, tagset):
-        res = bytearray()
-        if tagset:
-            res.extend(self._serializeTags(tagset._tag2tagnum))
-            res.extend(self._serializeTags(tagset._name2namenum))
-        return res
+    #~ def serializeTagset(self, tagset):
+        #~ res = bytearray()
+        #~ if tagset:
+            #~ res.extend(self._serializeTags(tagset._tag2tagnum))
+            #~ res.extend(self._serializeTags(tagset._name2namenum))
+        #~ return res
     
     def serializeQualifiersMap(self):
-        res = bytearray()
-        res.extend(htons(len(self.qualifiersMap)))
         label2labelId = dict([ (u'|'.join(qualifiers), n) for qualifiers, n in sorted(self.qualifiersMap.iteritems(), key=lambda (qs, n): n) ])
-        res.extend(self._serializeTags(label2labelId))
+        return self._serializeTags(label2labelId)
+        #~ res = bytearray()
+        #~ res.extend(htons(len(self.qualifiersMap)))
+        #~ label2labelId = dict([ (u'|'.join(qualifiers), n) for qualifiers, n in sorted(self.qualifiersMap.iteritems(), key=lambda (qs, n): n) ])
+        #~ res.extend(self._serializeTags(label2labelId))
         #~ for qualifiers, n in sorted(self.qualifiersMap.iteritems(), key=lambda (qs, n): n):
             #~ res.append(len(qualifiers))
             #~ for q in qualifiers:
                 #~ res.extend(q.encode('utf8'))
                 #~ res.append(0)
-        return res
+        #~ return res
     
     def serializePrologue(self):
         res = bytearray()
diff --git a/fsabuilder/morfeuszbuilder/tagset/tagset.py b/fsabuilder/morfeuszbuilder/tagset/tagset.py
index e251dad..bda1505 100644
--- a/fsabuilder/morfeuszbuilder/tagset/tagset.py
+++ b/fsabuilder/morfeuszbuilder/tagset/tagset.py
@@ -14,26 +14,27 @@ class Tagset(object):
     SEP = '\t'
     
     def __init__(self, filename=None, encoding='utf8'):
-        self._tag2tagnum = {}
-        self._name2namenum = {}
+        self.tag2tagnum = {}
+        #~ self._name2namenum = {}
         if filename:
             self._doInit(filename, encoding)
-        self._tagnum2tag = dict(map(lambda (k, v): (v, k), self._tag2tagnum.iteritems()))
+        self._tagnum2tag = dict(map(lambda (k, v): (v, k), self.tag2tagnum.iteritems()))
     
     def _doInit(self, filename, encoding):
-        addingTo = None
+        insideTags = False
         with codecs.open(filename, 'r', encoding) as f:
             for linenum, line in enumerate(f, start=1):
                 line = line.strip('\n\r')
                 if line == u'[TAGS]':
-                    addingTo = Tagset.TAGS
-                elif line == u'[NAMES]':
-                    addingTo = Tagset.NAMES
+                    insideTags = True
+                #~ elif line == u'[NAMES]':
+                    #~ addingTo = Tagset.NAMES
                 elif line and not line.startswith(u'#'):
-                    if not addingTo in [Tagset.TAGS, Tagset.NAMES]:
+                    if not insideTags:
                         raise FSABuilderException('"%s" - text outside [TAGS] section in tagset file line %d' % (line, linenum))
-                    res = {Tagset.TAGS: self._tag2tagnum,
-                           Tagset.NAMES: self._name2namenum}[addingTo]
+                    res = self.tag2tagnum
+                    if len(line.split(Tagset.SEP)) != 2:
+                        raise FSABuilderException('"%s" - invalid line %d' % (line, linenum))
                     tagNum = line.split(Tagset.SEP)[0]
                     tag = line.split(Tagset.SEP)[1]
                     if tag in res:
@@ -41,19 +42,13 @@ class Tagset(object):
                     res[tag] = int(tagNum)
     
     def getAllTags(self):
-        return self._tag2tagnum.keys()
+        return self.tag2tagnum.keys()
     
     def getTagnum4Tag(self, tag):
-        if tag in self._tag2tagnum:
-            return self._tag2tagnum[tag]
+        if tag in self.tag2tagnum:
+            return self.tag2tagnum[tag]
         else:
             raise FSABuilderException('invalid tag: "%s"' % tag)
     
-    def getNamenum4Name(self, name):
-        if name in self._name2namenum:
-            return self._name2namenum[name]
-        else:
-            raise FSABuilderException('invalid name type: "%s"' % name)
-    
     def getTag4Tagnum(self, tagnum):
         return self._tagnum2tag[tagnum]
diff --git a/initializeAnalyzerTest.sh b/initializeAnalyzerTest.sh
index 8f59731..3528497 100755
--- a/initializeAnalyzerTest.sh
+++ b/initializeAnalyzerTest.sh
@@ -6,14 +6,15 @@ DIR=$1
 shift
 ARGS=`cat $DIR/ARGS`
 
-DICT_FILE=`mktemp`
+DICT_DIR=`mktemp -d`
+DICT=test
 
 python fsabuilder/morfeusz_builder \
-    --analyzer \
+    --only-analyzer \
     --input-files $DIR/dictionary.tab \
-    -o $DICT_FILE \
+    --dict-dir=$DICT_DIR \
+    --dict=$DICT \
     --tagset-file=$DIR/tagset.dat \
-    --segments-file=$DIR/segmentation.dat \
-    --serialization-method=V1
+    --segments-file=$DIR/segmentation.dat
 
-build/morfeusz/morfeusz_analyzer -i $DICT_FILE $ARGS < $DIR/input.txt > $DIR/output.txt
+build/morfeusz/morfeusz_analyzer --dict $DICT --dict-dir $DICT_DIR $ARGS < $DIR/input.txt > $DIR/output.txt
diff --git a/initializeGeneratorTest.sh b/initializeGeneratorTest.sh
new file mode 100755
index 0000000..f6d05f3
--- /dev/null
+++ b/initializeGeneratorTest.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -exo pipefail
+
+DIR=$1
+shift
+ARGS=`cat $DIR/ARGS`
+
+DICT_DIR=`mktemp -d`
+DICT=test
+
+python fsabuilder/morfeusz_builder \
+    --only-generator \
+    --input-files $DIR/dictionary.tab \
+    --dict-dir=$DICT_DIR \
+    --dict=$DICT \
+    --tagset-file=$DIR/tagset.dat \
+    --segments-file=$DIR/segmentation.dat
+
+build/morfeusz/morfeusz_generator --dict $DICT --dict-dir $DICT_DIR $ARGS < $DIR/input.txt > $DIR/output.txt
diff --git a/input/morfeusz-sgjp.tagset b/input/morfeusz-sgjp.tagset
index ec020fa..9135c8b 100644
--- a/input/morfeusz-sgjp.tagset
+++ b/input/morfeusz-sgjp.tagset
@@ -772,31 +772,3 @@
 # (special) 
 236	naj
 237	nie
-
-[NAMES]
-0	
-1	astr.
-2	budowla
-3	członek rodu
-4	człon nazwiska
-5	człon nazwiska (herb)
-6	człon nazwy firmy
-7	firma
-8	geograficzna
-9	imię
-10	instytucja
-11	język programowania
-12	krój pisma
-13	marka
-14	nazwisko
-15	oprogramowanie
-16	organizacja
-17	patronimicum
-18	pospolita
-19	przydomek
-20	pseudonim
-21	sufiks nazwiska
-22	środek lokomocji
-23	święto
-24	tytuł
-25	własna
diff --git a/morfeusz/DictionariesRepository.cpp b/morfeusz/DictionariesRepository.cpp
index 628b6d5..d113c1c 100644
--- a/morfeusz/DictionariesRepository.cpp
+++ b/morfeusz/DictionariesRepository.cpp
@@ -6,6 +6,7 @@
  */
 
 #include <fstream>
+#include "morfeusz2.h"
 #include "DictionariesRepository.hpp"
 #include "data/default_fsa.hpp"
 #include "const.hpp"
@@ -40,7 +41,7 @@ namespace morfeusz {
         DictionariesRepository::RepositoryEntry defaultEntry;
         defaultEntry.analyzerDictionary = new Dictionary(DEFAULT_FSA, ANALYZER);
         defaultEntry.generatorDictionary = new Dictionary(DEFAULT_SYNTH_FSA, GENERATOR);
-        res[string()] = defaultEntry;
+        res[Morfeusz::getDefaultDictName()] = defaultEntry;
         return res;
     }
 
@@ -49,8 +50,7 @@ namespace morfeusz {
     }
 
     const Dictionary* DictionariesRepository::getDefaultDictionary(MorfeuszProcessorType processorType) {
-        static string emptyString;
-        return this->getDictionary(emptyString, processorType);
+        return this->getDictionary(Morfeusz::getDefaultDictName(), processorType);
     }
 
     Dictionary* DictionariesRepository::RepositoryEntry::getDictionary(MorfeuszProcessorType processorType) const {
diff --git a/morfeusz/Dictionary.cpp b/morfeusz/Dictionary.cpp
index f05ad71..c9a66b3 100644
--- a/morfeusz/Dictionary.cpp
+++ b/morfeusz/Dictionary.cpp
@@ -42,4 +42,12 @@ namespace morfeusz {
     availableAgglOptions(getAvailableOptions(segrulesFSAsMap, "aggl")),
     availablePraetOptions(getAvailableOptions(segrulesFSAsMap, "praet")) {
     }
+    
+    bool Dictionary::isCompatibleWith(const Dictionary& other) const {
+        return this->idResolver.isCompatibleWith(other.idResolver)
+                && this->availableAgglOptions == other.availableAgglOptions
+                && this->availablePraetOptions == other.availablePraetOptions
+                && this->defaultSegrulesOptions == other.defaultSegrulesOptions
+                && this->separatorsList == other.separatorsList;
+    }
 }
diff --git a/morfeusz/Dictionary.hpp b/morfeusz/Dictionary.hpp
index 1550d37..613b185 100644
--- a/morfeusz/Dictionary.hpp
+++ b/morfeusz/Dictionary.hpp
@@ -25,6 +25,8 @@ namespace morfeusz {
     struct Dictionary {
         Dictionary(const unsigned char* ptr, MorfeuszProcessorType processorType);
         
+        bool isCompatibleWith(const Dictionary& other) const;
+        
         FSAType* fsa;
         IdResolverImpl idResolver;
         std::vector<uint32_t> separatorsList;
diff --git a/morfeusz/Environment.cpp b/morfeusz/Environment.cpp
index cc4d403..25823b8 100644
--- a/morfeusz/Environment.cpp
+++ b/morfeusz/Environment.cpp
@@ -38,8 +38,9 @@ namespace morfeusz {
         fsasMap.clear();
     }
 
-    Environment::Environment(MorfeuszProcessorType processorType)
-    : currentCharsetConverter(getCharsetConverter(DEFAULT_MORFEUSZ_CHARSET)),
+    Environment::Environment(MorfeuszProcessorType processorType, bool usable)
+    : usable(usable),
+    currentCharsetConverter(getCharsetConverter(DEFAULT_MORFEUSZ_CHARSET)),
     caseConverter(),
     dictionary(DictionariesRepository::instance.getDefaultDictionary(processorType)),
     idResolver(dictionary->idResolver),
@@ -169,11 +170,11 @@ namespace morfeusz {
     }
 
     bool Environment::isUsable() const {
-        return this->dictionary != NULL;
+        return usable;
     }
 
-    void Environment::setDictionary(const std::string& dictName) {
-        this->dictionary = DictionariesRepository::instance.getDictionary(dictName, this->processorType);
+    void Environment::setDictionary(const Dictionary* dict) {
+        this->dictionary = dict;
         idResolver = dictionary->idResolver;
         this->idResolver.setCharsetConverter(currentCharsetConverter);
         currSegrulesOptions = dictionary->defaultSegrulesOptions;
@@ -209,5 +210,4 @@ namespace morfeusz {
     const set<string>& Environment::getAvailablePraetOptions() const {
         return this->dictionary->availablePraetOptions;
     }
-
 }
diff --git a/morfeusz/Environment.hpp b/morfeusz/Environment.hpp
index d8c6284..f02b45f 100644
--- a/morfeusz/Environment.hpp
+++ b/morfeusz/Environment.hpp
@@ -43,7 +43,7 @@ public:
      * @param morfeuszProcessor
      * @param fileStartPtr
      */
-    explicit Environment(MorfeuszProcessorType morfeuszProcessor);
+    explicit Environment(MorfeuszProcessorType morfeuszProcessor, bool usable);
     
     /**
      * Sets charset for this environment.
@@ -90,11 +90,11 @@ public:
     const IdResolverImpl& getIdResolver() const;
     
     /**
-     * Sets dictionary file used by this environment.
+     * Sets dictionary by this environment.
      * 
-     * @param filename - filename of the dictionary
+     * @param dict - pointer to the dictionary
      */
-    void setDictionary(const std::string& dictName);
+    void setDictionary(const Dictionary* dict);
     
     /**
      * Sets segmentation rules option.
@@ -156,6 +156,7 @@ public:
     
     virtual ~Environment();
 private:
+    bool usable;
     const CharsetConverter* currentCharsetConverter;
     const CaseConverter caseConverter;
     
diff --git a/morfeusz/IdResolverImpl.cpp b/morfeusz/IdResolverImpl.cpp
index 4a4fba1..e79c052 100644
--- a/morfeusz/IdResolverImpl.cpp
+++ b/morfeusz/IdResolverImpl.cpp
@@ -130,4 +130,10 @@ namespace morfeusz {
     size_t IdResolverImpl::getLabelsCount() const {
         return this->labels.id2String.size();
     }
+    
+    bool IdResolverImpl::isCompatibleWith(const IdResolverImpl& other) const {
+        return this->tags.id2String == other.tags.id2String 
+                && this->names.id2String == other.names.id2String
+                && this->labels.id2String == other.labels.id2String;
+    }
 }
diff --git a/morfeusz/IdResolverImpl.hpp b/morfeusz/IdResolverImpl.hpp
index 9787f0e..e088c63 100644
--- a/morfeusz/IdResolverImpl.hpp
+++ b/morfeusz/IdResolverImpl.hpp
@@ -44,7 +44,9 @@ namespace morfeusz {
             std::vector<std::string> id2String;
             std::map<std::string, int> string2Id;
         };
-
+        
+        bool isCompatibleWith(const IdResolverImpl& other) const;
+        
     private:
 
         IdStringMapping tags;
diff --git a/morfeusz/Morfeusz.cpp b/morfeusz/Morfeusz.cpp
index 1318e8d..c9d1526 100644
--- a/morfeusz/Morfeusz.cpp
+++ b/morfeusz/Morfeusz.cpp
@@ -11,6 +11,11 @@ namespace morfeusz {
         static string version = MORFEUSZ2_VERSION;
         return version;
     }
+    
+    string Morfeusz::getDefaultDictName() {
+        static string dictName = DEFAULT_DICT_NAME;
+        return dictName;
+    }
 
     Morfeusz* Morfeusz::createInstance(MorfeuszUsage usage) {
         return new MorfeuszImpl(usage);
diff --git a/morfeusz/MorfeuszImpl.cpp b/morfeusz/MorfeuszImpl.cpp
index 3c75f78..8cd6596 100644
--- a/morfeusz/MorfeuszImpl.cpp
+++ b/morfeusz/MorfeuszImpl.cpp
@@ -22,6 +22,7 @@
 #include "const.hpp"
 #include "charset/utf8.h"
 #include "ChunkBounds.hpp"
+#include "DictionariesRepository.hpp"
 
 // TODO - konstruktor kopiujący działający Tak-Jak-Trzeba
 
@@ -114,9 +115,10 @@ namespace morfeusz {
     }
 
     MorfeuszImpl::MorfeuszImpl(MorfeuszUsage usage)
-    : usage(usage),
-    analyzerEnv(ANALYZER),
-    generatorEnv(GENERATOR),
+    : currDictionary(),
+    usage(usage),
+    analyzerEnv(ANALYZER, usage != GENERATE_ONLY),
+    generatorEnv(GENERATOR, usage != ANALYSE_ONLY),
     options(createDefaultOptions()),
     accum(),
     notMatchingCaseSegs(0),
@@ -131,19 +133,42 @@ namespace morfeusz {
     }
 
     void MorfeuszImpl::setDictionary(const string& dictName) {
-        if (usage == ANALYSE_ONLY || usage == BOTH_ANALYSE_AND_GENERATE) {
-            analyzerEnv.setDictionary(dictName);
+
+        if (dictName != currDictionary) {
+
+            doSetDictionary(dictName);
+
+            currDictionary = dictName;
         }
-        if (usage == GENERATE_ONLY || usage == BOTH_ANALYSE_AND_GENERATE) {
-            generatorEnv.setDictionary(dictName);
+    }
+
+    void MorfeuszImpl::doSetDictionary(const string& dictName) {
+        switch (usage) {
+            case BOTH_ANALYSE_AND_GENERATE:
+            {
+                const Dictionary* analyzerDict = DictionariesRepository::instance.getDictionary(dictName, ANALYZER);
+                const Dictionary* generatorDict = DictionariesRepository::instance.getDictionary(dictName, GENERATOR);
+                if (analyzerDict->isCompatibleWith(*generatorDict)) {
+                    analyzerEnv.setDictionary(analyzerDict);
+                    generatorEnv.setDictionary(generatorDict);
+                } else {
+                    throw MorfeuszException("Analyzer and generator dictionaries are incompatible");
+                }
+            }
+                break;
+            case ANALYSE_ONLY:
+                analyzerEnv.setDictionary(DictionariesRepository::instance.getDictionary(dictName, ANALYZER));
+                break;
+            case GENERATE_ONLY:
+                generatorEnv.setDictionary(DictionariesRepository::instance.getDictionary(dictName, GENERATOR));
+                break;
         }
     }
-    
+
     const Environment& MorfeuszImpl::getAnyEnvironment() const {
         if (analyzerEnv.isUsable()) {
             return analyzerEnv;
-        }
-        else {
+        } else {
             return generatorEnv;
         }
     }
diff --git a/morfeusz/MorfeuszImpl.hpp b/morfeusz/MorfeuszImpl.hpp
index 340e1bf..723a7d8 100644
--- a/morfeusz/MorfeuszImpl.hpp
+++ b/morfeusz/MorfeuszImpl.hpp
@@ -189,7 +189,10 @@ namespace morfeusz {
         void ensureIsGenerator() const;
         
         const Environment& getAnyEnvironment() const;
+        
+        void doSetDictionary(const std::string& dictName);
 
+        std::string currDictionary;
         MorfeuszUsage usage;
         Environment analyzerEnv;
         Environment generatorEnv;
diff --git a/morfeusz/morfeusz2.h b/morfeusz/morfeusz2.h
index 99b6240..4dac468 100644
--- a/morfeusz/morfeusz2.h
+++ b/morfeusz/morfeusz2.h
@@ -108,6 +108,12 @@ namespace morfeusz {
          * @return 
          */
         static std::string getVersion();
+        
+        /**
+         * Returns a string containing default dictionary name.
+         * @return 
+         */
+        static std::string getDefaultDictName();
 
         /**
          * Creates actual instance of Morfeusz class.
diff --git a/morfeusz/wrappers/java/CMakeLists.txt b/morfeusz/wrappers/java/CMakeLists.txt
index 5666350..b1d7119 100644
--- a/morfeusz/wrappers/java/CMakeLists.txt
+++ b/morfeusz/wrappers/java/CMakeLists.txt
@@ -54,7 +54,6 @@ endif ()
 
 # build jmorfeusz
 file(GLOB_RECURSE JAVA_SOURCES "${JAVA_SRC_DIR}" "${JAVA_SRC_DIR}/*.java")
-message("SOURCES: ${JAVA_SOURCES}")
 add_jar (jmorfeusz
     SOURCES "${JAVA_SOURCES}"
     ENTRY_POINT pl/waw/ipipan/morfeusz/app/App
diff --git a/morfeusz/wrappers/python/CMakeLists.txt b/morfeusz/wrappers/python/CMakeLists.txt
index 3410894..ea068d2 100644
--- a/morfeusz/wrappers/python/CMakeLists.txt
+++ b/morfeusz/wrappers/python/CMakeLists.txt
@@ -69,7 +69,6 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
         DEPENDS package-python-deb-build
     )
     list (APPEND PACKAGE_DEPENDS package-python-deb)
-    message ("PACKAGE_DEPENDS=${PACKAGE_DEPENDS}")
     add_custom_target (package-python
         DEPENDS pymorfeusz ${PACKAGE_DEPENDS})
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT CMAKE_CROSSCOMPILING)
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
index 0dcae54..5ecf170 100644
--- a/nbproject/configurations.xml
+++ b/nbproject/configurations.xml
@@ -168,9 +168,8 @@
         <rebuildPropChanged>false</rebuildPropChanged>
       </toolsSet>
       <flagsDictionary>
-        <element flagsID="0" commonFlags="-std=c++98"/>
+        <element flagsID="0" commonFlags="-std=c++98 -O3"/>
         <element flagsID="1" commonFlags="-std=c++98 -O3 -fPIC"/>
-        <element flagsID="2" commonFlags="-std=c++98 -fPIC"/>
       </flagsDictionary>
       <codeAssistance>
         <includeAdditional>true</includeAdditional>
@@ -192,7 +191,6 @@
             <pElem>build/fsa</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>__PIC__=2</Elem>
             <Elem>__pic__=2</Elem>
@@ -213,7 +211,6 @@
             <pElem>build/fsa</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>__PIC__=2</Elem>
             <Elem>__pic__=2</Elem>
@@ -226,12 +223,13 @@
         </ccTool>
       </item>
       <item path="build/morfeusz/default_fsa.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
           </preprocessorList>
         </ccTool>
@@ -240,12 +238,13 @@
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
           </preprocessorList>
         </ccTool>
@@ -266,7 +265,6 @@
             <pElem>build/morfeusz/java</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>__PIC__=2</Elem>
             <Elem>__pic__=2</Elem>
@@ -293,7 +291,6 @@
             <pElem>build/morfeusz/perl</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>morfeusz_perl_EXPORTS</Elem>
           </preprocessorList>
@@ -316,7 +313,6 @@
             <pElem>build/morfeusz/python</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>__PIC__=2</Elem>
             <Elem>__pic__=2</Elem>
@@ -338,20 +334,21 @@
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="build/morfeusz/wrappers/morfeuszPERL_wrap.cxx"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>/usr/lib/perl/5.14/CORE</pElem>
             <pElem>build/morfeusz/wrappers/perl</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
             <Elem>morfeusz_perl_EXPORTS</Elem>
           </preprocessorList>
@@ -374,7 +371,6 @@
             <pElem>morfeusz/build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
           </preprocessorList>
           <undefinedList>
@@ -392,7 +388,6 @@
             <pElem>morfeusz/build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
           </preprocessorList>
           <undefinedList>
@@ -408,7 +403,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -421,7 +418,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -434,7 +433,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -447,7 +448,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -460,7 +463,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -473,7 +478,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -486,7 +493,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -620,6 +629,13 @@
           <output>${TESTDIR}/TestFiles/f9</output>
         </linkerTool>
       </folder>
+      <folder path="build">
+        <ccTool>
+          <preprocessorList>
+            <Elem>NDEBUG</Elem>
+          </preprocessorList>
+        </ccTool>
+      </folder>
       <folder path="build/morfeusz">
         <ccTool>
           <incDir>
@@ -634,6 +650,7 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
             <Elem>libjmorfeusz_EXPORTS</Elem>
           </preprocessorList>
@@ -645,9 +662,6 @@
             <pElem>build</pElem>
             <pElem>/usr/include/python2.7</pElem>
           </incDir>
-          <preprocessorList>
-            <Elem>NDEBUG</Elem>
-          </preprocessorList>
         </ccTool>
       </folder>
       <folder path="java">
@@ -674,6 +688,7 @@
       <folder path="morfeusz">
         <ccTool>
           <preprocessorList>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -688,7 +703,6 @@
             <pElem>/usr/lib/jvm/default-java/include</pElem>
           </incDir>
           <preprocessorList>
-            <Elem>NDEBUG</Elem>
             <Elem>_OPTIMIZE__=1</Elem>
             <Elem>libjmorfeusz_EXPORTS</Elem>
           </preprocessorList>
@@ -708,172 +722,192 @@
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/Dictionary.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/Environment.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/IdResolverImpl.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/InflexionGraph.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/Morfeusz.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/MorfeuszImpl.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/MorphInterpretation.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/ResultsIteratorImpl.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/c_api/ResultsManager.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/case/CaseConverter.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/case/CasePatternHelper.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/case/caseconv.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/charset/CharsetConverter.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/charset/TextReader.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/charset/conversion_tables.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/cli/cli.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/const.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -882,50 +916,52 @@
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/deserialization/MorphDeserializer.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder4Analyzer.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/deserialization/morphInterps/InterpretedChunksDecoder4Generator.cpp"
             ex="false"
             tool="1"
             flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/fsa/const.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/morfeusz2_c.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
           <incDir>
             <pElem>morfeusz</pElem>
             <pElem>build/morfeusz</pElem>
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
             <Elem>libmorfeusz_EXPORTS</Elem>
           </preprocessorList>
         </ccTool>
@@ -938,7 +974,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
           </preprocessorList>
         </ccTool>
       </item>
@@ -950,16 +988,18 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
           </preprocessorList>
         </ccTool>
       </item>
       <item path="morfeusz/segrules/SegrulesFSA.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/segrules/segrules.cpp" ex="false" tool="1" flavor2="4">
-        <ccTool flags="2">
+        <ccTool flags="1">
         </ccTool>
       </item>
       <item path="morfeusz/test_runner.cpp" ex="false" tool="1" flavor2="4">
@@ -970,7 +1010,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
           </preprocessorList>
         </ccTool>
       </item>
@@ -984,7 +1026,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
           </preprocessorList>
         </ccTool>
       </item>
@@ -996,7 +1040,9 @@
           </incDir>
           <preprocessorList>
             <Elem>BUILDING_MORFEUSZ</Elem>
+            <Elem>DEFAULT_DICT_NAME=""</Elem>
             <Elem>MORFEUSZ2_VERSION="2.0.0"</Elem>
+            <Elem>NDEBUG</Elem>
           </preprocessorList>
         </ccTool>
       </item>
diff --git a/tests/analyzer/test_digits/tagset.dat b/tests/analyzer/test_digits/tagset.dat
index 7758137..aaa55af 100644
--- a/tests/analyzer/test_digits/tagset.dat
+++ b/tests/analyzer/test_digits/tagset.dat
@@ -726,32 +726,3 @@
 721	winien:sg:n1.n2:pri:imperf
 722	winien:sg:n1.n2:sec:imperf
 723	winien:sg:n1.n2:ter:imperf
-
-
-[NAMES]
-0	
-1	astr.
-2	budowla
-3	członek rodu
-4	człon nazwiska
-5	człon nazwiska (herb)
-6	człon nazwy firmy
-7	firma
-8	geograficzna
-9	imię
-10	instytucja
-11	język programowania
-12	krój pisma
-13	marka
-14	nazwisko
-15	oprogramowanie
-16	organizacja
-17	patronimicum
-18	pospolita
-19	przydomek
-20	pseudonim
-21	sufiks nazwiska
-22	środek lokomocji
-23	święto
-24	tytuł
-25	własna
diff --git a/tests/analyzer/test_names/ARGS b/tests/analyzer/test_names/ARGS
new file mode 100644
index 0000000..4fd99ea
--- /dev/null
+++ b/tests/analyzer/test_names/ARGS
@@ -0,0 +1 @@
+--aggl permissive
diff --git a/tests/analyzer/test_names/dictionary.tab b/tests/analyzer/test_names/dictionary.tab
new file mode 100644
index 0000000..c8960b0
--- /dev/null
+++ b/tests/analyzer/test_names/dictionary.tab
@@ -0,0 +1,3 @@
+czerwony	czerwony:a1	adj:sg:acc:m3:pos	pospolita	
+czerwony	czerwony:a2	adj:sg:acc:m3:pos	niepospolita	
+czerwony	czerwony:a3	adj:sg:acc:m3:pos	zażółć gęślą jaźń	
diff --git a/tests/analyzer/test_names/input.txt b/tests/analyzer/test_names/input.txt
new file mode 100644
index 0000000..94a3278
--- /dev/null
+++ b/tests/analyzer/test_names/input.txt
@@ -0,0 +1 @@
+czerwony
diff --git a/tests/analyzer/test_names/output.txt b/tests/analyzer/test_names/output.txt
new file mode 100644
index 0000000..028f6f5
--- /dev/null
+++ b/tests/analyzer/test_names/output.txt
@@ -0,0 +1,4 @@
+[0,1,czerwony,czerwony:a1,adj:sg:acc:m3:pos,pospolita,_
+ 0,1,czerwony,czerwony:a2,adj:sg:acc:m3:pos,niepospolita,_
+ 0,1,czerwony,czerwony:a3,adj:sg:acc:m3:pos,zażółć gęślą jaźń,_]
+
diff --git a/tests/analyzer/test_names/segmentation.dat b/tests/analyzer/test_names/segmentation.dat
new file mode 100644
index 0000000..4bac5b3
--- /dev/null
+++ b/tests/analyzer/test_names/segmentation.dat
@@ -0,0 +1,47 @@
+[options]
+aggl=strict permissive isolated
+praet=split composite
+
+[combinations]
+#define wsz_interp (interp|kropka|przecinek|dywiz)*
+
+#define moze_interp(segmenty) wsz_interp segmenty wsz_interp
+
+# Segmenty występujące samodzielnie:
+#
+# domyślny typ segmentu samodzielnego:
+moze_interp(samodz)
+
+# Pojedyncze znaki interpunkcyjne
+moze_interp(interp|kropka|przecinek|dywiz)
+
+# Liczba zapisana jako ciąg cyfr:
+moze_interp( dig>* dig )
+
+[segment types]
+interp
+kropka
+przecinek
+dywiz
+dig
+samodz
+
+[lexemes]
+kropka	.:interp
+przecinek	,:interp
+dywiz	-:interp
+
+[tags]
+dig	dig
+interp	interp
+samodz	%
+
+[separator chars]
+# ,
+44
+
+# .
+46
+
+# ;
+59
diff --git a/tests/analyzer/test_names/tagset.dat b/tests/analyzer/test_names/tagset.dat
new file mode 100644
index 0000000..aaa55af
--- /dev/null
+++ b/tests/analyzer/test_names/tagset.dat
@@ -0,0 +1,728 @@
+#!MORFEUSZ-TAGSET 0.1
+
+[TAGS]
+
+0	ign
+1	sp
+2	adja
+3	adjc
+4	adjp
+5	adj:pl:acc:m1.p1:com
+6	adj:pl:acc:m1.p1:pos
+7	adj:pl:acc:m1.p1:sup
+8	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com
+9	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos
+10	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup
+11	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+12	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+13	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+14	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+15	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+16	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+17	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+18	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+19	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+20	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+21	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+22	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+23	adj:pl:nom:m1.p1:pos
+24	adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos
+25	adj:pl:nom.voc:m1.p1:com
+26	adj:pl:nom.voc:m1.p1:pos
+27	adj:pl:nom.voc:m1.p1:sup
+28	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com
+29	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos
+30	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup
+31	adj:sg:acc:f:com
+32	adj:sg:acc:f:pos
+33	adj:sg:acc:f:sup
+34	adj:sg:acc:m1.m2:com
+35	adj:sg:acc:m1.m2:pos
+36	adj:sg:acc:m1.m2:sup
+37	adj:sg:acc:m3:com
+38	adj:sg:acc:m3:pos
+39	adj:sg:acc:m3:sup
+40	adj:sg:acc:n1.n2:com
+41	adj:sg:acc:n1.n2:pos
+42	adj:sg:acc:n1.n2:sup
+43	adj:sg:dat:f:com
+44	adj:sg:dat:f:pos
+45	adj:sg:dat:f:sup
+46	adj:sg:dat:m1.m2.m3.n1.n2:com
+47	adj:sg:dat:m1.m2.m3.n1.n2:pos
+48	adj:sg:dat:m1.m2.m3.n1.n2:sup
+49	adj:sg:gen:f:com
+50	adj:sg:gen:f:pos
+51	adj:sg:gen:f:sup
+52	adj:sg:gen:m1.m2.m3.n1.n2:com
+53	adj:sg:gen:m1.m2.m3.n1.n2:pos
+54	adj:sg:gen:m1.m2.m3.n1.n2:sup
+55	adj:sg:inst:f:com
+56	adj:sg:inst:f:pos
+57	adj:sg:inst:f:sup
+58	adj:sg:inst:m1.m2.m3.n1.n2:com
+59	adj:sg:inst:m1.m2.m3.n1.n2:pos
+60	adj:sg:inst:m1.m2.m3.n1.n2:sup
+61	adj:sg:loc:f:com
+62	adj:sg:loc:f:pos
+63	adj:sg:loc:f:sup
+64	adj:sg:loc:m1.m2.m3.n1.n2:com
+65	adj:sg:loc:m1.m2.m3.n1.n2:pos
+66	adj:sg:loc:m1.m2.m3.n1.n2:sup
+67	adj:sg:nom:f:pos
+68	adj:sg:nom:m1.m2.m3:pos
+69	adj:sg:nom:n1.n2:pos
+70	adj:sg:nom.voc:f:com
+71	adj:sg:nom.voc:f:pos
+72	adj:sg:nom.voc:f:sup
+73	adj:sg:nom.voc:m1.m2.m3:com
+74	adj:sg:nom.voc:m1.m2.m3:pos
+75	adj:sg:nom.voc:m1.m2.m3:sup
+76	adj:sg:nom.voc:n1.n2:com
+77	adj:sg:nom.voc:n1.n2:pos
+78	adj:sg:nom.voc:n1.n2:sup
+79	adv
+80	adv:com
+81	adv:pos
+82	adv:sup
+83	aglt:pl:pri:imperf:nwok
+84	aglt:pl:pri:imperf:wok
+85	aglt:pl:sec:imperf:nwok
+86	aglt:pl:sec:imperf:wok
+87	aglt:sg:pri:imperf:nwok
+88	aglt:sg:pri:imperf:wok
+89	aglt:sg:sec:imperf:nwok
+90	aglt:sg:sec:imperf:wok
+91	bedzie:pl:pri:imperf
+92	bedzie:pl:sec:imperf
+93	bedzie:pl:ter:imperf
+94	bedzie:sg:pri:imperf
+95	bedzie:sg:sec:imperf
+96	bedzie:sg:ter:imperf
+97	brev:pun
+98	burk
+99	comp
+100	cond:pl:m1.p1:pri:imperf
+101	cond:pl:m1.p1:pri:imperf.perf
+102	cond:pl:m1.p1:pri:perf
+103	cond:pl:m1.p1:sec:imperf
+104	cond:pl:m1.p1:sec:imperf.perf
+105	cond:pl:m1.p1:sec:perf
+106	cond:pl:m1.p1:ter:imperf
+107	cond:pl:m1.p1:ter:imperf.perf
+108	cond:pl:m1.p1:ter:perf
+109	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+110	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+111	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+112	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+113	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+114	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+115	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+116	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+117	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+118	cond:sg:f:pri:imperf
+119	cond:sg:f:pri:imperf.perf
+120	cond:sg:f:pri:perf
+121	cond:sg:f:sec:imperf
+122	cond:sg:f:sec:imperf.perf
+123	cond:sg:f:sec:perf
+124	cond:sg:f:ter:imperf
+125	cond:sg:f:ter:imperf.perf
+126	cond:sg:f:ter:perf
+127	cond:sg:m1.m2.m3:pri:imperf
+128	cond:sg:m1.m2.m3:pri:imperf.perf
+129	cond:sg:m1.m2.m3:pri:perf
+130	cond:sg:m1.m2.m3:sec:imperf
+131	cond:sg:m1.m2.m3:sec:imperf.perf
+132	cond:sg:m1.m2.m3:sec:perf
+133	cond:sg:m1.m2.m3:ter:imperf
+134	cond:sg:m1.m2.m3:ter:imperf.perf
+135	cond:sg:m1.m2.m3:ter:perf
+136	cond:sg:n1.n2:imperf
+137	cond:sg:n1.n2:imperf.perf
+138	cond:sg:n1.n2:perf
+139	cond:sg:n1.n2:pri:imperf
+140	cond:sg:n1.n2:pri:imperf.perf
+141	cond:sg:n1.n2:pri:perf
+142	cond:sg:n1.n2:sec:imperf
+143	cond:sg:n1.n2:sec:imperf.perf
+144	cond:sg:n1.n2:sec:perf
+145	cond:sg:n1.n2:ter:imperf
+146	cond:sg:n1.n2:ter:imperf.perf
+147	cond:sg:n1.n2:ter:perf
+148	conj
+149	depr:pl:nom:m2
+150	depr:pl:voc:m2
+151	dig
+152	emoticon
+153	fin:pl:pri:imperf
+154	fin:pl:pri:imperf.perf
+155	fin:pl:pri:perf
+156	fin:pl:sec:imperf
+157	fin:pl:sec:imperf.perf
+158	fin:pl:sec:perf
+159	fin:pl:ter:imperf
+160	fin:pl:ter:imperf.perf
+161	fin:pl:ter:perf
+162	fin:sg:pri:imperf
+163	fin:sg:pri:imperf.perf
+164	fin:sg:pri:perf
+165	fin:sg:sec:imperf
+166	fin:sg:sec:imperf.perf
+167	fin:sg:sec:perf
+168	fin:sg:ter:imperf
+169	fin:sg:ter:imperf.perf
+170	fin:sg:ter:perf
+171	ger:pl:dat.loc:n2:imperf:aff
+172	ger:pl:dat.loc:n2:imperf:neg
+173	ger:pl:dat.loc:n2:imperf.perf:aff
+174	ger:pl:dat.loc:n2:imperf.perf:neg
+175	ger:pl:dat.loc:n2:perf:aff
+176	ger:pl:dat.loc:n2:perf:neg
+177	ger:pl:gen:n2:imperf:aff
+178	ger:pl:gen:n2:imperf:neg
+179	ger:pl:gen:n2:imperf.perf:aff
+180	ger:pl:gen:n2:imperf.perf:neg
+181	ger:pl:gen:n2:perf:aff
+182	ger:pl:gen:n2:perf:neg
+183	ger:pl:inst:n2:imperf:aff
+184	ger:pl:inst:n2:imperf:neg
+185	ger:pl:inst:n2:imperf.perf:aff
+186	ger:pl:inst:n2:imperf.perf:neg
+187	ger:pl:inst:n2:perf:aff
+188	ger:pl:inst:n2:perf:neg
+189	ger:pl:nom.acc:n2:imperf:aff
+190	ger:pl:nom.acc:n2:imperf:neg
+191	ger:pl:nom.acc:n2:imperf.perf:aff
+192	ger:pl:nom.acc:n2:imperf.perf:neg
+193	ger:pl:nom.acc:n2:perf:aff
+194	ger:pl:nom.acc:n2:perf:neg
+195	ger:sg:dat.loc:n2:imperf:aff
+196	ger:sg:dat.loc:n2:imperf:neg
+197	ger:sg:dat.loc:n2:imperf.perf:aff
+198	ger:sg:dat.loc:n2:imperf.perf:neg
+199	ger:sg:dat.loc:n2:perf:aff
+200	ger:sg:dat.loc:n2:perf:neg
+201	ger:sg:gen:n2:imperf:aff
+202	ger:sg:gen:n2:imperf:neg
+203	ger:sg:gen:n2:imperf.perf:aff
+204	ger:sg:gen:n2:imperf.perf:neg
+205	ger:sg:gen:n2:perf:aff
+206	ger:sg:gen:n2:perf:neg
+207	ger:sg:inst:n2:imperf:aff
+208	ger:sg:inst:n2:imperf:neg
+209	ger:sg:inst:n2:imperf.perf:aff
+210	ger:sg:inst:n2:imperf.perf:neg
+211	ger:sg:inst:n2:perf:aff
+212	ger:sg:inst:n2:perf:neg
+213	ger:sg:nom.acc:n2:imperf:aff
+214	ger:sg:nom.acc:n2:imperf:neg
+215	ger:sg:nom.acc:n2:imperf.perf:aff
+216	ger:sg:nom.acc:n2:imperf.perf:neg
+217	ger:sg:nom.acc:n2:perf:aff
+218	ger:sg:nom.acc:n2:perf:neg
+219	imps:imperf
+220	imps:imperf.perf
+221	imps:perf
+222	impt:pl:pri:imperf
+223	impt:pl:pri:imperf.perf
+224	impt:pl:pri:perf
+225	impt:pl:sec:imperf
+226	impt:pl:sec:imperf.perf
+227	impt:pl:sec:perf
+228	impt:sg:sec:imperf
+229	impt:sg:sec:imperf.perf
+230	impt:sg:sec:perf
+231	inf:imperf
+232	inf:imperf.perf
+233	inf:perf
+234	interj
+235	interp
+236	naj
+237	nie
+238	num:comp
+239	num:pl:acc:m1:rec
+240	num:pl:dat.loc:n1.p1.p2:congr.rec
+241	num:pl:dat:m1.m2.m3.n2.f:congr
+242	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+243	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr
+244	num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr
+245	num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+246	num:pl:gen.loc:m1.m2.m3.n2.f:congr
+247	num:pl:gen:n1.p1.p2:rec
+248	num:pl:inst:f:congr
+249	num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr
+250	num:pl:inst:m1.m2.m3.f.n2:congr
+251	num:pl:inst:m1.m2.m3.n2:congr
+252	num:pl:inst:m1.m2.m3.n2.f:congr
+253	num:pl:inst:n1.p1.p2:rec
+254	num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec
+255	num:pl:nom.acc.voc:f:congr
+256	num:pl:nom.acc.voc:m1:rec
+257	num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec
+258	num:pl:nom.acc.voc:m2.m3.f.n2:rec
+259	num:pl:nom.acc.voc:m2.m3.n2:congr
+260	num:pl:nom.acc.voc:m2.m3.n2.f:congr
+261	num:pl:nom.acc.voc:n1.p1.p2:rec
+262	num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec
+263	num:pl:nom.voc:m1:congr
+264	num:pl:nom.voc:m1:rec
+265	num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec
+266	num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec
+267	pact:pl:acc:m1.p1:imperf:aff
+268	pact:pl:acc:m1.p1:imperf:neg
+269	pact:pl:acc:m1.p1:imperf.perf:aff
+270	pact:pl:acc:m1.p1:imperf.perf:neg
+271	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+272	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+273	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+274	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+275	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+276	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+277	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+278	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+279	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+280	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+281	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+282	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+283	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+284	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+285	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+286	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+287	pact:pl:nom.voc:m1.p1:imperf:aff
+288	pact:pl:nom.voc:m1.p1:imperf:neg
+289	pact:pl:nom.voc:m1.p1:imperf.perf:aff
+290	pact:pl:nom.voc:m1.p1:imperf.perf:neg
+291	pact:sg:acc.inst:f:imperf:aff
+292	pact:sg:acc.inst:f:imperf:neg
+293	pact:sg:acc.inst:f:imperf.perf:aff
+294	pact:sg:acc.inst:f:imperf.perf:neg
+295	pact:sg:acc:m1.m2:imperf:aff
+296	pact:sg:acc:m1.m2:imperf:neg
+297	pact:sg:acc:m1.m2:imperf.perf:aff
+298	pact:sg:acc:m1.m2:imperf.perf:neg
+299	pact:sg:acc:m3:imperf:aff
+300	pact:sg:acc:m3:imperf:neg
+301	pact:sg:acc:m3:imperf.perf:aff
+302	pact:sg:acc:m3:imperf.perf:neg
+303	pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+304	pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+305	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+306	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+307	pact:sg:gen.dat.loc:f:imperf:aff
+308	pact:sg:gen.dat.loc:f:imperf:neg
+309	pact:sg:gen.dat.loc:f:imperf.perf:aff
+310	pact:sg:gen.dat.loc:f:imperf.perf:neg
+311	pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+312	pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+313	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+314	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+315	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+316	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+317	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+318	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+319	pact:sg:nom.acc.voc:n1.n2:imperf:aff
+320	pact:sg:nom.acc.voc:n1.n2:imperf:neg
+321	pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+322	pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+323	pact:sg:nom.voc:f:imperf:aff
+324	pact:sg:nom.voc:f:imperf:neg
+325	pact:sg:nom.voc:f:imperf.perf:aff
+326	pact:sg:nom.voc:f:imperf.perf:neg
+327	pact:sg:nom.voc:m1.m2.m3:imperf:aff
+328	pact:sg:nom.voc:m1.m2.m3:imperf:neg
+329	pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+330	pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+331	pant:perf
+332	pcon:imperf
+333	ppas:pl:acc:m1.p1:imperf:aff
+334	ppas:pl:acc:m1.p1:imperf:neg
+335	ppas:pl:acc:m1.p1:imperf.perf:aff
+336	ppas:pl:acc:m1.p1:imperf.perf:neg
+337	ppas:pl:acc:m1.p1:perf:aff
+338	ppas:pl:acc:m1.p1:perf:neg
+339	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+340	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+341	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+342	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+343	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+344	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+345	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+346	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+347	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+348	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+349	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+350	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+351	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+352	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+353	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+354	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+355	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+356	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+357	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+358	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+359	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+360	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+361	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff
+362	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg
+363	ppas:pl:nom.voc:m1.p1:imperf:aff
+364	ppas:pl:nom.voc:m1.p1:imperf:neg
+365	ppas:pl:nom.voc:m1.p1:imperf.perf:aff
+366	ppas:pl:nom.voc:m1.p1:imperf.perf:neg
+367	ppas:pl:nom.voc:m1.p1:perf:aff
+368	ppas:pl:nom.voc:m1.p1:perf:neg
+369	ppas:sg:acc.inst:f:imperf:aff
+370	ppas:sg:acc.inst:f:imperf:neg
+371	ppas:sg:acc.inst:f:imperf.perf:aff
+372	ppas:sg:acc.inst:f:imperf.perf:neg
+373	ppas:sg:acc.inst:f:perf:aff
+374	ppas:sg:acc.inst:f:perf:neg
+375	ppas:sg:acc:m1.m2:imperf:aff
+376	ppas:sg:acc:m1.m2:imperf:neg
+377	ppas:sg:acc:m1.m2:imperf.perf:aff
+378	ppas:sg:acc:m1.m2:imperf.perf:neg
+379	ppas:sg:acc:m1.m2:perf:aff
+380	ppas:sg:acc:m1.m2:perf:neg
+381	ppas:sg:acc:m3:imperf:aff
+382	ppas:sg:acc:m3:imperf:neg
+383	ppas:sg:acc:m3:imperf.perf:aff
+384	ppas:sg:acc:m3:imperf.perf:neg
+385	ppas:sg:acc:m3:perf:aff
+386	ppas:sg:acc:m3:perf:neg
+387	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+388	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+389	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+390	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+391	ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff
+392	ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg
+393	ppas:sg:gen.dat.loc:f:imperf:aff
+394	ppas:sg:gen.dat.loc:f:imperf:neg
+395	ppas:sg:gen.dat.loc:f:imperf.perf:aff
+396	ppas:sg:gen.dat.loc:f:imperf.perf:neg
+397	ppas:sg:gen.dat.loc:f:perf:aff
+398	ppas:sg:gen.dat.loc:f:perf:neg
+399	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+400	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+401	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+402	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+403	ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff
+404	ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg
+405	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+406	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+407	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+408	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+409	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff
+410	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg
+411	ppas:sg:nom.acc.voc:n1.n2:imperf:aff
+412	ppas:sg:nom.acc.voc:n1.n2:imperf:neg
+413	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+414	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+415	ppas:sg:nom.acc.voc:n1.n2:perf:aff
+416	ppas:sg:nom.acc.voc:n1.n2:perf:neg
+417	ppas:sg:nom.voc:f:imperf:aff
+418	ppas:sg:nom.voc:f:imperf:neg
+419	ppas:sg:nom.voc:f:imperf.perf:aff
+420	ppas:sg:nom.voc:f:imperf.perf:neg
+421	ppas:sg:nom.voc:f:perf:aff
+422	ppas:sg:nom.voc:f:perf:neg
+423	ppas:sg:nom.voc:m1.m2.m3:imperf:aff
+424	ppas:sg:nom.voc:m1.m2.m3:imperf:neg
+425	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+426	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+427	ppas:sg:nom.voc:m1.m2.m3:perf:aff
+428	ppas:sg:nom.voc:m1.m2.m3:perf:neg
+429	ppron12:pl:acc:_:pri
+430	ppron12:pl:acc:_:sec
+431	ppron12:pl:dat:_:pri
+432	ppron12:pl:dat:_:sec
+433	ppron12:pl:gen:_:pri
+434	ppron12:pl:gen:_:sec
+435	ppron12:pl:inst:_:pri
+436	ppron12:pl:inst:_:sec
+437	ppron12:pl:loc:_:pri
+438	ppron12:pl:loc:_:sec
+439	ppron12:pl:nom:_:pri
+440	ppron12:pl:nom:_:sec
+441	ppron12:pl:voc:_:pri
+442	ppron12:pl:voc:_:sec
+443	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc
+444	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc
+445	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc
+446	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc
+447	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc
+448	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc
+449	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc
+450	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc
+451	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc
+452	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc
+453	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc
+454	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc
+455	ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri
+456	ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec
+457	ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri
+458	ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec
+459	ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri
+460	ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec
+461	ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec
+462	ppron3:pl:acc:m1.p1:ter:_:npraep
+463	ppron3:pl:acc:m1.p1:ter:_:praep
+464	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep
+465	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep
+466	ppron3:pl:dat:_:ter:_:npraep
+467	ppron3:pl:dat:_:ter:_:praep
+468	ppron3:pl:gen:_:ter:_:npraep
+469	ppron3:pl:gen:_:ter:_:praep
+470	ppron3:pl:inst:_:ter:_:_
+471	ppron3:pl:loc:_:ter:_:_
+472	ppron3:pl:nom:m1.p1:ter:_:_
+473	ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_
+474	ppron3:sg:acc:f:ter:_:npraep
+475	ppron3:sg:acc:f:ter:_:praep
+476	ppron3:sg:acc:m1.m2.m3:ter:akc:npraep
+477	ppron3:sg:acc:m1.m2.m3:ter:akc:praep
+478	ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep
+479	ppron3:sg:acc:m1.m2.m3:ter:nakc:praep
+480	ppron3:sg:acc:n1.n2:ter:_:npraep
+481	ppron3:sg:acc:n1.n2:ter:_:praep
+482	ppron3:sg:dat:f:ter:_:npraep
+483	ppron3:sg:dat:f:ter:_:praep
+484	ppron3:sg:dat:m1.m2.m3:ter:akc:npraep
+485	ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep
+486	ppron3:sg:dat:m1.m2.m3:ter:_:praep
+487	ppron3:sg:dat:n1.n2:ter:akc:npraep
+488	ppron3:sg:dat:n1.n2:ter:nakc:npraep
+489	ppron3:sg:dat:n1.n2:ter:_:praep
+490	ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
+491	ppron3:sg:gen:f:ter:_:npraep
+492	ppron3:sg:gen:f:ter:_:praep
+493	ppron3:sg:gen:m1.m2.m3:ter:akc:npraep
+494	ppron3:sg:gen:m1.m2.m3:ter:akc:praep
+495	ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep
+496	ppron3:sg:gen:m1.m2.m3:ter:nakc:praep
+497	ppron3:sg:gen:n1.n2:ter:akc:npraep
+498	ppron3:sg:gen:n1.n2:ter:nakc:npraep
+499	ppron3:sg:gen:n1.n2:ter:_:praep
+500	ppron3:sg:inst:f:ter:_:praep
+501	ppron3:sg:inst:m1.m2.m3:ter:_:_
+502	ppron3:sg:inst:n1.n2:ter:_:_
+503	ppron3:sg:loc:f:ter:_:_
+504	ppron3:sg:loc:m1.m2.m3:ter:_:_
+505	ppron3:sg:loc:n1.n2:ter:_:_
+506	ppron3:sg:nom:f:ter:_:_
+507	ppron3:sg:nom:m1.m2.m3:ter:_:_
+508	ppron3:sg:nom:n1.n2:ter:_:_
+509	praet:pl:m1.p1:imperf
+510	praet:pl:m1.p1:imperf.perf
+511	praet:pl:m1.p1:perf
+512	praet:pl:m1.p1:pri:imperf
+513	praet:pl:m1.p1:pri:imperf.perf
+514	praet:pl:m1.p1:pri:perf
+515	praet:pl:m1.p1:sec:imperf
+516	praet:pl:m1.p1:sec:imperf.perf
+517	praet:pl:m1.p1:sec:perf
+518	praet:pl:m1.p1:ter:imperf
+519	praet:pl:m1.p1:ter:imperf.perf
+520	praet:pl:m1.p1:ter:perf
+521	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf
+522	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf
+523	praet:pl:m2.m3.f.n1.n2.p2.p3:perf
+524	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+525	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+526	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+527	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+528	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+529	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+530	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+531	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+532	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+533	praet:sg:f:imperf
+534	praet:sg:f:imperf.perf
+535	praet:sg:f:perf
+536	praet:sg:f:pri:imperf
+537	praet:sg:f:pri:imperf.perf
+538	praet:sg:f:pri:perf
+539	praet:sg:f:sec:imperf
+540	praet:sg:f:sec:imperf.perf
+541	praet:sg:f:sec:perf
+542	praet:sg:f:ter:imperf
+543	praet:sg:f:ter:imperf.perf
+544	praet:sg:f:ter:perf
+545	praet:sg:m1.m2.m3:imperf
+546	praet:sg:m1.m2.m3:imperf:agl
+547	praet:sg:m1.m2.m3:imperf:nagl
+548	praet:sg:m1.m2.m3:imperf.perf
+549	praet:sg:m1.m2.m3:perf
+550	praet:sg:m1.m2.m3:perf:agl
+551	praet:sg:m1.m2.m3:perf:nagl
+552	praet:sg:m1.m2.m3:pri:imperf
+553	praet:sg:m1.m2.m3:pri:imperf.perf
+554	praet:sg:m1.m2.m3:pri:perf
+555	praet:sg:m1.m2.m3:sec:imperf
+556	praet:sg:m1.m2.m3:sec:imperf.perf
+557	praet:sg:m1.m2.m3:sec:perf
+558	praet:sg:m1.m2.m3:ter:imperf
+559	praet:sg:m1.m2.m3:ter:imperf.perf
+560	praet:sg:m1.m2.m3:ter:perf
+561	praet:sg:n1.n2:imperf
+562	praet:sg:n1.n2:imperf.perf
+563	praet:sg:n1.n2:perf
+564	praet:sg:n1.n2:pri:imperf
+565	praet:sg:n1.n2:pri:imperf.perf
+566	praet:sg:n1.n2:pri:perf
+567	praet:sg:n1.n2:sec:imperf
+568	praet:sg:n1.n2:sec:imperf.perf
+569	praet:sg:n1.n2:sec:perf
+570	praet:sg:n1.n2:ter:imperf
+571	praet:sg:n1.n2:ter:imperf.perf
+572	praet:sg:n1.n2:ter:perf
+573	pred
+574	prefa
+575	prefppas
+576	prefs
+577	prefv
+578	prep:acc
+579	prep:acc:nwok
+580	prep:acc:wok
+581	prep:dat
+582	prep:gen
+583	prep:gen:nwok
+584	prep:gen:wok
+585	prep:inst
+586	prep:inst:nwok
+587	prep:inst:wok
+588	prep:loc
+589	prep:loc:nwok
+590	prep:loc:wok
+591	prep:nom
+592	qub
+593	romandig
+594	siebie:acc
+595	siebie:dat
+596	siebie:gen
+597	siebie:inst
+598	siebie:loc
+599	substa
+600	subst:pl:acc:f
+601	subst:pl:acc:m1
+602	subst:pl:acc:m2
+603	subst:pl:acc:m3
+604	subst:pl:acc:n1
+605	subst:pl:acc:n2
+606	subst:pl:acc:p1
+607	subst:pl:acc:p2
+608	subst:pl:acc:p3
+609	subst:pl:dat:f
+610	subst:pl:dat:m1
+611	subst:pl:dat:m2
+612	subst:pl:dat:m3
+613	subst:pl:dat:n1
+614	subst:pl:dat:n2
+615	subst:pl:dat:p1
+616	subst:pl:dat:p2
+617	subst:pl:dat:p3
+618	subst:pl:gen:f
+619	subst:pl:gen:m1
+620	subst:pl:gen:m2
+621	subst:pl:gen:m3
+622	subst:pl:gen:n1
+623	subst:pl:gen:n2
+624	subst:pl:gen:p1
+625	subst:pl:gen:p2
+626	subst:pl:gen:p3
+627	subst:pl:inst:f
+628	subst:pl:inst:m1
+629	subst:pl:inst:m2
+630	subst:pl:inst:m3
+631	subst:pl:inst:n1
+632	subst:pl:inst:n2
+633	subst:pl:inst:p1
+634	subst:pl:inst:p2
+635	subst:pl:inst:p3
+636	subst:pl:loc:f
+637	subst:pl:loc:m1
+638	subst:pl:loc:m2
+639	subst:pl:loc:m3
+640	subst:pl:loc:n1
+641	subst:pl:loc:n2
+642	subst:pl:loc:p1
+643	subst:pl:loc:p2
+644	subst:pl:loc:p3
+645	subst:pl:nom:f
+646	subst:pl:nom:m1
+647	subst:pl:nom:m2
+648	subst:pl:nom:m3
+649	subst:pl:nom:n1
+650	subst:pl:nom:n2
+651	subst:pl:nom:p1
+652	subst:pl:nom:p2
+653	subst:pl:nom:p3
+654	subst:pl:voc:f
+655	subst:pl:voc:m1
+656	subst:pl:voc:m2
+657	subst:pl:voc:m3
+658	subst:pl:voc:n1
+659	subst:pl:voc:n2
+660	subst:pl:voc:p1
+661	subst:pl:voc:p2
+662	subst:pl:voc:p3
+663	subst:sg:acc:f
+664	subst:sg:acc:m1
+665	subst:sg:acc:m2
+666	subst:sg:acc:m3
+667	subst:sg:acc:n1
+668	subst:sg:acc:n2
+669	subst:sg:dat:f
+670	subst:sg:dat:m1
+671	subst:sg:dat:m2
+672	subst:sg:dat:m3
+673	subst:sg:dat:n1
+674	subst:sg:dat:n2
+675	subst:sg:gen:f
+676	subst:sg:gen:m1
+677	subst:sg:gen:m2
+678	subst:sg:gen:m3
+679	subst:sg:gen:n1
+680	subst:sg:gen:n2
+681	subst:sg:inst:f
+682	subst:sg:inst:m1
+683	subst:sg:inst:m2
+684	subst:sg:inst:m3
+685	subst:sg:inst:n1
+686	subst:sg:inst:n2
+687	subst:sg:loc:f
+688	subst:sg:loc:m1
+689	subst:sg:loc:m2
+690	subst:sg:loc:m3
+691	subst:sg:loc:n1
+692	subst:sg:loc:n2
+693	subst:sg:nom:f
+694	subst:sg:nom:m1
+695	subst:sg:nom:m2
+696	subst:sg:nom:m3
+697	subst:sg:nom:n1
+698	subst:sg:nom:n2
+699	subst:sg:voc:f
+700	subst:sg:voc:m1
+701	subst:sg:voc:m2
+702	subst:sg:voc:m3
+703	subst:sg:voc:n1
+704	subst:sg:voc:n2
+705	winien:pl:m1.p1:imperf
+706	winien:pl:m1.p1:pri:imperf
+707	winien:pl:m1.p1:sec:imperf
+708	winien:pl:m1.p1:ter:imperf
+709	winien:pl:m2.m3.f.n1.n2.p2.p3:imperf
+710	winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+711	winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+712	winien:sg:f:imperf
+713	winien:sg:f:pri:imperf
+714	winien:sg:f:sec:imperf
+715	winien:sg:f:ter:imperf
+716	winien:sg:m1.m2.m3:imperf
+717	winien:sg:m1.m2.m3:pri:imperf
+718	winien:sg:m1.m2.m3:sec:imperf
+719	winien:sg:m1.m2.m3:ter:imperf
+720	winien:sg:n1.n2:imperf
+721	winien:sg:n1.n2:pri:imperf
+722	winien:sg:n1.n2:sec:imperf
+723	winien:sg:n1.n2:ter:imperf
diff --git a/tests/analyzer/test_qualifiers/ARGS b/tests/analyzer/test_qualifiers/ARGS
new file mode 100644
index 0000000..4fd99ea
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/ARGS
@@ -0,0 +1 @@
+--aggl permissive
diff --git a/tests/analyzer/test_qualifiers/dictionary.tab b/tests/analyzer/test_qualifiers/dictionary.tab
new file mode 100644
index 0000000..3287c7c
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/dictionary.tab
@@ -0,0 +1,4 @@
+czerwony	czerwony:a1	adj:sg:acc:m3:pos	pospolita	niebieski
+czerwony	czerwony:a2	adj:sg:acc:m3:pos	pospolita	żółty1|żółty2
+czerwony	czerwony:a3	adj:sg:acc:m3:pos	pospolita	żółty2|żółty1
+czerwony	czerwony:a4	adj:sg:acc:m3:pos	pospolita	żółty1|żółty2|żółty3
diff --git a/tests/analyzer/test_qualifiers/input.txt b/tests/analyzer/test_qualifiers/input.txt
new file mode 100644
index 0000000..94a3278
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/input.txt
@@ -0,0 +1 @@
+czerwony
diff --git a/tests/analyzer/test_qualifiers/output.txt b/tests/analyzer/test_qualifiers/output.txt
new file mode 100644
index 0000000..6f85a40
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/output.txt
@@ -0,0 +1,5 @@
+[0,1,czerwony,czerwony:a1,adj:sg:acc:m3:pos,pospolita,niebieski
+ 0,1,czerwony,czerwony:a2,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2
+ 0,1,czerwony,czerwony:a3,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2
+ 0,1,czerwony,czerwony:a4,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2|żółty3]
+
diff --git a/tests/analyzer/test_qualifiers/segmentation.dat b/tests/analyzer/test_qualifiers/segmentation.dat
new file mode 100644
index 0000000..4bac5b3
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/segmentation.dat
@@ -0,0 +1,47 @@
+[options]
+aggl=strict permissive isolated
+praet=split composite
+
+[combinations]
+#define wsz_interp (interp|kropka|przecinek|dywiz)*
+
+#define moze_interp(segmenty) wsz_interp segmenty wsz_interp
+
+# Segmenty występujące samodzielnie:
+#
+# domyślny typ segmentu samodzielnego:
+moze_interp(samodz)
+
+# Pojedyncze znaki interpunkcyjne
+moze_interp(interp|kropka|przecinek|dywiz)
+
+# Liczba zapisana jako ciąg cyfr:
+moze_interp( dig>* dig )
+
+[segment types]
+interp
+kropka
+przecinek
+dywiz
+dig
+samodz
+
+[lexemes]
+kropka	.:interp
+przecinek	,:interp
+dywiz	-:interp
+
+[tags]
+dig	dig
+interp	interp
+samodz	%
+
+[separator chars]
+# ,
+44
+
+# .
+46
+
+# ;
+59
diff --git a/tests/analyzer/test_qualifiers/tagset.dat b/tests/analyzer/test_qualifiers/tagset.dat
new file mode 100644
index 0000000..aaa55af
--- /dev/null
+++ b/tests/analyzer/test_qualifiers/tagset.dat
@@ -0,0 +1,728 @@
+#!MORFEUSZ-TAGSET 0.1
+
+[TAGS]
+
+0	ign
+1	sp
+2	adja
+3	adjc
+4	adjp
+5	adj:pl:acc:m1.p1:com
+6	adj:pl:acc:m1.p1:pos
+7	adj:pl:acc:m1.p1:sup
+8	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com
+9	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos
+10	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup
+11	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+12	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+13	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+14	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+15	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+16	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+17	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+18	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+19	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+20	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+21	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+22	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+23	adj:pl:nom:m1.p1:pos
+24	adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos
+25	adj:pl:nom.voc:m1.p1:com
+26	adj:pl:nom.voc:m1.p1:pos
+27	adj:pl:nom.voc:m1.p1:sup
+28	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com
+29	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos
+30	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup
+31	adj:sg:acc:f:com
+32	adj:sg:acc:f:pos
+33	adj:sg:acc:f:sup
+34	adj:sg:acc:m1.m2:com
+35	adj:sg:acc:m1.m2:pos
+36	adj:sg:acc:m1.m2:sup
+37	adj:sg:acc:m3:com
+38	adj:sg:acc:m3:pos
+39	adj:sg:acc:m3:sup
+40	adj:sg:acc:n1.n2:com
+41	adj:sg:acc:n1.n2:pos
+42	adj:sg:acc:n1.n2:sup
+43	adj:sg:dat:f:com
+44	adj:sg:dat:f:pos
+45	adj:sg:dat:f:sup
+46	adj:sg:dat:m1.m2.m3.n1.n2:com
+47	adj:sg:dat:m1.m2.m3.n1.n2:pos
+48	adj:sg:dat:m1.m2.m3.n1.n2:sup
+49	adj:sg:gen:f:com
+50	adj:sg:gen:f:pos
+51	adj:sg:gen:f:sup
+52	adj:sg:gen:m1.m2.m3.n1.n2:com
+53	adj:sg:gen:m1.m2.m3.n1.n2:pos
+54	adj:sg:gen:m1.m2.m3.n1.n2:sup
+55	adj:sg:inst:f:com
+56	adj:sg:inst:f:pos
+57	adj:sg:inst:f:sup
+58	adj:sg:inst:m1.m2.m3.n1.n2:com
+59	adj:sg:inst:m1.m2.m3.n1.n2:pos
+60	adj:sg:inst:m1.m2.m3.n1.n2:sup
+61	adj:sg:loc:f:com
+62	adj:sg:loc:f:pos
+63	adj:sg:loc:f:sup
+64	adj:sg:loc:m1.m2.m3.n1.n2:com
+65	adj:sg:loc:m1.m2.m3.n1.n2:pos
+66	adj:sg:loc:m1.m2.m3.n1.n2:sup
+67	adj:sg:nom:f:pos
+68	adj:sg:nom:m1.m2.m3:pos
+69	adj:sg:nom:n1.n2:pos
+70	adj:sg:nom.voc:f:com
+71	adj:sg:nom.voc:f:pos
+72	adj:sg:nom.voc:f:sup
+73	adj:sg:nom.voc:m1.m2.m3:com
+74	adj:sg:nom.voc:m1.m2.m3:pos
+75	adj:sg:nom.voc:m1.m2.m3:sup
+76	adj:sg:nom.voc:n1.n2:com
+77	adj:sg:nom.voc:n1.n2:pos
+78	adj:sg:nom.voc:n1.n2:sup
+79	adv
+80	adv:com
+81	adv:pos
+82	adv:sup
+83	aglt:pl:pri:imperf:nwok
+84	aglt:pl:pri:imperf:wok
+85	aglt:pl:sec:imperf:nwok
+86	aglt:pl:sec:imperf:wok
+87	aglt:sg:pri:imperf:nwok
+88	aglt:sg:pri:imperf:wok
+89	aglt:sg:sec:imperf:nwok
+90	aglt:sg:sec:imperf:wok
+91	bedzie:pl:pri:imperf
+92	bedzie:pl:sec:imperf
+93	bedzie:pl:ter:imperf
+94	bedzie:sg:pri:imperf
+95	bedzie:sg:sec:imperf
+96	bedzie:sg:ter:imperf
+97	brev:pun
+98	burk
+99	comp
+100	cond:pl:m1.p1:pri:imperf
+101	cond:pl:m1.p1:pri:imperf.perf
+102	cond:pl:m1.p1:pri:perf
+103	cond:pl:m1.p1:sec:imperf
+104	cond:pl:m1.p1:sec:imperf.perf
+105	cond:pl:m1.p1:sec:perf
+106	cond:pl:m1.p1:ter:imperf
+107	cond:pl:m1.p1:ter:imperf.perf
+108	cond:pl:m1.p1:ter:perf
+109	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+110	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+111	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+112	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+113	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+114	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+115	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+116	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+117	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+118	cond:sg:f:pri:imperf
+119	cond:sg:f:pri:imperf.perf
+120	cond:sg:f:pri:perf
+121	cond:sg:f:sec:imperf
+122	cond:sg:f:sec:imperf.perf
+123	cond:sg:f:sec:perf
+124	cond:sg:f:ter:imperf
+125	cond:sg:f:ter:imperf.perf
+126	cond:sg:f:ter:perf
+127	cond:sg:m1.m2.m3:pri:imperf
+128	cond:sg:m1.m2.m3:pri:imperf.perf
+129	cond:sg:m1.m2.m3:pri:perf
+130	cond:sg:m1.m2.m3:sec:imperf
+131	cond:sg:m1.m2.m3:sec:imperf.perf
+132	cond:sg:m1.m2.m3:sec:perf
+133	cond:sg:m1.m2.m3:ter:imperf
+134	cond:sg:m1.m2.m3:ter:imperf.perf
+135	cond:sg:m1.m2.m3:ter:perf
+136	cond:sg:n1.n2:imperf
+137	cond:sg:n1.n2:imperf.perf
+138	cond:sg:n1.n2:perf
+139	cond:sg:n1.n2:pri:imperf
+140	cond:sg:n1.n2:pri:imperf.perf
+141	cond:sg:n1.n2:pri:perf
+142	cond:sg:n1.n2:sec:imperf
+143	cond:sg:n1.n2:sec:imperf.perf
+144	cond:sg:n1.n2:sec:perf
+145	cond:sg:n1.n2:ter:imperf
+146	cond:sg:n1.n2:ter:imperf.perf
+147	cond:sg:n1.n2:ter:perf
+148	conj
+149	depr:pl:nom:m2
+150	depr:pl:voc:m2
+151	dig
+152	emoticon
+153	fin:pl:pri:imperf
+154	fin:pl:pri:imperf.perf
+155	fin:pl:pri:perf
+156	fin:pl:sec:imperf
+157	fin:pl:sec:imperf.perf
+158	fin:pl:sec:perf
+159	fin:pl:ter:imperf
+160	fin:pl:ter:imperf.perf
+161	fin:pl:ter:perf
+162	fin:sg:pri:imperf
+163	fin:sg:pri:imperf.perf
+164	fin:sg:pri:perf
+165	fin:sg:sec:imperf
+166	fin:sg:sec:imperf.perf
+167	fin:sg:sec:perf
+168	fin:sg:ter:imperf
+169	fin:sg:ter:imperf.perf
+170	fin:sg:ter:perf
+171	ger:pl:dat.loc:n2:imperf:aff
+172	ger:pl:dat.loc:n2:imperf:neg
+173	ger:pl:dat.loc:n2:imperf.perf:aff
+174	ger:pl:dat.loc:n2:imperf.perf:neg
+175	ger:pl:dat.loc:n2:perf:aff
+176	ger:pl:dat.loc:n2:perf:neg
+177	ger:pl:gen:n2:imperf:aff
+178	ger:pl:gen:n2:imperf:neg
+179	ger:pl:gen:n2:imperf.perf:aff
+180	ger:pl:gen:n2:imperf.perf:neg
+181	ger:pl:gen:n2:perf:aff
+182	ger:pl:gen:n2:perf:neg
+183	ger:pl:inst:n2:imperf:aff
+184	ger:pl:inst:n2:imperf:neg
+185	ger:pl:inst:n2:imperf.perf:aff
+186	ger:pl:inst:n2:imperf.perf:neg
+187	ger:pl:inst:n2:perf:aff
+188	ger:pl:inst:n2:perf:neg
+189	ger:pl:nom.acc:n2:imperf:aff
+190	ger:pl:nom.acc:n2:imperf:neg
+191	ger:pl:nom.acc:n2:imperf.perf:aff
+192	ger:pl:nom.acc:n2:imperf.perf:neg
+193	ger:pl:nom.acc:n2:perf:aff
+194	ger:pl:nom.acc:n2:perf:neg
+195	ger:sg:dat.loc:n2:imperf:aff
+196	ger:sg:dat.loc:n2:imperf:neg
+197	ger:sg:dat.loc:n2:imperf.perf:aff
+198	ger:sg:dat.loc:n2:imperf.perf:neg
+199	ger:sg:dat.loc:n2:perf:aff
+200	ger:sg:dat.loc:n2:perf:neg
+201	ger:sg:gen:n2:imperf:aff
+202	ger:sg:gen:n2:imperf:neg
+203	ger:sg:gen:n2:imperf.perf:aff
+204	ger:sg:gen:n2:imperf.perf:neg
+205	ger:sg:gen:n2:perf:aff
+206	ger:sg:gen:n2:perf:neg
+207	ger:sg:inst:n2:imperf:aff
+208	ger:sg:inst:n2:imperf:neg
+209	ger:sg:inst:n2:imperf.perf:aff
+210	ger:sg:inst:n2:imperf.perf:neg
+211	ger:sg:inst:n2:perf:aff
+212	ger:sg:inst:n2:perf:neg
+213	ger:sg:nom.acc:n2:imperf:aff
+214	ger:sg:nom.acc:n2:imperf:neg
+215	ger:sg:nom.acc:n2:imperf.perf:aff
+216	ger:sg:nom.acc:n2:imperf.perf:neg
+217	ger:sg:nom.acc:n2:perf:aff
+218	ger:sg:nom.acc:n2:perf:neg
+219	imps:imperf
+220	imps:imperf.perf
+221	imps:perf
+222	impt:pl:pri:imperf
+223	impt:pl:pri:imperf.perf
+224	impt:pl:pri:perf
+225	impt:pl:sec:imperf
+226	impt:pl:sec:imperf.perf
+227	impt:pl:sec:perf
+228	impt:sg:sec:imperf
+229	impt:sg:sec:imperf.perf
+230	impt:sg:sec:perf
+231	inf:imperf
+232	inf:imperf.perf
+233	inf:perf
+234	interj
+235	interp
+236	naj
+237	nie
+238	num:comp
+239	num:pl:acc:m1:rec
+240	num:pl:dat.loc:n1.p1.p2:congr.rec
+241	num:pl:dat:m1.m2.m3.n2.f:congr
+242	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+243	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr
+244	num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr
+245	num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+246	num:pl:gen.loc:m1.m2.m3.n2.f:congr
+247	num:pl:gen:n1.p1.p2:rec
+248	num:pl:inst:f:congr
+249	num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr
+250	num:pl:inst:m1.m2.m3.f.n2:congr
+251	num:pl:inst:m1.m2.m3.n2:congr
+252	num:pl:inst:m1.m2.m3.n2.f:congr
+253	num:pl:inst:n1.p1.p2:rec
+254	num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec
+255	num:pl:nom.acc.voc:f:congr
+256	num:pl:nom.acc.voc:m1:rec
+257	num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec
+258	num:pl:nom.acc.voc:m2.m3.f.n2:rec
+259	num:pl:nom.acc.voc:m2.m3.n2:congr
+260	num:pl:nom.acc.voc:m2.m3.n2.f:congr
+261	num:pl:nom.acc.voc:n1.p1.p2:rec
+262	num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec
+263	num:pl:nom.voc:m1:congr
+264	num:pl:nom.voc:m1:rec
+265	num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec
+266	num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec
+267	pact:pl:acc:m1.p1:imperf:aff
+268	pact:pl:acc:m1.p1:imperf:neg
+269	pact:pl:acc:m1.p1:imperf.perf:aff
+270	pact:pl:acc:m1.p1:imperf.perf:neg
+271	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+272	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+273	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+274	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+275	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+276	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+277	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+278	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+279	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+280	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+281	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+282	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+283	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+284	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+285	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+286	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+287	pact:pl:nom.voc:m1.p1:imperf:aff
+288	pact:pl:nom.voc:m1.p1:imperf:neg
+289	pact:pl:nom.voc:m1.p1:imperf.perf:aff
+290	pact:pl:nom.voc:m1.p1:imperf.perf:neg
+291	pact:sg:acc.inst:f:imperf:aff
+292	pact:sg:acc.inst:f:imperf:neg
+293	pact:sg:acc.inst:f:imperf.perf:aff
+294	pact:sg:acc.inst:f:imperf.perf:neg
+295	pact:sg:acc:m1.m2:imperf:aff
+296	pact:sg:acc:m1.m2:imperf:neg
+297	pact:sg:acc:m1.m2:imperf.perf:aff
+298	pact:sg:acc:m1.m2:imperf.perf:neg
+299	pact:sg:acc:m3:imperf:aff
+300	pact:sg:acc:m3:imperf:neg
+301	pact:sg:acc:m3:imperf.perf:aff
+302	pact:sg:acc:m3:imperf.perf:neg
+303	pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+304	pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+305	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+306	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+307	pact:sg:gen.dat.loc:f:imperf:aff
+308	pact:sg:gen.dat.loc:f:imperf:neg
+309	pact:sg:gen.dat.loc:f:imperf.perf:aff
+310	pact:sg:gen.dat.loc:f:imperf.perf:neg
+311	pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+312	pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+313	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+314	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+315	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+316	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+317	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+318	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+319	pact:sg:nom.acc.voc:n1.n2:imperf:aff
+320	pact:sg:nom.acc.voc:n1.n2:imperf:neg
+321	pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+322	pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+323	pact:sg:nom.voc:f:imperf:aff
+324	pact:sg:nom.voc:f:imperf:neg
+325	pact:sg:nom.voc:f:imperf.perf:aff
+326	pact:sg:nom.voc:f:imperf.perf:neg
+327	pact:sg:nom.voc:m1.m2.m3:imperf:aff
+328	pact:sg:nom.voc:m1.m2.m3:imperf:neg
+329	pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+330	pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+331	pant:perf
+332	pcon:imperf
+333	ppas:pl:acc:m1.p1:imperf:aff
+334	ppas:pl:acc:m1.p1:imperf:neg
+335	ppas:pl:acc:m1.p1:imperf.perf:aff
+336	ppas:pl:acc:m1.p1:imperf.perf:neg
+337	ppas:pl:acc:m1.p1:perf:aff
+338	ppas:pl:acc:m1.p1:perf:neg
+339	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+340	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+341	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+342	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+343	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+344	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+345	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+346	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+347	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+348	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+349	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+350	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+351	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+352	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+353	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+354	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+355	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+356	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+357	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+358	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+359	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+360	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+361	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff
+362	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg
+363	ppas:pl:nom.voc:m1.p1:imperf:aff
+364	ppas:pl:nom.voc:m1.p1:imperf:neg
+365	ppas:pl:nom.voc:m1.p1:imperf.perf:aff
+366	ppas:pl:nom.voc:m1.p1:imperf.perf:neg
+367	ppas:pl:nom.voc:m1.p1:perf:aff
+368	ppas:pl:nom.voc:m1.p1:perf:neg
+369	ppas:sg:acc.inst:f:imperf:aff
+370	ppas:sg:acc.inst:f:imperf:neg
+371	ppas:sg:acc.inst:f:imperf.perf:aff
+372	ppas:sg:acc.inst:f:imperf.perf:neg
+373	ppas:sg:acc.inst:f:perf:aff
+374	ppas:sg:acc.inst:f:perf:neg
+375	ppas:sg:acc:m1.m2:imperf:aff
+376	ppas:sg:acc:m1.m2:imperf:neg
+377	ppas:sg:acc:m1.m2:imperf.perf:aff
+378	ppas:sg:acc:m1.m2:imperf.perf:neg
+379	ppas:sg:acc:m1.m2:perf:aff
+380	ppas:sg:acc:m1.m2:perf:neg
+381	ppas:sg:acc:m3:imperf:aff
+382	ppas:sg:acc:m3:imperf:neg
+383	ppas:sg:acc:m3:imperf.perf:aff
+384	ppas:sg:acc:m3:imperf.perf:neg
+385	ppas:sg:acc:m3:perf:aff
+386	ppas:sg:acc:m3:perf:neg
+387	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+388	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+389	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+390	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+391	ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff
+392	ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg
+393	ppas:sg:gen.dat.loc:f:imperf:aff
+394	ppas:sg:gen.dat.loc:f:imperf:neg
+395	ppas:sg:gen.dat.loc:f:imperf.perf:aff
+396	ppas:sg:gen.dat.loc:f:imperf.perf:neg
+397	ppas:sg:gen.dat.loc:f:perf:aff
+398	ppas:sg:gen.dat.loc:f:perf:neg
+399	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+400	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+401	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+402	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+403	ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff
+404	ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg
+405	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+406	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+407	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+408	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+409	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff
+410	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg
+411	ppas:sg:nom.acc.voc:n1.n2:imperf:aff
+412	ppas:sg:nom.acc.voc:n1.n2:imperf:neg
+413	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+414	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+415	ppas:sg:nom.acc.voc:n1.n2:perf:aff
+416	ppas:sg:nom.acc.voc:n1.n2:perf:neg
+417	ppas:sg:nom.voc:f:imperf:aff
+418	ppas:sg:nom.voc:f:imperf:neg
+419	ppas:sg:nom.voc:f:imperf.perf:aff
+420	ppas:sg:nom.voc:f:imperf.perf:neg
+421	ppas:sg:nom.voc:f:perf:aff
+422	ppas:sg:nom.voc:f:perf:neg
+423	ppas:sg:nom.voc:m1.m2.m3:imperf:aff
+424	ppas:sg:nom.voc:m1.m2.m3:imperf:neg
+425	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+426	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+427	ppas:sg:nom.voc:m1.m2.m3:perf:aff
+428	ppas:sg:nom.voc:m1.m2.m3:perf:neg
+429	ppron12:pl:acc:_:pri
+430	ppron12:pl:acc:_:sec
+431	ppron12:pl:dat:_:pri
+432	ppron12:pl:dat:_:sec
+433	ppron12:pl:gen:_:pri
+434	ppron12:pl:gen:_:sec
+435	ppron12:pl:inst:_:pri
+436	ppron12:pl:inst:_:sec
+437	ppron12:pl:loc:_:pri
+438	ppron12:pl:loc:_:sec
+439	ppron12:pl:nom:_:pri
+440	ppron12:pl:nom:_:sec
+441	ppron12:pl:voc:_:pri
+442	ppron12:pl:voc:_:sec
+443	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc
+444	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc
+445	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc
+446	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc
+447	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc
+448	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc
+449	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc
+450	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc
+451	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc
+452	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc
+453	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc
+454	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc
+455	ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri
+456	ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec
+457	ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri
+458	ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec
+459	ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri
+460	ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec
+461	ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec
+462	ppron3:pl:acc:m1.p1:ter:_:npraep
+463	ppron3:pl:acc:m1.p1:ter:_:praep
+464	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep
+465	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep
+466	ppron3:pl:dat:_:ter:_:npraep
+467	ppron3:pl:dat:_:ter:_:praep
+468	ppron3:pl:gen:_:ter:_:npraep
+469	ppron3:pl:gen:_:ter:_:praep
+470	ppron3:pl:inst:_:ter:_:_
+471	ppron3:pl:loc:_:ter:_:_
+472	ppron3:pl:nom:m1.p1:ter:_:_
+473	ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_
+474	ppron3:sg:acc:f:ter:_:npraep
+475	ppron3:sg:acc:f:ter:_:praep
+476	ppron3:sg:acc:m1.m2.m3:ter:akc:npraep
+477	ppron3:sg:acc:m1.m2.m3:ter:akc:praep
+478	ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep
+479	ppron3:sg:acc:m1.m2.m3:ter:nakc:praep
+480	ppron3:sg:acc:n1.n2:ter:_:npraep
+481	ppron3:sg:acc:n1.n2:ter:_:praep
+482	ppron3:sg:dat:f:ter:_:npraep
+483	ppron3:sg:dat:f:ter:_:praep
+484	ppron3:sg:dat:m1.m2.m3:ter:akc:npraep
+485	ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep
+486	ppron3:sg:dat:m1.m2.m3:ter:_:praep
+487	ppron3:sg:dat:n1.n2:ter:akc:npraep
+488	ppron3:sg:dat:n1.n2:ter:nakc:npraep
+489	ppron3:sg:dat:n1.n2:ter:_:praep
+490	ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
+491	ppron3:sg:gen:f:ter:_:npraep
+492	ppron3:sg:gen:f:ter:_:praep
+493	ppron3:sg:gen:m1.m2.m3:ter:akc:npraep
+494	ppron3:sg:gen:m1.m2.m3:ter:akc:praep
+495	ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep
+496	ppron3:sg:gen:m1.m2.m3:ter:nakc:praep
+497	ppron3:sg:gen:n1.n2:ter:akc:npraep
+498	ppron3:sg:gen:n1.n2:ter:nakc:npraep
+499	ppron3:sg:gen:n1.n2:ter:_:praep
+500	ppron3:sg:inst:f:ter:_:praep
+501	ppron3:sg:inst:m1.m2.m3:ter:_:_
+502	ppron3:sg:inst:n1.n2:ter:_:_
+503	ppron3:sg:loc:f:ter:_:_
+504	ppron3:sg:loc:m1.m2.m3:ter:_:_
+505	ppron3:sg:loc:n1.n2:ter:_:_
+506	ppron3:sg:nom:f:ter:_:_
+507	ppron3:sg:nom:m1.m2.m3:ter:_:_
+508	ppron3:sg:nom:n1.n2:ter:_:_
+509	praet:pl:m1.p1:imperf
+510	praet:pl:m1.p1:imperf.perf
+511	praet:pl:m1.p1:perf
+512	praet:pl:m1.p1:pri:imperf
+513	praet:pl:m1.p1:pri:imperf.perf
+514	praet:pl:m1.p1:pri:perf
+515	praet:pl:m1.p1:sec:imperf
+516	praet:pl:m1.p1:sec:imperf.perf
+517	praet:pl:m1.p1:sec:perf
+518	praet:pl:m1.p1:ter:imperf
+519	praet:pl:m1.p1:ter:imperf.perf
+520	praet:pl:m1.p1:ter:perf
+521	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf
+522	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf
+523	praet:pl:m2.m3.f.n1.n2.p2.p3:perf
+524	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+525	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+526	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+527	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+528	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+529	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+530	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+531	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+532	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+533	praet:sg:f:imperf
+534	praet:sg:f:imperf.perf
+535	praet:sg:f:perf
+536	praet:sg:f:pri:imperf
+537	praet:sg:f:pri:imperf.perf
+538	praet:sg:f:pri:perf
+539	praet:sg:f:sec:imperf
+540	praet:sg:f:sec:imperf.perf
+541	praet:sg:f:sec:perf
+542	praet:sg:f:ter:imperf
+543	praet:sg:f:ter:imperf.perf
+544	praet:sg:f:ter:perf
+545	praet:sg:m1.m2.m3:imperf
+546	praet:sg:m1.m2.m3:imperf:agl
+547	praet:sg:m1.m2.m3:imperf:nagl
+548	praet:sg:m1.m2.m3:imperf.perf
+549	praet:sg:m1.m2.m3:perf
+550	praet:sg:m1.m2.m3:perf:agl
+551	praet:sg:m1.m2.m3:perf:nagl
+552	praet:sg:m1.m2.m3:pri:imperf
+553	praet:sg:m1.m2.m3:pri:imperf.perf
+554	praet:sg:m1.m2.m3:pri:perf
+555	praet:sg:m1.m2.m3:sec:imperf
+556	praet:sg:m1.m2.m3:sec:imperf.perf
+557	praet:sg:m1.m2.m3:sec:perf
+558	praet:sg:m1.m2.m3:ter:imperf
+559	praet:sg:m1.m2.m3:ter:imperf.perf
+560	praet:sg:m1.m2.m3:ter:perf
+561	praet:sg:n1.n2:imperf
+562	praet:sg:n1.n2:imperf.perf
+563	praet:sg:n1.n2:perf
+564	praet:sg:n1.n2:pri:imperf
+565	praet:sg:n1.n2:pri:imperf.perf
+566	praet:sg:n1.n2:pri:perf
+567	praet:sg:n1.n2:sec:imperf
+568	praet:sg:n1.n2:sec:imperf.perf
+569	praet:sg:n1.n2:sec:perf
+570	praet:sg:n1.n2:ter:imperf
+571	praet:sg:n1.n2:ter:imperf.perf
+572	praet:sg:n1.n2:ter:perf
+573	pred
+574	prefa
+575	prefppas
+576	prefs
+577	prefv
+578	prep:acc
+579	prep:acc:nwok
+580	prep:acc:wok
+581	prep:dat
+582	prep:gen
+583	prep:gen:nwok
+584	prep:gen:wok
+585	prep:inst
+586	prep:inst:nwok
+587	prep:inst:wok
+588	prep:loc
+589	prep:loc:nwok
+590	prep:loc:wok
+591	prep:nom
+592	qub
+593	romandig
+594	siebie:acc
+595	siebie:dat
+596	siebie:gen
+597	siebie:inst
+598	siebie:loc
+599	substa
+600	subst:pl:acc:f
+601	subst:pl:acc:m1
+602	subst:pl:acc:m2
+603	subst:pl:acc:m3
+604	subst:pl:acc:n1
+605	subst:pl:acc:n2
+606	subst:pl:acc:p1
+607	subst:pl:acc:p2
+608	subst:pl:acc:p3
+609	subst:pl:dat:f
+610	subst:pl:dat:m1
+611	subst:pl:dat:m2
+612	subst:pl:dat:m3
+613	subst:pl:dat:n1
+614	subst:pl:dat:n2
+615	subst:pl:dat:p1
+616	subst:pl:dat:p2
+617	subst:pl:dat:p3
+618	subst:pl:gen:f
+619	subst:pl:gen:m1
+620	subst:pl:gen:m2
+621	subst:pl:gen:m3
+622	subst:pl:gen:n1
+623	subst:pl:gen:n2
+624	subst:pl:gen:p1
+625	subst:pl:gen:p2
+626	subst:pl:gen:p3
+627	subst:pl:inst:f
+628	subst:pl:inst:m1
+629	subst:pl:inst:m2
+630	subst:pl:inst:m3
+631	subst:pl:inst:n1
+632	subst:pl:inst:n2
+633	subst:pl:inst:p1
+634	subst:pl:inst:p2
+635	subst:pl:inst:p3
+636	subst:pl:loc:f
+637	subst:pl:loc:m1
+638	subst:pl:loc:m2
+639	subst:pl:loc:m3
+640	subst:pl:loc:n1
+641	subst:pl:loc:n2
+642	subst:pl:loc:p1
+643	subst:pl:loc:p2
+644	subst:pl:loc:p3
+645	subst:pl:nom:f
+646	subst:pl:nom:m1
+647	subst:pl:nom:m2
+648	subst:pl:nom:m3
+649	subst:pl:nom:n1
+650	subst:pl:nom:n2
+651	subst:pl:nom:p1
+652	subst:pl:nom:p2
+653	subst:pl:nom:p3
+654	subst:pl:voc:f
+655	subst:pl:voc:m1
+656	subst:pl:voc:m2
+657	subst:pl:voc:m3
+658	subst:pl:voc:n1
+659	subst:pl:voc:n2
+660	subst:pl:voc:p1
+661	subst:pl:voc:p2
+662	subst:pl:voc:p3
+663	subst:sg:acc:f
+664	subst:sg:acc:m1
+665	subst:sg:acc:m2
+666	subst:sg:acc:m3
+667	subst:sg:acc:n1
+668	subst:sg:acc:n2
+669	subst:sg:dat:f
+670	subst:sg:dat:m1
+671	subst:sg:dat:m2
+672	subst:sg:dat:m3
+673	subst:sg:dat:n1
+674	subst:sg:dat:n2
+675	subst:sg:gen:f
+676	subst:sg:gen:m1
+677	subst:sg:gen:m2
+678	subst:sg:gen:m3
+679	subst:sg:gen:n1
+680	subst:sg:gen:n2
+681	subst:sg:inst:f
+682	subst:sg:inst:m1
+683	subst:sg:inst:m2
+684	subst:sg:inst:m3
+685	subst:sg:inst:n1
+686	subst:sg:inst:n2
+687	subst:sg:loc:f
+688	subst:sg:loc:m1
+689	subst:sg:loc:m2
+690	subst:sg:loc:m3
+691	subst:sg:loc:n1
+692	subst:sg:loc:n2
+693	subst:sg:nom:f
+694	subst:sg:nom:m1
+695	subst:sg:nom:m2
+696	subst:sg:nom:m3
+697	subst:sg:nom:n1
+698	subst:sg:nom:n2
+699	subst:sg:voc:f
+700	subst:sg:voc:m1
+701	subst:sg:voc:m2
+702	subst:sg:voc:m3
+703	subst:sg:voc:n1
+704	subst:sg:voc:n2
+705	winien:pl:m1.p1:imperf
+706	winien:pl:m1.p1:pri:imperf
+707	winien:pl:m1.p1:sec:imperf
+708	winien:pl:m1.p1:ter:imperf
+709	winien:pl:m2.m3.f.n1.n2.p2.p3:imperf
+710	winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+711	winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+712	winien:sg:f:imperf
+713	winien:sg:f:pri:imperf
+714	winien:sg:f:sec:imperf
+715	winien:sg:f:ter:imperf
+716	winien:sg:m1.m2.m3:imperf
+717	winien:sg:m1.m2.m3:pri:imperf
+718	winien:sg:m1.m2.m3:sec:imperf
+719	winien:sg:m1.m2.m3:ter:imperf
+720	winien:sg:n1.n2:imperf
+721	winien:sg:n1.n2:pri:imperf
+722	winien:sg:n1.n2:sec:imperf
+723	winien:sg:n1.n2:ter:imperf
diff --git a/tests/generator/test_digits/ARGS b/tests/generator/test_digits/ARGS
new file mode 100644
index 0000000..4fd99ea
--- /dev/null
+++ b/tests/generator/test_digits/ARGS
@@ -0,0 +1 @@
+--aggl permissive
diff --git a/tests/generator/test_digits/dictionary.tab b/tests/generator/test_digits/dictionary.tab
new file mode 100644
index 0000000..cfd1767
--- /dev/null
+++ b/tests/generator/test_digits/dictionary.tab
@@ -0,0 +1,10 @@
+0	0	dig
+1	1	dig
+2	2	dig
+3	3	dig
+4	4	dig
+5	5	dig
+6	6	dig
+7	7	dig
+8	8	dig
+9	9	dig
diff --git a/tests/generator/test_digits/input.txt b/tests/generator/test_digits/input.txt
new file mode 100644
index 0000000..af63b3c
--- /dev/null
+++ b/tests/generator/test_digits/input.txt
@@ -0,0 +1,7 @@
+1
+12
+123
+1234
+012341
+1234seasdfa
+sdfa123
diff --git a/tests/generator/test_digits/output.txt b/tests/generator/test_digits/output.txt
new file mode 100644
index 0000000..d73b352
--- /dev/null
+++ b/tests/generator/test_digits/output.txt
@@ -0,0 +1,8 @@
+[1,1,dig,_,_]
+[12,12,dig,_,_]
+[123,123,dig,_,_]
+[1234,1234,dig,_,_]
+[012341,012341,dig,_,_]
+[1234seasdfa,1234seasdfa,ign,_,_]
+[sdfa123,sdfa123,ign,_,_]
+
diff --git a/tests/generator/test_digits/segmentation.dat b/tests/generator/test_digits/segmentation.dat
new file mode 100644
index 0000000..4bac5b3
--- /dev/null
+++ b/tests/generator/test_digits/segmentation.dat
@@ -0,0 +1,47 @@
+[options]
+aggl=strict permissive isolated
+praet=split composite
+
+[combinations]
+#define wsz_interp (interp|kropka|przecinek|dywiz)*
+
+#define moze_interp(segmenty) wsz_interp segmenty wsz_interp
+
+# Segmenty występujące samodzielnie:
+#
+# domyślny typ segmentu samodzielnego:
+moze_interp(samodz)
+
+# Pojedyncze znaki interpunkcyjne
+moze_interp(interp|kropka|przecinek|dywiz)
+
+# Liczba zapisana jako ciąg cyfr:
+moze_interp( dig>* dig )
+
+[segment types]
+interp
+kropka
+przecinek
+dywiz
+dig
+samodz
+
+[lexemes]
+kropka	.:interp
+przecinek	,:interp
+dywiz	-:interp
+
+[tags]
+dig	dig
+interp	interp
+samodz	%
+
+[separator chars]
+# ,
+44
+
+# .
+46
+
+# ;
+59
diff --git a/tests/generator/test_digits/tagset.dat b/tests/generator/test_digits/tagset.dat
new file mode 100644
index 0000000..aaa55af
--- /dev/null
+++ b/tests/generator/test_digits/tagset.dat
@@ -0,0 +1,728 @@
+#!MORFEUSZ-TAGSET 0.1
+
+[TAGS]
+
+0	ign
+1	sp
+2	adja
+3	adjc
+4	adjp
+5	adj:pl:acc:m1.p1:com
+6	adj:pl:acc:m1.p1:pos
+7	adj:pl:acc:m1.p1:sup
+8	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com
+9	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos
+10	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup
+11	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+12	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+13	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+14	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+15	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+16	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+17	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+18	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+19	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+20	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+21	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+22	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+23	adj:pl:nom:m1.p1:pos
+24	adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos
+25	adj:pl:nom.voc:m1.p1:com
+26	adj:pl:nom.voc:m1.p1:pos
+27	adj:pl:nom.voc:m1.p1:sup
+28	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com
+29	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos
+30	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup
+31	adj:sg:acc:f:com
+32	adj:sg:acc:f:pos
+33	adj:sg:acc:f:sup
+34	adj:sg:acc:m1.m2:com
+35	adj:sg:acc:m1.m2:pos
+36	adj:sg:acc:m1.m2:sup
+37	adj:sg:acc:m3:com
+38	adj:sg:acc:m3:pos
+39	adj:sg:acc:m3:sup
+40	adj:sg:acc:n1.n2:com
+41	adj:sg:acc:n1.n2:pos
+42	adj:sg:acc:n1.n2:sup
+43	adj:sg:dat:f:com
+44	adj:sg:dat:f:pos
+45	adj:sg:dat:f:sup
+46	adj:sg:dat:m1.m2.m3.n1.n2:com
+47	adj:sg:dat:m1.m2.m3.n1.n2:pos
+48	adj:sg:dat:m1.m2.m3.n1.n2:sup
+49	adj:sg:gen:f:com
+50	adj:sg:gen:f:pos
+51	adj:sg:gen:f:sup
+52	adj:sg:gen:m1.m2.m3.n1.n2:com
+53	adj:sg:gen:m1.m2.m3.n1.n2:pos
+54	adj:sg:gen:m1.m2.m3.n1.n2:sup
+55	adj:sg:inst:f:com
+56	adj:sg:inst:f:pos
+57	adj:sg:inst:f:sup
+58	adj:sg:inst:m1.m2.m3.n1.n2:com
+59	adj:sg:inst:m1.m2.m3.n1.n2:pos
+60	adj:sg:inst:m1.m2.m3.n1.n2:sup
+61	adj:sg:loc:f:com
+62	adj:sg:loc:f:pos
+63	adj:sg:loc:f:sup
+64	adj:sg:loc:m1.m2.m3.n1.n2:com
+65	adj:sg:loc:m1.m2.m3.n1.n2:pos
+66	adj:sg:loc:m1.m2.m3.n1.n2:sup
+67	adj:sg:nom:f:pos
+68	adj:sg:nom:m1.m2.m3:pos
+69	adj:sg:nom:n1.n2:pos
+70	adj:sg:nom.voc:f:com
+71	adj:sg:nom.voc:f:pos
+72	adj:sg:nom.voc:f:sup
+73	adj:sg:nom.voc:m1.m2.m3:com
+74	adj:sg:nom.voc:m1.m2.m3:pos
+75	adj:sg:nom.voc:m1.m2.m3:sup
+76	adj:sg:nom.voc:n1.n2:com
+77	adj:sg:nom.voc:n1.n2:pos
+78	adj:sg:nom.voc:n1.n2:sup
+79	adv
+80	adv:com
+81	adv:pos
+82	adv:sup
+83	aglt:pl:pri:imperf:nwok
+84	aglt:pl:pri:imperf:wok
+85	aglt:pl:sec:imperf:nwok
+86	aglt:pl:sec:imperf:wok
+87	aglt:sg:pri:imperf:nwok
+88	aglt:sg:pri:imperf:wok
+89	aglt:sg:sec:imperf:nwok
+90	aglt:sg:sec:imperf:wok
+91	bedzie:pl:pri:imperf
+92	bedzie:pl:sec:imperf
+93	bedzie:pl:ter:imperf
+94	bedzie:sg:pri:imperf
+95	bedzie:sg:sec:imperf
+96	bedzie:sg:ter:imperf
+97	brev:pun
+98	burk
+99	comp
+100	cond:pl:m1.p1:pri:imperf
+101	cond:pl:m1.p1:pri:imperf.perf
+102	cond:pl:m1.p1:pri:perf
+103	cond:pl:m1.p1:sec:imperf
+104	cond:pl:m1.p1:sec:imperf.perf
+105	cond:pl:m1.p1:sec:perf
+106	cond:pl:m1.p1:ter:imperf
+107	cond:pl:m1.p1:ter:imperf.perf
+108	cond:pl:m1.p1:ter:perf
+109	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+110	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+111	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+112	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+113	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+114	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+115	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+116	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+117	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+118	cond:sg:f:pri:imperf
+119	cond:sg:f:pri:imperf.perf
+120	cond:sg:f:pri:perf
+121	cond:sg:f:sec:imperf
+122	cond:sg:f:sec:imperf.perf
+123	cond:sg:f:sec:perf
+124	cond:sg:f:ter:imperf
+125	cond:sg:f:ter:imperf.perf
+126	cond:sg:f:ter:perf
+127	cond:sg:m1.m2.m3:pri:imperf
+128	cond:sg:m1.m2.m3:pri:imperf.perf
+129	cond:sg:m1.m2.m3:pri:perf
+130	cond:sg:m1.m2.m3:sec:imperf
+131	cond:sg:m1.m2.m3:sec:imperf.perf
+132	cond:sg:m1.m2.m3:sec:perf
+133	cond:sg:m1.m2.m3:ter:imperf
+134	cond:sg:m1.m2.m3:ter:imperf.perf
+135	cond:sg:m1.m2.m3:ter:perf
+136	cond:sg:n1.n2:imperf
+137	cond:sg:n1.n2:imperf.perf
+138	cond:sg:n1.n2:perf
+139	cond:sg:n1.n2:pri:imperf
+140	cond:sg:n1.n2:pri:imperf.perf
+141	cond:sg:n1.n2:pri:perf
+142	cond:sg:n1.n2:sec:imperf
+143	cond:sg:n1.n2:sec:imperf.perf
+144	cond:sg:n1.n2:sec:perf
+145	cond:sg:n1.n2:ter:imperf
+146	cond:sg:n1.n2:ter:imperf.perf
+147	cond:sg:n1.n2:ter:perf
+148	conj
+149	depr:pl:nom:m2
+150	depr:pl:voc:m2
+151	dig
+152	emoticon
+153	fin:pl:pri:imperf
+154	fin:pl:pri:imperf.perf
+155	fin:pl:pri:perf
+156	fin:pl:sec:imperf
+157	fin:pl:sec:imperf.perf
+158	fin:pl:sec:perf
+159	fin:pl:ter:imperf
+160	fin:pl:ter:imperf.perf
+161	fin:pl:ter:perf
+162	fin:sg:pri:imperf
+163	fin:sg:pri:imperf.perf
+164	fin:sg:pri:perf
+165	fin:sg:sec:imperf
+166	fin:sg:sec:imperf.perf
+167	fin:sg:sec:perf
+168	fin:sg:ter:imperf
+169	fin:sg:ter:imperf.perf
+170	fin:sg:ter:perf
+171	ger:pl:dat.loc:n2:imperf:aff
+172	ger:pl:dat.loc:n2:imperf:neg
+173	ger:pl:dat.loc:n2:imperf.perf:aff
+174	ger:pl:dat.loc:n2:imperf.perf:neg
+175	ger:pl:dat.loc:n2:perf:aff
+176	ger:pl:dat.loc:n2:perf:neg
+177	ger:pl:gen:n2:imperf:aff
+178	ger:pl:gen:n2:imperf:neg
+179	ger:pl:gen:n2:imperf.perf:aff
+180	ger:pl:gen:n2:imperf.perf:neg
+181	ger:pl:gen:n2:perf:aff
+182	ger:pl:gen:n2:perf:neg
+183	ger:pl:inst:n2:imperf:aff
+184	ger:pl:inst:n2:imperf:neg
+185	ger:pl:inst:n2:imperf.perf:aff
+186	ger:pl:inst:n2:imperf.perf:neg
+187	ger:pl:inst:n2:perf:aff
+188	ger:pl:inst:n2:perf:neg
+189	ger:pl:nom.acc:n2:imperf:aff
+190	ger:pl:nom.acc:n2:imperf:neg
+191	ger:pl:nom.acc:n2:imperf.perf:aff
+192	ger:pl:nom.acc:n2:imperf.perf:neg
+193	ger:pl:nom.acc:n2:perf:aff
+194	ger:pl:nom.acc:n2:perf:neg
+195	ger:sg:dat.loc:n2:imperf:aff
+196	ger:sg:dat.loc:n2:imperf:neg
+197	ger:sg:dat.loc:n2:imperf.perf:aff
+198	ger:sg:dat.loc:n2:imperf.perf:neg
+199	ger:sg:dat.loc:n2:perf:aff
+200	ger:sg:dat.loc:n2:perf:neg
+201	ger:sg:gen:n2:imperf:aff
+202	ger:sg:gen:n2:imperf:neg
+203	ger:sg:gen:n2:imperf.perf:aff
+204	ger:sg:gen:n2:imperf.perf:neg
+205	ger:sg:gen:n2:perf:aff
+206	ger:sg:gen:n2:perf:neg
+207	ger:sg:inst:n2:imperf:aff
+208	ger:sg:inst:n2:imperf:neg
+209	ger:sg:inst:n2:imperf.perf:aff
+210	ger:sg:inst:n2:imperf.perf:neg
+211	ger:sg:inst:n2:perf:aff
+212	ger:sg:inst:n2:perf:neg
+213	ger:sg:nom.acc:n2:imperf:aff
+214	ger:sg:nom.acc:n2:imperf:neg
+215	ger:sg:nom.acc:n2:imperf.perf:aff
+216	ger:sg:nom.acc:n2:imperf.perf:neg
+217	ger:sg:nom.acc:n2:perf:aff
+218	ger:sg:nom.acc:n2:perf:neg
+219	imps:imperf
+220	imps:imperf.perf
+221	imps:perf
+222	impt:pl:pri:imperf
+223	impt:pl:pri:imperf.perf
+224	impt:pl:pri:perf
+225	impt:pl:sec:imperf
+226	impt:pl:sec:imperf.perf
+227	impt:pl:sec:perf
+228	impt:sg:sec:imperf
+229	impt:sg:sec:imperf.perf
+230	impt:sg:sec:perf
+231	inf:imperf
+232	inf:imperf.perf
+233	inf:perf
+234	interj
+235	interp
+236	naj
+237	nie
+238	num:comp
+239	num:pl:acc:m1:rec
+240	num:pl:dat.loc:n1.p1.p2:congr.rec
+241	num:pl:dat:m1.m2.m3.n2.f:congr
+242	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+243	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr
+244	num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr
+245	num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+246	num:pl:gen.loc:m1.m2.m3.n2.f:congr
+247	num:pl:gen:n1.p1.p2:rec
+248	num:pl:inst:f:congr
+249	num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr
+250	num:pl:inst:m1.m2.m3.f.n2:congr
+251	num:pl:inst:m1.m2.m3.n2:congr
+252	num:pl:inst:m1.m2.m3.n2.f:congr
+253	num:pl:inst:n1.p1.p2:rec
+254	num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec
+255	num:pl:nom.acc.voc:f:congr
+256	num:pl:nom.acc.voc:m1:rec
+257	num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec
+258	num:pl:nom.acc.voc:m2.m3.f.n2:rec
+259	num:pl:nom.acc.voc:m2.m3.n2:congr
+260	num:pl:nom.acc.voc:m2.m3.n2.f:congr
+261	num:pl:nom.acc.voc:n1.p1.p2:rec
+262	num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec
+263	num:pl:nom.voc:m1:congr
+264	num:pl:nom.voc:m1:rec
+265	num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec
+266	num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec
+267	pact:pl:acc:m1.p1:imperf:aff
+268	pact:pl:acc:m1.p1:imperf:neg
+269	pact:pl:acc:m1.p1:imperf.perf:aff
+270	pact:pl:acc:m1.p1:imperf.perf:neg
+271	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+272	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+273	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+274	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+275	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+276	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+277	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+278	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+279	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+280	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+281	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+282	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+283	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+284	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+285	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+286	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+287	pact:pl:nom.voc:m1.p1:imperf:aff
+288	pact:pl:nom.voc:m1.p1:imperf:neg
+289	pact:pl:nom.voc:m1.p1:imperf.perf:aff
+290	pact:pl:nom.voc:m1.p1:imperf.perf:neg
+291	pact:sg:acc.inst:f:imperf:aff
+292	pact:sg:acc.inst:f:imperf:neg
+293	pact:sg:acc.inst:f:imperf.perf:aff
+294	pact:sg:acc.inst:f:imperf.perf:neg
+295	pact:sg:acc:m1.m2:imperf:aff
+296	pact:sg:acc:m1.m2:imperf:neg
+297	pact:sg:acc:m1.m2:imperf.perf:aff
+298	pact:sg:acc:m1.m2:imperf.perf:neg
+299	pact:sg:acc:m3:imperf:aff
+300	pact:sg:acc:m3:imperf:neg
+301	pact:sg:acc:m3:imperf.perf:aff
+302	pact:sg:acc:m3:imperf.perf:neg
+303	pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+304	pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+305	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+306	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+307	pact:sg:gen.dat.loc:f:imperf:aff
+308	pact:sg:gen.dat.loc:f:imperf:neg
+309	pact:sg:gen.dat.loc:f:imperf.perf:aff
+310	pact:sg:gen.dat.loc:f:imperf.perf:neg
+311	pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+312	pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+313	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+314	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+315	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+316	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+317	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+318	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+319	pact:sg:nom.acc.voc:n1.n2:imperf:aff
+320	pact:sg:nom.acc.voc:n1.n2:imperf:neg
+321	pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+322	pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+323	pact:sg:nom.voc:f:imperf:aff
+324	pact:sg:nom.voc:f:imperf:neg
+325	pact:sg:nom.voc:f:imperf.perf:aff
+326	pact:sg:nom.voc:f:imperf.perf:neg
+327	pact:sg:nom.voc:m1.m2.m3:imperf:aff
+328	pact:sg:nom.voc:m1.m2.m3:imperf:neg
+329	pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+330	pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+331	pant:perf
+332	pcon:imperf
+333	ppas:pl:acc:m1.p1:imperf:aff
+334	ppas:pl:acc:m1.p1:imperf:neg
+335	ppas:pl:acc:m1.p1:imperf.perf:aff
+336	ppas:pl:acc:m1.p1:imperf.perf:neg
+337	ppas:pl:acc:m1.p1:perf:aff
+338	ppas:pl:acc:m1.p1:perf:neg
+339	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+340	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+341	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+342	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+343	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+344	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+345	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+346	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+347	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+348	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+349	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+350	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+351	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+352	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+353	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+354	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+355	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+356	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+357	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+358	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+359	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+360	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+361	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff
+362	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg
+363	ppas:pl:nom.voc:m1.p1:imperf:aff
+364	ppas:pl:nom.voc:m1.p1:imperf:neg
+365	ppas:pl:nom.voc:m1.p1:imperf.perf:aff
+366	ppas:pl:nom.voc:m1.p1:imperf.perf:neg
+367	ppas:pl:nom.voc:m1.p1:perf:aff
+368	ppas:pl:nom.voc:m1.p1:perf:neg
+369	ppas:sg:acc.inst:f:imperf:aff
+370	ppas:sg:acc.inst:f:imperf:neg
+371	ppas:sg:acc.inst:f:imperf.perf:aff
+372	ppas:sg:acc.inst:f:imperf.perf:neg
+373	ppas:sg:acc.inst:f:perf:aff
+374	ppas:sg:acc.inst:f:perf:neg
+375	ppas:sg:acc:m1.m2:imperf:aff
+376	ppas:sg:acc:m1.m2:imperf:neg
+377	ppas:sg:acc:m1.m2:imperf.perf:aff
+378	ppas:sg:acc:m1.m2:imperf.perf:neg
+379	ppas:sg:acc:m1.m2:perf:aff
+380	ppas:sg:acc:m1.m2:perf:neg
+381	ppas:sg:acc:m3:imperf:aff
+382	ppas:sg:acc:m3:imperf:neg
+383	ppas:sg:acc:m3:imperf.perf:aff
+384	ppas:sg:acc:m3:imperf.perf:neg
+385	ppas:sg:acc:m3:perf:aff
+386	ppas:sg:acc:m3:perf:neg
+387	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+388	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+389	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+390	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+391	ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff
+392	ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg
+393	ppas:sg:gen.dat.loc:f:imperf:aff
+394	ppas:sg:gen.dat.loc:f:imperf:neg
+395	ppas:sg:gen.dat.loc:f:imperf.perf:aff
+396	ppas:sg:gen.dat.loc:f:imperf.perf:neg
+397	ppas:sg:gen.dat.loc:f:perf:aff
+398	ppas:sg:gen.dat.loc:f:perf:neg
+399	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+400	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+401	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+402	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+403	ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff
+404	ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg
+405	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+406	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+407	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+408	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+409	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff
+410	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg
+411	ppas:sg:nom.acc.voc:n1.n2:imperf:aff
+412	ppas:sg:nom.acc.voc:n1.n2:imperf:neg
+413	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+414	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+415	ppas:sg:nom.acc.voc:n1.n2:perf:aff
+416	ppas:sg:nom.acc.voc:n1.n2:perf:neg
+417	ppas:sg:nom.voc:f:imperf:aff
+418	ppas:sg:nom.voc:f:imperf:neg
+419	ppas:sg:nom.voc:f:imperf.perf:aff
+420	ppas:sg:nom.voc:f:imperf.perf:neg
+421	ppas:sg:nom.voc:f:perf:aff
+422	ppas:sg:nom.voc:f:perf:neg
+423	ppas:sg:nom.voc:m1.m2.m3:imperf:aff
+424	ppas:sg:nom.voc:m1.m2.m3:imperf:neg
+425	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+426	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+427	ppas:sg:nom.voc:m1.m2.m3:perf:aff
+428	ppas:sg:nom.voc:m1.m2.m3:perf:neg
+429	ppron12:pl:acc:_:pri
+430	ppron12:pl:acc:_:sec
+431	ppron12:pl:dat:_:pri
+432	ppron12:pl:dat:_:sec
+433	ppron12:pl:gen:_:pri
+434	ppron12:pl:gen:_:sec
+435	ppron12:pl:inst:_:pri
+436	ppron12:pl:inst:_:sec
+437	ppron12:pl:loc:_:pri
+438	ppron12:pl:loc:_:sec
+439	ppron12:pl:nom:_:pri
+440	ppron12:pl:nom:_:sec
+441	ppron12:pl:voc:_:pri
+442	ppron12:pl:voc:_:sec
+443	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc
+444	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc
+445	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc
+446	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc
+447	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc
+448	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc
+449	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc
+450	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc
+451	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc
+452	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc
+453	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc
+454	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc
+455	ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri
+456	ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec
+457	ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri
+458	ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec
+459	ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri
+460	ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec
+461	ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec
+462	ppron3:pl:acc:m1.p1:ter:_:npraep
+463	ppron3:pl:acc:m1.p1:ter:_:praep
+464	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep
+465	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep
+466	ppron3:pl:dat:_:ter:_:npraep
+467	ppron3:pl:dat:_:ter:_:praep
+468	ppron3:pl:gen:_:ter:_:npraep
+469	ppron3:pl:gen:_:ter:_:praep
+470	ppron3:pl:inst:_:ter:_:_
+471	ppron3:pl:loc:_:ter:_:_
+472	ppron3:pl:nom:m1.p1:ter:_:_
+473	ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_
+474	ppron3:sg:acc:f:ter:_:npraep
+475	ppron3:sg:acc:f:ter:_:praep
+476	ppron3:sg:acc:m1.m2.m3:ter:akc:npraep
+477	ppron3:sg:acc:m1.m2.m3:ter:akc:praep
+478	ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep
+479	ppron3:sg:acc:m1.m2.m3:ter:nakc:praep
+480	ppron3:sg:acc:n1.n2:ter:_:npraep
+481	ppron3:sg:acc:n1.n2:ter:_:praep
+482	ppron3:sg:dat:f:ter:_:npraep
+483	ppron3:sg:dat:f:ter:_:praep
+484	ppron3:sg:dat:m1.m2.m3:ter:akc:npraep
+485	ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep
+486	ppron3:sg:dat:m1.m2.m3:ter:_:praep
+487	ppron3:sg:dat:n1.n2:ter:akc:npraep
+488	ppron3:sg:dat:n1.n2:ter:nakc:npraep
+489	ppron3:sg:dat:n1.n2:ter:_:praep
+490	ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
+491	ppron3:sg:gen:f:ter:_:npraep
+492	ppron3:sg:gen:f:ter:_:praep
+493	ppron3:sg:gen:m1.m2.m3:ter:akc:npraep
+494	ppron3:sg:gen:m1.m2.m3:ter:akc:praep
+495	ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep
+496	ppron3:sg:gen:m1.m2.m3:ter:nakc:praep
+497	ppron3:sg:gen:n1.n2:ter:akc:npraep
+498	ppron3:sg:gen:n1.n2:ter:nakc:npraep
+499	ppron3:sg:gen:n1.n2:ter:_:praep
+500	ppron3:sg:inst:f:ter:_:praep
+501	ppron3:sg:inst:m1.m2.m3:ter:_:_
+502	ppron3:sg:inst:n1.n2:ter:_:_
+503	ppron3:sg:loc:f:ter:_:_
+504	ppron3:sg:loc:m1.m2.m3:ter:_:_
+505	ppron3:sg:loc:n1.n2:ter:_:_
+506	ppron3:sg:nom:f:ter:_:_
+507	ppron3:sg:nom:m1.m2.m3:ter:_:_
+508	ppron3:sg:nom:n1.n2:ter:_:_
+509	praet:pl:m1.p1:imperf
+510	praet:pl:m1.p1:imperf.perf
+511	praet:pl:m1.p1:perf
+512	praet:pl:m1.p1:pri:imperf
+513	praet:pl:m1.p1:pri:imperf.perf
+514	praet:pl:m1.p1:pri:perf
+515	praet:pl:m1.p1:sec:imperf
+516	praet:pl:m1.p1:sec:imperf.perf
+517	praet:pl:m1.p1:sec:perf
+518	praet:pl:m1.p1:ter:imperf
+519	praet:pl:m1.p1:ter:imperf.perf
+520	praet:pl:m1.p1:ter:perf
+521	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf
+522	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf
+523	praet:pl:m2.m3.f.n1.n2.p2.p3:perf
+524	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+525	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+526	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+527	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+528	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+529	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+530	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+531	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+532	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+533	praet:sg:f:imperf
+534	praet:sg:f:imperf.perf
+535	praet:sg:f:perf
+536	praet:sg:f:pri:imperf
+537	praet:sg:f:pri:imperf.perf
+538	praet:sg:f:pri:perf
+539	praet:sg:f:sec:imperf
+540	praet:sg:f:sec:imperf.perf
+541	praet:sg:f:sec:perf
+542	praet:sg:f:ter:imperf
+543	praet:sg:f:ter:imperf.perf
+544	praet:sg:f:ter:perf
+545	praet:sg:m1.m2.m3:imperf
+546	praet:sg:m1.m2.m3:imperf:agl
+547	praet:sg:m1.m2.m3:imperf:nagl
+548	praet:sg:m1.m2.m3:imperf.perf
+549	praet:sg:m1.m2.m3:perf
+550	praet:sg:m1.m2.m3:perf:agl
+551	praet:sg:m1.m2.m3:perf:nagl
+552	praet:sg:m1.m2.m3:pri:imperf
+553	praet:sg:m1.m2.m3:pri:imperf.perf
+554	praet:sg:m1.m2.m3:pri:perf
+555	praet:sg:m1.m2.m3:sec:imperf
+556	praet:sg:m1.m2.m3:sec:imperf.perf
+557	praet:sg:m1.m2.m3:sec:perf
+558	praet:sg:m1.m2.m3:ter:imperf
+559	praet:sg:m1.m2.m3:ter:imperf.perf
+560	praet:sg:m1.m2.m3:ter:perf
+561	praet:sg:n1.n2:imperf
+562	praet:sg:n1.n2:imperf.perf
+563	praet:sg:n1.n2:perf
+564	praet:sg:n1.n2:pri:imperf
+565	praet:sg:n1.n2:pri:imperf.perf
+566	praet:sg:n1.n2:pri:perf
+567	praet:sg:n1.n2:sec:imperf
+568	praet:sg:n1.n2:sec:imperf.perf
+569	praet:sg:n1.n2:sec:perf
+570	praet:sg:n1.n2:ter:imperf
+571	praet:sg:n1.n2:ter:imperf.perf
+572	praet:sg:n1.n2:ter:perf
+573	pred
+574	prefa
+575	prefppas
+576	prefs
+577	prefv
+578	prep:acc
+579	prep:acc:nwok
+580	prep:acc:wok
+581	prep:dat
+582	prep:gen
+583	prep:gen:nwok
+584	prep:gen:wok
+585	prep:inst
+586	prep:inst:nwok
+587	prep:inst:wok
+588	prep:loc
+589	prep:loc:nwok
+590	prep:loc:wok
+591	prep:nom
+592	qub
+593	romandig
+594	siebie:acc
+595	siebie:dat
+596	siebie:gen
+597	siebie:inst
+598	siebie:loc
+599	substa
+600	subst:pl:acc:f
+601	subst:pl:acc:m1
+602	subst:pl:acc:m2
+603	subst:pl:acc:m3
+604	subst:pl:acc:n1
+605	subst:pl:acc:n2
+606	subst:pl:acc:p1
+607	subst:pl:acc:p2
+608	subst:pl:acc:p3
+609	subst:pl:dat:f
+610	subst:pl:dat:m1
+611	subst:pl:dat:m2
+612	subst:pl:dat:m3
+613	subst:pl:dat:n1
+614	subst:pl:dat:n2
+615	subst:pl:dat:p1
+616	subst:pl:dat:p2
+617	subst:pl:dat:p3
+618	subst:pl:gen:f
+619	subst:pl:gen:m1
+620	subst:pl:gen:m2
+621	subst:pl:gen:m3
+622	subst:pl:gen:n1
+623	subst:pl:gen:n2
+624	subst:pl:gen:p1
+625	subst:pl:gen:p2
+626	subst:pl:gen:p3
+627	subst:pl:inst:f
+628	subst:pl:inst:m1
+629	subst:pl:inst:m2
+630	subst:pl:inst:m3
+631	subst:pl:inst:n1
+632	subst:pl:inst:n2
+633	subst:pl:inst:p1
+634	subst:pl:inst:p2
+635	subst:pl:inst:p3
+636	subst:pl:loc:f
+637	subst:pl:loc:m1
+638	subst:pl:loc:m2
+639	subst:pl:loc:m3
+640	subst:pl:loc:n1
+641	subst:pl:loc:n2
+642	subst:pl:loc:p1
+643	subst:pl:loc:p2
+644	subst:pl:loc:p3
+645	subst:pl:nom:f
+646	subst:pl:nom:m1
+647	subst:pl:nom:m2
+648	subst:pl:nom:m3
+649	subst:pl:nom:n1
+650	subst:pl:nom:n2
+651	subst:pl:nom:p1
+652	subst:pl:nom:p2
+653	subst:pl:nom:p3
+654	subst:pl:voc:f
+655	subst:pl:voc:m1
+656	subst:pl:voc:m2
+657	subst:pl:voc:m3
+658	subst:pl:voc:n1
+659	subst:pl:voc:n2
+660	subst:pl:voc:p1
+661	subst:pl:voc:p2
+662	subst:pl:voc:p3
+663	subst:sg:acc:f
+664	subst:sg:acc:m1
+665	subst:sg:acc:m2
+666	subst:sg:acc:m3
+667	subst:sg:acc:n1
+668	subst:sg:acc:n2
+669	subst:sg:dat:f
+670	subst:sg:dat:m1
+671	subst:sg:dat:m2
+672	subst:sg:dat:m3
+673	subst:sg:dat:n1
+674	subst:sg:dat:n2
+675	subst:sg:gen:f
+676	subst:sg:gen:m1
+677	subst:sg:gen:m2
+678	subst:sg:gen:m3
+679	subst:sg:gen:n1
+680	subst:sg:gen:n2
+681	subst:sg:inst:f
+682	subst:sg:inst:m1
+683	subst:sg:inst:m2
+684	subst:sg:inst:m3
+685	subst:sg:inst:n1
+686	subst:sg:inst:n2
+687	subst:sg:loc:f
+688	subst:sg:loc:m1
+689	subst:sg:loc:m2
+690	subst:sg:loc:m3
+691	subst:sg:loc:n1
+692	subst:sg:loc:n2
+693	subst:sg:nom:f
+694	subst:sg:nom:m1
+695	subst:sg:nom:m2
+696	subst:sg:nom:m3
+697	subst:sg:nom:n1
+698	subst:sg:nom:n2
+699	subst:sg:voc:f
+700	subst:sg:voc:m1
+701	subst:sg:voc:m2
+702	subst:sg:voc:m3
+703	subst:sg:voc:n1
+704	subst:sg:voc:n2
+705	winien:pl:m1.p1:imperf
+706	winien:pl:m1.p1:pri:imperf
+707	winien:pl:m1.p1:sec:imperf
+708	winien:pl:m1.p1:ter:imperf
+709	winien:pl:m2.m3.f.n1.n2.p2.p3:imperf
+710	winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+711	winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+712	winien:sg:f:imperf
+713	winien:sg:f:pri:imperf
+714	winien:sg:f:sec:imperf
+715	winien:sg:f:ter:imperf
+716	winien:sg:m1.m2.m3:imperf
+717	winien:sg:m1.m2.m3:pri:imperf
+718	winien:sg:m1.m2.m3:sec:imperf
+719	winien:sg:m1.m2.m3:ter:imperf
+720	winien:sg:n1.n2:imperf
+721	winien:sg:n1.n2:pri:imperf
+722	winien:sg:n1.n2:sec:imperf
+723	winien:sg:n1.n2:ter:imperf
diff --git a/tests/generator/test_names/ARGS b/tests/generator/test_names/ARGS
new file mode 100644
index 0000000..4fd99ea
--- /dev/null
+++ b/tests/generator/test_names/ARGS
@@ -0,0 +1 @@
+--aggl permissive
diff --git a/tests/generator/test_names/dictionary.tab b/tests/generator/test_names/dictionary.tab
new file mode 100644
index 0000000..c8960b0
--- /dev/null
+++ b/tests/generator/test_names/dictionary.tab
@@ -0,0 +1,3 @@
+czerwony	czerwony:a1	adj:sg:acc:m3:pos	pospolita	
+czerwony	czerwony:a2	adj:sg:acc:m3:pos	niepospolita	
+czerwony	czerwony:a3	adj:sg:acc:m3:pos	zażółć gęślą jaźń	
diff --git a/tests/generator/test_names/input.txt b/tests/generator/test_names/input.txt
new file mode 100644
index 0000000..94a3278
--- /dev/null
+++ b/tests/generator/test_names/input.txt
@@ -0,0 +1 @@
+czerwony
diff --git a/tests/generator/test_names/output.txt b/tests/generator/test_names/output.txt
new file mode 100644
index 0000000..8b7ebc8
--- /dev/null
+++ b/tests/generator/test_names/output.txt
@@ -0,0 +1,4 @@
+[czerwony,czerwony:a1,adj:sg:acc:m3:pos,pospolita,_
+ czerwony,czerwony:a2,adj:sg:acc:m3:pos,niepospolita,_
+ czerwony,czerwony:a3,adj:sg:acc:m3:pos,zażółć gęślą jaźń,_]
+
diff --git a/tests/generator/test_names/segmentation.dat b/tests/generator/test_names/segmentation.dat
new file mode 100644
index 0000000..4bac5b3
--- /dev/null
+++ b/tests/generator/test_names/segmentation.dat
@@ -0,0 +1,47 @@
+[options]
+aggl=strict permissive isolated
+praet=split composite
+
+[combinations]
+#define wsz_interp (interp|kropka|przecinek|dywiz)*
+
+#define moze_interp(segmenty) wsz_interp segmenty wsz_interp
+
+# Segmenty występujące samodzielnie:
+#
+# domyślny typ segmentu samodzielnego:
+moze_interp(samodz)
+
+# Pojedyncze znaki interpunkcyjne
+moze_interp(interp|kropka|przecinek|dywiz)
+
+# Liczba zapisana jako ciąg cyfr:
+moze_interp( dig>* dig )
+
+[segment types]
+interp
+kropka
+przecinek
+dywiz
+dig
+samodz
+
+[lexemes]
+kropka	.:interp
+przecinek	,:interp
+dywiz	-:interp
+
+[tags]
+dig	dig
+interp	interp
+samodz	%
+
+[separator chars]
+# ,
+44
+
+# .
+46
+
+# ;
+59
diff --git a/tests/generator/test_names/tagset.dat b/tests/generator/test_names/tagset.dat
new file mode 100644
index 0000000..aaa55af
--- /dev/null
+++ b/tests/generator/test_names/tagset.dat
@@ -0,0 +1,728 @@
+#!MORFEUSZ-TAGSET 0.1
+
+[TAGS]
+
+0	ign
+1	sp
+2	adja
+3	adjc
+4	adjp
+5	adj:pl:acc:m1.p1:com
+6	adj:pl:acc:m1.p1:pos
+7	adj:pl:acc:m1.p1:sup
+8	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com
+9	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos
+10	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup
+11	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+12	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+13	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+14	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+15	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+16	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+17	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+18	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+19	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+20	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+21	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+22	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+23	adj:pl:nom:m1.p1:pos
+24	adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos
+25	adj:pl:nom.voc:m1.p1:com
+26	adj:pl:nom.voc:m1.p1:pos
+27	adj:pl:nom.voc:m1.p1:sup
+28	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com
+29	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos
+30	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup
+31	adj:sg:acc:f:com
+32	adj:sg:acc:f:pos
+33	adj:sg:acc:f:sup
+34	adj:sg:acc:m1.m2:com
+35	adj:sg:acc:m1.m2:pos
+36	adj:sg:acc:m1.m2:sup
+37	adj:sg:acc:m3:com
+38	adj:sg:acc:m3:pos
+39	adj:sg:acc:m3:sup
+40	adj:sg:acc:n1.n2:com
+41	adj:sg:acc:n1.n2:pos
+42	adj:sg:acc:n1.n2:sup
+43	adj:sg:dat:f:com
+44	adj:sg:dat:f:pos
+45	adj:sg:dat:f:sup
+46	adj:sg:dat:m1.m2.m3.n1.n2:com
+47	adj:sg:dat:m1.m2.m3.n1.n2:pos
+48	adj:sg:dat:m1.m2.m3.n1.n2:sup
+49	adj:sg:gen:f:com
+50	adj:sg:gen:f:pos
+51	adj:sg:gen:f:sup
+52	adj:sg:gen:m1.m2.m3.n1.n2:com
+53	adj:sg:gen:m1.m2.m3.n1.n2:pos
+54	adj:sg:gen:m1.m2.m3.n1.n2:sup
+55	adj:sg:inst:f:com
+56	adj:sg:inst:f:pos
+57	adj:sg:inst:f:sup
+58	adj:sg:inst:m1.m2.m3.n1.n2:com
+59	adj:sg:inst:m1.m2.m3.n1.n2:pos
+60	adj:sg:inst:m1.m2.m3.n1.n2:sup
+61	adj:sg:loc:f:com
+62	adj:sg:loc:f:pos
+63	adj:sg:loc:f:sup
+64	adj:sg:loc:m1.m2.m3.n1.n2:com
+65	adj:sg:loc:m1.m2.m3.n1.n2:pos
+66	adj:sg:loc:m1.m2.m3.n1.n2:sup
+67	adj:sg:nom:f:pos
+68	adj:sg:nom:m1.m2.m3:pos
+69	adj:sg:nom:n1.n2:pos
+70	adj:sg:nom.voc:f:com
+71	adj:sg:nom.voc:f:pos
+72	adj:sg:nom.voc:f:sup
+73	adj:sg:nom.voc:m1.m2.m3:com
+74	adj:sg:nom.voc:m1.m2.m3:pos
+75	adj:sg:nom.voc:m1.m2.m3:sup
+76	adj:sg:nom.voc:n1.n2:com
+77	adj:sg:nom.voc:n1.n2:pos
+78	adj:sg:nom.voc:n1.n2:sup
+79	adv
+80	adv:com
+81	adv:pos
+82	adv:sup
+83	aglt:pl:pri:imperf:nwok
+84	aglt:pl:pri:imperf:wok
+85	aglt:pl:sec:imperf:nwok
+86	aglt:pl:sec:imperf:wok
+87	aglt:sg:pri:imperf:nwok
+88	aglt:sg:pri:imperf:wok
+89	aglt:sg:sec:imperf:nwok
+90	aglt:sg:sec:imperf:wok
+91	bedzie:pl:pri:imperf
+92	bedzie:pl:sec:imperf
+93	bedzie:pl:ter:imperf
+94	bedzie:sg:pri:imperf
+95	bedzie:sg:sec:imperf
+96	bedzie:sg:ter:imperf
+97	brev:pun
+98	burk
+99	comp
+100	cond:pl:m1.p1:pri:imperf
+101	cond:pl:m1.p1:pri:imperf.perf
+102	cond:pl:m1.p1:pri:perf
+103	cond:pl:m1.p1:sec:imperf
+104	cond:pl:m1.p1:sec:imperf.perf
+105	cond:pl:m1.p1:sec:perf
+106	cond:pl:m1.p1:ter:imperf
+107	cond:pl:m1.p1:ter:imperf.perf
+108	cond:pl:m1.p1:ter:perf
+109	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+110	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+111	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+112	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+113	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+114	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+115	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+116	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+117	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+118	cond:sg:f:pri:imperf
+119	cond:sg:f:pri:imperf.perf
+120	cond:sg:f:pri:perf
+121	cond:sg:f:sec:imperf
+122	cond:sg:f:sec:imperf.perf
+123	cond:sg:f:sec:perf
+124	cond:sg:f:ter:imperf
+125	cond:sg:f:ter:imperf.perf
+126	cond:sg:f:ter:perf
+127	cond:sg:m1.m2.m3:pri:imperf
+128	cond:sg:m1.m2.m3:pri:imperf.perf
+129	cond:sg:m1.m2.m3:pri:perf
+130	cond:sg:m1.m2.m3:sec:imperf
+131	cond:sg:m1.m2.m3:sec:imperf.perf
+132	cond:sg:m1.m2.m3:sec:perf
+133	cond:sg:m1.m2.m3:ter:imperf
+134	cond:sg:m1.m2.m3:ter:imperf.perf
+135	cond:sg:m1.m2.m3:ter:perf
+136	cond:sg:n1.n2:imperf
+137	cond:sg:n1.n2:imperf.perf
+138	cond:sg:n1.n2:perf
+139	cond:sg:n1.n2:pri:imperf
+140	cond:sg:n1.n2:pri:imperf.perf
+141	cond:sg:n1.n2:pri:perf
+142	cond:sg:n1.n2:sec:imperf
+143	cond:sg:n1.n2:sec:imperf.perf
+144	cond:sg:n1.n2:sec:perf
+145	cond:sg:n1.n2:ter:imperf
+146	cond:sg:n1.n2:ter:imperf.perf
+147	cond:sg:n1.n2:ter:perf
+148	conj
+149	depr:pl:nom:m2
+150	depr:pl:voc:m2
+151	dig
+152	emoticon
+153	fin:pl:pri:imperf
+154	fin:pl:pri:imperf.perf
+155	fin:pl:pri:perf
+156	fin:pl:sec:imperf
+157	fin:pl:sec:imperf.perf
+158	fin:pl:sec:perf
+159	fin:pl:ter:imperf
+160	fin:pl:ter:imperf.perf
+161	fin:pl:ter:perf
+162	fin:sg:pri:imperf
+163	fin:sg:pri:imperf.perf
+164	fin:sg:pri:perf
+165	fin:sg:sec:imperf
+166	fin:sg:sec:imperf.perf
+167	fin:sg:sec:perf
+168	fin:sg:ter:imperf
+169	fin:sg:ter:imperf.perf
+170	fin:sg:ter:perf
+171	ger:pl:dat.loc:n2:imperf:aff
+172	ger:pl:dat.loc:n2:imperf:neg
+173	ger:pl:dat.loc:n2:imperf.perf:aff
+174	ger:pl:dat.loc:n2:imperf.perf:neg
+175	ger:pl:dat.loc:n2:perf:aff
+176	ger:pl:dat.loc:n2:perf:neg
+177	ger:pl:gen:n2:imperf:aff
+178	ger:pl:gen:n2:imperf:neg
+179	ger:pl:gen:n2:imperf.perf:aff
+180	ger:pl:gen:n2:imperf.perf:neg
+181	ger:pl:gen:n2:perf:aff
+182	ger:pl:gen:n2:perf:neg
+183	ger:pl:inst:n2:imperf:aff
+184	ger:pl:inst:n2:imperf:neg
+185	ger:pl:inst:n2:imperf.perf:aff
+186	ger:pl:inst:n2:imperf.perf:neg
+187	ger:pl:inst:n2:perf:aff
+188	ger:pl:inst:n2:perf:neg
+189	ger:pl:nom.acc:n2:imperf:aff
+190	ger:pl:nom.acc:n2:imperf:neg
+191	ger:pl:nom.acc:n2:imperf.perf:aff
+192	ger:pl:nom.acc:n2:imperf.perf:neg
+193	ger:pl:nom.acc:n2:perf:aff
+194	ger:pl:nom.acc:n2:perf:neg
+195	ger:sg:dat.loc:n2:imperf:aff
+196	ger:sg:dat.loc:n2:imperf:neg
+197	ger:sg:dat.loc:n2:imperf.perf:aff
+198	ger:sg:dat.loc:n2:imperf.perf:neg
+199	ger:sg:dat.loc:n2:perf:aff
+200	ger:sg:dat.loc:n2:perf:neg
+201	ger:sg:gen:n2:imperf:aff
+202	ger:sg:gen:n2:imperf:neg
+203	ger:sg:gen:n2:imperf.perf:aff
+204	ger:sg:gen:n2:imperf.perf:neg
+205	ger:sg:gen:n2:perf:aff
+206	ger:sg:gen:n2:perf:neg
+207	ger:sg:inst:n2:imperf:aff
+208	ger:sg:inst:n2:imperf:neg
+209	ger:sg:inst:n2:imperf.perf:aff
+210	ger:sg:inst:n2:imperf.perf:neg
+211	ger:sg:inst:n2:perf:aff
+212	ger:sg:inst:n2:perf:neg
+213	ger:sg:nom.acc:n2:imperf:aff
+214	ger:sg:nom.acc:n2:imperf:neg
+215	ger:sg:nom.acc:n2:imperf.perf:aff
+216	ger:sg:nom.acc:n2:imperf.perf:neg
+217	ger:sg:nom.acc:n2:perf:aff
+218	ger:sg:nom.acc:n2:perf:neg
+219	imps:imperf
+220	imps:imperf.perf
+221	imps:perf
+222	impt:pl:pri:imperf
+223	impt:pl:pri:imperf.perf
+224	impt:pl:pri:perf
+225	impt:pl:sec:imperf
+226	impt:pl:sec:imperf.perf
+227	impt:pl:sec:perf
+228	impt:sg:sec:imperf
+229	impt:sg:sec:imperf.perf
+230	impt:sg:sec:perf
+231	inf:imperf
+232	inf:imperf.perf
+233	inf:perf
+234	interj
+235	interp
+236	naj
+237	nie
+238	num:comp
+239	num:pl:acc:m1:rec
+240	num:pl:dat.loc:n1.p1.p2:congr.rec
+241	num:pl:dat:m1.m2.m3.n2.f:congr
+242	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+243	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr
+244	num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr
+245	num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+246	num:pl:gen.loc:m1.m2.m3.n2.f:congr
+247	num:pl:gen:n1.p1.p2:rec
+248	num:pl:inst:f:congr
+249	num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr
+250	num:pl:inst:m1.m2.m3.f.n2:congr
+251	num:pl:inst:m1.m2.m3.n2:congr
+252	num:pl:inst:m1.m2.m3.n2.f:congr
+253	num:pl:inst:n1.p1.p2:rec
+254	num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec
+255	num:pl:nom.acc.voc:f:congr
+256	num:pl:nom.acc.voc:m1:rec
+257	num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec
+258	num:pl:nom.acc.voc:m2.m3.f.n2:rec
+259	num:pl:nom.acc.voc:m2.m3.n2:congr
+260	num:pl:nom.acc.voc:m2.m3.n2.f:congr
+261	num:pl:nom.acc.voc:n1.p1.p2:rec
+262	num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec
+263	num:pl:nom.voc:m1:congr
+264	num:pl:nom.voc:m1:rec
+265	num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec
+266	num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec
+267	pact:pl:acc:m1.p1:imperf:aff
+268	pact:pl:acc:m1.p1:imperf:neg
+269	pact:pl:acc:m1.p1:imperf.perf:aff
+270	pact:pl:acc:m1.p1:imperf.perf:neg
+271	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+272	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+273	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+274	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+275	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+276	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+277	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+278	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+279	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+280	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+281	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+282	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+283	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+284	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+285	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+286	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+287	pact:pl:nom.voc:m1.p1:imperf:aff
+288	pact:pl:nom.voc:m1.p1:imperf:neg
+289	pact:pl:nom.voc:m1.p1:imperf.perf:aff
+290	pact:pl:nom.voc:m1.p1:imperf.perf:neg
+291	pact:sg:acc.inst:f:imperf:aff
+292	pact:sg:acc.inst:f:imperf:neg
+293	pact:sg:acc.inst:f:imperf.perf:aff
+294	pact:sg:acc.inst:f:imperf.perf:neg
+295	pact:sg:acc:m1.m2:imperf:aff
+296	pact:sg:acc:m1.m2:imperf:neg
+297	pact:sg:acc:m1.m2:imperf.perf:aff
+298	pact:sg:acc:m1.m2:imperf.perf:neg
+299	pact:sg:acc:m3:imperf:aff
+300	pact:sg:acc:m3:imperf:neg
+301	pact:sg:acc:m3:imperf.perf:aff
+302	pact:sg:acc:m3:imperf.perf:neg
+303	pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+304	pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+305	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+306	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+307	pact:sg:gen.dat.loc:f:imperf:aff
+308	pact:sg:gen.dat.loc:f:imperf:neg
+309	pact:sg:gen.dat.loc:f:imperf.perf:aff
+310	pact:sg:gen.dat.loc:f:imperf.perf:neg
+311	pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+312	pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+313	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+314	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+315	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+316	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+317	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+318	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+319	pact:sg:nom.acc.voc:n1.n2:imperf:aff
+320	pact:sg:nom.acc.voc:n1.n2:imperf:neg
+321	pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+322	pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+323	pact:sg:nom.voc:f:imperf:aff
+324	pact:sg:nom.voc:f:imperf:neg
+325	pact:sg:nom.voc:f:imperf.perf:aff
+326	pact:sg:nom.voc:f:imperf.perf:neg
+327	pact:sg:nom.voc:m1.m2.m3:imperf:aff
+328	pact:sg:nom.voc:m1.m2.m3:imperf:neg
+329	pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+330	pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+331	pant:perf
+332	pcon:imperf
+333	ppas:pl:acc:m1.p1:imperf:aff
+334	ppas:pl:acc:m1.p1:imperf:neg
+335	ppas:pl:acc:m1.p1:imperf.perf:aff
+336	ppas:pl:acc:m1.p1:imperf.perf:neg
+337	ppas:pl:acc:m1.p1:perf:aff
+338	ppas:pl:acc:m1.p1:perf:neg
+339	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+340	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+341	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+342	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+343	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+344	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+345	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+346	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+347	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+348	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+349	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+350	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+351	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+352	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+353	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+354	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+355	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+356	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+357	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+358	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+359	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+360	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+361	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff
+362	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg
+363	ppas:pl:nom.voc:m1.p1:imperf:aff
+364	ppas:pl:nom.voc:m1.p1:imperf:neg
+365	ppas:pl:nom.voc:m1.p1:imperf.perf:aff
+366	ppas:pl:nom.voc:m1.p1:imperf.perf:neg
+367	ppas:pl:nom.voc:m1.p1:perf:aff
+368	ppas:pl:nom.voc:m1.p1:perf:neg
+369	ppas:sg:acc.inst:f:imperf:aff
+370	ppas:sg:acc.inst:f:imperf:neg
+371	ppas:sg:acc.inst:f:imperf.perf:aff
+372	ppas:sg:acc.inst:f:imperf.perf:neg
+373	ppas:sg:acc.inst:f:perf:aff
+374	ppas:sg:acc.inst:f:perf:neg
+375	ppas:sg:acc:m1.m2:imperf:aff
+376	ppas:sg:acc:m1.m2:imperf:neg
+377	ppas:sg:acc:m1.m2:imperf.perf:aff
+378	ppas:sg:acc:m1.m2:imperf.perf:neg
+379	ppas:sg:acc:m1.m2:perf:aff
+380	ppas:sg:acc:m1.m2:perf:neg
+381	ppas:sg:acc:m3:imperf:aff
+382	ppas:sg:acc:m3:imperf:neg
+383	ppas:sg:acc:m3:imperf.perf:aff
+384	ppas:sg:acc:m3:imperf.perf:neg
+385	ppas:sg:acc:m3:perf:aff
+386	ppas:sg:acc:m3:perf:neg
+387	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+388	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+389	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+390	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+391	ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff
+392	ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg
+393	ppas:sg:gen.dat.loc:f:imperf:aff
+394	ppas:sg:gen.dat.loc:f:imperf:neg
+395	ppas:sg:gen.dat.loc:f:imperf.perf:aff
+396	ppas:sg:gen.dat.loc:f:imperf.perf:neg
+397	ppas:sg:gen.dat.loc:f:perf:aff
+398	ppas:sg:gen.dat.loc:f:perf:neg
+399	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+400	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+401	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+402	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+403	ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff
+404	ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg
+405	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+406	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+407	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+408	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+409	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff
+410	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg
+411	ppas:sg:nom.acc.voc:n1.n2:imperf:aff
+412	ppas:sg:nom.acc.voc:n1.n2:imperf:neg
+413	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+414	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+415	ppas:sg:nom.acc.voc:n1.n2:perf:aff
+416	ppas:sg:nom.acc.voc:n1.n2:perf:neg
+417	ppas:sg:nom.voc:f:imperf:aff
+418	ppas:sg:nom.voc:f:imperf:neg
+419	ppas:sg:nom.voc:f:imperf.perf:aff
+420	ppas:sg:nom.voc:f:imperf.perf:neg
+421	ppas:sg:nom.voc:f:perf:aff
+422	ppas:sg:nom.voc:f:perf:neg
+423	ppas:sg:nom.voc:m1.m2.m3:imperf:aff
+424	ppas:sg:nom.voc:m1.m2.m3:imperf:neg
+425	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+426	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+427	ppas:sg:nom.voc:m1.m2.m3:perf:aff
+428	ppas:sg:nom.voc:m1.m2.m3:perf:neg
+429	ppron12:pl:acc:_:pri
+430	ppron12:pl:acc:_:sec
+431	ppron12:pl:dat:_:pri
+432	ppron12:pl:dat:_:sec
+433	ppron12:pl:gen:_:pri
+434	ppron12:pl:gen:_:sec
+435	ppron12:pl:inst:_:pri
+436	ppron12:pl:inst:_:sec
+437	ppron12:pl:loc:_:pri
+438	ppron12:pl:loc:_:sec
+439	ppron12:pl:nom:_:pri
+440	ppron12:pl:nom:_:sec
+441	ppron12:pl:voc:_:pri
+442	ppron12:pl:voc:_:sec
+443	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc
+444	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc
+445	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc
+446	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc
+447	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc
+448	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc
+449	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc
+450	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc
+451	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc
+452	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc
+453	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc
+454	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc
+455	ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri
+456	ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec
+457	ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri
+458	ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec
+459	ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri
+460	ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec
+461	ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec
+462	ppron3:pl:acc:m1.p1:ter:_:npraep
+463	ppron3:pl:acc:m1.p1:ter:_:praep
+464	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep
+465	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep
+466	ppron3:pl:dat:_:ter:_:npraep
+467	ppron3:pl:dat:_:ter:_:praep
+468	ppron3:pl:gen:_:ter:_:npraep
+469	ppron3:pl:gen:_:ter:_:praep
+470	ppron3:pl:inst:_:ter:_:_
+471	ppron3:pl:loc:_:ter:_:_
+472	ppron3:pl:nom:m1.p1:ter:_:_
+473	ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_
+474	ppron3:sg:acc:f:ter:_:npraep
+475	ppron3:sg:acc:f:ter:_:praep
+476	ppron3:sg:acc:m1.m2.m3:ter:akc:npraep
+477	ppron3:sg:acc:m1.m2.m3:ter:akc:praep
+478	ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep
+479	ppron3:sg:acc:m1.m2.m3:ter:nakc:praep
+480	ppron3:sg:acc:n1.n2:ter:_:npraep
+481	ppron3:sg:acc:n1.n2:ter:_:praep
+482	ppron3:sg:dat:f:ter:_:npraep
+483	ppron3:sg:dat:f:ter:_:praep
+484	ppron3:sg:dat:m1.m2.m3:ter:akc:npraep
+485	ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep
+486	ppron3:sg:dat:m1.m2.m3:ter:_:praep
+487	ppron3:sg:dat:n1.n2:ter:akc:npraep
+488	ppron3:sg:dat:n1.n2:ter:nakc:npraep
+489	ppron3:sg:dat:n1.n2:ter:_:praep
+490	ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
+491	ppron3:sg:gen:f:ter:_:npraep
+492	ppron3:sg:gen:f:ter:_:praep
+493	ppron3:sg:gen:m1.m2.m3:ter:akc:npraep
+494	ppron3:sg:gen:m1.m2.m3:ter:akc:praep
+495	ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep
+496	ppron3:sg:gen:m1.m2.m3:ter:nakc:praep
+497	ppron3:sg:gen:n1.n2:ter:akc:npraep
+498	ppron3:sg:gen:n1.n2:ter:nakc:npraep
+499	ppron3:sg:gen:n1.n2:ter:_:praep
+500	ppron3:sg:inst:f:ter:_:praep
+501	ppron3:sg:inst:m1.m2.m3:ter:_:_
+502	ppron3:sg:inst:n1.n2:ter:_:_
+503	ppron3:sg:loc:f:ter:_:_
+504	ppron3:sg:loc:m1.m2.m3:ter:_:_
+505	ppron3:sg:loc:n1.n2:ter:_:_
+506	ppron3:sg:nom:f:ter:_:_
+507	ppron3:sg:nom:m1.m2.m3:ter:_:_
+508	ppron3:sg:nom:n1.n2:ter:_:_
+509	praet:pl:m1.p1:imperf
+510	praet:pl:m1.p1:imperf.perf
+511	praet:pl:m1.p1:perf
+512	praet:pl:m1.p1:pri:imperf
+513	praet:pl:m1.p1:pri:imperf.perf
+514	praet:pl:m1.p1:pri:perf
+515	praet:pl:m1.p1:sec:imperf
+516	praet:pl:m1.p1:sec:imperf.perf
+517	praet:pl:m1.p1:sec:perf
+518	praet:pl:m1.p1:ter:imperf
+519	praet:pl:m1.p1:ter:imperf.perf
+520	praet:pl:m1.p1:ter:perf
+521	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf
+522	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf
+523	praet:pl:m2.m3.f.n1.n2.p2.p3:perf
+524	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+525	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+526	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+527	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+528	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+529	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+530	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+531	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+532	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+533	praet:sg:f:imperf
+534	praet:sg:f:imperf.perf
+535	praet:sg:f:perf
+536	praet:sg:f:pri:imperf
+537	praet:sg:f:pri:imperf.perf
+538	praet:sg:f:pri:perf
+539	praet:sg:f:sec:imperf
+540	praet:sg:f:sec:imperf.perf
+541	praet:sg:f:sec:perf
+542	praet:sg:f:ter:imperf
+543	praet:sg:f:ter:imperf.perf
+544	praet:sg:f:ter:perf
+545	praet:sg:m1.m2.m3:imperf
+546	praet:sg:m1.m2.m3:imperf:agl
+547	praet:sg:m1.m2.m3:imperf:nagl
+548	praet:sg:m1.m2.m3:imperf.perf
+549	praet:sg:m1.m2.m3:perf
+550	praet:sg:m1.m2.m3:perf:agl
+551	praet:sg:m1.m2.m3:perf:nagl
+552	praet:sg:m1.m2.m3:pri:imperf
+553	praet:sg:m1.m2.m3:pri:imperf.perf
+554	praet:sg:m1.m2.m3:pri:perf
+555	praet:sg:m1.m2.m3:sec:imperf
+556	praet:sg:m1.m2.m3:sec:imperf.perf
+557	praet:sg:m1.m2.m3:sec:perf
+558	praet:sg:m1.m2.m3:ter:imperf
+559	praet:sg:m1.m2.m3:ter:imperf.perf
+560	praet:sg:m1.m2.m3:ter:perf
+561	praet:sg:n1.n2:imperf
+562	praet:sg:n1.n2:imperf.perf
+563	praet:sg:n1.n2:perf
+564	praet:sg:n1.n2:pri:imperf
+565	praet:sg:n1.n2:pri:imperf.perf
+566	praet:sg:n1.n2:pri:perf
+567	praet:sg:n1.n2:sec:imperf
+568	praet:sg:n1.n2:sec:imperf.perf
+569	praet:sg:n1.n2:sec:perf
+570	praet:sg:n1.n2:ter:imperf
+571	praet:sg:n1.n2:ter:imperf.perf
+572	praet:sg:n1.n2:ter:perf
+573	pred
+574	prefa
+575	prefppas
+576	prefs
+577	prefv
+578	prep:acc
+579	prep:acc:nwok
+580	prep:acc:wok
+581	prep:dat
+582	prep:gen
+583	prep:gen:nwok
+584	prep:gen:wok
+585	prep:inst
+586	prep:inst:nwok
+587	prep:inst:wok
+588	prep:loc
+589	prep:loc:nwok
+590	prep:loc:wok
+591	prep:nom
+592	qub
+593	romandig
+594	siebie:acc
+595	siebie:dat
+596	siebie:gen
+597	siebie:inst
+598	siebie:loc
+599	substa
+600	subst:pl:acc:f
+601	subst:pl:acc:m1
+602	subst:pl:acc:m2
+603	subst:pl:acc:m3
+604	subst:pl:acc:n1
+605	subst:pl:acc:n2
+606	subst:pl:acc:p1
+607	subst:pl:acc:p2
+608	subst:pl:acc:p3
+609	subst:pl:dat:f
+610	subst:pl:dat:m1
+611	subst:pl:dat:m2
+612	subst:pl:dat:m3
+613	subst:pl:dat:n1
+614	subst:pl:dat:n2
+615	subst:pl:dat:p1
+616	subst:pl:dat:p2
+617	subst:pl:dat:p3
+618	subst:pl:gen:f
+619	subst:pl:gen:m1
+620	subst:pl:gen:m2
+621	subst:pl:gen:m3
+622	subst:pl:gen:n1
+623	subst:pl:gen:n2
+624	subst:pl:gen:p1
+625	subst:pl:gen:p2
+626	subst:pl:gen:p3
+627	subst:pl:inst:f
+628	subst:pl:inst:m1
+629	subst:pl:inst:m2
+630	subst:pl:inst:m3
+631	subst:pl:inst:n1
+632	subst:pl:inst:n2
+633	subst:pl:inst:p1
+634	subst:pl:inst:p2
+635	subst:pl:inst:p3
+636	subst:pl:loc:f
+637	subst:pl:loc:m1
+638	subst:pl:loc:m2
+639	subst:pl:loc:m3
+640	subst:pl:loc:n1
+641	subst:pl:loc:n2
+642	subst:pl:loc:p1
+643	subst:pl:loc:p2
+644	subst:pl:loc:p3
+645	subst:pl:nom:f
+646	subst:pl:nom:m1
+647	subst:pl:nom:m2
+648	subst:pl:nom:m3
+649	subst:pl:nom:n1
+650	subst:pl:nom:n2
+651	subst:pl:nom:p1
+652	subst:pl:nom:p2
+653	subst:pl:nom:p3
+654	subst:pl:voc:f
+655	subst:pl:voc:m1
+656	subst:pl:voc:m2
+657	subst:pl:voc:m3
+658	subst:pl:voc:n1
+659	subst:pl:voc:n2
+660	subst:pl:voc:p1
+661	subst:pl:voc:p2
+662	subst:pl:voc:p3
+663	subst:sg:acc:f
+664	subst:sg:acc:m1
+665	subst:sg:acc:m2
+666	subst:sg:acc:m3
+667	subst:sg:acc:n1
+668	subst:sg:acc:n2
+669	subst:sg:dat:f
+670	subst:sg:dat:m1
+671	subst:sg:dat:m2
+672	subst:sg:dat:m3
+673	subst:sg:dat:n1
+674	subst:sg:dat:n2
+675	subst:sg:gen:f
+676	subst:sg:gen:m1
+677	subst:sg:gen:m2
+678	subst:sg:gen:m3
+679	subst:sg:gen:n1
+680	subst:sg:gen:n2
+681	subst:sg:inst:f
+682	subst:sg:inst:m1
+683	subst:sg:inst:m2
+684	subst:sg:inst:m3
+685	subst:sg:inst:n1
+686	subst:sg:inst:n2
+687	subst:sg:loc:f
+688	subst:sg:loc:m1
+689	subst:sg:loc:m2
+690	subst:sg:loc:m3
+691	subst:sg:loc:n1
+692	subst:sg:loc:n2
+693	subst:sg:nom:f
+694	subst:sg:nom:m1
+695	subst:sg:nom:m2
+696	subst:sg:nom:m3
+697	subst:sg:nom:n1
+698	subst:sg:nom:n2
+699	subst:sg:voc:f
+700	subst:sg:voc:m1
+701	subst:sg:voc:m2
+702	subst:sg:voc:m3
+703	subst:sg:voc:n1
+704	subst:sg:voc:n2
+705	winien:pl:m1.p1:imperf
+706	winien:pl:m1.p1:pri:imperf
+707	winien:pl:m1.p1:sec:imperf
+708	winien:pl:m1.p1:ter:imperf
+709	winien:pl:m2.m3.f.n1.n2.p2.p3:imperf
+710	winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+711	winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+712	winien:sg:f:imperf
+713	winien:sg:f:pri:imperf
+714	winien:sg:f:sec:imperf
+715	winien:sg:f:ter:imperf
+716	winien:sg:m1.m2.m3:imperf
+717	winien:sg:m1.m2.m3:pri:imperf
+718	winien:sg:m1.m2.m3:sec:imperf
+719	winien:sg:m1.m2.m3:ter:imperf
+720	winien:sg:n1.n2:imperf
+721	winien:sg:n1.n2:pri:imperf
+722	winien:sg:n1.n2:sec:imperf
+723	winien:sg:n1.n2:ter:imperf
diff --git a/tests/generator/test_qualifiers/ARGS b/tests/generator/test_qualifiers/ARGS
new file mode 100644
index 0000000..4fd99ea
--- /dev/null
+++ b/tests/generator/test_qualifiers/ARGS
@@ -0,0 +1 @@
+--aggl permissive
diff --git a/tests/generator/test_qualifiers/dictionary.tab b/tests/generator/test_qualifiers/dictionary.tab
new file mode 100644
index 0000000..3287c7c
--- /dev/null
+++ b/tests/generator/test_qualifiers/dictionary.tab
@@ -0,0 +1,4 @@
+czerwony	czerwony:a1	adj:sg:acc:m3:pos	pospolita	niebieski
+czerwony	czerwony:a2	adj:sg:acc:m3:pos	pospolita	żółty1|żółty2
+czerwony	czerwony:a3	adj:sg:acc:m3:pos	pospolita	żółty2|żółty1
+czerwony	czerwony:a4	adj:sg:acc:m3:pos	pospolita	żółty1|żółty2|żółty3
diff --git a/tests/generator/test_qualifiers/input.txt b/tests/generator/test_qualifiers/input.txt
new file mode 100644
index 0000000..94a3278
--- /dev/null
+++ b/tests/generator/test_qualifiers/input.txt
@@ -0,0 +1 @@
+czerwony
diff --git a/tests/generator/test_qualifiers/output.txt b/tests/generator/test_qualifiers/output.txt
new file mode 100644
index 0000000..f8d2e9a
--- /dev/null
+++ b/tests/generator/test_qualifiers/output.txt
@@ -0,0 +1,5 @@
+[czerwony,czerwony:a1,adj:sg:acc:m3:pos,pospolita,niebieski
+ czerwony,czerwony:a2,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2
+ czerwony,czerwony:a3,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2
+ czerwony,czerwony:a4,adj:sg:acc:m3:pos,pospolita,żółty1|żółty2|żółty3]
+
diff --git a/tests/generator/test_qualifiers/segmentation.dat b/tests/generator/test_qualifiers/segmentation.dat
new file mode 100644
index 0000000..4bac5b3
--- /dev/null
+++ b/tests/generator/test_qualifiers/segmentation.dat
@@ -0,0 +1,47 @@
+[options]
+aggl=strict permissive isolated
+praet=split composite
+
+[combinations]
+#define wsz_interp (interp|kropka|przecinek|dywiz)*
+
+#define moze_interp(segmenty) wsz_interp segmenty wsz_interp
+
+# Segmenty występujące samodzielnie:
+#
+# domyślny typ segmentu samodzielnego:
+moze_interp(samodz)
+
+# Pojedyncze znaki interpunkcyjne
+moze_interp(interp|kropka|przecinek|dywiz)
+
+# Liczba zapisana jako ciąg cyfr:
+moze_interp( dig>* dig )
+
+[segment types]
+interp
+kropka
+przecinek
+dywiz
+dig
+samodz
+
+[lexemes]
+kropka	.:interp
+przecinek	,:interp
+dywiz	-:interp
+
+[tags]
+dig	dig
+interp	interp
+samodz	%
+
+[separator chars]
+# ,
+44
+
+# .
+46
+
+# ;
+59
diff --git a/tests/generator/test_qualifiers/tagset.dat b/tests/generator/test_qualifiers/tagset.dat
new file mode 100644
index 0000000..aaa55af
--- /dev/null
+++ b/tests/generator/test_qualifiers/tagset.dat
@@ -0,0 +1,728 @@
+#!MORFEUSZ-TAGSET 0.1
+
+[TAGS]
+
+0	ign
+1	sp
+2	adja
+3	adjc
+4	adjp
+5	adj:pl:acc:m1.p1:com
+6	adj:pl:acc:m1.p1:pos
+7	adj:pl:acc:m1.p1:sup
+8	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:com
+9	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:pos
+10	adj:pl:acc:m2.m3.f.n1.n2.p2.p3:sup
+11	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+12	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+13	adj:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+14	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+15	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+16	adj:pl:gen:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+17	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+18	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+19	adj:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+20	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:com
+21	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:pos
+22	adj:pl:loc:m1.m2.m3.f.n1.n2.p1.p2.p3:sup
+23	adj:pl:nom:m1.p1:pos
+24	adj:pl:nom:m2.m3.f.n1.n2.p2.p3:pos
+25	adj:pl:nom.voc:m1.p1:com
+26	adj:pl:nom.voc:m1.p1:pos
+27	adj:pl:nom.voc:m1.p1:sup
+28	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:com
+29	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:pos
+30	adj:pl:nom.voc:m2.m3.f.n1.n2.p2.p3:sup
+31	adj:sg:acc:f:com
+32	adj:sg:acc:f:pos
+33	adj:sg:acc:f:sup
+34	adj:sg:acc:m1.m2:com
+35	adj:sg:acc:m1.m2:pos
+36	adj:sg:acc:m1.m2:sup
+37	adj:sg:acc:m3:com
+38	adj:sg:acc:m3:pos
+39	adj:sg:acc:m3:sup
+40	adj:sg:acc:n1.n2:com
+41	adj:sg:acc:n1.n2:pos
+42	adj:sg:acc:n1.n2:sup
+43	adj:sg:dat:f:com
+44	adj:sg:dat:f:pos
+45	adj:sg:dat:f:sup
+46	adj:sg:dat:m1.m2.m3.n1.n2:com
+47	adj:sg:dat:m1.m2.m3.n1.n2:pos
+48	adj:sg:dat:m1.m2.m3.n1.n2:sup
+49	adj:sg:gen:f:com
+50	adj:sg:gen:f:pos
+51	adj:sg:gen:f:sup
+52	adj:sg:gen:m1.m2.m3.n1.n2:com
+53	adj:sg:gen:m1.m2.m3.n1.n2:pos
+54	adj:sg:gen:m1.m2.m3.n1.n2:sup
+55	adj:sg:inst:f:com
+56	adj:sg:inst:f:pos
+57	adj:sg:inst:f:sup
+58	adj:sg:inst:m1.m2.m3.n1.n2:com
+59	adj:sg:inst:m1.m2.m3.n1.n2:pos
+60	adj:sg:inst:m1.m2.m3.n1.n2:sup
+61	adj:sg:loc:f:com
+62	adj:sg:loc:f:pos
+63	adj:sg:loc:f:sup
+64	adj:sg:loc:m1.m2.m3.n1.n2:com
+65	adj:sg:loc:m1.m2.m3.n1.n2:pos
+66	adj:sg:loc:m1.m2.m3.n1.n2:sup
+67	adj:sg:nom:f:pos
+68	adj:sg:nom:m1.m2.m3:pos
+69	adj:sg:nom:n1.n2:pos
+70	adj:sg:nom.voc:f:com
+71	adj:sg:nom.voc:f:pos
+72	adj:sg:nom.voc:f:sup
+73	adj:sg:nom.voc:m1.m2.m3:com
+74	adj:sg:nom.voc:m1.m2.m3:pos
+75	adj:sg:nom.voc:m1.m2.m3:sup
+76	adj:sg:nom.voc:n1.n2:com
+77	adj:sg:nom.voc:n1.n2:pos
+78	adj:sg:nom.voc:n1.n2:sup
+79	adv
+80	adv:com
+81	adv:pos
+82	adv:sup
+83	aglt:pl:pri:imperf:nwok
+84	aglt:pl:pri:imperf:wok
+85	aglt:pl:sec:imperf:nwok
+86	aglt:pl:sec:imperf:wok
+87	aglt:sg:pri:imperf:nwok
+88	aglt:sg:pri:imperf:wok
+89	aglt:sg:sec:imperf:nwok
+90	aglt:sg:sec:imperf:wok
+91	bedzie:pl:pri:imperf
+92	bedzie:pl:sec:imperf
+93	bedzie:pl:ter:imperf
+94	bedzie:sg:pri:imperf
+95	bedzie:sg:sec:imperf
+96	bedzie:sg:ter:imperf
+97	brev:pun
+98	burk
+99	comp
+100	cond:pl:m1.p1:pri:imperf
+101	cond:pl:m1.p1:pri:imperf.perf
+102	cond:pl:m1.p1:pri:perf
+103	cond:pl:m1.p1:sec:imperf
+104	cond:pl:m1.p1:sec:imperf.perf
+105	cond:pl:m1.p1:sec:perf
+106	cond:pl:m1.p1:ter:imperf
+107	cond:pl:m1.p1:ter:imperf.perf
+108	cond:pl:m1.p1:ter:perf
+109	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+110	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+111	cond:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+112	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+113	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+114	cond:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+115	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+116	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+117	cond:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+118	cond:sg:f:pri:imperf
+119	cond:sg:f:pri:imperf.perf
+120	cond:sg:f:pri:perf
+121	cond:sg:f:sec:imperf
+122	cond:sg:f:sec:imperf.perf
+123	cond:sg:f:sec:perf
+124	cond:sg:f:ter:imperf
+125	cond:sg:f:ter:imperf.perf
+126	cond:sg:f:ter:perf
+127	cond:sg:m1.m2.m3:pri:imperf
+128	cond:sg:m1.m2.m3:pri:imperf.perf
+129	cond:sg:m1.m2.m3:pri:perf
+130	cond:sg:m1.m2.m3:sec:imperf
+131	cond:sg:m1.m2.m3:sec:imperf.perf
+132	cond:sg:m1.m2.m3:sec:perf
+133	cond:sg:m1.m2.m3:ter:imperf
+134	cond:sg:m1.m2.m3:ter:imperf.perf
+135	cond:sg:m1.m2.m3:ter:perf
+136	cond:sg:n1.n2:imperf
+137	cond:sg:n1.n2:imperf.perf
+138	cond:sg:n1.n2:perf
+139	cond:sg:n1.n2:pri:imperf
+140	cond:sg:n1.n2:pri:imperf.perf
+141	cond:sg:n1.n2:pri:perf
+142	cond:sg:n1.n2:sec:imperf
+143	cond:sg:n1.n2:sec:imperf.perf
+144	cond:sg:n1.n2:sec:perf
+145	cond:sg:n1.n2:ter:imperf
+146	cond:sg:n1.n2:ter:imperf.perf
+147	cond:sg:n1.n2:ter:perf
+148	conj
+149	depr:pl:nom:m2
+150	depr:pl:voc:m2
+151	dig
+152	emoticon
+153	fin:pl:pri:imperf
+154	fin:pl:pri:imperf.perf
+155	fin:pl:pri:perf
+156	fin:pl:sec:imperf
+157	fin:pl:sec:imperf.perf
+158	fin:pl:sec:perf
+159	fin:pl:ter:imperf
+160	fin:pl:ter:imperf.perf
+161	fin:pl:ter:perf
+162	fin:sg:pri:imperf
+163	fin:sg:pri:imperf.perf
+164	fin:sg:pri:perf
+165	fin:sg:sec:imperf
+166	fin:sg:sec:imperf.perf
+167	fin:sg:sec:perf
+168	fin:sg:ter:imperf
+169	fin:sg:ter:imperf.perf
+170	fin:sg:ter:perf
+171	ger:pl:dat.loc:n2:imperf:aff
+172	ger:pl:dat.loc:n2:imperf:neg
+173	ger:pl:dat.loc:n2:imperf.perf:aff
+174	ger:pl:dat.loc:n2:imperf.perf:neg
+175	ger:pl:dat.loc:n2:perf:aff
+176	ger:pl:dat.loc:n2:perf:neg
+177	ger:pl:gen:n2:imperf:aff
+178	ger:pl:gen:n2:imperf:neg
+179	ger:pl:gen:n2:imperf.perf:aff
+180	ger:pl:gen:n2:imperf.perf:neg
+181	ger:pl:gen:n2:perf:aff
+182	ger:pl:gen:n2:perf:neg
+183	ger:pl:inst:n2:imperf:aff
+184	ger:pl:inst:n2:imperf:neg
+185	ger:pl:inst:n2:imperf.perf:aff
+186	ger:pl:inst:n2:imperf.perf:neg
+187	ger:pl:inst:n2:perf:aff
+188	ger:pl:inst:n2:perf:neg
+189	ger:pl:nom.acc:n2:imperf:aff
+190	ger:pl:nom.acc:n2:imperf:neg
+191	ger:pl:nom.acc:n2:imperf.perf:aff
+192	ger:pl:nom.acc:n2:imperf.perf:neg
+193	ger:pl:nom.acc:n2:perf:aff
+194	ger:pl:nom.acc:n2:perf:neg
+195	ger:sg:dat.loc:n2:imperf:aff
+196	ger:sg:dat.loc:n2:imperf:neg
+197	ger:sg:dat.loc:n2:imperf.perf:aff
+198	ger:sg:dat.loc:n2:imperf.perf:neg
+199	ger:sg:dat.loc:n2:perf:aff
+200	ger:sg:dat.loc:n2:perf:neg
+201	ger:sg:gen:n2:imperf:aff
+202	ger:sg:gen:n2:imperf:neg
+203	ger:sg:gen:n2:imperf.perf:aff
+204	ger:sg:gen:n2:imperf.perf:neg
+205	ger:sg:gen:n2:perf:aff
+206	ger:sg:gen:n2:perf:neg
+207	ger:sg:inst:n2:imperf:aff
+208	ger:sg:inst:n2:imperf:neg
+209	ger:sg:inst:n2:imperf.perf:aff
+210	ger:sg:inst:n2:imperf.perf:neg
+211	ger:sg:inst:n2:perf:aff
+212	ger:sg:inst:n2:perf:neg
+213	ger:sg:nom.acc:n2:imperf:aff
+214	ger:sg:nom.acc:n2:imperf:neg
+215	ger:sg:nom.acc:n2:imperf.perf:aff
+216	ger:sg:nom.acc:n2:imperf.perf:neg
+217	ger:sg:nom.acc:n2:perf:aff
+218	ger:sg:nom.acc:n2:perf:neg
+219	imps:imperf
+220	imps:imperf.perf
+221	imps:perf
+222	impt:pl:pri:imperf
+223	impt:pl:pri:imperf.perf
+224	impt:pl:pri:perf
+225	impt:pl:sec:imperf
+226	impt:pl:sec:imperf.perf
+227	impt:pl:sec:perf
+228	impt:sg:sec:imperf
+229	impt:sg:sec:imperf.perf
+230	impt:sg:sec:perf
+231	inf:imperf
+232	inf:imperf.perf
+233	inf:perf
+234	interj
+235	interp
+236	naj
+237	nie
+238	num:comp
+239	num:pl:acc:m1:rec
+240	num:pl:dat.loc:n1.p1.p2:congr.rec
+241	num:pl:dat:m1.m2.m3.n2.f:congr
+242	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+243	num:pl:gen.dat.inst.loc:m1.m2.m3.f.n2:congr
+244	num:pl:gen.dat.loc:m1.m2.m3.n2.f:congr
+245	num:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2:congr
+246	num:pl:gen.loc:m1.m2.m3.n2.f:congr
+247	num:pl:gen:n1.p1.p2:rec
+248	num:pl:inst:f:congr
+249	num:pl:inst:m1.m2.m3.f.n1.n2.p1.p2:congr
+250	num:pl:inst:m1.m2.m3.f.n2:congr
+251	num:pl:inst:m1.m2.m3.n2:congr
+252	num:pl:inst:m1.m2.m3.n2.f:congr
+253	num:pl:inst:n1.p1.p2:rec
+254	num:pl:nom.acc:m1.m2.m3.f.n1.n2.p1.p2:rec
+255	num:pl:nom.acc.voc:f:congr
+256	num:pl:nom.acc.voc:m1:rec
+257	num:pl:nom.acc.voc:m2.m3.f.n1.n2.p1.p2:rec
+258	num:pl:nom.acc.voc:m2.m3.f.n2:rec
+259	num:pl:nom.acc.voc:m2.m3.n2:congr
+260	num:pl:nom.acc.voc:m2.m3.n2.f:congr
+261	num:pl:nom.acc.voc:n1.p1.p2:rec
+262	num:pl:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.f.n1.n2.p1.p2:rec
+263	num:pl:nom.voc:m1:congr
+264	num:pl:nom.voc:m1:rec
+265	num:sg:nom.gen.dat.inst.acc.loc.voc:f:rec
+266	num:sg:nom.gen.dat.inst.acc.loc.voc:m1.m2.m3.n1.n2:rec
+267	pact:pl:acc:m1.p1:imperf:aff
+268	pact:pl:acc:m1.p1:imperf:neg
+269	pact:pl:acc:m1.p1:imperf.perf:aff
+270	pact:pl:acc:m1.p1:imperf.perf:neg
+271	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+272	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+273	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+274	pact:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+275	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+276	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+277	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+278	pact:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+279	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+280	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+281	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+282	pact:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+283	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+284	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+285	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+286	pact:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+287	pact:pl:nom.voc:m1.p1:imperf:aff
+288	pact:pl:nom.voc:m1.p1:imperf:neg
+289	pact:pl:nom.voc:m1.p1:imperf.perf:aff
+290	pact:pl:nom.voc:m1.p1:imperf.perf:neg
+291	pact:sg:acc.inst:f:imperf:aff
+292	pact:sg:acc.inst:f:imperf:neg
+293	pact:sg:acc.inst:f:imperf.perf:aff
+294	pact:sg:acc.inst:f:imperf.perf:neg
+295	pact:sg:acc:m1.m2:imperf:aff
+296	pact:sg:acc:m1.m2:imperf:neg
+297	pact:sg:acc:m1.m2:imperf.perf:aff
+298	pact:sg:acc:m1.m2:imperf.perf:neg
+299	pact:sg:acc:m3:imperf:aff
+300	pact:sg:acc:m3:imperf:neg
+301	pact:sg:acc:m3:imperf.perf:aff
+302	pact:sg:acc:m3:imperf.perf:neg
+303	pact:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+304	pact:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+305	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+306	pact:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+307	pact:sg:gen.dat.loc:f:imperf:aff
+308	pact:sg:gen.dat.loc:f:imperf:neg
+309	pact:sg:gen.dat.loc:f:imperf.perf:aff
+310	pact:sg:gen.dat.loc:f:imperf.perf:neg
+311	pact:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+312	pact:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+313	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+314	pact:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+315	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+316	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+317	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+318	pact:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+319	pact:sg:nom.acc.voc:n1.n2:imperf:aff
+320	pact:sg:nom.acc.voc:n1.n2:imperf:neg
+321	pact:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+322	pact:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+323	pact:sg:nom.voc:f:imperf:aff
+324	pact:sg:nom.voc:f:imperf:neg
+325	pact:sg:nom.voc:f:imperf.perf:aff
+326	pact:sg:nom.voc:f:imperf.perf:neg
+327	pact:sg:nom.voc:m1.m2.m3:imperf:aff
+328	pact:sg:nom.voc:m1.m2.m3:imperf:neg
+329	pact:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+330	pact:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+331	pant:perf
+332	pcon:imperf
+333	ppas:pl:acc:m1.p1:imperf:aff
+334	ppas:pl:acc:m1.p1:imperf:neg
+335	ppas:pl:acc:m1.p1:imperf.perf:aff
+336	ppas:pl:acc:m1.p1:imperf.perf:neg
+337	ppas:pl:acc:m1.p1:perf:aff
+338	ppas:pl:acc:m1.p1:perf:neg
+339	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+340	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+341	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+342	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+343	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+344	ppas:pl:dat:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+345	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+346	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+347	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+348	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+349	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+350	ppas:pl:gen.loc:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+351	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:aff
+352	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf:neg
+353	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:aff
+354	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:imperf.perf:neg
+355	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:aff
+356	ppas:pl:inst:m1.m2.m3.f.n1.n2.p1.p2.p3:perf:neg
+357	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:aff
+358	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf:neg
+359	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:aff
+360	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:imperf.perf:neg
+361	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:aff
+362	ppas:pl:nom.acc.voc:m2.m3.f.n1.n2.p2.p3:perf:neg
+363	ppas:pl:nom.voc:m1.p1:imperf:aff
+364	ppas:pl:nom.voc:m1.p1:imperf:neg
+365	ppas:pl:nom.voc:m1.p1:imperf.perf:aff
+366	ppas:pl:nom.voc:m1.p1:imperf.perf:neg
+367	ppas:pl:nom.voc:m1.p1:perf:aff
+368	ppas:pl:nom.voc:m1.p1:perf:neg
+369	ppas:sg:acc.inst:f:imperf:aff
+370	ppas:sg:acc.inst:f:imperf:neg
+371	ppas:sg:acc.inst:f:imperf.perf:aff
+372	ppas:sg:acc.inst:f:imperf.perf:neg
+373	ppas:sg:acc.inst:f:perf:aff
+374	ppas:sg:acc.inst:f:perf:neg
+375	ppas:sg:acc:m1.m2:imperf:aff
+376	ppas:sg:acc:m1.m2:imperf:neg
+377	ppas:sg:acc:m1.m2:imperf.perf:aff
+378	ppas:sg:acc:m1.m2:imperf.perf:neg
+379	ppas:sg:acc:m1.m2:perf:aff
+380	ppas:sg:acc:m1.m2:perf:neg
+381	ppas:sg:acc:m3:imperf:aff
+382	ppas:sg:acc:m3:imperf:neg
+383	ppas:sg:acc:m3:imperf.perf:aff
+384	ppas:sg:acc:m3:imperf.perf:neg
+385	ppas:sg:acc:m3:perf:aff
+386	ppas:sg:acc:m3:perf:neg
+387	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:aff
+388	ppas:sg:dat:m1.m2.m3.n1.n2:imperf:neg
+389	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:aff
+390	ppas:sg:dat:m1.m2.m3.n1.n2:imperf.perf:neg
+391	ppas:sg:dat:m1.m2.m3.n1.n2:perf:aff
+392	ppas:sg:dat:m1.m2.m3.n1.n2:perf:neg
+393	ppas:sg:gen.dat.loc:f:imperf:aff
+394	ppas:sg:gen.dat.loc:f:imperf:neg
+395	ppas:sg:gen.dat.loc:f:imperf.perf:aff
+396	ppas:sg:gen.dat.loc:f:imperf.perf:neg
+397	ppas:sg:gen.dat.loc:f:perf:aff
+398	ppas:sg:gen.dat.loc:f:perf:neg
+399	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:aff
+400	ppas:sg:gen:m1.m2.m3.n1.n2:imperf:neg
+401	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:aff
+402	ppas:sg:gen:m1.m2.m3.n1.n2:imperf.perf:neg
+403	ppas:sg:gen:m1.m2.m3.n1.n2:perf:aff
+404	ppas:sg:gen:m1.m2.m3.n1.n2:perf:neg
+405	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:aff
+406	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf:neg
+407	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:aff
+408	ppas:sg:inst.loc:m1.m2.m3.n1.n2:imperf.perf:neg
+409	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:aff
+410	ppas:sg:inst.loc:m1.m2.m3.n1.n2:perf:neg
+411	ppas:sg:nom.acc.voc:n1.n2:imperf:aff
+412	ppas:sg:nom.acc.voc:n1.n2:imperf:neg
+413	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:aff
+414	ppas:sg:nom.acc.voc:n1.n2:imperf.perf:neg
+415	ppas:sg:nom.acc.voc:n1.n2:perf:aff
+416	ppas:sg:nom.acc.voc:n1.n2:perf:neg
+417	ppas:sg:nom.voc:f:imperf:aff
+418	ppas:sg:nom.voc:f:imperf:neg
+419	ppas:sg:nom.voc:f:imperf.perf:aff
+420	ppas:sg:nom.voc:f:imperf.perf:neg
+421	ppas:sg:nom.voc:f:perf:aff
+422	ppas:sg:nom.voc:f:perf:neg
+423	ppas:sg:nom.voc:m1.m2.m3:imperf:aff
+424	ppas:sg:nom.voc:m1.m2.m3:imperf:neg
+425	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:aff
+426	ppas:sg:nom.voc:m1.m2.m3:imperf.perf:neg
+427	ppas:sg:nom.voc:m1.m2.m3:perf:aff
+428	ppas:sg:nom.voc:m1.m2.m3:perf:neg
+429	ppron12:pl:acc:_:pri
+430	ppron12:pl:acc:_:sec
+431	ppron12:pl:dat:_:pri
+432	ppron12:pl:dat:_:sec
+433	ppron12:pl:gen:_:pri
+434	ppron12:pl:gen:_:sec
+435	ppron12:pl:inst:_:pri
+436	ppron12:pl:inst:_:sec
+437	ppron12:pl:loc:_:pri
+438	ppron12:pl:loc:_:sec
+439	ppron12:pl:nom:_:pri
+440	ppron12:pl:nom:_:sec
+441	ppron12:pl:voc:_:pri
+442	ppron12:pl:voc:_:sec
+443	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:akc
+444	ppron12:sg:acc:m1.m2.m3.f.n1.n2:pri:nakc
+445	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:akc
+446	ppron12:sg:acc:m1.m2.m3.f.n1.n2:sec:nakc
+447	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:akc
+448	ppron12:sg:dat:m1.m2.m3.f.n1.n2:pri:nakc
+449	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:akc
+450	ppron12:sg:dat:m1.m2.m3.f.n1.n2:sec:nakc
+451	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:akc
+452	ppron12:sg:gen:m1.m2.m3.f.n1.n2:pri:nakc
+453	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:akc
+454	ppron12:sg:gen:m1.m2.m3.f.n1.n2:sec:nakc
+455	ppron12:sg:inst:m1.m2.m3.f.n1.n2:pri
+456	ppron12:sg:inst:m1.m2.m3.f.n1.n2:sec
+457	ppron12:sg:loc:m1.m2.m3.f.n1.n2:pri
+458	ppron12:sg:loc:m1.m2.m3.f.n1.n2:sec
+459	ppron12:sg:nom:m1.m2.m3.f.n1.n2:pri
+460	ppron12:sg:nom:m1.m2.m3.f.n1.n2:sec
+461	ppron12:sg:voc:m1.m2.m3.f.n1.n2:sec
+462	ppron3:pl:acc:m1.p1:ter:_:npraep
+463	ppron3:pl:acc:m1.p1:ter:_:praep
+464	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:npraep
+465	ppron3:pl:acc:m2.m3.f.n1.n2.p2.p3:ter:_:praep
+466	ppron3:pl:dat:_:ter:_:npraep
+467	ppron3:pl:dat:_:ter:_:praep
+468	ppron3:pl:gen:_:ter:_:npraep
+469	ppron3:pl:gen:_:ter:_:praep
+470	ppron3:pl:inst:_:ter:_:_
+471	ppron3:pl:loc:_:ter:_:_
+472	ppron3:pl:nom:m1.p1:ter:_:_
+473	ppron3:pl:nom:m2.m3.f.n1.n2.p2.p3:ter:_:_
+474	ppron3:sg:acc:f:ter:_:npraep
+475	ppron3:sg:acc:f:ter:_:praep
+476	ppron3:sg:acc:m1.m2.m3:ter:akc:npraep
+477	ppron3:sg:acc:m1.m2.m3:ter:akc:praep
+478	ppron3:sg:acc:m1.m2.m3:ter:nakc:npraep
+479	ppron3:sg:acc:m1.m2.m3:ter:nakc:praep
+480	ppron3:sg:acc:n1.n2:ter:_:npraep
+481	ppron3:sg:acc:n1.n2:ter:_:praep
+482	ppron3:sg:dat:f:ter:_:npraep
+483	ppron3:sg:dat:f:ter:_:praep
+484	ppron3:sg:dat:m1.m2.m3:ter:akc:npraep
+485	ppron3:sg:dat:m1.m2.m3:ter:nakc:npraep
+486	ppron3:sg:dat:m1.m2.m3:ter:_:praep
+487	ppron3:sg:dat:n1.n2:ter:akc:npraep
+488	ppron3:sg:dat:n1.n2:ter:nakc:npraep
+489	ppron3:sg:dat:n1.n2:ter:_:praep
+490	ppron3:sg:gen.acc:m1.m2.m3:ter:nakc:praep
+491	ppron3:sg:gen:f:ter:_:npraep
+492	ppron3:sg:gen:f:ter:_:praep
+493	ppron3:sg:gen:m1.m2.m3:ter:akc:npraep
+494	ppron3:sg:gen:m1.m2.m3:ter:akc:praep
+495	ppron3:sg:gen:m1.m2.m3:ter:nakc:npraep
+496	ppron3:sg:gen:m1.m2.m3:ter:nakc:praep
+497	ppron3:sg:gen:n1.n2:ter:akc:npraep
+498	ppron3:sg:gen:n1.n2:ter:nakc:npraep
+499	ppron3:sg:gen:n1.n2:ter:_:praep
+500	ppron3:sg:inst:f:ter:_:praep
+501	ppron3:sg:inst:m1.m2.m3:ter:_:_
+502	ppron3:sg:inst:n1.n2:ter:_:_
+503	ppron3:sg:loc:f:ter:_:_
+504	ppron3:sg:loc:m1.m2.m3:ter:_:_
+505	ppron3:sg:loc:n1.n2:ter:_:_
+506	ppron3:sg:nom:f:ter:_:_
+507	ppron3:sg:nom:m1.m2.m3:ter:_:_
+508	ppron3:sg:nom:n1.n2:ter:_:_
+509	praet:pl:m1.p1:imperf
+510	praet:pl:m1.p1:imperf.perf
+511	praet:pl:m1.p1:perf
+512	praet:pl:m1.p1:pri:imperf
+513	praet:pl:m1.p1:pri:imperf.perf
+514	praet:pl:m1.p1:pri:perf
+515	praet:pl:m1.p1:sec:imperf
+516	praet:pl:m1.p1:sec:imperf.perf
+517	praet:pl:m1.p1:sec:perf
+518	praet:pl:m1.p1:ter:imperf
+519	praet:pl:m1.p1:ter:imperf.perf
+520	praet:pl:m1.p1:ter:perf
+521	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf
+522	praet:pl:m2.m3.f.n1.n2.p2.p3:imperf.perf
+523	praet:pl:m2.m3.f.n1.n2.p2.p3:perf
+524	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf
+525	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:imperf.perf
+526	praet:pl:m2.m3.f.n1.n2.p2.p3:pri:perf
+527	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+528	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf.perf
+529	praet:pl:m2.m3.f.n1.n2.p2.p3:sec:perf
+530	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+531	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf.perf
+532	praet:pl:m2.m3.f.n1.n2.p2.p3:ter:perf
+533	praet:sg:f:imperf
+534	praet:sg:f:imperf.perf
+535	praet:sg:f:perf
+536	praet:sg:f:pri:imperf
+537	praet:sg:f:pri:imperf.perf
+538	praet:sg:f:pri:perf
+539	praet:sg:f:sec:imperf
+540	praet:sg:f:sec:imperf.perf
+541	praet:sg:f:sec:perf
+542	praet:sg:f:ter:imperf
+543	praet:sg:f:ter:imperf.perf
+544	praet:sg:f:ter:perf
+545	praet:sg:m1.m2.m3:imperf
+546	praet:sg:m1.m2.m3:imperf:agl
+547	praet:sg:m1.m2.m3:imperf:nagl
+548	praet:sg:m1.m2.m3:imperf.perf
+549	praet:sg:m1.m2.m3:perf
+550	praet:sg:m1.m2.m3:perf:agl
+551	praet:sg:m1.m2.m3:perf:nagl
+552	praet:sg:m1.m2.m3:pri:imperf
+553	praet:sg:m1.m2.m3:pri:imperf.perf
+554	praet:sg:m1.m2.m3:pri:perf
+555	praet:sg:m1.m2.m3:sec:imperf
+556	praet:sg:m1.m2.m3:sec:imperf.perf
+557	praet:sg:m1.m2.m3:sec:perf
+558	praet:sg:m1.m2.m3:ter:imperf
+559	praet:sg:m1.m2.m3:ter:imperf.perf
+560	praet:sg:m1.m2.m3:ter:perf
+561	praet:sg:n1.n2:imperf
+562	praet:sg:n1.n2:imperf.perf
+563	praet:sg:n1.n2:perf
+564	praet:sg:n1.n2:pri:imperf
+565	praet:sg:n1.n2:pri:imperf.perf
+566	praet:sg:n1.n2:pri:perf
+567	praet:sg:n1.n2:sec:imperf
+568	praet:sg:n1.n2:sec:imperf.perf
+569	praet:sg:n1.n2:sec:perf
+570	praet:sg:n1.n2:ter:imperf
+571	praet:sg:n1.n2:ter:imperf.perf
+572	praet:sg:n1.n2:ter:perf
+573	pred
+574	prefa
+575	prefppas
+576	prefs
+577	prefv
+578	prep:acc
+579	prep:acc:nwok
+580	prep:acc:wok
+581	prep:dat
+582	prep:gen
+583	prep:gen:nwok
+584	prep:gen:wok
+585	prep:inst
+586	prep:inst:nwok
+587	prep:inst:wok
+588	prep:loc
+589	prep:loc:nwok
+590	prep:loc:wok
+591	prep:nom
+592	qub
+593	romandig
+594	siebie:acc
+595	siebie:dat
+596	siebie:gen
+597	siebie:inst
+598	siebie:loc
+599	substa
+600	subst:pl:acc:f
+601	subst:pl:acc:m1
+602	subst:pl:acc:m2
+603	subst:pl:acc:m3
+604	subst:pl:acc:n1
+605	subst:pl:acc:n2
+606	subst:pl:acc:p1
+607	subst:pl:acc:p2
+608	subst:pl:acc:p3
+609	subst:pl:dat:f
+610	subst:pl:dat:m1
+611	subst:pl:dat:m2
+612	subst:pl:dat:m3
+613	subst:pl:dat:n1
+614	subst:pl:dat:n2
+615	subst:pl:dat:p1
+616	subst:pl:dat:p2
+617	subst:pl:dat:p3
+618	subst:pl:gen:f
+619	subst:pl:gen:m1
+620	subst:pl:gen:m2
+621	subst:pl:gen:m3
+622	subst:pl:gen:n1
+623	subst:pl:gen:n2
+624	subst:pl:gen:p1
+625	subst:pl:gen:p2
+626	subst:pl:gen:p3
+627	subst:pl:inst:f
+628	subst:pl:inst:m1
+629	subst:pl:inst:m2
+630	subst:pl:inst:m3
+631	subst:pl:inst:n1
+632	subst:pl:inst:n2
+633	subst:pl:inst:p1
+634	subst:pl:inst:p2
+635	subst:pl:inst:p3
+636	subst:pl:loc:f
+637	subst:pl:loc:m1
+638	subst:pl:loc:m2
+639	subst:pl:loc:m3
+640	subst:pl:loc:n1
+641	subst:pl:loc:n2
+642	subst:pl:loc:p1
+643	subst:pl:loc:p2
+644	subst:pl:loc:p3
+645	subst:pl:nom:f
+646	subst:pl:nom:m1
+647	subst:pl:nom:m2
+648	subst:pl:nom:m3
+649	subst:pl:nom:n1
+650	subst:pl:nom:n2
+651	subst:pl:nom:p1
+652	subst:pl:nom:p2
+653	subst:pl:nom:p3
+654	subst:pl:voc:f
+655	subst:pl:voc:m1
+656	subst:pl:voc:m2
+657	subst:pl:voc:m3
+658	subst:pl:voc:n1
+659	subst:pl:voc:n2
+660	subst:pl:voc:p1
+661	subst:pl:voc:p2
+662	subst:pl:voc:p3
+663	subst:sg:acc:f
+664	subst:sg:acc:m1
+665	subst:sg:acc:m2
+666	subst:sg:acc:m3
+667	subst:sg:acc:n1
+668	subst:sg:acc:n2
+669	subst:sg:dat:f
+670	subst:sg:dat:m1
+671	subst:sg:dat:m2
+672	subst:sg:dat:m3
+673	subst:sg:dat:n1
+674	subst:sg:dat:n2
+675	subst:sg:gen:f
+676	subst:sg:gen:m1
+677	subst:sg:gen:m2
+678	subst:sg:gen:m3
+679	subst:sg:gen:n1
+680	subst:sg:gen:n2
+681	subst:sg:inst:f
+682	subst:sg:inst:m1
+683	subst:sg:inst:m2
+684	subst:sg:inst:m3
+685	subst:sg:inst:n1
+686	subst:sg:inst:n2
+687	subst:sg:loc:f
+688	subst:sg:loc:m1
+689	subst:sg:loc:m2
+690	subst:sg:loc:m3
+691	subst:sg:loc:n1
+692	subst:sg:loc:n2
+693	subst:sg:nom:f
+694	subst:sg:nom:m1
+695	subst:sg:nom:m2
+696	subst:sg:nom:m3
+697	subst:sg:nom:n1
+698	subst:sg:nom:n2
+699	subst:sg:voc:f
+700	subst:sg:voc:m1
+701	subst:sg:voc:m2
+702	subst:sg:voc:m3
+703	subst:sg:voc:n1
+704	subst:sg:voc:n2
+705	winien:pl:m1.p1:imperf
+706	winien:pl:m1.p1:pri:imperf
+707	winien:pl:m1.p1:sec:imperf
+708	winien:pl:m1.p1:ter:imperf
+709	winien:pl:m2.m3.f.n1.n2.p2.p3:imperf
+710	winien:pl:m2.m3.f.n1.n2.p2.p3:sec:imperf
+711	winien:pl:m2.m3.f.n1.n2.p2.p3:ter:imperf
+712	winien:sg:f:imperf
+713	winien:sg:f:pri:imperf
+714	winien:sg:f:sec:imperf
+715	winien:sg:f:ter:imperf
+716	winien:sg:m1.m2.m3:imperf
+717	winien:sg:m1.m2.m3:pri:imperf
+718	winien:sg:m1.m2.m3:sec:imperf
+719	winien:sg:m1.m2.m3:ter:imperf
+720	winien:sg:n1.n2:imperf
+721	winien:sg:n1.n2:pri:imperf
+722	winien:sg:n1.n2:sec:imperf
+723	winien:sg:n1.n2:ter:imperf
--
libgit2 0.22.2