Commit 7fdf4aca authored by di68kap's avatar di68kap

- einige der später eingefügten Trennzeichen werden nun sauberer hinzugefügt.

parent a506ddc6
......@@ -5,7 +5,8 @@ insula (-sola)
VEL {raro} iscla (ys-)
ETYMOLOGIE
fere in chartis Italiae septemtrionalis: * {cf.} Wartburg, Frz. etym. Wb. IV.; p. 728sqq.
fere in chartis Italiae septemtrionalis:
* {cf.} Wartburg, Frz. etym. Wb. IV.; p. 728sqq.
* Battisti-Alessio, Diz. etim. ital. III.; p. 2111 s. v. 2. "ischia"
* F. Giger et al., Dicziunari Rumantsch Grischun X.; p. 130sq. s. v. 1. "isla"
......
......@@ -218,7 +218,7 @@ NullVerweis = "{" "-" "}"
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = { FesterZusatz | VariaLectio | FreierZusatz | Anker }+
Zusatz = { FesterZusatz | VariaLectioZusatz | FreierZusatz | Anker }+
@ FreierZusatz_error = '{', "'{1}' kann nicht verarbeitet werden. Zusätze können nicht geschachtelt werden, dürfen aber Verweise '{{=> ...}}' enthalten."
FreierZusatz = [ZW] "{" !("=>" | "@" | "^" | "!" | "/" | "-" "}" ) [ZusatzInhalt] §"}"
ZusatzInhalt = { FREITEXT | VerweisKern | Verweise | BelegText | BelegLemma
......@@ -231,7 +231,7 @@ FesterZusatz = "{" ("adde-ad" |"adde" | "al" | "ibid-al" | "ibid-per-saepe"
| "ibid-saepe" | "ibid-saepius" | "persaepe" | "sim" | "saepe"
| "saepius" | "vel-rarius" | "vel-semel" | "vel") ["."] "}"
VariaLectio = "{" { TEXTELEMENT ["."] [ZW] }+ &/\}\)(?!\))/ "}"
VariaLectioZusatz = "{" { TEXTELEMENT ["."] [ZW] }+ &/\}\)(?!\))/ "}"
#### BELEGE ##################################################################
......
......@@ -123,7 +123,7 @@ class MLWGrammar(Grammar):
opus = Forward()
wortart = Forward()
wortarten = Forward()
source_hash__ = "f497cf1a2253975f99b685840e27b38e"
source_hash__ = "032edd353d673c992a9959fa668bf726"
static_analysis_pending__ = [True]
parser_initialization__ = ["upon instantiation"]
VerweisKern_err_msg__ = [(re.compile(r'[^|]*}'), 'Kein gültiges Verweisziel: "{1}" oder Platzhalter "|-" fehlt nach Alias!'), (re.compile(r'=>'), 'Kein gültiger Verweis "{1}". Mglw. ein Verweiszeichen "=>" zuviel.'), ('', 'Kein gültiger Verweis: "{1}"')]
......@@ -223,14 +223,14 @@ class MLWGrammar(Grammar):
Beleg = Alternative(Series(Zusatz, Lookahead(SCHLUESSELWORT), NegativeLookahead(Series(Option(ZW), AutorWerk))), Series(Zusatz, Lookahead(Series(Option(ZW), Series(Token("*"), wsp__)))), Series(Option(Zusatz), Alternative(OneOrMore(Series(Verweise, Option(Series(Option(ZW), NegativeLookahead(Beschreibung), Zusatz)))), Sekundärliteratur, Quellenangabe), Option(Series(Series(Token(";"), wsp__), NegativeLookahead(Beschreibung), Zusatz)), NegativeLookahead(Series(wsp__, RegExp(':'))), Lookahead(Alternative(Series(ZeroOrMore(Series(RegExp('\\s+'), wsp__)), RegExp('\\s*\\)\\)|\\s*\\*|\\s*[A-Z]')), Series(wsp__, RegExp('\\n\\s*[^:\\n]*:')))), mandatory=4, err_msgs=Beleg_err_msg__))
Einschub.set(Series(Option(ZW), EINSCHUB_ANFANG, Option(SomeOf(Verweise, Zusatz, BelegText)), ZeroOrMore(Belege), Option(ZW), EINSCHUB_ENDE))
Belege.set(Alternative(Series(Beleg, ZeroOrMore(Series(Option(LZ), Series(Token("*"), wsp__), Beleg, mandatory=2))), OneOrMore(Series(Option(LZ), Series(Token("*"), wsp__), Beleg, mandatory=2))))
VariaLectio = Series(Series(Token("{"), wsp__), OneOrMore(Series(TEXTELEMENT, Option(Series(Token("."), wsp__)), Option(ZW))), Lookahead(RegExp('\\}\\)(?!\\))')), Series(Token("}"), wsp__))
VariaLectioZusatz = Series(Series(Token("{"), wsp__), OneOrMore(Series(TEXTELEMENT, Option(Series(Token("."), wsp__)), Option(ZW))), Lookahead(RegExp('\\}\\)(?!\\))')), Series(Token("}"), wsp__))
FesterZusatz = Series(Series(Token("{"), wsp__), Alternative(Series(Token("adde-ad"), wsp__), Series(Token("adde"), wsp__), Series(Token("al"), wsp__), Series(Token("ibid-al"), wsp__), Series(Token("ibid-per-saepe"), wsp__), Series(Token("ibid-saepe"), wsp__), Series(Token("ibid-saepius"), wsp__), Series(Token("persaepe"), wsp__), Series(Token("sim"), wsp__), Series(Token("saepe"), wsp__), Series(Token("saepius"), wsp__), Series(Token("vel-rarius"), wsp__), Series(Token("vel-semel"), wsp__), Series(Token("vel"), wsp__)), Option(Series(Token("."), wsp__)), Series(Token("}"), wsp__))
Junktur.set(Alternative(Series(Series(Token("<<"), wsp__), BelegKern, Series(Token(">>"), wsp__), mandatory=1), Series(Series(Token("˻"), wsp__), BelegKern, Series(Token("˼"), wsp__), mandatory=1)))
Kursiv.set(Series(Series(Token("{/"), wsp__), Option(FREITEXT), Series(Token("}"), wsp__), mandatory=2))
Sperrung.set(Series(Series(Token("{!"), wsp__), Option(FREITEXT), Series(Token("}"), wsp__), mandatory=2))
ZusatzInhalt = OneOrMore(Alternative(FREITEXT, VerweisKern, Verweise, BelegText, BelegLemma, Kursiv, Sperrung, Junktur))
FreierZusatz = Series(Option(ZW), Series(Token("{"), wsp__), NegativeLookahead(Alternative(Series(Token("=>"), wsp__), Series(Token("@"), wsp__), Series(Token("^"), wsp__), Series(Token("!"), wsp__), Series(Token("/"), wsp__), Series(Series(Token("-"), wsp__), Series(Token("}"), wsp__)))), Option(ZusatzInhalt), Series(Token("}"), wsp__), mandatory=4, err_msgs=FreierZusatz_err_msg__)
Zusatz.set(OneOrMore(Alternative(FesterZusatz, VariaLectio, FreierZusatz, Anker)))
Zusatz.set(OneOrMore(Alternative(FesterZusatz, VariaLectioZusatz, FreierZusatz, Anker)))
NullVerweis = Series(Series(Token("{"), wsp__), Series(Token("-"), wsp__), Series(Token("}"), wsp__))
Stellenverweis = Series(AutorWerk, ZeroOrMore(Series(Option(ABS), Stelle, Alternative(NullVerweis, Verweise))))
Verweisliste = ZeroOrMore(Series(Option(LZ), Series(Token("*"), wsp__), Stellenverweis))
......@@ -544,7 +544,7 @@ MLW_AST_transformation_table = {
"Zusatz": [replace_by_children],
"FreierZusatz": [flatten, remove_tokens('{', '}'), move_whitespace, reduce_single_child,
change_tag_name('Zusatz')],
"FesterZusatz, VariaLectio": [remove_tokens('{', '}'), move_whitespace, collapse],
"FesterZusatz, VariaLectioZusatz": [remove_tokens('{', '}'), move_whitespace, collapse],
"ZusatzInhalt": [reduce_single_child],
"Sperrung, Kursiv, Junktur": [move_whitespace, reduce_single_child],
"ArtikelVerfasser": [strip],
......@@ -1548,7 +1548,12 @@ class AusgabeTransformation(TreeProcessor):
return node
def trenne(self, node, tag_name, trennzeichen):
"""Fügt zwischen Kind-Knoten mit `tag_name` das `trennzeichen` ein."""
"""Fügt zwischen Kind-Knoten mit `tag_name` das `trennzeichen` ein, indem
das Trennzeichen an den Inhalt der jeweiligen Kind-Knoten angehängt wird.
>>> AusgabeTransformation().trenne(parse_sxpr('(flexion (FLEX "-um") (FLEX "-i"))'), 'FLEX', ', ').as_sxpr()
'(flexion (FLEX "-um, ") (FLEX "-i"))'
"""
node = self.fallback_compiler(node)
flag = node.children[0].tag_name == tag_name
for i in range(len(node.children)-1):
......@@ -1561,6 +1566,30 @@ class AusgabeTransformation(TreeProcessor):
flag = False
return node
def trenne_mit_tag(self, node, tag_name, trennzeichen):
"""Fügt zwischen Kind-Knoten mit `tag_name` ein TEXT-tag mit dem
`trennzeichen` ein. Falls `trennzeichen` aus Leerzeichen besteht,
wird statt eines TEXT- ein L-tag eingefügt.
>>> AusgabeTransformation().trenne_mit_tag(parse_sxpr('(flexion (FLEX "-um") (FLEX "-i"))'), 'FLEX', ', ').as_sxpr()
'(flexion (FLEX "-um") (TEXT ", ") (FLEX "-i"))'
"""
node = self.fallback_compiler(node)
flag = node.children[0].tag_name == tag_name
collect_result = [node.children[0]]
trenn_tag = 'TEXT' if trennzeichen.strip() else 'L'
for child in node.children[1:]:
if child.tag_name == tag_name:
if flag:
collect_result.append(Node(trenn_tag, trennzeichen))
else:
flag = True
else:
flag = False
collect_result.append(child)
node.result = tuple(collect_result)
return node
def ist_unsichtbar(self, node):
"""Liefert wahr, wenn der Knoten und alle Kindknoten entweder
im Attribut Klasse die Klasse 'versteckt' enthalten order nur
......@@ -1720,11 +1749,19 @@ class AusgabeTransformation(TreeProcessor):
def on_LemmaVarianten(self, node):
node = self.fallback_compiler(node)
for i in range(len(node.children)-1):
if node.children[i+1].tag_name == "LemmaVariante":
self.danach(node.children[i], ', ')
# for i in range(len(node.children)-1):
# if node.children[i+1].tag_name == "LemmaVariante":
# self.danach(node.children[i], ', ')
# else:
# self.danach(node.children[i], ' ')
collect_result = [node.children[0]]
for successor in node.children[1:]:
if successor.tag_name == "LemmaVariante":
collect_result.append(Node('TEXT', ', '))
else:
self.danach(node.children[i], ' ')
collect_result.append(Node('L', ' '))
collect_result.append(successor)
node.result = tuple(collect_result)
self.davor(node, '(')
self.danach(node, ')')
return node
......@@ -1815,7 +1852,7 @@ class AusgabeTransformation(TreeProcessor):
return node
def on_flexion(self, node):
node = self.trenne(node, 'FLEX', ', ')
node = self.trenne_mit_tag(node, 'FLEX', ', ')
parent = self.context[-2]
i = parent.index(node)
if i == len(parent.children) - 1 or not parent.children[i+1].content.startswith(' '):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment