5 # Dieses Perl-Skript wendet die TeX-Trennmusterdatei $1 auf den Datenstrom
6 # an, wobei $2 als Translationsdatei benutzt wird (das ist diejenige Datei,
7 # die `patgen' als viertes Argument benötigt). Die Eingabe kann `-'-Zeichen
8 # enthalten, welche vor der Weiterverarbeitung herausgefiltert werden.
10 # Trennungen direkt nach dem ersten und vor dem letzten Buchstaben in der
11 # Ausgabe werden entfernt, wie bei deutschen Trennungen erforderlich.
13 # Dieses Skript benützt patgen, nicht TeX! Die Trennmusterdatei darf daher
14 # keine TeX-Konstrukte (Makros u.ä.) enthalten.
16 # Aufruf: perl apply-pattern.pl trennmuster german.tr < eingabe > ausgabe
26 die "Aufruf: $prog trennmuster german.tr < eingabe > ausgabe\n";
29 my $trennmuster = File
::Spec
->rel2abs($ARGV[0]);
30 my $translation = File
::Spec
->rel2abs($ARGV[1]);
31 my $tempdir = File
::Temp
::tempdir
(CLEANUP
=> 1);
32 my $tempdatei = "pattern";
33 my $null = File
::Spec
->devnull();
37 || die "$prog: Kann nicht ins temporäre Verzeichnis `$tempdir' wechseln: $!\n";
41 open TEMP
, '>', $tempdatei
42 || die "$prog: Kann temporäre Datei `$tempdatei' nicht öffnen: $!\n";
50 open TEMP
, '>', $stdin
51 || die "$prog: Kann temporäre Datei `$stdin' nicht öffnen: $!\n";
56 # Portables Umleiten von stdin, stdout und stderr ...
57 open STDOUT_ALT
, '>&', \
*STDOUT
58 || die "$prog: Kann STDOUT nicht duplizieren: $!\n";
59 open STDERR_ALT
, '>&', \
*STDERR
60 || die "$prog: Kann STDERR nicht duplizieren: $!\n";
61 open STDOUT
, '>', $null
62 || die "$prog: Kann STDOUT nicht zur Nullausgabe umleiten: $!\n";
63 open STDERR
, '>', $null
64 || die "$prog: Kann STDERR nicht zur Nullausgabe umleiten: $!\n";
66 || die "$prog: Kann `$stdin' nicht nach STDIN umleiten: $!\n";
68 my $status = system("patgen $tempdatei $trennmuster $null $translation");
71 open STDOUT
, '>&', \
*STDOUT_ALT
72 || die "$prog: Kann STDOUT nicht wieder herstellen: $!\n";
73 open STDERR
, '>&', \
*STDERR_ALT
74 || die "$prog: Kann STDERR nicht wieder herstellen: $!\n";
76 die "$prog: Aufruf von patgen fehlgeschlagen: $fehler\n" if $status;
79 my ($pattmp) = <pattmp
.*>;
81 || die "$prog: Kann von patgen erzeugte Datei `$pattmp' nicht öffnen: $!\n";
91 my @vorlage = split(//, shift(@eingabe));
92 my @ergebnis = split(//, shift(@muster));
96 # letztes Zeichen ist immer \n, daher < und nicht <=
97 while ($i < $#vorlage) {
98 $j++ if ($ergebnis[$j] eq '-');
99 $ergebnis[$j++] = $vorlage[$i++];