diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-25 22:25:21 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-25 22:25:21 +0200 |
| commit | 22f19c3afc4d51d7714647c5635bb068cf32d433 (patch) | |
| tree | e132af3ba56250ee03a0382bbb79f63d45eeeeda /src/main/resources | |
| parent | 86a16e6e6e71a883708652bf623e51099707ea04 (diff) | |
Das Erzeugnis gibt seine Fassung heraus und prüft sie selbst
Zwei Leistungen fehlten, die das Werkzeug längst erbringen konnte, aber nicht
herausgab.
Die erste ist die fortgeschriebene Fassung. Der Schalter --neufassung schreibt
sie als kanonischen Klartext; damit steht die Kette: Die Ausgabe des ersten
Laufes ist das Stammgesetz des zweiten, und eine konsolidierte Fassung lässt sich
aus dem Stammheft und den Änderungsheften zusammensetzen, wo kein Portal sie
fertig liefert. Für Thüringen ist das von Hand geschehen.
Die zweite ist der Abgleich. Ob ein Lauf gelungen ist, entscheidet nicht die Zahl
der angewandten Befehle, sondern der Wortlaut hinterher — und dieser Maßstab
stand bislang allein im Testcode. Wer ein Land erschloss, musste die Prüfung ein
zweites Mal schreiben. Der Schalter --nachfassung nimmt die amtliche Fassung
entgegen, weist fehlende, überzählige und abweichende Normen aus, zeigt die
Abweichung in der Synopse wortweise und endet bei einem Fehlschlag mit dem
Rückgabewert 3. Denselben Abgleich fahren fortan die Akzeptanzprüfungen; vier
handgeschriebene Vergleichsschleifen weichen ihm. Die Überschrift zählt dabei zum
Wortlaut, denn auf sie zielen eigene Befehle — der Korpus trägt diese Verschärfung
ohne einen einzigen Rückfall.
Statt einer sechsten und siebten Fassung der Signatur tritt ein Auftrags-Record
an die Stelle der Überladungsleiter der Pipeline. Die Browserfassung bekommt
beides: ein Dateifeld für die Nachfassung und ein Ankreuzfeld für die
Textausgabe, beide hinter der Klappe „Weitere Angaben“.
Der Rundlauf hat dabei einen zweiten Mangel des Lesers zutage gefördert. Das
Bundesrecht führt aufgehobene Paragraphen unter einer Sammelbezeichnung („§§ 17
u. 18“, Titel „(weggefallen)“, im gii-XML mit der Platzhalterkennung „(XXXX)“).
Der kanonische Klartext kannte diese Kopfzeile nicht; sie wäre in den Wortlaut
der Vornorm gefallen und hätte ihn verfälscht. Ohne sie könnte der Klartext kein
Bundesgesetz tragen, und die Kette endete beim Bund.
Geprüft: 375 Tests (zuvor 373); Berlin gibt 171 von 171 Normen gleich aus, und
die für das UWG ausgegebene Fassung ergibt wieder eingelesen dieselbe.
Change-Id: Ie3c45e18b561175fe6dd0033c46d3bed69e415bc
Diffstat (limited to 'src/main/resources')
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/app.js | 21 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/index.html | 18 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/worker.js | 6 |
3 files changed, 42 insertions, 3 deletions
diff --git a/src/main/resources/eu/mulk/aendggner/web/app.js b/src/main/resources/eu/mulk/aendggner/web/app.js index fb55cbd..b72db3c 100644 --- a/src/main/resources/eu/mulk/aendggner/web/app.js +++ b/src/main/resources/eu/mulk/aendggner/web/app.js @@ -32,6 +32,11 @@ async function alsBase64(datei) { /** Hängt der Meldung einen Verweis auf das Ergebnis an; ein Blob, kein Server. */ function oeffne(inhalt, art, aufschrift) { + // Es können mehrere Ergebnisse nebeneinander stehen (Synopse und fortgeschriebene Fassung); + // dann trennt sie ein Punkt, damit die Aufschriften nicht aneinanderkleben. + if (meldung.querySelector("a")) { + meldung.append(" · "); + } const verweis = document.createElement("a"); verweis.href = URL.createObjectURL(new Blob([inhalt], { type: art })); verweis.target = "_blank"; @@ -49,6 +54,8 @@ formular.addEventListener("submit", async (ereignis) => { return; } + const nachfassungDatei = document.querySelector("#nachfassung").files[0] ?? null; + const neufassungGewuenscht = document.querySelector("#neufassung").checked; const artikel = document.querySelector("#artikel").value.trim(); const stichtag = document.querySelector("#stichtag").value.trim(); const nurText = document.querySelector("#nurtext").checked; @@ -58,9 +65,10 @@ formular.addEventListener("submit", async (ereignis) => { zeige("Lade das Rechenwerk (einmalig einige Megabyte) und werte aus …", "arbeit"); try { - const [stamm, patches] = await Promise.all([ + const [stamm, patches, nachfassung] = await Promise.all([ alsBase64(stammDatei), Promise.all(patchDateien.map(alsBase64)), + nachfassungDatei ? alsBase64(nachfassungDatei) : null, ]); if (!worker) { @@ -76,6 +84,7 @@ formular.addEventListener("submit", async (ereignis) => { vollstaendig, artikel: artikel === "" ? null : artikel, stichtag: stichtag === "" ? null : stichtag, + nachfassung, nurText, }); }); @@ -102,10 +111,18 @@ formular.addEventListener("submit", async (ereignis) => { // aufgenommen, so sind das nicht die geänderten Normen, und sie heißen dann anders. zeige( `${ergebnis.angewandt} Befehle angewandt, ${ergebnis.manuell} manuell zu prüfen, ` + - `${ergebnis.normen} ${vollstaendig ? "Normen in der Synopse" : "geänderte Normen"}. `, + `${ergebnis.normen} ${vollstaendig ? "Normen in der Synopse" : "geänderte Normen"}. ` + + (ergebnis.abgleich ? `Abgleich: ${ergebnis.abgleich}. ` : ""), "fertig", ); oeffne(ergebnis.html, "text/html;charset=utf-8", "Synopse öffnen"); + if (neufassungGewuenscht) { + oeffne( + ergebnis.neufassung, + "text/plain;charset=utf-8", + "Fortgeschriebene Fassung öffnen", + ); + } } catch (e) { zeige("Verarbeitung fehlgeschlagen: " + (e && e.message ? e.message : e), "fehler"); } finally { diff --git a/src/main/resources/eu/mulk/aendggner/web/index.html b/src/main/resources/eu/mulk/aendggner/web/index.html index 69adbdb..40d93bb 100644 --- a/src/main/resources/eu/mulk/aendggner/web/index.html +++ b/src/main/resources/eu/mulk/aendggner/web/index.html @@ -160,6 +160,24 @@ ausgewiesen. Ohne Angabe werden alle Befehle angewandt)</span></label> <input type="date" id="stichtag" name="stichtag" autocomplete="off"> </div> + <div class="feld"> + <label for="nachfassung">Amtliche Nachfassung + <span class="erl">(nur auszufüllen, wenn das Ergebnis dagegen zu halten ist: Die + Synopse weist alsdann Norm für Norm aus, worin die errechnete Fassung von der + amtlichen abweicht. Angenommen werden dieselben Formate wie beim + Stammgesetz)</span></label> + <input type="file" id="nachfassung" name="nachfassung" + accept=".xml,.zip,.pdf,.txt,text/plain,application/pdf"> + </div> + <div class="feld ankreuzfeld"> + <label> + <input type="checkbox" id="neufassung" name="neufassung"> + Auch die fortgeschriebene Fassung als Klartext ausgeben + </label> + <p class="erl nachsatz">Sie lässt sich sichern und als Stammgesetz eines weiteren + Änderungsheftes wieder einreichen — so entsteht die Fortschreibung über mehrere + Hefte hinweg.</p> + </div> <div class="feld ankreuzfeld"> <label> <input type="checkbox" id="nurtext" name="nurtext"> diff --git a/src/main/resources/eu/mulk/aendggner/web/worker.js b/src/main/resources/eu/mulk/aendggner/web/worker.js index 259b629..f38d6a7 100644 --- a/src/main/resources/eu/mulk/aendggner/web/worker.js +++ b/src/main/resources/eu/mulk/aendggner/web/worker.js @@ -19,7 +19,8 @@ const gestartet = GraalVM.run([], Object.assign(new GraalVM.Config(), { })); self.onmessage = async (nachricht) => { - const { stamm, patches, vollstaendig, artikel, stichtag, nurText } = nachricht.data; + const { stamm, patches, vollstaendig, artikel, stichtag, nachfassung, nurText } = + nachricht.data; try { await gestartet; await bereit; @@ -29,6 +30,7 @@ self.onmessage = async (nachricht) => { artikel: artikel ?? null, stichtag: stichtag ?? null, vollstaendig: Boolean(vollstaendig), + nachfassung: nachfassung ?? null, nurText: Boolean(nurText), }); if (ergebnis.fehler) { @@ -41,6 +43,8 @@ self.onmessage = async (nachricht) => { angewandt: Number(ergebnis.angewandt), manuell: Number(ergebnis.manuell), normen: Number(ergebnis.normen), + neufassung: String(ergebnis.neufassung), + abgleich: ergebnis.abgleich ? String(ergebnis.abgleich) : null, }); } } catch (e) { |
