Commit 8e00e0f8 authored by di68kap's avatar di68kap
Browse files

- MLW Schema erweitert

parent fb0686cb
......@@ -774,6 +774,9 @@ class Grammar:
rest = document
if not rest:
result, ignore = parser(rest)
if result is None:
result = Node(None, '')
result.add_error('Parser "%s" did not match empty document.' % str(parser))
while rest and len(stitches) < MAX_DROPOUTS:
result, rest = parser(rest)
if rest:
......
......@@ -45,7 +45,7 @@ def unit_from_configfile(config_filename):
Reads a grammar unit test from a config file.
"""
cfg = configparser.ConfigParser(interpolation=None)
cfg.read(config_filename)
cfg.read(config_filename, encoding="utf8")
OD = collections.OrderedDict
unit = OD()
for section in cfg.sections():
......@@ -58,6 +58,8 @@ def unit_from_configfile(config_filename):
for testkey, testcode in cfg[section].items():
if testcode[:3] + testcode[-3:] in {"''''''", '""""""'}:
testcode = testcode[3:-3]
# testcode = testcode.replace('\\#', '#')
testcode = re.sub(r'(?<!\\)\\#', '#', testcode).replace('\\\\', '\\')
elif testcode[:1] + testcode[-1:] in {"''", '""'}:
testcode = testcode[1:-1]
unit.setdefault(symbol, OD()).setdefault(stage, OD())[testkey] = testcode
......@@ -69,7 +71,7 @@ def unit_from_json(json_filename):
"""
Reads a grammar unit test from a json file.
"""
with open(json_filename, 'r') as f:
with open(json_filename, 'r', encoding='utf8') as f:
unit = json.load(f)
for symbol in unit:
for stage in unit[symbol]:
......@@ -200,7 +202,7 @@ def grammar_unit(test_unit, parser_factory, transformer_factory, report=True, ve
report_dir = "REPORT"
if not os.path.exists(report_dir):
os.mkdir(report_dir)
with open(os.path.join(report_dir, unit_name + '.md'), 'w') as f:
with open(os.path.join(report_dir, unit_name + '.md'), 'w', encoding='utf8') as f:
f.write(get_report(test_unit))
return errata
......
......@@ -152,7 +152,7 @@ INTEGER = /\d+/~
TEXTCHUNK = /[^\\%$&\{\}\[\]\s\n]+/ # some piece of text excluding whitespace,
# linefeed and special characters
LF = !GAP /[ \t]*\n[ \t]*/ # linefeed but not an empty line
LFF = ~/\n?/ -&LB [ WSPC ] # at least one linefeed
LFF = ~/\n?/ -&LB [ WSPC ] # at least one linefeed
WSPC = { COMMENT__ | /\s+/ }+ # arbitrary horizontal or vertical whitespace
# WSPC = { /\s+/~ | ~/\s+/ }+ # arbitrary horizontal or vertical whitespace
PARSEP = { GAP }+ # paragraph separator
......
......@@ -201,7 +201,7 @@ class LaTeXGrammar(Grammar):
TEXTCHUNK = /[^\\%$&\{\}\[\]\s\n]+/ # some piece of text excluding whitespace,
# linefeed and special characters
LF = !GAP /[ \t]*\n[ \t]*/ # linefeed but not an empty line
LFF = ~/\n?/ -&LB [ WSPC ] # at least one linefeed
LFF = ~/\n?/ -&LB [ WSPC ] # at least one linefeed
WSPC = { COMMENT__ | /\s+/ }+ # arbitrary horizontal or vertical whitespace
# WSPC = { /\s+/~ | ~/\s+/ }+ # arbitrary horizontal or vertical whitespace
PARSEP = { GAP }+ # paragraph separator
......@@ -220,7 +220,7 @@ class LaTeXGrammar(Grammar):
paragraph = Forward()
tabular_config = Forward()
text_element = Forward()
source_hash__ = "1d9bad5194b49edf88a447f370541ed1"
source_hash__ = "2d33db878d9e5354a05e23f48a756604"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'%.*(?:\n|$)'
WSP__ = mixin_comment(whitespace=r'[ \t]*(?:\n(?![ \t]*\n)[ \t]*)?', comment=r'%.*(?:\n|$)')
......@@ -275,9 +275,7 @@ class LaTeXGrammar(Grammar):
block_of_paragraphs.set(Series(Token("{"), Optional(sequence), Required(Token("}"))))
tabular_config.set(Series(Token("{"), RE('[lcr|]+'), Required(Token("}"))))
tabular_cell = ZeroOrMore(Series(line_element, RE('')))
tabular_row = Series(Alternative(multicolumn, tabular_cell),
ZeroOrMore(Series(Token("&"), Alternative(multicolumn, tabular_cell))),
Token("\\\\"), Alternative(hline, ZeroOrMore(cline)))
tabular_row = Series(Alternative(multicolumn, tabular_cell), ZeroOrMore(Series(Token("&"), Alternative(multicolumn, tabular_cell))), Token("\\\\"), Alternative(hline, ZeroOrMore(cline)))
tabular = Series(Token("\\begin{tabular}"), tabular_config, ZeroOrMore(tabular_row), Required(Token("\\end{tabular}")))
verbatim = Series(Token("\\begin{verbatim}"), sequence, Required(Token("\\end{verbatim}")))
quotation = Alternative(Series(Token("\\begin{quotation}"), sequence, Required(Token("\\end{quotation}"))), Series(Token("\\begin{quote}"), sequence, Required(Token("\\end{quote}"))))
......
......@@ -25,7 +25,6 @@ sys.path.extend(['../../', '../', './'])
import DHParser.dsl
from DHParser import testing
from DHParser import toolkit
if not DHParser.dsl.recompile_grammar('LaTeX.ebnf', force=False): # recompiles Grammar only if it has changed
print('\nErrors while recompiling "LaTeX.ebnf":\n--------------------------------------\n\n')
......
......@@ -2,7 +2,8 @@
@ testing = True
@ comment = /#.*(?:\n|$)/ # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
@ comment = /#.*/ # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
# ohne das Zeilenende zu beinhalten
@ whitespace = /[\t ]*/ # Zeilensprünge zählen nicht als Leerraum
@ literalws = right # Leerraum vor und nach Literalen wird automatisch entfernt
......@@ -19,7 +20,8 @@ Artikel = [LZ]
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma §TR [LemmaVarianten] §GrammatikPosition [EtymologiePosition]
LemmaPosition = "LEMMA" [LZ] §Lemma §TR [LemmaVarianten]
§GrammatikPosition [EtymologiePosition]
Lemma = [klassisch] [gesichert] LemmaWort
klassisch = "*"
......@@ -40,25 +42,27 @@ LemmaZusatz = "ZUSATZ" §lzs_typ
GrammatikPosition = "GRAMMATIK" [LZ] §wortart §ABS §flexion [genus] §ABS
[GrammatikVarianten]
wortart = "nomen" | "n." |
"verb" | "v." |
"adverb" | "adv." |
"adjektiv" | "adj."
wortart = "nomen" | "n."
| "verb" | "v."
| "adverb" | "adv."
| "adjektiv" | "adj."
| "praeposition" | "praep."
GrammatikVarianten = { [wortart ABS] flexion [genus] ":" Beleg §ABS }+
flexion = FLEX { "," §FLEX }
FLEX = /-?[a-z]+/~
genus = "maskulinum" | "m." |
"femininum" | "f." |
"neutrum" | "n."
genus = "maskulinum" | "m."
| "femininum" | "f."
| "neutrum" | "n."
## ETYMOLOGIE-POSITION ##
EtymologiePosition = "ETYMOLOGIE" [LZ] EtymologieVarianten
EtymologieVarianten = { ( SW_LAT | SW_GRIECH ) !([LZ] ()) }+
EtymologieVarianten = { !([LZ] GROSSFOLGE) EtymologieVariante }+
EtymologieVariante = /.*/ # NOCH ZU VERFOLLSTÄNDIGEN
#### ARTIKEL-KOPF ############################################################
......@@ -80,10 +84,9 @@ Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = SW_LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = SW_DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] { "*" EinBeleg }
EinBeleg = { !([LZ] ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ"))
/\s*.*\s*/ }+
[Zusatz]
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg })
EinBeleg = { !([LZ] ("*" | GROSSFOLGE )) /\s*[^\n]*\s*/ }+ [Zusatz]
Zusatz = "ZUSATZ" /\s*.*/ ABS
......@@ -117,15 +120,25 @@ DEU_KLEIN = /[a-zäöüß]+/~
LAT_WORT = /[a-z]+/~
LAT_WORT_TEIL = /[a-z]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/~
GROSSFOLGE = /[A-ZÄÖÜ][A-ZÄÖÜ][A-ZÄÖÜ]/ # drei Großbuchstaben in Folge
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;\s*/ | { ZW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
ZW = /\n/~ # Zeilenwechsel
ABS = /\s*;\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
ZW = !LÜCKE ZEILENSPRUNG # Zeilenwechsel, aber keine Leerzeile(n)
ZWW = ZEILENSPRUNG [ LEERRAUM ] # mindestens ein Zeilenwechsel
LÜCKE = KOMMENTARZEILEN LEERZEILE [LEERRAUM] # Leerraum mit mindestens einer echten Leerzeile
LEERRAUM = { COMMENT__ | /\s+/ }+ # beliebiger horizontaler oder vertikaler Leerraum
LEERZEILE = /[ \t]*(?:\n[ \t]*)+\n/ ~/\n?/ # eine oder mehrere echte LEERZEILEN
RZS = /\s*?\n|$/ # Rückwärtiger Zeilensprung oder Textanfang
ZEILENSPRUNG = /[ \t]*\n/~
KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen
DATEI_ENDE = !/./
NIEMALS = /(?!.)/
Können Lemma-Positionen, so wie es die DTD zulässt (Zeile 19), tatsächlich ineinander geschachtelt sein?
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD für MLW Erfassung neuer Artikel -->
<!-- erstellt von Ursula Welsch, BADW -->
<!-- Stand: 6.7.2017 -->
<!-- Parameter-Entities -->
<!ENTITY % textauszeichnungen "kursiv | gesperrt | gerade" >
<!-- Lexikon -->
<!ELEMENT MLW-test (artikel)+ >
<!-- Artikel -->
<!ELEMENT artikel (lemma-position, artikelkopf?, bedeutung-position, verweis-position?, sub-artikel*, artikel-verfasser) >
<!ATTLIST artikel xml:id ID #REQUIRED >
<!-- =========================-->
<!-- Lemma-Ansatz -->
<!-- =========================-->
<!ELEMENT lemma-position (((lemma, lemma-varianten?, grammatik-position) | (lemma-position | zusatz)+), etymologie-position?) >
<!ATTLIST lemma-position nr CDATA #IMPLIED >
<!-- Lemma -->
<!ELEMENT lemma (#PCDATA) >
<!ATTLIST lemma
klassisch (ja | nein) "ja"
gesichert (ja | nein) "ja"
>
<!-- Lemma-Varianten -->
<!ELEMENT lemma-varianten (lemma-variante+, zusatz?) >
<!ELEMENT lemma-variante (#PCDATA) >
<!ATTLIST lemma-variante kurz CDATA #IMPLIED >
<!-- Grammatik-Position -->
<!ELEMENT grammatik-position (grammatik, grammatik-varianten?) >
<!-- Grammatikangaben -->
<!ELEMENT grammatik (#PCDATA) >
<!ATTLIST grammatik
wortart (nomen | adjektiv | verb | adverb | praep) #REQUIRED
klasse (us-i | a-ae | um-i | x-cis) #IMPLIED
genus (m | f | n) #IMPLIED
konjugation (are | ere | ire | irreg) #IMPLIED
>
<!-- Grammatik-Varianten -->
<!ELEMENT grammatik-varianten (grammatik-variante+) >
<!ELEMENT grammatik-variante (grammatik, beleg+) >
<!-- Etymologie-Position -->
<!ELEMENT etymologie-position (etymologie-variante+) >
<!ELEMENT etymologie-variante (etymologie-besonderheit?, etymologie?, beleg) >
<!ELEMENT etymologie (#PCDATA) >
<!ATTLIST etymologie-variante sprache (griech | lat) #IMPLIED >
<!ELEMENT etymologie-besonderheit (#PCDATA) >
<!-- =========================-->
<!-- Artikelkopf -->
<!-- =========================-->
<!ELEMENT artikelkopf ((schreibweisen-position, struktur-position?, gebrauch-position?, metrik-position?, verwechslung-position?) |
(struktur-position, gebrauch-position?, metrik-position?, verwechslung-position?) |
(gebrauch-position, metrik-position?, verwechslung-position?) |
(metrik-position, verwechslung-position?) |
verwechslung-position) >
<!-- Schreibweisen-Position -->
<!ELEMENT schreibweisen-position (schreibweisen-variante)+ >
<!ELEMENT schreibweisen-variante (schreibweise-besonderheit?, schreibweise, (zusatz, schreibweise)*, (beleg, (zusatz | beleg)*)?) >
<!ELEMENT schreibweise-besonderheit (#PCDATA) >
<!ELEMENT schreibweise (#PCDATA) >
<!ATTLIST schreibweise-besonderheit typ (script | form | script-form | OFFEN) #IMPLIED >
<!-- Position für Strukturelle/Grammatische Besonderheiten -->
<!ELEMENT struktur-position (struktur-variante+) >
<!ELEMENT struktur-variante (struktur-besonderheit?, struktur?, beleg) >
<!ELEMENT struktur-besonderheit (#PCDATA) >
<!ELEMENT struktur (#PCDATA) >
<!ATTLIST struktur-besonderheit typ (pendet | struct | struct-nota | OFFEN) #IMPLIED >
<!-- Position zu Gebrauchs-Besonderheiten -->
<!ELEMENT gebrauch-position (gebrauch-variante, zusatz?)+ >
<!ELEMENT gebrauch-variante (gebrauch-besonderheit?, beleg+) >
<!ELEMENT gebrauch-besonderheit (#PCDATA) >
<!ATTLIST gebrauch-besonderheit typ (usu | partic | OFFEN) #IMPLIED >
<!-- Position zu Metrisch / Rhythmischen Besonderheiten -->
<!ELEMENT metrik-position (metrik-variante+) >
<!ELEMENT metrik-variante (metrik-besonderheit?, metrik?, beleg) >
<!ELEMENT metrik-besonderheit (#PCDATA) >
<!ELEMENT metrik (#PCDATA) >
<!ATTLIST metrik-besonderheit typ (metr | rhythm | OFFEN) #IMPLIED >
<!-- Position zu Verwechselungsgefahren -->
<!ELEMENT verwechslung-position (verwechslung-variante+) >
<!ELEMENT verwechslung-variante (verwechslung-besonderheit?, verwechslung?, beleg) >
<!ELEMENT verwechslung-besonderheit (#PCDATA) >
<!ELEMENT verwechslung (#PCDATA) >
<!ATTLIST verwechslung-besonderheit typ (confunditur | OFFEN) "confunditur" >
<!-- =========================-->
<!-- Hauptteil: Bedeutungsposition -->
<!-- =========================-->
<!ELEMENT bedeutung-position (bedeutung+) >
<!ELEMENT bedeutung (((klassifikation, interpretament-zusatz?, interpretament?, interpretament-deutsch?) | (interpretament-zusatz) | (interpretament, interpretament-deutsch, interpretament-zusatz*)), (bedeutung | beleg-position)+) >
<!ELEMENT klassifikation (#PCDATA | verweis)* >
<!ATTLIST bedeutung nr CDATA #REQUIRED >
<!-- Interpretament -->
<!ELEMENT interpretament (#PCDATA) >
<!ELEMENT interpretament-deutsch (#PCDATA| verweis)* >
<!ELEMENT interpretament-zusatz (#PCDATA | verweis | interpretament | interpretament-deutsch)* >
<!ATTLIST interpretament typ (lat | griech | botan) "lat" >
<!-- Beleg-Position -->
<!ELEMENT beleg-position (beleg+, zusatz?) >
<!-- Verweisposition -->
<!ELEMENT verweis-position (verweis+) >
<!-- Artikelverfasser -->
<!ELEMENT artikel-verfasser (#PCDATA) >
<!-- =========================-->
<!-- Sub-Artikel, Sublemma -->
<!-- =========================-->
<!ELEMENT sub-artikel (lemma-position, bedeutung-position) >
<!-- =========================-->
<!--Elemente an verschiedenen Stellen der Struktur -->
<!-- =========================-->
<!-- Zusätze an verschiedenen Stellen der Struktur -->
<!ELEMENT zusatz (#PCDATA) >
<!ATTLIST zusatz typ (adde | al | sim | saepe | vel | vel-rarius | OFFEN) #REQUIRED >
<!-- Verweise an verschiedenen Stellen der Struktur -->
<!-- Der Inhalt des Verweises wird nicht ausgegeben!! Er dient nur der Orientierung - leider meckert Oxy auch einen Kommentar als PCDATA an ... -->
<!ELEMENT verweis (#PCDATA) >
<!ATTLIST verweis
typ (beleg | artikel | literatur) #REQUIRED
ziel CDATA #REQUIRED
>
<!-- Belege an verschiedenen Stellen der Struktur -->
<!--<!ELEMENT beleg (((beleg-quelle, beleg-text?) | beleg-text) | (verweis+, zusatz?)) >-->
<!ELEMENT beleg (((beleg-quelle, beleg-text?) | beleg-text) | verweis) >
<!-- Belegquelle -->
<!ELEMENT beleg-quelle (autor, werk, stelle, datierung?, edition?) >
<!ELEMENT autor (#PCDATA) >
<!ELEMENT werk (#PCDATA) >
<!ELEMENT stelle (#PCDATA | hoch)* >
<!ELEMENT datierung (#PCDATA) >
<!ELEMENT edition (#PCDATA) >
<!ATTLIST beleg
id ID #REQUIRED
>
<!-- Belegtext -->
<!ELEMENT beleg-text (#PCDATA | lemma-beleg | redaktion-ergaenzung | lesart | hervorhebung | sigle | %textauszeichnungen;)* >
<!ELEMENT redaktion-ergaenzung (#PCDATA | %textauszeichnungen;)* > <!-- redaktionelle Ergänzungen des Artikelverfassers; die runden Klammern werden generiert -->
<!ELEMENT lemma-beleg (#PCDATA) > <!-- das Vorkommen des Lemmas im Belegtext, erfasst wird die Langform; die Kurzform kommt in das Attribut kurzform -->
<!ELEMENT lesart (#PCDATA | redaktion-ergaenzung)* > <!-- verschiedene Lesarten/Lemmavarianten, die hier mit aufgeführt werden -->
<!ELEMENT hervorhebung (#PCDATA) > <!-- kleine Eckchen vor einer runden Klammer, die als Lesart bezeichnet wird -->
<!ELEMENT sigle (#PCDATA) > <!-- Sigle einer Literaturstelle -->
<!ATTLIST lemma-beleg kurzform CDATA #IMPLIED >
<!-- Textauszeichnung an verschiedenen Stellen -->
<!ELEMENT kursiv (#PCDATA | gerade)* >
<!ELEMENT gesperrt (#PCDATA) >
<!ELEMENT gerade (#PCDATA | kursiv)* >
<!ELEMENT hoch (#PCDATA) >
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="mlw_xml.css"?>
<MLW-test>
<artikel>
<lemma-position>
<lemma klassisch="ja" gesichert="???">iniucundus</lemma>
<lemma-varianten>
<lemma kurz="ioc-">iniocundus</lemma>
</lemma-varianten>
<grammatik-position>
<grammatik wortart="adj" klasse="???">-a, -um</grammatik>
</grammatik-position>
</lemma-position>
<artikelkopf>
???<usu-position>
<usu typ="subst">
<verweis typ="intern" ziel="???">p. 32,63</verweis>
</usu>
</usu-position>
</artikelkopf>
<bedeutung-position>
????<bedeutung nr="0">
<interpretament-latein>non iucundus, molestus, odiosus</interpretament-latein>
<interpretament-deutsch>unangenehm, unerfreulich</interpretament-deutsch>
<interpretament-zusatz>
in figura rhet. litotes q. d.
<verweis typ="intern" ziel="???">p. 32,63</verweis>
</interpretament-zusatz>
</bedeutung>
<bedeutung nr="1" element="de rebus">
<beleg-position>
<beleg name="iniocundus" id="iniocundus_001">
<beleg-quelle>
<autor>Agius</autor>
<werk>comput.</werk>
<stelle> 1,40</stelle>
</beleg-quelle>
<beleg-text>
vigilanti pectore lectum non iniocundum forsan erit opus nimium
</beleg-text>
</beleg>
<beleg>
<beleg-quelle>
<autor>Epist.</autor>
<werk>Ratisb.</werk>
<stelle> 10 p. 327,36</stelle>
</beleg-quelle>
<beleg-text>ne cui iniocundum, sed gratissimum videatur, quod exempla veterum sumuntur <zusatz typ="ergänzung">eqs.</zusatz>
</beleg-text>
</beleg>
<beleg name="iniocundus" id="iniocundus_002">
<beleg-quelle>
<autor>Epist.</autor>
<werk>Ratisb.</werk>
<stelle>11 p. 329,33</stelle>
</beleg-quelle>
<beleg-text>non iniocundum mihi esse non potest, quod <zusatz typ="ergänzung">eqs.</zusatz></beleg-text>
</beleg>
<beleg name="iniocundus" id="iniocundus_003">
<beleg-quelle>
<autor> Absal.</autor>
<stelle>serm.</stelle>
<werk> 32 p. 189D</werk>
</beleg-quelle>
<beleg-text> in quibus (nuptiis) nihil amarum, nihil iniocundum, nihil inhonestum reperitur</beleg-text>
</beleg>
<beleg name="iniocundus" id="iniocundus_004"></beleg>
<beleg name="iniocundus" id="iniocundus_005"></beleg>
<beleg name="iniocundus" id="iniocundus_006"></beleg>
<beleg name="iniocundus" id="iniocundus_007"></beleg>
<beleg name="iniocundus" id="iniocundus_008"></beleg>
<beleg name="iniocundus" id="iniocundus_009"></beleg>
<beleg name="iniocundus" id="iniocundus_010"></beleg>
<beleg name="iniocundus" id="iniocundus_011"></beleg>
<beleg name="iniocundus" id="iniocundus_012"></beleg>
38 p. 222A quod superflue infusum aut noxium fiet cibum aut iniucundum.
Frid. II. Imp. epist. B 10 p. 428,21 quicquid prosperitas vobis (sc. fidelibus) iocundi peperit et adversitas iniocundi.
Nicol. anat. 216 in cellula logistica fit discretio, scilicet ... honesti ab inhonesto, iocundi ab iniocundo.
al.
</beleg-position>
</bedeutung>
<bedeutung nr="2" element="de hominibus">
<beleg-position>
Annal. Egm. a. 1152 p. 208,18 puella fuit Iudea, facie quidem pulcherrima, sed infidelitatis errore et astutia malicie deformis et iniocunda.
</beleg-position>
</bedeutung>
</bedeutung-position>
</artikel>
</MLW-test>
[match:RZS]
1: """
"""
[match:LEERZEILE]
1: """
"""
2: """
\# Kommentar"""
3: """
"""
[fail:LEERZEILE]
1: """
"""
2: """
\# Kommentar
\# Kommentar
"""
[match:LÜCKE]
1: """
"""
2: """
\# Kommentar
"""
3: """
"""
4: """
\# Kommentar
\# Kommentar
"""
5: """ \#Kommentar
\# Kommentar
\# Kommentar"""
[fail:LÜCKE]
1: " "
2: """
"""
3: """
\# Kommentar"""
4: """ \#Kommentar
\# Kommentar
\# Kommentar"""
[match:LEERRAUM]
1: " "
2: " # Kommentar"
3: " "
4: "# Kommentar"
5: """# Kommentar
"""
6: """
\# Kommentar
\# Kommentar
"""
7: """
"""
[fail:LEERRAUM]
1: "X"
[match:ZWW]
1: """
"""
2: """
\# Kommentar"""
3: """
\# Kommentar
"""
4: """
"""
[fail:ZWW]
1: " "
[match:ZW]
1: """
"""
2: """
\# Kommentar"""
[fail:ZW]
1: """
"""
[match:lemma]
[match:Lemma]
1: facitergula
2: facitergul|a
3: fasc|itergula
[fail:lemma]
[fail:Lemma]
99: duo vocabula
[match:HauptLemma]
1: facitergula
2: *fascitergula
3: * fasciterugl|a
[match:LemmaVarianten]
1:
1: """
fasc-itergula
fac-iet-ergula
fac-ist-ergula
fa-rcu-tergula
"""