blob: 77540fe9f23e3b1dfb0d4c4f26605c3a46005dd2 [file] [log] [blame]
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +01001= ÄndGgner -- Programmbibliothek zur Konsolidierung von Änderungsgesetzen des Bundes und der Länder
2Matthias Andreas Benkard
3// Meta
4:experimental:
5:data-uri:
6:sectnums:
7:toc:
8:stem:
9:toclevels: 2
10:description: ÄndGgner Manual
11:keywords: mulk
12// Settings
13:icons: font
14:source-highlighter: pygments
15
16
17== Resources
18
19|===
20|Resource |Links
21
22|Public Artifact
23|https://bintray.com/mulk/maven/aendggner[Bintray]
24
25|Bug Tracker
26|MantisBT
27|===
28
29
30[[building]]
31== Building a JAR
32
Matthias Andreas Benkardc7f11362020-11-22 15:01:07 +010033To build an executable JAR at `target/aendggner-${REVISION}.jar`:
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010034
35[source,shell script]
36----
37./mvnw package
38----
39
40`${REVISION}` defaults to `0.1.0-SNAPSHOT` unless you override it by
41passing the `-Drevision` flag to `mvnw`.
42
43
44== Running the Command Line Application
45
46To run the command line application after <<building,building>> it:
47
48[source,shell script]
49----
50./mvnw exec:java
51----
52
53
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020054[[usage]]
55== Usage
56
57ÄndGgner erzeugt aus einem Stammgesetz und einem Änderungsgesetz eine
58zweispaltige HTML-Synopse (alte Fassung links, neue rechts, Änderungen
59wortweise hervorgehoben).
60
61Eingaben:
62
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020063* Stammgesetz (Bundesrecht): XML im gii-norm-Format von
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020064 https://www.gesetze-im-internet.de/[gesetze-im-internet.de]
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020065* Stammgesetz (Landesrecht): konsolidierte Fassung als PDF oder als
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +020066 kanonischer Klartext im Format der `--extract-only`-Ausgabe. Eine Zeile
67 Inhaltsübersicht eröffnet darin die gleichnamige Norm, auf die die
68 Angabe-Befehle zielen; ihre Zeilen tragen das Übersichtsformat
69 „§ N | Titel“. Amtliche
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020070 Satznummern und Fußnotenmarker stehen als Unicode-Superskripte im
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020071 Text („¹Die freilebende Tierwelt …“, Enteignung⁶)“); ob sie erhalten
72 bleiben, ergibt sich aus der geladenen Stammfassung, nicht aus einer
73 Länderkennung. Ebenso folgt das Zitiersigel oder Art.) aus den
74 Normköpfen der Stammfassung.
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020075* Änderungsgesetz: BGBl-, GVBl- oder Drucksachen-PDF (Bundestag,
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020076 Bundesrat, Landtage) oder Klartext
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020077
78[source,shell script]
79----
80java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
81 stammgesetz.xml aenderungsgesetz.pdf -o synopse.html
82----
83
84Wichtige Optionen:
85
86`-o, --output <file>`::
87 Ausgabedatei (Default `synopse.html`; `-` = Standardausgabe).
88`--vollstaendig`::
89 Auch unveränderte Normen in die Synopse aufnehmen.
90`--artikel <n>`::
91 Nur diesen Artikel des Änderungsgesetzes anwenden (Default: alle
92 Artikel, deren Einleitung das Stammgesetz nennt).
93`--extract-only`::
94 Nur den bereinigten Lineartext des Änderungsgesetzes ausgeben. Nützlich,
95 wenn die PDF-Extraktion fehlerhaft ist: Text prüfen, von Hand
96 korrigieren und als Klartextdatei wieder einspeisen.
97
98Erkannt werden die gebräuchlichsten Änderungsbefehle des Handbuchs der
99Rechtsförmlichkeit (Ersetzen, Neufassung, Einfügen, Anfügen, Aufheben,
Matthias Andreas Benkardebd5a7b2026-07-15 20:54:27 +0200100Streichen, Umnummerierung) einschließlich zahlreicher Sonderformen:
101Bereichs- und Koordinationsziele („Die Absätze 8 und 9 werden durch die
102folgenden Absätze 8 bis 10 ersetzt“), strukturelle Streichungen ganzer
103Einheiten („§ 9 wird gestrichen“), §- und Gliederungs-Umnummerierungen
104(„§ 9a wird zu § 9“, Der bisherige Abschnitt 2 wird zu Abschnitt 3“),
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200105das Einfügen/Ersetzen ganzer §-Blöcke, Chapeau-Lokatoren („Im
106Satzteil vor Nummer 1 …“), Änderungen an Anhängen und Anlagen („Der
107Anhang wird wie folgt geändert: Nach Nummer 2 wird die folgende
108Nummer 2a eingefügt“), Angabe-Befehle auf die Inhaltsübersicht (gefasst,
109ersetzt, eingefügt, gestrichen sie werden auf die
110Inhaltsübersichts-Norm angewandt), das Einfügen und Ersetzen von
111Gliederungsberschriften („Nach § 33 werden die folgenden Überschriften
112zu Teil 3 eingefügt“), Voranstellungen, Mehrfach-Ersetzungs- und
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200113-Einfügepaare, Einfügungen, deren Position ein Wortanker statt einer
114Stellenangabe bestimmt („Vor den Wörtern Aus dem Bereich Verkehr:“ wird
115folgender Absatz 5 eingefügt“), Verbünde aus Umnummerierung und
Matthias Andreas Benkard5b2e6ef2026-08-02 20:01:37 +0200116Folgeänderung („§ 50 wird zu § 38 und wird wie folgt geändert“, Die
117bisherige Nr. 7 wird Nr. 5 und das Komma wird durch das Wort und
118ersetzt eine Satzzeichen-Operation meint dabei stets die soeben
119umnummerierte Einheit, weil ihr Zieltext nichts unterscheidet),
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +0200120Verb-Rahmen, deren Unterpunkte allein die Fundstelle tragen („Es werden
121ersetzt: in § 35 Absatz 3 die Angabe X jeweils durch die Angabe
122Y“,“) sowie die Neufassung der Gesetzesüberschrift.
123
124Angewandt wird nicht stur in Dokumentreihenfolge: Umnummerierungen
125beziehen sich stets auf die ursprüngliche Zählung, nicht auf den Stand
126nach den vorangegangenen Punkten. Wer eine Bezeichnung räumt, kommt
127deshalb vor den, der sie neu besetzt. Aus dieser einen Regel folgt die
128absteigende Abarbeitung einer aufsteigenden Kaskade („Der bisherige
129Absatz 3 wird Absatz 4“, Der bisherige Absatz 4 wird Absatz 5“, …)
130ebenso wie der Vorrang einer Umnummerierung vor der Einfügung, die deren
131Bezeichnung neu vergibt. Verschoben wird dabei nur nach vorn, sodass
132jede Folgeänderung hinter der Umnummerierung bleibt, auf deren neue
133Bezeichnung sie zeigt. Die PDF-Aufbereitung toleriert dabei
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200134Drucksachen-Artefakte (Seitenköpfe und -füße, Vorabfassungs-Wasserzeichen,
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200135vertauschte oder gerade Anführungszeichen, verklebte Wortgrenzen, zerlegt
136kodierte Umlaute) und bestimmt die Brotschrift seitenweise, sodass auch
137Ministeriumsentwürfe mit gemischten Layouts vollständig extrahiert
138werden. Fehlt im amtlichen Satz ein schließendes Anführungszeichen, endet
139das Zitat an der nächsten Strukturgrenze an einer Artikelberschrift
140oder, wo die Anführungszeichen eines Artikels nachweislich nicht
141aufgehen, am nächsten Aufzählungspunkt des Änderungsgesetzes; gemeldet
142wird das als Warnung. Auf den
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200143Beispieldaten werden damit alle Befehle der BGBl-Fassungen und der
144aktuellen Entwürfe angewandt (UWG/AGG/ProdHaftG: 0 manuell); was
145unsicher bleibt etwa Befehle gegen eine ältere Gesetzesfassung, deren
146Zieltext nicht mehr existiert landet mit Begründung im Abschnitt
147*Manuell prüfen* der Synopse und wird niemals stillschweigend verworfen.
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200148
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +0200149Für das bayerische Landesrecht versteht ÄndGgner die dortigen
150Konventionen: Stammgesetze gliedern sich in Artikel („Art. 6 Abs. 2
151Satz 1 Nr. 2“, durchgängig abgekürzt zitiert), Änderungsgesetze dagegen
152in Paragraphen auch mehrere Gesetze in einem GVBl-Heft, aus denen die
153auf das Stammgesetz zielenden §§ (einschließlich Weitere Änderung“)
154anhand des Einleitungssatzes ausgewählt werden. Amtliche Satznummern
155bleiben als Superskripte erhalten und dienen als exakte Satzgrenzen;
156zusätzlich erkannt werden die bayerischen Befehlsformen („Fußnote 1
157wird aufgehoben“, In Satz 1 wird die Satznummerierung 1 gestrichen“,
158Dem Wortlaut werden die folgenden Abs. 1 bis 4 vorangestellt“, Der
159bisherige Wortlaut wird Abs. 5“, Halbsatz-Ziele, Klauselketten mit
160gemeinsamem Schlussverb) sowie das Fortführungszeichen des GVBl (jedes
161neugefasste Aufzählungsglied öffnet erneut mit „). Metanderungen an
162Drucksachen nderungsanträge des Landtags) sind bewusst noch nicht
163abgedeckt.
164
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200165Die übrigen Länder gliedern ihre Stammgesetze wie der Bund in
166Paragraphen; die Unterschiede liegen im Gesetzblatt-Satz und in
167Befehlsidiomen. Belegt sind Sachsen (SächsBeamtVG), Niedersachsen
Matthias Andreas Benkarda201e832026-08-02 19:45:34 +0200168(NEFG) und Nordrhein-Westfalen dort alle vier ändernden Artikel eines
169Heftes: Telemedienzuständigkeitsgesetz, Landesmediengesetz,
170Ausführungsgesetz zum 17. Rundfunkänderungsstaatsvertrag und, mit 101
171Befehlen an 31 Normen der größte Landesrechtsfall, das WDR-Gesetz
172mit Akzeptanztests gegen die
Matthias Andreas Benkard5b2e6ef2026-08-02 20:01:37 +0200173amtlichen Nachfassungen; für Schleswig-Holstein, Berlin und Hessen
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200174reicht die Prüfung bis zur Befehlserkennung dort vollständig, aber ohne
175Anwendung —, weil deren Landesportale ihre Stammfassungen nur über eine
176anmeldepflichtige Schnittstelle ausgeben. Welche Konvention welches Land beisteuert, welche
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200177Stammfassungen woher stammen und was noch offen ist, verzeichnet
178`src/main/resources/sampledata/Landesrecht-Beispiele.adoc`.
179
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200180
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100181== Running the Tests
182
183To build and run the tests:
184
185[source,shell script]
186----
187./mvnw verify
188----