diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-22 21:23:06 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-22 21:23:06 +0200 |
| commit | f3b47af551fa6cd85509a65bb77d8d1b9bcb744a (patch) | |
| tree | 288ce87d5f2536f975544ddfd21773b1c42a6683 | |
| parent | 3dc36d42586b7d3e44f6dfbd3fc35b50534747c8 (diff) | |
Die Auslieferung trägt nur, was der Browser wirklich braucht
Die Browserfassung soll künftig über Cloudflare Workers gehen, und dort gilt
eine Grenze von 25 MiB je Datei, unkomprimiert gemessen. Zwei der
ausgelieferten Dateien standen dem entgegen: Das Quelltextarchiv maß 29,7 MB
und war damit schon nicht mehr hochzuladen, das Wasm-Modul mit 24,5 MB zu
achtundneunzig Hundertsteln der Grenze und ohne jeden Spielraum.
Das Archiv war ein ungefiltertes „git archive“ des Repositoriums, und über
fünfundneunzig Hundertstel davon waren die Beispiel-PDFs. Der Quelltext selbst
misst keine dreihunderttausend Zeichen. Die Gesetzes- und Drucksachentexte sind
fremde Werke, an denen allein die Tests messen; sie sind nicht der Quelltext,
aus dem sich das Ausgelieferte herstellen ließe, und die Auflage des AGPLv3 § 13
verlangt sie deshalb nicht. Sie sind aus dem Archiv genommen, und
„quelltext-fassung.txt“ sagt fortan, dass sie fehlen, warum sie fehlen und wo
sie vollständig liegen. Damit dies nicht stillschweigend zurückfällt, bricht
„webpaket.sh“ ab, sobald das Archiv acht Mebibyte überschreitet, und ebenso,
wenn irgendeine ausgelieferte Datei die Grenze der Zielplattform reißt: Lieber
hier auffallen als beim Hochladen.
Der Korpus lag überdies unter „src/main/resources“ und wanderte deshalb in
jedes Erzeugnis: in das Klassenverzeichnis, in die ausführbare Archivdatei —
achtundzwanzig Megabyte für ein Werk von sechshundert Kilobyte Java — und auf
den Klassenpfad des Übersetzers, dessen Ressourcentabelle die Verzeichnisnamen
bis ins Wasm trug. Er liegt nunmehr unter „src/test/resources“, wo er hingehört,
und ist von der Kopie nach „target/test-classes“ ausgenommen: Die Tests lesen
ihn über Dateisystempfade, eine Kopie wäre bei jedem Bau fünfunddreißig
Megabyte umsonst.
Das Modul wiegt statt 24,5 nunmehr 17,2 Megabyte; komprimiert geht es mit 5,5
statt 7,1 Megabyte über die Leitung. Vier Ursachen liegen dem zugrunde. Der
Picocli-Annotationsprozessor meldete die Befehlszeilenklasse mit sämtlichen
Methoden zur Reflexion an, worauf die Erreichbarkeitsanalyse die ganze
Befehlszeilenfassung samt Dateizugriffen in ein Bild zog, in dem es keine
Befehlszeile gibt; im Profil „wasm“ läuft er nicht mehr, und eine von einem
früheren Lauf liegengebliebene Konfiguration wird vor dem Übersetzen entfernt,
damit die Größe nicht davon abhängt, was vorher lief. Der Ressourcen-Glob
„org/apache/fontbox/**“ bettete 3,3 Megabyte ostasiatischer CMaps, die
Schrifttabelle „Scripts.txt“ und — weil zwei Sterne auch Klassendateien treffen
— 0,7 Megabyte „.class“-Dateien ein, von denen ein deutsches Gesetzes-PDF nichts
braucht; geblieben sind die beiden Identity-CMaps. Die Metriken unter
„org/apache/pdfbox/resources“ bleiben vollständig, denn an ihnen hängt die
Breitenberechnung bei nicht eingebetteten Schriften. Übersetzt wird mit „-Os“,
und den Rest holt „wasm-opt -Oz“ im Webpaket.
Dessen Merkmale sind einzeln aufgezählt und nicht als „--all-features“ erteilt.
Der bequeme Weg war gangbar und führte doch ins Leere: Binaryen nutzte
daraufhin Vorschläge, die noch kein Browser annimmt, und das Modul scheiterte
erst beim Instanziieren — erst an einem exakten Heap-Typ aus den „custom
descriptors“, nach dessen Abschaltung an der kompakten Importsektion. Zugelassen
ist nunmehr, was ausgeliefert in den Browsern steht und was Web Image braucht.
Die Vorkompression nach „.gz“ und „.br“ entfällt als Regelfall, denn Cloudflare
komprimiert selbst und jede Beilage wäre dort eine weitere Datei; wer mit nginx
selbst ausliefert, fordert sie mit VORKOMPRIMIEREN=1 an. Das
Auslieferungsverzeichnis fällt damit von achtundsechzig auf siebzehn Megabyte,
und ein liegengebliebenes „.DS_Store“ geht nicht mehr mit hoch.
Dreihundertfünfundzwanzig Testfälle bestehen. Das Modul ist im Browser
gelaufen: Vier Dokumentenpaare — IfSG, UWG, AGG und das Bayerische Jagdgesetz,
also gii-XML wie PDF als Stammfassung, Bundesgesetzblatt, Drucksache und
Gesetz- und Verordnungsblatt als Änderungsdokument — ergeben Synopsen, deren
SHA-256-Summen denen der Befehlszeilenfassung gleichen. Der Ressourcenbeschnitt
kostet also keine Zeichen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I31a47d1dcf3b27ffa4ae891947b1c4e083107a71
| -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 |
