diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-24 07:37:17 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-24 07:44:51 +0200 |
| commit | 9feaf3b9eebd79a37a252c2ffdf241f4190b2637 (patch) | |
| tree | 3775b5196b2a50d2d6dc200b6211851265d248aa /src/main/java/eu | |
| parent | e13b58a5e3b602b475c46e6d595749d375148836 (diff) | |
Der Browser bekommt den Notausgang, den die Befehlszeile schon hatte
Die Browserfassung galt als die vollwertige zweite Fassung des Erzeugnisses. Zwei
Angaben der Befehlszeile fehlten ihr aber: die Beschränkung auf einen einzelnen
Artikel und die Ausgabe des maschinell gelesenen Textes. Die erste war im Vordruck
nicht vorgesehen, obwohl Arbeiter und Rechenwerk den Wert längst durchreichten —
das Formular sandte an ihrer Stelle hart einen leeren Wert. Die zweite war
überhaupt nicht erreichbar.
Das Fehlende wiegt ungleich. Die Artikelangabe erspart Mühe; die Textausgabe
dagegen ist der einzige Weg, einem unerklärlich unangewandten Befehl auf den Grund
zu gehen. Wer im Browser arbeitete, stand vor einem Ergebnis, das er nicht
nachprüfen konnte, und war auf die Befehlszeile verwiesen — also gerade auf das,
was die Browserfassung entbehrlich machen sollte.
Die Textgewinnung wandert deshalb aus der Befehlszeilenklasse in den gemeinsamen
Kern (Pipeline.extrahiereText); beide Fassungen nehmen fortan denselben Weg. Der
Vordruck erhält das Feld „Anzuwendender Artikel“ und das Ankreuzfeld „Statt der
Synopse nur den maschinell gelesenen Text der Änderungsdokumente ausgeben“; das
Ergebnis kommt wie die Synopse als Verweis zum Öffnen und Sichern. Nebenbei
verträgt die Umsetzung nach Wahrheitswerten nun ein nicht gesetztes Feld, das als
„undefined“ herüberkommt. Das Handbuch zählt die Absätze des § 14 wieder
fortlaufend — es führte (6) und (7) zweimal — und stellt die Angaben des Vordrucks
den Schaltern des § 6 Absatz 2 gegenüber.
Eine neue Prüfung hält die Ausgabe des Notausgangs gegen den Text, den der Parser
bekommt: Führte sie einen anderen vor, so wiese sie in die Irre. Der Prüfbestand
umfasst hiernach 335 Prüfungen, sämtlich grün; REUSE meldet 174/174.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I2a9aee042b6454f8d591bc415a5c6f1c1e7b40b6
Diffstat (limited to 'src/main/java/eu')
| -rw-r--r-- | src/main/java/eu/mulk/aendggner/AendGgner.java | 8 | ||||
| -rw-r--r-- | src/main/java/eu/mulk/aendggner/Pipeline.java | 25 |
2 files changed, 29 insertions, 4 deletions
diff --git a/src/main/java/eu/mulk/aendggner/AendGgner.java b/src/main/java/eu/mulk/aendggner/AendGgner.java index a12515a..58b0d50 100644 --- a/src/main/java/eu/mulk/aendggner/AendGgner.java +++ b/src/main/java/eu/mulk/aendggner/AendGgner.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.EnumMap; import java.util.List; import java.util.concurrent.Callable; @@ -129,12 +130,11 @@ public class AendGgner implements Callable<Integer> { } if (extractOnly) { - var gesetz = Pipeline.ladeStammgesetz(baseFile); - var extraktor = new PatchTextExtraktor(Pipeline.superskriptModus(gesetz)); + var quellen = new ArrayList<Quelle>(); for (var file : patches) { - var text = extraktor.extrahiere(file); - System.out.println(raw ? text : TextBereiniger.bereinige(text)); + quellen.add(Quelle.lies(file)); } + System.out.print(Pipeline.extrahiereText(Quelle.lies(baseFile), quellen, raw)); return 0; } diff --git a/src/main/java/eu/mulk/aendggner/Pipeline.java b/src/main/java/eu/mulk/aendggner/Pipeline.java index 76b492f..7949e7f 100644 --- a/src/main/java/eu/mulk/aendggner/Pipeline.java +++ b/src/main/java/eu/mulk/aendggner/Pipeline.java @@ -275,6 +275,31 @@ public final class Pipeline { return dokument.kopf().art().istEntwurfsfassung(); } + /** + * Der Text der Änderungsdokumente, so wie das Erzeugnis ihn liest — der Notausgang des § 6 Absatz + * 2 des Handbuchs. + * + * <p>Bleibt die PDF-Aufbereitung im Einzelfall fehlerhaft, so ist nicht das Ergebnis zu + * beargwöhnen, sondern der Text nachzusehen, von Hand zu berichtigen und als Klartextdatei wieder + * einzuspeisen. Dass dieser Weg beiden Fassungen offensteht, ist kein Zierat: Wer im Browser + * arbeitet, hat sonst keine Möglichkeit, einem unerklärlichen Rest auf den Grund zu gehen. + * + * <p>Das Stammgesetz wird auch hier gebraucht, denn seine Schreibweise bestimmt den + * Superskriptmodus der Textgewinnung ({@link #superskriptModus}). + * + * @param roh die Bereinigung übergehen; nur zur Fehlersuche an der Textgewinnung selbst. + */ + public static String extrahiereText(Quelle baseFile, List<Quelle> patches, boolean roh) + throws Exception { + var extraktor = new PatchTextExtraktor(superskriptModus(ladeStammgesetz(baseFile))); + var text = new StringBuilder(); + for (var patch : patches) { + var roher = extraktor.extrahiere(patch); + text.append(roh ? roher : TextBereiniger.bereinige(roher)).append('\n'); + } + return text.toString(); + } + /** Bequemlichkeit für Befehlszeile und Tests; im Browser gibt es keine {@link Path}e. */ static Gesetz ladeStammgesetz(Path baseFile) throws Exception { return ladeStammgesetz(Quelle.lies(baseFile)); |
