diff options
| -rw-r--r-- | .gitattributes | 5 | ||||
| -rw-r--r-- | README.adoc | 74 | ||||
| -rwxr-xr-x | deploy/webpaket.sh | 113 | ||||
| -rw-r--r-- | pom.xml | 65 | ||||
| -rw-r--r-- | src/main/resources/META-INF/native-image/eu.mulk/aendggner/reachability-metadata.json | 5 | ||||
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/EndToEndTest.java | 2 | ||||
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/aenderung/parse/DokumentErkennerTest.java | 2 | ||||
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/aenderung/parse/ZusammenstellungsLeserTest.java | 2 | ||||
| -rw-r--r-- | src/test/resources/sampledata/AGG/AGG.pdf (renamed from src/main/resources/sampledata/AGG/AGG.pdf) | bin | 115267 -> 115267 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/AGG/BJNR189710006.epub (renamed from src/main/resources/sampledata/AGG/BJNR189710006.epub) | bin | 60798 -> 60798 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/AGG/BJNR189710006.xml (renamed from src/main/resources/sampledata/AGG/BJNR189710006.xml) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf (renamed from src/main/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf) | bin | 466991 -> 466991 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf (renamed from src/main/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf) | bin | 311068 -> 311068 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf (renamed from src/main/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf) | bin | 355935 -> 355935 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/AGG/SOURCES (renamed from src/main/resources/sampledata/AGG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf (renamed from src/main/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf) | bin | 235211 -> 235211 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf (renamed from src/main/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf) | bin | 126157 -> 126157 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/BayJG-alt.txt (renamed from src/main/resources/sampledata/BayJG/BayJG-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/BayJG.pdf (renamed from src/main/resources/sampledata/BayJG/BayJG.pdf) | bin | 127678 -> 127678 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf (renamed from src/main/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf) | bin | 215013 -> 215013 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf (renamed from src/main/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf) | bin | 724966 -> 724966 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf (renamed from src/main/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf) | bin | 2313610 -> 2313610 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/SOURCES (renamed from src/main/resources/sampledata/BayJG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/BayJG/gvbl-2026-06.pdf (renamed from src/main/resources/sampledata/BayJG/gvbl-2026-06.pdf) | bin | 932204 -> 932204 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf (renamed from src/main/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf) | bin | 175382 -> 175382 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BJNR172810020.epub (renamed from src/main/resources/sampledata/GEG/BJNR172810020.epub) | bin | 233481 -> 233481 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BJNR172810020.xml (renamed from src/main/resources/sampledata/GEG/BJNR172810020.xml) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BR-Drs-170-23.pdf (renamed from src/main/resources/sampledata/GEG/BR-Drs-170-23.pdf) | bin | 4654073 -> 4654073 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf (renamed from src/main/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf) | bin | 1833105 -> 1833105 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf (renamed from src/main/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf) | bin | 1240118 -> 1240118 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf (renamed from src/main/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf) | bin | 1579675 -> 1579675 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf (renamed from src/main/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf) | bin | 580105 -> 580105 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/GEG.pdf (renamed from src/main/resources/sampledata/GEG/GEG.pdf) | bin | 493580 -> 493580 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf (renamed from src/main/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf (renamed from src/main/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf) | bin | 1370435 -> 1370435 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/GEG/SOURCES (renamed from src/main/resources/sampledata/GEG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf (renamed from src/main/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf (renamed from src/main/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/0645-20.pdf (renamed from src/main/resources/sampledata/IfSG/0645-20.pdf) | bin | 1108692 -> 1108692 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/1918111.pdf (renamed from src/main/resources/sampledata/IfSG/1918111.pdf) | bin | 589283 -> 589283 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/1923944.pdf (renamed from src/main/resources/sampledata/IfSG/1923944.pdf) | bin | 706497 -> 706497 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/1924232.pdf (renamed from src/main/resources/sampledata/IfSG/1924232.pdf) | bin | 1089628 -> 1089628 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/1924334.pdf (renamed from src/main/resources/sampledata/IfSG/1924334.pdf) | bin | 1651196 -> 1651196 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/BJNR104510000.epub (renamed from src/main/resources/sampledata/IfSG/BJNR104510000.epub) | bin | 159281 -> 159281 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/BJNR104510000.xml (renamed from src/main/resources/sampledata/IfSG/BJNR104510000.xml) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive (renamed from src/main/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive) | bin | 812588 -> 812588 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/IfSG.pdf (renamed from src/main/resources/sampledata/IfSG/IfSG.pdf) | bin | 280195 -> 280195 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/SOURCES (renamed from src/main/resources/sampledata/IfSG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/IfSG/bgbl120s2397_78991.pdf (renamed from src/main/resources/sampledata/IfSG/bgbl120s2397_78991.pdf) | bin | 145961 -> 145961 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/Landesrecht-Beispiele.adoc (renamed from src/main/resources/sampledata/Landesrecht-Beispiele.adoc) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt (renamed from src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf (renamed from src/main/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf) | bin | 196659 -> 196659 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/NRW/LMG-NRW-alt.txt (renamed from src/main/resources/sampledata/NRW/LMG-NRW-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/NRW/SOURCES (renamed from src/main/resources/sampledata/NRW/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/NRW/TMZ-Gesetz-alt.txt (renamed from src/main/resources/sampledata/NRW/TMZ-Gesetz-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/NRW/WDR-Gesetz-alt.txt (renamed from src/main/resources/sampledata/NRW/WDR-Gesetz-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Niedersachsen/NEFG-alt.txt (renamed from src/main/resources/sampledata/Niedersachsen/NEFG-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf (renamed from src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf) | bin | 187315 -> 187315 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf (renamed from src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf) | bin | 570518 -> 570518 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/BJNR021980989.epub (renamed from src/main/resources/sampledata/ProdHaftG/BJNR021980989.epub) | bin | 27581 -> 27581 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/BJNR021980989.xml (renamed from src/main/resources/sampledata/ProdHaftG/BJNR021980989.xml) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf (renamed from src/main/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf) | bin | 651260 -> 651260 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/ProdHaftG.pdf (renamed from src/main/resources/sampledata/ProdHaftG/ProdHaftG.pdf) | bin | 64544 -> 64544 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf (renamed from src/main/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf) | bin | 363627 -> 363627 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf (renamed from src/main/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf) | bin | 363006 -> 363006 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/SOURCES (renamed from src/main/resources/sampledata/ProdHaftG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf (renamed from src/main/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf) | bin | 80715 -> 80715 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt (renamed from src/main/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf (renamed from src/main/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf) | bin | 70076 -> 70076 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf (renamed from src/main/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf) | bin | 249028 -> 249028 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf (renamed from src/main/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Thueringen/SOURCES (renamed from src/main/resources/sampledata/Thueringen/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt (renamed from src/main/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/UWG/BJNR141400004.epub (renamed from src/main/resources/sampledata/UWG/BJNR141400004.epub) | bin | 60406 -> 60406 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/UWG/BJNR141400004.xml (renamed from src/main/resources/sampledata/UWG/BJNR141400004.xml) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/UWG/BR-Drs-8-26.pdf (renamed from src/main/resources/sampledata/UWG/BR-Drs-8-26.pdf) | bin | 902516 -> 902516 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf (renamed from src/main/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf) | bin | 1277567 -> 1277567 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf (renamed from src/main/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf) | bin | 586343 -> 586343 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/UWG/SOURCES (renamed from src/main/resources/sampledata/UWG/SOURCES) | 0 | ||||
| -rw-r--r-- | src/test/resources/sampledata/UWG/UWG.pdf (renamed from src/main/resources/sampledata/UWG/UWG.pdf) | bin | 128227 -> 128227 bytes | |||
| -rw-r--r-- | src/test/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf (renamed from src/main/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf) | bin | 304753 -> 304753 bytes |
81 files changed, 223 insertions, 45 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ea305c0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Der Beispielkorpus besteht aus Gesetzes- und Drucksachen-PDFs fremder Urheberschaft. +# Er ist nicht „Corresponding Source“ im Sinne der AGPLv3 — gebaut wird ohne ihn —, und +# er machte das der Browserfassung beigelegte Quelltextarchiv dreißigmal so groß wie den +# Quelltext selbst. Wer ihn braucht (für die Tests), holt das Repository. +src/test/resources/sampledata/** export-ignore diff --git a/README.adoc b/README.adoc index 996a0be..ee363d4 100644 --- a/README.adoc +++ b/README.adoc @@ -111,7 +111,7 @@ https://matthias.benkard.de/aendggner/. (2) Fortlaufende Quelltextquelle ist https://gerrit.benkard.de/plugins/gitiles/aendggner. Die jeweils betriebene Fassung liegt der Browserfassung überdies als `aendggner-quelltext.tar.gz` bei -(§ 15 Absatz 4). +(§ 15 Absatz 5). (3) Das Erzeugnis steht unter der GNU Affero General Public License, Fassung 3; der Lizenztext ist der Datei `COPYING` zu entnehmen. @@ -486,15 +486,42 @@ JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package ---- (4) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`, -`style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 24 MB, -komprimiert etwa 7 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar: +`style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 17 MB, +komprimiert etwa 5 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar: `deploy/webpaket.sh` läuft am Ende desselben Befehls, wirft den mehrere hundert -Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, legt den Quelltext -der gebauten Fassung als `aendggner-quelltext.tar.gz` samt -`quelltext-fassung.txt` bei und komprimiert die großen Dateien nach `.gz` und -`.br` vor. - -(5) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung +Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, schickt das Modul +durch `wasm-opt -Oz` und legt den Quelltext der gebauten Fassung als +`aendggner-quelltext.tar.gz` samt `quelltext-fassung.txt` bei. + +(5) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt, +handelt sich die Megabyte wieder ein: + +1. `-Os` beim Übersetzen statt der auf Durchsatz gerichteten Voreinstellung; +2. kein Picocli-Annotationsprozessor im Profil `wasm`. Er meldete die + Befehlszeilenklasse zur Reflexion an, worauf die Erreichbarkeitsanalyse die + gesamte Befehlszeilenfassung ins Browser-Image zog, die dort niemand aufruft; +3. ein enger Ressourcen-Glob in `reachability-metadata.json`. Das frühere + `org/apache/fontbox/**` bettete 3,3 MB CJK-CMaps, `Scripts.txt` und — weil + `**` auch Klassendateien trifft — 0,7 MB `.class`-Dateien ein, von denen + deutsche Gesetzes-PDFs nichts brauchen. Geblieben sind die beiden + Identity-CMaps; `org/apache/pdfbox/resources/**` bleibt vollständig, damit die + Breitenberechnung bei nicht eingebetteten Schriften unangetastet ist; +4. `wasm-opt -Oz` als Nachlauf. Die zugelassenen Wasm-Merkmale sind in + `webpaket.sh` einzeln aufgezählt und nicht als `--all-features` erteilt: Sonst + nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul + scheitert erst beim Instanziieren. + +(6) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt +`src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und +Drucksachentexte fremder Urheberschaft, an denen allein die Tests messen — +Quelltext im Sinne der AGPLv3 sind sie nicht, gebaut wird ohne sie, und sie +machten das Archiv dreißigmal so groß wie den Quelltext (29,7 MB statt 0,26 MB). +`quelltext-fassung.txt` sagt dies und verweist für den vollständigen Korpus auf +die Anschrift nach § 3 Absatz 2. Wächst das Archiv wieder über 8 MiB, so bricht +`webpaket.sh` ab; alsdann sind Massendaten ins Repository geraten, die dort nicht +hingehören. + +(7) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung nach Absatz 3 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute. Für einen Probelauf hilft `QUELLTEXT_UNGEPRUEFT=1`. @@ -513,26 +540,37 @@ Weg für Massenläufe. [[ausrollen]] == § 15 Ausrollen -(1) Betrieben wird die Fassung unter einem Unterpfad einer bestehenden Domain, -https://matthias.benkard.de/aendggner/. Ein eigener Server und ein eigenes -Zertifikat sind hierfür nicht erforderlich; erforderlich ist nur ein Webserver -für statische Dateien. +(1) Erforderlich ist nur ein Ort für statische Dateien. Ausgeliefert wird über +Cloudflare Workers. Dort gilt eine Grenze von 25 MiB je Datei — unkomprimiert +gemessen —, und komprimiert wird beim Ausliefern ohnehin. `webpaket.sh` legt +deshalb keine `.gz`/`.br`-Beilagen mehr an und hält am Ende jede Datei gegen +diese Grenze; überschreitet eine sie, so bricht der Bau ab, statt das Hochladen +scheitern zu lassen. [source,shell script] ---- JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package +---- + +(2) Wer die Fassung stattdessen selbst ausliefert — unter einem Unterpfad einer +bestehenden Domain, wie zuvor unter https://matthias.benkard.de/aendggner/ —, +braucht die Vorkompression und fordert sie beim Bau an: + +[source,shell script] +---- +JAVA_HOME=/pfad/zu/oracle-graalvm VORKOMPRIMIEREN=1 ./mvnw -Pwasm package rsync -av --delete target/web/ server:/var/www/aendggner/ ---- -(2) `deploy/nginx-aendggner.conf` ist kein eigener `server`-Block, sondern ein +(3) `deploy/nginx-aendggner.conf` ist kein eigener `server`-Block, sondern ein Schnipsel zum Einfügen in den vorhandenen (`include`). Er bringt mit: 1. die Weiterleitung von `/aendggner` auf `/aendggner/`, ohne die alle relativen Verweise der Seite auf die Domainwurzel zielten; 2. den MIME-Typ `application/wasm`, ohne den der Browser die Instanziierung des Moduls verweigert; -3. `gzip_static`/`brotli_static` für die vorkomprimierten Dateien, statt 24 MB je - Abruf neu zu packen; +3. `gzip_static`/`brotli_static` für die nach Absatz 2 vorkomprimierten Dateien, + statt 17 MB je Abruf neu zu packen; 4. `Cache-Control: no-cache` statt einer Haltefrist. Die Dateinamen tragen keine Fassungskennung, und ein Browser mit altem `app.js` und neuem `.wasm` bekäme sonst eine Mischfassung, die es nie gegeben hat. Revalidiert wird per ETag; das @@ -543,11 +581,11 @@ Schnipsel zum Einfügen in den vorhandenen (`include`). Er bringt mit: Synopse als `blob:`-Dokument die Richtlinie der erzeugenden Seite erbt, ihr Stylesheet aber eingebettet trägt. -(3) `impressum.html` und `datenschutz.html` tragen die Angaben nach § 5 DDG und +(4) `impressum.html` und `datenschutz.html` tragen die Angaben nach § 5 DDG und Art. 13 DSGVO. Die dort genannte Aufbewahrungsfrist der Zugriffsprotokolle (14 Tage) muss zu derjenigen des Servers passen. -(4) Der Footer der Startseite verweist auf den beigelegten Quelltext-Tarball; dies +(5) Der Footer der Startseite verweist auf den beigelegten Quelltext-Tarball; dies verlangt AGPLv3 § 13 für den Netzwerkbetrieb. Als fortlaufende Zweitquelle ist die Anschrift nach § 3 Absatz 2 genannt. diff --git a/deploy/webpaket.sh b/deploy/webpaket.sh index 2003134..75ad471 100755 --- a/deploy/webpaket.sh +++ b/deploy/webpaket.sh @@ -3,11 +3,19 @@ # „package“ des Profils -Pwasm, unmittelbar nach native-image. # # 1. Der Textzwischenschritt aendggner.js.wat (mehrere hundert Megabyte) wird entfernt. -# 2. Der Quelltext der gebauten Fassung wird als Tarball beigelegt — AGPLv3 §13 verlangt +# 2. Das Modul geht durch wasm-opt -Oz, sofern Binaryen zur Hand ist. +# 3. Der Quelltext der gebauten Fassung wird als Tarball beigelegt — AGPLv3 §13 verlangt # beim Netzwerkbetrieb einen Quellcode-Zugang für die Nutzer:innen, und der Footer der # Startseite verweist darauf. -# 3. Die großen Dateien werden vorkomprimiert, damit nginx sie mit gzip_static bzw. -# brotli_static ausliefern kann, statt 24 MB je Abruf neu zu packen. +# 4. Nur die vom Bau erzeugten Dateien bleiben stehen; alles hier Liegende wird +# hochgeladen. +# 5. Auf Wunsch (VORKOMPRIMIEREN=1) werden die großen Dateien vorkomprimiert. +# +# Zielplattform ist Cloudflare Workers: dort gilt eine Grenze von 25 MiB je Datei +# (unkomprimiert), und komprimiert wird beim Ausliefern ohnehin. Deshalb ist die +# Vorkompression abgeschaltet und die Größe jeder Datei wird geprüft. Wer stattdessen +# selbst mit nginx ausliefert (deploy/nginx-aendggner.conf, gzip_static/brotli_static), +# ruft das Skript mit VORKOMPRIMIEREN=1 auf. # # Aufruf: deploy/webpaket.sh <ausgabeverzeichnis> (Standard: target/web) @@ -16,15 +24,56 @@ set -eu ziel="${1:-target/web}" quelle="$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)" +# Cloudflare Workers nimmt keine Datei über 25 MiB an. +grenze_datei=26214400 +# Der Quelltext misst ein Viertel Megabyte. Wächst das Archiv über diese Schranke, sind +# wieder Massendaten ins Repository geraten, die dort nicht hingehören (siehe +# .gitattributes) — dann lieber der Bau ab als ein unbrauchbares Paket. +grenze_archiv=8388608 + if [ ! -d "$ziel" ]; then echo "webpaket: $ziel gibt es nicht — erst -Pwasm package laufen lassen." >&2 exit 1 fi +groesse() { + wc -c <"$1" | tr -d ' ' +} + # 1. Zwischenschritt fort. rm -f "$ziel/aendggner.js.wat" -# 2. Quelltext der gebauten Fassung. +# 2. Nachoptimierung. -Oz zieht die Codegröße noch einmal spürbar zusammen. +# +# Die Merkmale sind einzeln aufgezählt, nicht als --all-features: Binaryen darf ausgeben, +# was es darf, und mit --all-features nutzt es auch Vorschläge, die noch kein Browser +# annimmt — das Modul scheitert dann erst beim Instanziieren („invalid heap type 'exact'“ +# aus den custom descriptors, „invalid import kind 127“ aus der kompakten +# Importsektion). Aufgeführt ist deshalb nur, was ausgeliefert in den Browsern steht und +# was Web Image braucht: WasmGC samt Referenztypen, das Ausnahmen-Proposal, endständige +# Aufrufe. Fehlt wasm-opt, bleibt das Modul, wie es ist — der Bau soll daran nicht +# scheitern. +wasm_merkmale="--enable-gc --enable-reference-types --enable-exception-handling + --enable-tail-call --enable-bulk-memory --enable-bulk-memory-opt + --enable-nontrapping-float-to-int --enable-sign-ext + --enable-mutable-globals --enable-multivalue --enable-extended-const + --enable-simd --enable-call-indirect-overlong" + +if [ -f "$ziel/aendggner.js.wasm" ]; then + vorher="$(groesse "$ziel/aendggner.js.wasm")" + if command -v wasm-opt >/dev/null 2>&1; then + # shellcheck disable=SC2086 # die Merkmalsliste soll in Wörter zerfallen + wasm-opt $wasm_merkmale -Oz \ + -o "$ziel/aendggner.js.wasm.neu" "$ziel/aendggner.js.wasm" + mv "$ziel/aendggner.js.wasm.neu" "$ziel/aendggner.js.wasm" + echo "webpaket: wasm-opt: $vorher -> $(groesse "$ziel/aendggner.js.wasm") Bytes." + else + echo "webpaket: wasm-opt nicht gefunden — Modul bleibt unnachoptimiert" \ + "($vorher Bytes)." >&2 + fi +fi + +# 3. Quelltext der gebauten Fassung. # # Ein veränderter Arbeitsbaum bricht den Bau ab: Der angebotene Quelltext muss der # ausgelieferten Fassung entsprechen, sonst ist die Auflage aus §13 verfehlt. Wer nur @@ -43,8 +92,16 @@ if [ -n "$(git -C "$quelle" status --porcelain)" ] && [ "${QUELLTEXT_UNGEPRUEFT: fi fassung="$(git -C "$quelle" rev-parse HEAD)" -git -C "$quelle" archive --format=tar.gz --prefix=aendggner/ HEAD \ - -o "$(CDPATH='' cd -- "$ziel" && pwd)/aendggner-quelltext.tar.gz" +archiv="$(CDPATH='' cd -- "$ziel" && pwd)/aendggner-quelltext.tar.gz" +git -C "$quelle" archive --format=tar.gz --prefix=aendggner/ HEAD -o "$archiv" + +archivgroesse="$(groesse "$archiv")" +if [ "$archivgroesse" -gt "$grenze_archiv" ]; then + echo "webpaket: Das Quelltextarchiv misst $archivgroesse Bytes und überschreitet damit" >&2 + echo " die Schranke von $grenze_archiv. Vermutlich sind Massendaten ins" >&2 + echo " Repository geraten; sie gehören in .gitattributes (export-ignore)." >&2 + exit 1 +fi { echo "ÄndGgner — Quelltext der ausgelieferten Fassung" @@ -54,20 +111,46 @@ git -C "$quelle" archive --format=tar.gz --prefix=aendggner/ HEAD \ echo echo "Vollständig in aendggner-quelltext.tar.gz; Bauanleitung darin in README.adoc." echo "Fortlaufend: https://gerrit.benkard.de/plugins/gitiles/aendggner" + echo + echo "Nicht im Archiv liegt der Beispielkorpus (src/test/resources/sampledata): Gesetzes-" + echo "und Drucksachentexte fremder Urheberschaft, an denen die Tests messen. Gebaut wird" + echo "ohne ihn; nur die Tests verlangen danach. Wer sie laufen lassen will, holt das" + echo "Repository von der oben genannten Adresse, wo der Korpus vollständig liegt." } > "$ziel/quelltext-fassung.txt" -# 3. Vorkompression. Der Tarball ist bereits gepackt und bleibt außen vor. -for datei in "$ziel"/*.wasm "$ziel"/*.js "$ziel"/*.css "$ziel"/*.html "$ziel"/*.svg \ - "$ziel"/*.txt; do +# 4. Nur das Gebaute bleibt liegen — was hier steht, geht hoch. +rm -f "$ziel/.DS_Store" + +# 5. Vorkompression, nur auf Anforderung (siehe Kopf). Der Tarball ist bereits gepackt und +# bleibt außen vor. +if [ "${VORKOMPRIMIEREN:-}" = 1 ]; then + for datei in "$ziel"/*.wasm "$ziel"/*.js "$ziel"/*.css "$ziel"/*.html "$ziel"/*.svg \ + "$ziel"/*.txt; do + [ -f "$datei" ] || continue + gzip -9 -f -k -- "$datei" + if command -v brotli >/dev/null 2>&1; then + brotli -f -- "$datei" + fi + done + + if ! command -v brotli >/dev/null 2>&1; then + echo "webpaket: brotli nicht gefunden — nur .gz angelegt." >&2 + fi +fi + +# Was zu groß ist, nimmt Cloudflare nicht an. Lieber hier auffallen als beim Hochladen. +zugross="" +for datei in "$ziel"/*; do [ -f "$datei" ] || continue - gzip -9 -f -k -- "$datei" - if command -v brotli >/dev/null 2>&1; then - brotli -f -- "$datei" + if [ "$(groesse "$datei")" -gt "$grenze_datei" ]; then + zugross="$zugross $(basename "$datei") ($(groesse "$datei") Bytes) +" fi done - -if ! command -v brotli >/dev/null 2>&1; then - echo "webpaket: brotli nicht gefunden — nur .gz angelegt." >&2 +if [ -n "$zugross" ]; then + echo "webpaket: Diese Dateien überschreiten die 25-MiB-Grenze von Cloudflare Workers:" >&2 + printf '%s' "$zugross" >&2 + exit 1 fi echo "webpaket: $ziel ist auslieferbar (Fassung $(git -C "$quelle" rev-parse --short HEAD))." @@ -20,6 +20,7 @@ <enforced.maven-version>3.9.0</enforced.maven-version> <build-helper-plugin.version>3.6.0</build-helper-plugin.version> + <clean-plugin.version>3.3.2</clean-plugin.version> <compiler-plugin.version>3.15.0</compiler-plugin.version> <dependency-plugin.version>3.11.0</dependency-plugin.version> <enforcer-plugin.version>3.6.3</enforcer-plugin.version> @@ -124,6 +125,20 @@ </resource> </resources> + <!-- + Der Beispielkorpus liegt unter src/test/resources, wird aber von den Tests über + Dateisystempfade gelesen, nicht über den Klassenpfad. Eine Kopie nach + target/test-classes wäre deshalb bei jedem Bau 35 MB umsonst. + --> + <testResources> + <testResource> + <directory>src/test/resources</directory> + <excludes> + <exclude>sampledata/**</exclude> + </excludes> + </testResource> + </testResources> + <pluginManagement> <plugins> @@ -332,20 +347,51 @@ <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> - <arg>-Aproject=${project.groupId}/${project.artifactId}</arg> <arg>--add-modules</arg> <arg>org.graalvm.webimage.api</arg> </compilerArgs> - <annotationProcessorPaths> - <path> - <groupId>info.picocli</groupId> - <artifactId>picocli-codegen</artifactId> - <version>${picocli.version}</version> - </path> - </annotationProcessorPaths> + <!-- + Ohne Picocli-Annotationsprozessor: Er meldet die Befehlszeilenklasse + eu.mulk.aendggner.AendGgner mit „allDeclaredMethods“ zur Reflexion an, und + die Erreichbarkeitsanalyse zieht daraufhin die gesamte Befehlszeilenfassung + samt Picocli und den Dateizugriffen ins Browser-Image, obwohl BrowserMain + nichts davon anfasst. Im Browser gibt es keine Befehlszeile. + --> + <proc>none</proc> + <annotationProcessorPaths/> </configuration> </plugin> + <!-- + Ein vorangegangener gewöhnlicher Bau hat die Picocli-Konfiguration womöglich + schon nach target/classes gelegt; native-image liest sie von dort auch dann, + wenn dieser Bau sie nicht mehr erzeugt. Also fort damit, sonst hinge die + Bildgröße davon ab, was vorher lief. + --> + <plugin> + <artifactId>maven-clean-plugin</artifactId> + <version>${clean-plugin.version}</version> + <executions> + <execution> + <id>picocli-konfiguration-fort</id> + <phase>prepare-package</phase> + <goals> + <goal>clean</goal> + </goals> + <configuration> + <excludeDefaultDirectories>true</excludeDefaultDirectories> + <filesets> + <fileset> + <directory> + ${project.build.outputDirectory}/META-INF/native-image/picocli-generated + </directory> + </fileset> + </filesets> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> @@ -381,6 +427,9 @@ <executable>${native-image.executable}</executable> <arguments> <argument>--tool:svm-wasm</argument> + <!-- Größe vor Durchsatz: Das Modul muss über die Leitung, und die + Rechenzeit einer Synopse liegt ohnehin im Sekundenbereich. --> + <argument>-Os</argument> <!-- Der Textzwischenschritt (aendggner.js.wat) wird sonst mehrere hundert Megabyte groß; auf die Größe des .wasm hat das keinen Einfluss. --> <argument>-H:WasmComments=NONE</argument> diff --git a/src/main/resources/META-INF/native-image/eu.mulk/aendggner/reachability-metadata.json b/src/main/resources/META-INF/native-image/eu.mulk/aendggner/reachability-metadata.json index 4f85735..5b0cc81 100644 --- a/src/main/resources/META-INF/native-image/eu.mulk/aendggner/reachability-metadata.json +++ b/src/main/resources/META-INF/native-image/eu.mulk/aendggner/reachability-metadata.json @@ -352,7 +352,10 @@ "glob": "jdk/internal/icu/impl/data/icudt76b/ubidi.icu" }, { - "glob": "org/apache/fontbox/**" + "glob": "org/apache/fontbox/cmap/Identity-H" + }, + { + "glob": "org/apache/fontbox/cmap/Identity-V" }, { "glob": "org/apache/pdfbox/resources/**" diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index 22f1662..75df65e 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test; */ class EndToEndTest { - private static final Path SAMPLEDATA = Path.of("src/main/resources/sampledata"); + private static final Path SAMPLEDATA = Path.of("src/test/resources/sampledata"); private static final Path STAMMGESETZ = SAMPLEDATA.resolve("IfSG/BJNR104510000.xml"); private static final Path AENDERUNGSGESETZ = SAMPLEDATA.resolve("IfSG/bgbl120s2397_78991.pdf"); diff --git a/src/test/java/eu/mulk/aendggner/aenderung/parse/DokumentErkennerTest.java b/src/test/java/eu/mulk/aendggner/aenderung/parse/DokumentErkennerTest.java index 7271efb..b90e990 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/DokumentErkennerTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/DokumentErkennerTest.java @@ -12,7 +12,7 @@ import org.junit.jupiter.params.provider.CsvSource; class DokumentErkennerTest { - private static final Path SAMPLEDATA = Path.of("src/main/resources/sampledata"); + private static final Path SAMPLEDATA = Path.of("src/test/resources/sampledata"); /** * Die Erkennung ist eine Heuristik auf Kopfzeilen; sie wird deshalb gegen wirkliche Dokumente diff --git a/src/test/java/eu/mulk/aendggner/aenderung/parse/ZusammenstellungsLeserTest.java b/src/test/java/eu/mulk/aendggner/aenderung/parse/ZusammenstellungsLeserTest.java index 8e994a6..baaf056 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/ZusammenstellungsLeserTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/ZusammenstellungsLeserTest.java @@ -16,7 +16,7 @@ import org.junit.jupiter.api.Test; class ZusammenstellungsLeserTest { private static final Path EMPFEHLUNG = - Path.of("src/main/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf"); + Path.of("src/test/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf"); private static String fassung() throws Exception { try (var dokument = Loader.loadPDF(EMPFEHLUNG.toFile())) { diff --git a/src/main/resources/sampledata/AGG/AGG.pdf b/src/test/resources/sampledata/AGG/AGG.pdf Binary files differindex 9407632..9407632 100644 --- a/src/main/resources/sampledata/AGG/AGG.pdf +++ b/src/test/resources/sampledata/AGG/AGG.pdf diff --git a/src/main/resources/sampledata/AGG/BJNR189710006.epub b/src/test/resources/sampledata/AGG/BJNR189710006.epub Binary files differindex bec10a1..bec10a1 100644 --- a/src/main/resources/sampledata/AGG/BJNR189710006.epub +++ b/src/test/resources/sampledata/AGG/BJNR189710006.epub diff --git a/src/main/resources/sampledata/AGG/BJNR189710006.xml b/src/test/resources/sampledata/AGG/BJNR189710006.xml index aa87c87..aa87c87 100644 --- a/src/main/resources/sampledata/AGG/BJNR189710006.xml +++ b/src/test/resources/sampledata/AGG/BJNR189710006.xml diff --git a/src/main/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf b/src/test/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf Binary files differindex 6a8249b..6a8249b 100644 --- a/src/main/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf +++ b/src/test/resources/sampledata/AGG/BT-Drs-21-6178_Regierungsentwurf.pdf diff --git a/src/main/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf b/src/test/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf Binary files differindex b883d86..b883d86 100644 --- a/src/main/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf +++ b/src/test/resources/sampledata/AGG/RefE_2_AGGAEndG_2026-04-14.pdf diff --git a/src/main/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf b/src/test/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf Binary files differindex 8a01f63..8a01f63 100644 --- a/src/main/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf +++ b/src/test/resources/sampledata/AGG/RegE_AGG_AendG_2026-05-06.pdf diff --git a/src/main/resources/sampledata/AGG/SOURCES b/src/test/resources/sampledata/AGG/SOURCES index 004abc4..004abc4 100644 --- a/src/main/resources/sampledata/AGG/SOURCES +++ b/src/test/resources/sampledata/AGG/SOURCES diff --git a/src/main/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf b/src/test/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf Binary files differindex 920a53b..920a53b 100644 --- a/src/main/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf +++ b/src/test/resources/sampledata/AGG/Synopse_AGGAendG_RegE_2026.pdf diff --git a/src/main/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf b/src/test/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf Binary files differindex 429622f..429622f 100644 --- a/src/main/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf +++ b/src/test/resources/sampledata/BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf diff --git a/src/main/resources/sampledata/BayJG/BayJG-alt.txt b/src/test/resources/sampledata/BayJG/BayJG-alt.txt index de2ed2e..de2ed2e 100644 --- a/src/main/resources/sampledata/BayJG/BayJG-alt.txt +++ b/src/test/resources/sampledata/BayJG/BayJG-alt.txt diff --git a/src/main/resources/sampledata/BayJG/BayJG.pdf b/src/test/resources/sampledata/BayJG/BayJG.pdf Binary files differindex 1e16928..1e16928 100644 --- a/src/main/resources/sampledata/BayJG/BayJG.pdf +++ b/src/test/resources/sampledata/BayJG/BayJG.pdf diff --git a/src/main/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf b/src/test/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf Binary files differindex 708b83e..708b83e 100644 --- a/src/main/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf +++ b/src/test/resources/sampledata/BayJG/Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf diff --git a/src/main/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf b/src/test/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf Binary files differindex 92ecd2c..92ecd2c 100644 --- a/src/main/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf +++ b/src/test/resources/sampledata/BayJG/Ltg-Drs-19-9707_Gesetzentwurf.pdf diff --git a/src/main/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf b/src/test/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf Binary files differindex f05e271..f05e271 100644 --- a/src/main/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf +++ b/src/test/resources/sampledata/BayJG/Plenarprotokoll-19-72_2te-Lesung.pdf diff --git a/src/main/resources/sampledata/BayJG/SOURCES b/src/test/resources/sampledata/BayJG/SOURCES index 964ecc4..964ecc4 100644 --- a/src/main/resources/sampledata/BayJG/SOURCES +++ b/src/test/resources/sampledata/BayJG/SOURCES diff --git a/src/main/resources/sampledata/BayJG/gvbl-2026-06.pdf b/src/test/resources/sampledata/BayJG/gvbl-2026-06.pdf Binary files differindex e219bd0..e219bd0 100644 --- a/src/main/resources/sampledata/BayJG/gvbl-2026-06.pdf +++ b/src/test/resources/sampledata/BayJG/gvbl-2026-06.pdf diff --git a/src/main/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf b/src/test/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf Binary files differindex e568826..e568826 100644 --- a/src/main/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf +++ b/src/test/resources/sampledata/Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf diff --git a/src/main/resources/sampledata/GEG/BJNR172810020.epub b/src/test/resources/sampledata/GEG/BJNR172810020.epub Binary files differindex 6f5fb71..6f5fb71 100644 --- a/src/main/resources/sampledata/GEG/BJNR172810020.epub +++ b/src/test/resources/sampledata/GEG/BJNR172810020.epub diff --git a/src/main/resources/sampledata/GEG/BJNR172810020.xml b/src/test/resources/sampledata/GEG/BJNR172810020.xml index 37d39b7..37d39b7 100644 --- a/src/main/resources/sampledata/GEG/BJNR172810020.xml +++ b/src/test/resources/sampledata/GEG/BJNR172810020.xml diff --git a/src/main/resources/sampledata/GEG/BR-Drs-170-23.pdf b/src/test/resources/sampledata/GEG/BR-Drs-170-23.pdf Binary files differindex a0c91cf..a0c91cf 100644 --- a/src/main/resources/sampledata/GEG/BR-Drs-170-23.pdf +++ b/src/test/resources/sampledata/GEG/BR-Drs-170-23.pdf diff --git a/src/main/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf b/src/test/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf Binary files differindex 05d2dc4..05d2dc4 100644 --- a/src/main/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf +++ b/src/test/resources/sampledata/GEG/BT-Drs-20-6875_Regierungsentwurf.pdf diff --git a/src/main/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf b/src/test/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf Binary files differindex 92282b1..92282b1 100644 --- a/src/main/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf +++ b/src/test/resources/sampledata/GEG/BT-Drs-20-7619_Beschlussempfehlung.pdf diff --git a/src/main/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf b/src/test/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf Binary files differindex 895371f..895371f 100644 --- a/src/main/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf +++ b/src/test/resources/sampledata/GEG/BT-Drs-21-6278_Regierungsentwurf.pdf diff --git a/src/main/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf b/src/test/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf Binary files differindex 60dc03f..60dc03f 100644 --- a/src/main/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf +++ b/src/test/resources/sampledata/GEG/BT-Drs-21-7071_Beschlussempfehlung.pdf diff --git a/src/main/resources/sampledata/GEG/GEG.pdf b/src/test/resources/sampledata/GEG/GEG.pdf Binary files differindex b7d12b2..b7d12b2 100644 --- a/src/main/resources/sampledata/GEG/GEG.pdf +++ b/src/test/resources/sampledata/GEG/GEG.pdf diff --git a/src/main/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf b/src/test/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf index 2c79e49..2c79e49 100644 --- a/src/main/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf +++ b/src/test/resources/sampledata/GEG/Referentenentwurf_GModG_2026-05-05.pdf diff --git a/src/main/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf b/src/test/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf Binary files differindex a92571f..a92571f 100644 --- a/src/main/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf +++ b/src/test/resources/sampledata/GEG/Regierungsentwurf_GModG_2026-05-13.pdf diff --git a/src/main/resources/sampledata/GEG/SOURCES b/src/test/resources/sampledata/GEG/SOURCES index a0ca9aa..a0ca9aa 100644 --- a/src/main/resources/sampledata/GEG/SOURCES +++ b/src/test/resources/sampledata/GEG/SOURCES diff --git a/src/main/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf b/src/test/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf index aa10782..aa10782 100644 --- a/src/main/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf +++ b/src/test/resources/sampledata/GEG/bgbl123s0280_regelungstext.pdf diff --git a/src/main/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf b/src/test/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf index 83df58d..83df58d 100644 --- a/src/main/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf +++ b/src/test/resources/sampledata/Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf diff --git a/src/main/resources/sampledata/IfSG/0645-20.pdf b/src/test/resources/sampledata/IfSG/0645-20.pdf Binary files differindex cd80634..cd80634 100644 --- a/src/main/resources/sampledata/IfSG/0645-20.pdf +++ b/src/test/resources/sampledata/IfSG/0645-20.pdf diff --git a/src/main/resources/sampledata/IfSG/1918111.pdf b/src/test/resources/sampledata/IfSG/1918111.pdf Binary files differindex dbab3d0..dbab3d0 100644 --- a/src/main/resources/sampledata/IfSG/1918111.pdf +++ b/src/test/resources/sampledata/IfSG/1918111.pdf diff --git a/src/main/resources/sampledata/IfSG/1923944.pdf b/src/test/resources/sampledata/IfSG/1923944.pdf Binary files differindex c8620f8..c8620f8 100644 --- a/src/main/resources/sampledata/IfSG/1923944.pdf +++ b/src/test/resources/sampledata/IfSG/1923944.pdf diff --git a/src/main/resources/sampledata/IfSG/1924232.pdf b/src/test/resources/sampledata/IfSG/1924232.pdf Binary files differindex 3520d95..3520d95 100644 --- a/src/main/resources/sampledata/IfSG/1924232.pdf +++ b/src/test/resources/sampledata/IfSG/1924232.pdf diff --git a/src/main/resources/sampledata/IfSG/1924334.pdf b/src/test/resources/sampledata/IfSG/1924334.pdf Binary files differindex 0714868..0714868 100644 --- a/src/main/resources/sampledata/IfSG/1924334.pdf +++ b/src/test/resources/sampledata/IfSG/1924334.pdf diff --git a/src/main/resources/sampledata/IfSG/BJNR104510000.epub b/src/test/resources/sampledata/IfSG/BJNR104510000.epub Binary files differindex 43c6f77..43c6f77 100644 --- a/src/main/resources/sampledata/IfSG/BJNR104510000.epub +++ b/src/test/resources/sampledata/IfSG/BJNR104510000.epub diff --git a/src/main/resources/sampledata/IfSG/BJNR104510000.xml b/src/test/resources/sampledata/IfSG/BJNR104510000.xml index 9443a34..9443a34 100644 --- a/src/main/resources/sampledata/IfSG/BJNR104510000.xml +++ b/src/test/resources/sampledata/IfSG/BJNR104510000.xml diff --git a/src/main/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive b/src/test/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive Binary files differindex b304c84..b304c84 100644 --- a/src/main/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive +++ b/src/test/resources/sampledata/IfSG/IfSG - Gesetz zur Verhütung und Bekämpfung von Infektionskrankheiten beim Menschen.webarchive diff --git a/src/main/resources/sampledata/IfSG/IfSG.pdf b/src/test/resources/sampledata/IfSG/IfSG.pdf Binary files differindex 7758960..7758960 100644 --- a/src/main/resources/sampledata/IfSG/IfSG.pdf +++ b/src/test/resources/sampledata/IfSG/IfSG.pdf diff --git a/src/main/resources/sampledata/IfSG/SOURCES b/src/test/resources/sampledata/IfSG/SOURCES index 6ba08e1..6ba08e1 100644 --- a/src/main/resources/sampledata/IfSG/SOURCES +++ b/src/test/resources/sampledata/IfSG/SOURCES diff --git a/src/main/resources/sampledata/IfSG/bgbl120s2397_78991.pdf b/src/test/resources/sampledata/IfSG/bgbl120s2397_78991.pdf Binary files differindex 83ed3ce..83ed3ce 100644 --- a/src/main/resources/sampledata/IfSG/bgbl120s2397_78991.pdf +++ b/src/test/resources/sampledata/IfSG/bgbl120s2397_78991.pdf diff --git a/src/main/resources/sampledata/Landesrecht-Beispiele.adoc b/src/test/resources/sampledata/Landesrecht-Beispiele.adoc index 3eb455c..3eb455c 100644 --- a/src/main/resources/sampledata/Landesrecht-Beispiele.adoc +++ b/src/test/resources/sampledata/Landesrecht-Beispiele.adoc diff --git a/src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt b/src/test/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt index 58d6d02..58d6d02 100644 --- a/src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt +++ b/src/test/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt diff --git a/src/main/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf b/src/test/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf Binary files differindex 35335a4..35335a4 100644 --- a/src/main/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf +++ b/src/test/resources/sampledata/NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf diff --git a/src/main/resources/sampledata/NRW/LMG-NRW-alt.txt b/src/test/resources/sampledata/NRW/LMG-NRW-alt.txt index c451446..c451446 100644 --- a/src/main/resources/sampledata/NRW/LMG-NRW-alt.txt +++ b/src/test/resources/sampledata/NRW/LMG-NRW-alt.txt diff --git a/src/main/resources/sampledata/NRW/SOURCES b/src/test/resources/sampledata/NRW/SOURCES index df67eb7..df67eb7 100644 --- a/src/main/resources/sampledata/NRW/SOURCES +++ b/src/test/resources/sampledata/NRW/SOURCES diff --git a/src/main/resources/sampledata/NRW/TMZ-Gesetz-alt.txt b/src/test/resources/sampledata/NRW/TMZ-Gesetz-alt.txt index 74621d1..74621d1 100644 --- a/src/main/resources/sampledata/NRW/TMZ-Gesetz-alt.txt +++ b/src/test/resources/sampledata/NRW/TMZ-Gesetz-alt.txt diff --git a/src/main/resources/sampledata/NRW/WDR-Gesetz-alt.txt b/src/test/resources/sampledata/NRW/WDR-Gesetz-alt.txt index b791896..b791896 100644 --- a/src/main/resources/sampledata/NRW/WDR-Gesetz-alt.txt +++ b/src/test/resources/sampledata/NRW/WDR-Gesetz-alt.txt diff --git a/src/main/resources/sampledata/Niedersachsen/NEFG-alt.txt b/src/test/resources/sampledata/Niedersachsen/NEFG-alt.txt index bc372c6..bc372c6 100644 --- a/src/main/resources/sampledata/Niedersachsen/NEFG-alt.txt +++ b/src/test/resources/sampledata/Niedersachsen/NEFG-alt.txt diff --git a/src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf b/src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf Binary files differindex 0b995b3..0b995b3 100644 --- a/src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf +++ b/src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf diff --git a/src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf b/src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf Binary files differindex c559277..c559277 100644 --- a/src/main/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf +++ b/src/test/resources/sampledata/Niedersachsen/Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf diff --git a/src/main/resources/sampledata/ProdHaftG/BJNR021980989.epub b/src/test/resources/sampledata/ProdHaftG/BJNR021980989.epub Binary files differindex 60cc527..60cc527 100644 --- a/src/main/resources/sampledata/ProdHaftG/BJNR021980989.epub +++ b/src/test/resources/sampledata/ProdHaftG/BJNR021980989.epub diff --git a/src/main/resources/sampledata/ProdHaftG/BJNR021980989.xml b/src/test/resources/sampledata/ProdHaftG/BJNR021980989.xml index 59fd200..59fd200 100644 --- a/src/main/resources/sampledata/ProdHaftG/BJNR021980989.xml +++ b/src/test/resources/sampledata/ProdHaftG/BJNR021980989.xml diff --git a/src/main/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf b/src/test/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf Binary files differindex 36a3f12..36a3f12 100644 --- a/src/main/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf +++ b/src/test/resources/sampledata/ProdHaftG/BT-Drs-21-4297_Regierungsentwurf.pdf diff --git a/src/main/resources/sampledata/ProdHaftG/ProdHaftG.pdf b/src/test/resources/sampledata/ProdHaftG/ProdHaftG.pdf Binary files differindex 0a0152e..0a0152e 100644 --- a/src/main/resources/sampledata/ProdHaftG/ProdHaftG.pdf +++ b/src/test/resources/sampledata/ProdHaftG/ProdHaftG.pdf diff --git a/src/main/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf b/src/test/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf Binary files differindex 5f00d96..5f00d96 100644 --- a/src/main/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf +++ b/src/test/resources/sampledata/ProdHaftG/RefE_Produkthaftung_2025-09-11.pdf diff --git a/src/main/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf b/src/test/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf Binary files differindex 8a0d8a5..8a0d8a5 100644 --- a/src/main/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf +++ b/src/test/resources/sampledata/ProdHaftG/RegE_Produkthaftungsrecht_2025-12-17.pdf diff --git a/src/main/resources/sampledata/ProdHaftG/SOURCES b/src/test/resources/sampledata/ProdHaftG/SOURCES index 969a4e4..969a4e4 100644 --- a/src/main/resources/sampledata/ProdHaftG/SOURCES +++ b/src/test/resources/sampledata/ProdHaftG/SOURCES diff --git a/src/main/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf b/src/test/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf Binary files differindex 12d5679..12d5679 100644 --- a/src/main/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf +++ b/src/test/resources/sampledata/ProdHaftG/Synopse_Produkthaftungsrecht_RegE.pdf diff --git a/src/main/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt b/src/test/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt index 81196da..81196da 100644 --- a/src/main/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt +++ b/src/test/resources/sampledata/Sachsen/SaechsBeamtVG-alt.txt diff --git a/src/main/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf b/src/test/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf Binary files differindex 89116f7..89116f7 100644 --- a/src/main/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf +++ b/src/test/resources/sampledata/Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf diff --git a/src/main/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf b/src/test/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf Binary files differindex e32dca3..e32dca3 100644 --- a/src/main/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf +++ b/src/test/resources/sampledata/SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf diff --git a/src/main/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf b/src/test/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf index ad7af19..ad7af19 100644 --- a/src/main/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf +++ b/src/test/resources/sampledata/Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf diff --git a/src/main/resources/sampledata/Thueringen/SOURCES b/src/test/resources/sampledata/Thueringen/SOURCES index b215642..b215642 100644 --- a/src/main/resources/sampledata/Thueringen/SOURCES +++ b/src/test/resources/sampledata/Thueringen/SOURCES diff --git a/src/main/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt b/src/test/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt index 0a92e14..0a92e14 100644 --- a/src/main/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt +++ b/src/test/resources/sampledata/Thueringen/ThuerKigaFinVO-alt.txt diff --git a/src/main/resources/sampledata/UWG/BJNR141400004.epub b/src/test/resources/sampledata/UWG/BJNR141400004.epub Binary files differindex 7c9bf0c..7c9bf0c 100644 --- a/src/main/resources/sampledata/UWG/BJNR141400004.epub +++ b/src/test/resources/sampledata/UWG/BJNR141400004.epub diff --git a/src/main/resources/sampledata/UWG/BJNR141400004.xml b/src/test/resources/sampledata/UWG/BJNR141400004.xml index 16b70c9..16b70c9 100644 --- a/src/main/resources/sampledata/UWG/BJNR141400004.xml +++ b/src/test/resources/sampledata/UWG/BJNR141400004.xml diff --git a/src/main/resources/sampledata/UWG/BR-Drs-8-26.pdf b/src/test/resources/sampledata/UWG/BR-Drs-8-26.pdf Binary files differindex a4bfb74..a4bfb74 100644 --- a/src/main/resources/sampledata/UWG/BR-Drs-8-26.pdf +++ b/src/test/resources/sampledata/UWG/BR-Drs-8-26.pdf diff --git a/src/main/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf b/src/test/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf Binary files differindex 9bbf07e..9bbf07e 100644 --- a/src/main/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf +++ b/src/test/resources/sampledata/UWG/BR-Drs-8-26_zu.pdf diff --git a/src/main/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf b/src/test/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf Binary files differindex a9072dd..a9072dd 100644 --- a/src/main/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf +++ b/src/test/resources/sampledata/UWG/BT-Drs-21-1855_Regierungsentwurf.pdf diff --git a/src/main/resources/sampledata/UWG/SOURCES b/src/test/resources/sampledata/UWG/SOURCES index 42f3ab8..42f3ab8 100644 --- a/src/main/resources/sampledata/UWG/SOURCES +++ b/src/test/resources/sampledata/UWG/SOURCES diff --git a/src/main/resources/sampledata/UWG/UWG.pdf b/src/test/resources/sampledata/UWG/UWG.pdf Binary files differindex 7d83517..7d83517 100644 --- a/src/main/resources/sampledata/UWG/UWG.pdf +++ b/src/test/resources/sampledata/UWG/UWG.pdf diff --git a/src/main/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf b/src/test/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf Binary files differindex 9e4dd4f..9e4dd4f 100644 --- a/src/main/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf +++ b/src/test/resources/sampledata/UWG/bgbl126s0043_regelungstext.pdf |
