5 # Dieses Perl-Skript konvertiert eine gegebene Liste von Einträgen im neuen
6 # Wortlistenformat (mit bis zu fünf Feldern) ins alte Format (mit bis zu
11 # wl-new2old.pl [--debug] [liste1 liste2 ...] > ausgabe
13 # Die Eingabedateien müssen in UTF-8 kodiert sein.
15 # Sind keine Eingabedateien angegeben, verwendet das Skript ebenfalls die
16 # Standardeingabe. Beispiel:
18 # wl-new2old.pl < reformiert > wortliste.erzeugt
20 # Die Ausgabe erfolgt unsortiert.
22 # Im folgenden Beispiel befinden sich die Eingabedateien im Ordner »neu«.
23 # Eine sortierte Wortliste kann mit
25 # wl-new2old.pl neu/* \
31 # Option »--debug« gibt einen Dump mit mehr Informationen aus, der explizite
32 # und implizite Felder anzeigt.
35 # Diese Datei wird, bevor sie ausgeführt wird, mithilfe des
36 # »M4filter«-Moduls vom GNU M4 Makroprozessor gefiltert.
38 # Die Datei »M4filter.pm« befindet sich im gleichen Verzeichnis wie dieses
39 # Skript; wir müssen daher das »lib«-Verzeichnis entsprechend adjustieren.
42 use lib dirname
(__FILE__
);
45 # Wir wollen › und ‹ als M4-Quotes verwenden.
48 # Hauptgrund für die Verwendung von M4 ist das Fehlen von Inline-Funktionen
49 # in Perl. Da Subroutinen das Skript deutlich verlangsamen, benützen wir
50 # stattdessen die M4-Funktionalität.
54 # * Argumente in M4-Makros sollen normalerweise von › und ‹ umschlossen
55 # sein, um vorzeitige Expansion zu verhindern. Der Perl-Code in dieser
56 # Datei verwendet keines der beiden Zeichen, was Zweideutigkeiten
59 # * »$1«, »$2«, ... sind Argumente in M4-Makros, aber auch Perl verwendet
60 # diese Konstrukte in regulären Ausdrücken. Perl jedoch erlaubt die
61 # alternative Syntax »${1}«, »${1}«, ..., die wir daher verwenden, um
62 # Zweideutigkeiten zu verhindern.
64 # * Zur besseren Lesbarkeit sind Namen von M4-Makros immer in
65 # Großbuchstaben; das verhindert auch Kollisionen im Code, da nur
66 # Kleinbuchstaben abgearbeitet werden – es gibt zwar großbuchstabige
67 # Einträge in der Wortliste, doch sind sie nicht für dieses Skript
70 # * Manche Schlüsselwörter sind identisch in M4 und Perl (z.B. »shift«).
71 # Derzeit allerdings sind keine von diesen in Verwendung. Falls sich das
72 # einmal ändert, müssen die betroffenen Befehle (auf der M4-Seite) mittels
73 # »defn« umdefiniert werden.
76 # Mit Subroutinen statt »M4filter« ist das Skript rund 20% langsamer.
82 use utf8; # String-Literals direkt als UTF-8.
83 use open qw(:std :utf8);
84 use feature
qw(unicode_strings);
85 use Getopt
::Long
qw(:config no_ignore_case
88 use List
::MoreUtils
qw(first_index);
92 GetOptions
("debug" => \
$debug);
95 # Analyse der Wortbestandteile
96 # ----------------------------
98 # Wir verwenden M4-Makros, um folgende Trennvarianten abzudecken:
100 # reformierte Rechschreibung,
101 # traditionelle Rechtschreibung,
103 # reformierte Rechtschreibung, Versalform,
104 # traditionelle Rechtschreibung, Versalform,
106 # traditionelle schweizerdeutsche Rechtschreibung.
108 # Beachte: Die Wortliste hat keine separaten Einträge für traditionelle
109 # schweizerdeutsche Versalformen; diese fallen entweder mit den
110 # traditionellen Versalformen oder den traditionellen schweizerdeutschen
113 # Beachte weiters, daß sich Einträge für reformierte und traditionelle
114 # Rechtschreibung teilweise widersprechen und daher separat behandelt werden
115 # müssen; die Einträge für traditionelle deutsche und schweizerdeutsche
116 # Rechtschreibung dagegen nicht. Aus diesem Grund ist die Wortliste für
117 # traditionelle schweizerdeutsche Rechtschreibung einfach eine Obermenge der
118 # Wortliste für die traditionelle deutsche Rechtschreibung; etwaige
119 # »Fehleinträge« der traditionellen schweizerdeutschen Rechtschreibung (z.B.
120 # »süsssauer« statt dem korrekten »süssauer«) werden nicht entfernt.
123 # M4-Makros mit angehängtem »_« sind für Wörter ohne Trennstellenmarker.
126 # »s-t« -> »-st« (ref. -> trad.)
127 # (ref. -> trad. versal)
128 # (ref. -> trad. schweiz.)
131 ›
if ($1 =~ /s \W+ t/x) {
132 # Trennstelle zwischen »s« und »th(eta)« auch in traditioneller
133 # Rechtschreibung (z.B. An<äs-the-sie)!
135 # Kno-ten=äs-te -> Kno-ten=äste
137 $1 =~ s
/(?
: (?
<= \W \w
)
143 # Tes[-ter=/t=er<.]ken-nung -> Te[-ster=/st=er<.]ken-nung
144 $1 =~ s
/(?
<= \w
[^s
] )
153 /[-st${1}\/st
${2}]/xg
;
156 # (fass-te -> fass-te)
157 $1 =~ s
/(?
<= \w
[^s
] )
167 # »-ck« -> »{ck/k-k}« (ref. -> trad.)
168 # (ref. -> trad. versal)
169 # (ref. -> trad. schweiz.)
173 # Dru[-cker=/ck=er<.]zeug>nis -> Dru[{ck/k-k}er=/ck=er<.]zeug>nis
181 /[{ck\/k
-k
}${1}\
/ck${2}]/xg;
183 # He-cke -> He{ck/k-k}e
184 $1 =~ s
/[^\w\/\
[\
]\
{\
}]+
188 # Stau[=be-/b=e]cken -> Stau[=b/b=]e{ck/k-k}en
196 /[${1}\/${3}]${2}{ck\
/k-k}/xg;
199 # Buch=ecker -> Buch=e{ck/k-k}er
201 # (Vier=eck -> Vier=eck)
203 $1 =~ s
/(?: (?<= [^\w\/\
[\
]\
{\
}] \w
)
214 # »-ß« -> »s-s« (ref. -> ref. versal)
215 # (ref. -> trad. schweiz.)
217 define
(›BINDESTRICH_SZ_1‹
,
224 # auf<aßen -> auf<as-sen
226 # (auf<aßt -> auf<aßt)
227 $1 =~ s
/(?
: (?
<= \W \w
)
233 define
(›BINDESTRICH_SZ_1_‹
,
238 $1 =~ s
/(?
: (?
<= \W \w
)
245 # »-ß« -> »-ss« (ref. -> trad. versal)
247 define
(›BINDESTRICH_SZ_2‹
,
252 define
(›BINDESTRICH_SZ_2_‹
,
257 # »ß« -> »ss« (ref. -> ref. versal)
258 # (ref. -> trad. versal)
259 # (ref. -> trad. schweiz.)
261 # Diese Regel ist nach den spezielleren ß-Regeln weiter oben anzuwenden.
269 # Wir markieren Trennstellen nach »en« und »er« als ungünstig.
271 # Ge<fäss=er<kran-kung -> Ge<fäss=er<.kran-kung
272 $1 =~ s
/ss \W
+ (?
: en
| er
) \K
281 # »ss« -> »ß« (ref. -> trad.)
284 ›
# biss=fest -> biß=fest
288 # (Fa-desse -> Fa-desse)
295 # Wir entfernen Ungünstigkeitsmarker nach »en« und »er«.
297 # Ab<fluß=er<.hö-hung -> Ab<fluß=er<hö-hung
298 $1 =~ s
/ß \W
+ (?
: en
| er
) [<-] \K
310 # »xx-x« -> »{xx/xx-x}« (ref. -> trad.)
311 # (ref. -> trad. versal)
312 # (ref. -> trad. schweiz.)
314 # Buchstabe »x« ist irgendein Konsonant außer »s«.
317 ›
if ($1 =~ /(.) \g{1} \W+ \g{1}/x) {
318 # Bau=stoff==fir-ma -> Bau=sto{ff/ff==f}ir-ma
319 # (Griff=flä-che -> Griff=flä-che)
320 $1 =~ s
/([b
-df
-hj
-np
-rtv
-z
]) \g
{1} (\W
+) \g
{1}
322 /{${1}${1}\/${1}${1}${2}${1}}/xg
;
324 # Kipp=phä-no-men -> Ki{pp/pp=p}hä-no-men
325 $1 =~ s
/([prt
]) \g
{1} (\W
+) \g
{1}
327 /{${1}${1}\/${1}${1}${2}${1}}/xg
;
329 # Wir markieren Trennstellen nach einen Buchstaben als ungünstig.
331 # Ab<fa{ll/ll=l}a-ger -> Ab<fa{ll/ll=l}a-.ger
332 $1 =~ s
/([b
-df
-hj
-np
-rtv
-z
]) \g
{1} \W
+ \g
{1} } [aeiouäöüy
] \K
338 ›
if ($1 =~ /(.) \g{1} \W+ \g{1}/x) {
339 $1 =~ s
/([b
-df
-hj
-np
-rtv
-z
]) \g
{1} \W
+ \g
{1}
343 $1 =~ s
/([prt
]) \g
{1} \W
+ \g
{1}
349 define
(›ENTFERNE_MARKER‹
,
352 # {»Variante A«/»Variante B«} -> »Variante A«
353 # [»Variante A«/»Variante B«] -> »Variante A«
357 # Ab<fa{ll/ll=l}a-.ger -> Ab<falla-.ger
358 # Dru[-cker=/ck=er<.]zeug>nis -> Dru-cker=zeug>nis
360 # Beachte, daß »{.../...}« bei reformierter Rechtschreibung nicht
361 # auftreten kann (»[.../...]« dagegen schon).
363 $1 =~ s/\{ (.*?) \/ .*? \}/${1}/gx
;
364 $1 =~ s/\[ (.*?) \/ .*? \]/${1}/gx
;
369 # Makros zum Erzeugen von Wortformen aus der reformierten Trennung.
370 # Wiederum sind die Versionen mit angehängtem »_« im Namen für Wörter ohne
371 # Trennstellenmarker.
376 ›ENTFERNE_MARKER
(›
$1‹
)‹
)
390 ENTFERNE_MARKER
(›
$1‹
)‹
)
394 ›BINDESTRICH_SZ_1
(›
$1‹
);
397 define
(›REF_VERSAL_‹
,
398 ›BINDESTRICH_SZ_1_
(›
$1‹
);
400 ENTFERNE_MARKER
(›
$1‹
)‹
)
403 define
(›TRAD_VERSAL‹
,
406 BINDESTRICH_SZ_2
(›
$1‹
);
410 define
(›TRAD_VERSAL_‹
,
413 BINDESTRICH_SZ_2_
(›
$1‹
);
416 ENTFERNE_MARKER
(›
$1‹
)‹
)
419 define
(›TRAD_SCHWEIZ‹
,
422 BINDESTRICH_SZ_1
(›
$1‹
);
426 define
(›TRAD_SCHWEIZ_‹
,
429 BINDESTRICH_SZ_1_
(›
$1‹
);
432 ENTFERNE_MARKER
(›
$1‹
)‹
)
435 # Makros zum Erzeugen von Wortformen aus der traditionellen Trennung.
440 ›ENTFERNE_MARKER
(›
$1‹
)‹
)
443 define
(›TRAD_VERSAL_T‹
,
444 ›BINDESTRICH_SZ_2
(›
$1‹
);
447 define
(›TRAD_VERSAL_T_‹
,
448 ›BINDESTRICH_SZ_2_
(›
$1‹
);
450 ENTFERNE_MARKER
(›
$1‹
)‹
)
453 define
(›TRAD_SCHWEIZ_T‹
,
454 ›BINDESTRICH_SZ_1
(›
$1‹
);
457 define
(›TRAD_SCHWEIZ_T_‹
,
458 ›BINDESTRICH_SZ_1
(›
$1‹
);
460 ENTFERNE_MARKER
(›
$1‹
)‹
)
463 # Konvertiere Argument zu Großbuchstaben (unter Auslassung von »ß«).
467 ›abcdefghijklmnopqrstuvwxyzäöü‹
,
468 ›ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ‹
)‹
)
471 # Konvertiere ersten Buchstaben des Arguments zu einem Großbuchstaben. Der
472 # Code hier ist eine verhübschte Version der Beispieldatei »capitalize2.m4«
473 # aus der M4-Distribution.
478 ›changequote
(›»‹
, ›«‹
)‹
)
480 ›changequote
(»›«
, »‹«
)‹
)
483 »abcdefghijklmnopqrstuvwxyzäöü«
,
484 »ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ«
)‹
)
487 »ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ«
,
488 »abcdefghijklmnopqrstuvwxyzäöü«
)‹
)
489 define
(›_GROSS_ANFANG_ALT‹
,
492 »_GROSS_ALT
(»»\
1««
)_KLEIN_ALT
(»»\
2««
)«
)‹
)
493 define
(›GROSS_ANFANG‹
,
494 ›_ARG1
(_ZU_ALT
()patsubst
(»»
$*««
,
496 _VON_ALT
()›«_
$0_ALT(»\
&«
)»‹_ZU_ALT
())_VON_ALT
())‹
)
499 # Ein Makro, um einen Eintrag im »einträge«-Hash zu setzen.
501 # $1 ist der Präfix (z.B. »ref«)
502 # $2 ist die Feldkonstante (z.B. »Ref«)
503 # $3 ist der Flagwert (z.B. »Ref_abgeleitet«)
505 # Verwendete Variablen:
506 # $$1_wort (z.B. »$ref_wort«)
507 # $$1_wort_lc (z.B. »$ref_wort_lc«)
508 # $$1_trennung (z.B. »$ref_trennung«)
512 ›@
{$einträ
ge{$$1_wort_lc}}[Wort
] //= $$1_wort;
513 @
{$einträ
ge{$$1_wort_lc}}[$2, $2_] = ($$1_trennung, $3)‹
)
516 # Ein Makro, um Kommentare im »einträge«-Hash zu setzen.
518 # $1 ist der Präfix (z.B. »ref«)
519 # $2 ist der Flagwert (z.B. »Ref_abgeleitet«)
521 # Verwendete Variablen:
522 # $$1_wort_lc (z.B. »$ref_wort_lc«)
527 ›
if (!@
{$einträ
ge{$$1_wort_lc}}[Kommentar_
]
528 || @
{$einträ
ge{$$1_wort_lc}}[Kommentar_
] < $2) {
529 @
{$einträ
ge{$$1_wort_lc}}[Kommentar
, Kommentar_
] = ($kommentar, $2);
533 # Sekundärmakros, die abgeleitete Wortformen setzen.
535 # $1 ist der Präfix (z.B. »ref«)
536 # $2 ist das Trennmakro (z.B. »REF«),
537 # $3 ist das Wortmakro (z.B. »REF_«)
538 # $4 ist die Feldkonstante (z.B. »Ref«)
539 # $5 ist das ableitende Wort
541 # Verwendete Variablen:
542 # $$1_wort (z.B. »$ref_wort«)
543 # $$1_wort_lc (z.B. »$ref_wort_lc«)
544 # $$1_trennung (z.B. »$ref_trennung«)
547 define
(›_REF_ABGELEITET‹
,
552 $2(››
$$1_trennung‹‹
);
554 $$1_wort_lc = lc $$1_wort;
555 if (!@
{$einträ
ge{$$1_wort_lc}}[$4_]) {
556 EINTRAG
(›
$1‹
, ›
$4‹
, ›Ref_abgeleitet‹
);
560 define
(›_TRAD_ABGELEITET‹
,
565 $2(››
$$1_trennung‹‹
);
567 $$1_wort_lc = lc $$1_wort;
568 if (!@
{$einträ
ge{$$1_wort_lc}}[$4_]
569 || @
{$einträ
ge{$$1_wort_lc}}[$4_] <= Trad_abgeleitet
) {
570 EINTRAG
(›
$1‹
, ›
$4‹
, ›Trad_abgeleitet‹
);
574 # Sekundärmakro, das eine explizite Wortform setzt.
576 # $1 ist der Präfix (z.B. »ref«)
577 # $2 ist das Trennmakro (z.B. »REF«),
578 # $3 ist das Wortmakro (z.B. »REF_«)
579 # $4 ist die Feldkonstante (z.B. »Ref«)
580 # $5 ist das ableitende Wort
582 # Verwendete Variablen:
586 # $$1_wort (z.B. »$ref_wort«)
587 # $$1_wort_lc (z.B. »$ref_wort_lc«)
588 # $$1_trennung (z.B. »$ref_trennung«)
590 define
(›_EINTRAG_EXPLIZIT‹
,
594 ENTFERNE_MARKER
(›
$$1_wort‹
);
596 $$1_wort_lc = lc $$1_wort;
597 EINTRAG
(›
$1‹
, ›
$4‹
, ›Explizit‹
)‹
)
600 # Die Hauptmakros sind nur dazu da, die notwendigen Makronamen aus dem
601 # ersten Argument zu konstruieren. $2 ist das ableitende Wort.
603 define
(›REF_ABGELEITET‹
,
607 ›GROSS_ANFANG
(›
$1‹
)‹
,
611 define
(›TRAD_ABGELEITET‹
,
615 ›GROSS_ANFANG
(›
$1‹
)‹
,
619 define
(›EINTRAG_EXPLIZIT‹
,
623 ›GROSS_ANFANG
(›
$1‹
)‹
,
627 # Zum Debuggen. Das zweite Argument von »format« darf nicht von › und ‹
631 ›
print " format(›%-14s‹, patsubst(›$1‹, ›_‹, ›. ‹):) "
641 # Alle Einträge kommen in ein Hash, wobei der Schlüssel das zu trennende
642 # Wort in Kleinschreibung ist (wir verwenden Perls »lc«-Funktion). Die
643 # Elemente sind Arrays mit folgender Struktur:
645 # Wort Wort ungetrennt
646 # Ref reformierte Trennung
647 # Trad traditionelle Trennung
648 # Ref_versal reformierte versale Trennung
649 # Trad_versal traditionell versale Trennung
650 # Trad_schweiz traditionelle schweizer Trennung
651 # Kommentar Kommentar, falls vorhanden, sonst ""
660 # Die sechs Felder endend mit »_« sind numerische Flags mit folgenden Werten:
662 # Ref_abgeleitet abgeleitet von reformierter Trennung
663 # Trad_abgeleitet abgeleitet von traditioneller Trennung
664 # Explizit explizit gesetzt
666 # Alle Trennungen in einem Element haben die gleiche (ungetrennte) Wortform
667 # im Gegensatz zur Liste im Kurzformat, wo in einer Zeile verschiedene
668 # Wörter auftreten können.
691 Trad_abgeleitet
=> 1,
696 # Folgender Algorithmus wird für das Setzen von Kommentaren angewandt.
698 # * Der Eintrag für das erste nicht-leere Feld einer Zeile wird explizit mit
699 # einem Kommentar gesetzt (auch wenn er leer sein sollte).
701 # * Abgeleitete Kommentare werden gesetzt, falls sie nicht-leer sind und
702 # kein expliziter Eintrag vorhanden ist.
706 # Variablen, welche von »REF_ABGELEITET«, »TRAD_ABGELEITET« und
707 # »EINTRAG_EXPLIZIT« benötigt werden.
708 my ($ref_wort, $ref_wort_lc, $ref_trennung,
709 $ref_versal_wort, $ref_versal_wort_lc, $ref_versal_trennung,
710 $trad_wort, $trad_wort_lc, $trad_trennung,
711 $trad_versal_wort, $trad_versal_wort_lc, $trad_versal_trennung,
712 $trad_schweiz_wort, $trad_schweiz_wort_lc, $trad_schweiz_trennung);
716 # Reine Kommentarzeilen werden ignoriert.
717 next if (/^ \s* \#/x);
724 my @trennungen = split(";", ${1});
725 my $kommentar = ${2} // "";
727 # Reformierte Rechtschreibung.
728 my $ref_trennung_explizit = $trennungen[0];
730 if ($ref_trennung_explizit ne "-1-") {
731 EINTRAG_EXPLIZIT
(›
ref‹
, ›
$ref_trennung_explizit‹
);
733 # Leite reformierte Wortform aus der reformierten Trennung ab.
734 REF_ABGELEITET
(›ref_versal‹
, ›
$ref_trennung_explizit‹
);
736 KOMMENTAR
(›
ref‹
, ›Explizit‹
);
737 if ($kommentar && @trennungen == 1) {
738 KOMMENTAR
(›ref_versal‹
, ›Ref_abgeleitet‹
);
745 print "abgeleitet:\n";
749 # Leite traditionelle Wortformen aus der reformierten Trennung ab,
750 # wenn kein traditioneller Eintrag vorhanden ist.
751 if (@trennungen == 1) {
752 REF_ABGELEITET
(›trad‹
, ›
$ref_trennung_explizit‹
);
753 REF_ABGELEITET
(›trad_versal‹
, ›
$ref_trennung_explizit‹
);
754 REF_ABGELEITET
(›trad_schweiz‹
, ›
$ref_trennung_explizit‹
);
757 KOMMENTAR
(›trad‹
, ›Ref_abgeleitet‹
);
758 KOMMENTAR
(›trad_versal‹
, ›Ref_abgeleitet‹
);
759 KOMMENTAR
(›trad_schweiz‹
, ›Ref_abgeleitet‹
);
764 DEBUG
(›trad_versal‹
);
765 DEBUG
(›trad_schweiz‹
);
772 next if @trennungen == 1;
774 # Traditionelle Rechtschreibung.
775 my $trad_trennung_explizit = $trennungen[1] eq "-2-"
776 ?
"" : $trennungen[1];
778 EINTRAG_EXPLIZIT
(›trad‹
, ›
$trad_trennung_explizit‹
);
779 TRAD_ABGELEITET
(›trad_versal‹
, ›
$trad_trennung_explizit‹
);
780 TRAD_ABGELEITET
(›trad_schweiz‹
, ›
$trad_trennung_explizit‹
);
783 KOMMENTAR
(›trad‹
, ›Explizit‹
);
787 if ($debug && $trad_trennung_explizit) {
791 print "abgeleitet:\n";
792 DEBUG
(›trad_versal‹
);
793 DEBUG
(›trad_schweiz‹
);
796 next if @trennungen == 2;
798 # Reformierte Rechtschreibung, Versalform.
799 my $ref_versal_trennung_explizit = $trennungen[2] eq "-3-"
800 ?
"" : $trennungen[2];
802 EINTRAG_EXPLIZIT
(›ref_versal‹
, ›
$ref_versal_trennung_explizit‹
);
805 KOMMENTAR
(›ref_versal‹
, ›Explizit‹
);
809 if ($debug && $ref_versal_trennung_explizit) {
814 next if @trennungen == 3;
816 # Traditionelle Rechtschreibung, Versalform.
817 my $trad_versal_trennung_explizit = $trennungen[3] eq "-4-"
818 ?
"" : $trennungen[3];
820 EINTRAG_EXPLIZIT
(›trad_versal‹
, ›
$trad_versal_trennung_explizit‹
);
823 KOMMENTAR
(›trad_versal‹
, ›Explizit‹
);
827 if ($debug && $trad_versal_trennung_explizit) {
829 DEBUG
(›trad_versal‹
);
832 next if @trennungen == 4;
834 # Traditionelle Rechtschreibung, schweizerdeutsch.
835 my $trad_schweiz_trennung_explizit = $trennungen[4] eq "-5-"
836 ?
"" : $trennungen[4];
838 EINTRAG_EXPLIZIT
(›trad_schweiz‹
, ›
$trad_schweiz_trennung_explizit‹
);
841 KOMMENTAR
(›trad_schweiz‹
, ›Explizit‹
);
845 if ($debug && $trad_schweiz_trennung_explizit) {
847 DEBUG
(›trad_schweiz‹
);
852 # Wir iterieren jetzt über alle Einträge, um sie auszugeben.
853 foreach my $schlüssel
(keys %einträ
ge) {
854 my ($ref_trennung_lc,
856 $ref_versal_trennung_lc,
857 $trad_versal_trennung_lc,
858 $trad_schweiz_trennung_lc);
863 $ref_versal_trennung,
864 $trad_versal_trennung,
865 $trad_schweiz_trennung,
866 $kommentar) = @
{$einträ
ge{$schlüssel
}};
868 # Ignoriere leere Einträge.
869 next unless $ref_trennung
871 || $ref_versal_trennung
872 || $trad_versal_trennung
873 || $trad_schweiz_trennung;
877 $ref_trennung //= "";
878 $trad_trennung //= "";
879 $ref_versal_trennung //= "";
880 $trad_versal_trennung //= "";
881 $trad_schweiz_trennung //= "";
883 $ref_trennung_lc = lc $ref_trennung;
884 $trad_trennung_lc = lc $trad_trennung;
885 $ref_versal_trennung_lc = lc $ref_versal_trennung;
886 $trad_versal_trennung_lc = lc $trad_versal_trennung;
887 $trad_schweiz_trennung_lc = lc $trad_schweiz_trennung;
890 && $ref_trennung_lc eq $trad_trennung_lc
891 && (!$ref_versal_trennung_lc
892 || ($trad_trennung_lc eq $ref_versal_trennung_lc
893 && $ref_versal_trennung_lc eq $trad_versal_trennung_lc
894 && $trad_versal_trennung_lc eq $trad_schweiz_trennung_lc))) {
896 . $ref_trennung; # Feld 2
902 . ($trad_trennung ?
$trad_trennung
905 . ($ref_trennung ?
$ref_trennung
908 if ($ref_trennung_lc ne $ref_versal_trennung_lc
909 || $trad_trennung_lc ne $trad_versal_trennung_lc
910 || $trad_trennung_lc ne $trad_schweiz_trennung_lc) {
911 if ($ref_versal_trennung_lc eq $trad_versal_trennung_lc
912 && $ref_versal_trennung_lc eq $trad_schweiz_trennung_lc) {
913 if ($ref_versal_trennung) {
915 . $ref_versal_trennung; # Feld 5
922 . ($trad_versal_trennung ?
$trad_versal_trennung
925 . ($ref_versal_trennung ?
$ref_versal_trennung
928 if ($trad_versal_trennung_lc ne $trad_schweiz_trennung_lc) {
930 . ($trad_schweiz_trennung ?
$trad_schweiz_trennung
937 print " " . $kommentar if $kommentar;