Anfuehrungszeichen: 199 falsche Schlusszeichen im sichtbaren Text

Deutsch oeffnet mit „ und schliesst mit “. An 199 Stellen, die ein
Mensch liest, stand als Schlusszeichen ein GERADES " -- „Nächstes"
statt „Nächstes“. Auf sechzehn oeffentlichen Seiten, in vierzig
Dateien des Workspace und in zwoelf Servermodulen, die Texte
verschicken.

Auf dem Bildschirm sieht man den Unterschied sofort. Beim Schreiben
nicht: Das gerade " liegt auf der Tastatur, die anderen nicht.

WARUM EIN ERSTER ANLAUF ZURUECKGENOMMEN WURDE

Ein gerades " ist an vielen Stellen SYNTAX und kein Schriftzeichen --
Grenze einer Zeichenkette, Grenze eines HTML-Attributs, Zeichen in
einem regulaeren Ausdruck. Wer stumpf ersetzt, macht aus

    „<a href="https://…                  ein kaputtes Attribut
    /^["'„»\s]+|["'“«.\s]+$/              einen kaputten Ausdruck
    "… nichts „mal " + "eben …"          eine kaputte Zeichenkette

DIE UNTERSCHEIDUNG LAEUFT AN MERKMALEN, NICHT AN EINER LISTE

  < > = dazwischen        -> HTML-Marke oder Attribut
  endet auf Leerzeichen   -> die Zeichenkette hoert hier auf, der
                             Satz geht in der naechsten Zeile weiter.
                             Ein deutsches Schlusszeichen steht NIE
                             hinter einem Leerzeichen.
  Rueckstrich mittendrin  -> regulaerer Ausdruck
  ${ ohne }               -> mitten in einem Ausdruck

Eine Liste erlaubter Ausnahmen waere die naechste, die niemand
pflegt. Zwoelf Stellen bleiben dadurch stehen, alle zwoelf einzeln
angesehen und alle zwoelf zu Recht -- dort steht das richtige
Schlusszeichen ohnehin weiter unten im Satz.

Fuenf davon waren allerdings ECHTE Fehler HINTER dem Link
(`…>HasiDog</a>".`) -- die erste Regel hatte nur das Attribut
gesehen, nicht den Satz danach. Gezielt nachgezogen.

Ein maskiertes `\"` in workspace-vorlagen.js (28 Hooks) wird zu “ --
ohne Rueckstrich, denn “ begrenzt nichts.

KOMMENTARE BLEIBEN, WIE SIE SIND. Dort liest es niemand ausser mir;
eine Wache, die auch Kosmetik anmahnt, wird weggeklickt. Beim ersten
Messen fielen ausserdem acht Stellen aus buehne.html faelschlich an,
weil `/* */` in HTML (in <style> und <script>) nicht ausgeblendet
war -- jetzt schon.

DIE WACHE DAZU

pruef-struktur prueft es ab sofort mit derselben Regel: 322 Dateien
mit sichtbarem Text, 0 Funde, und die zwoelf bewussten Ausnahmen
werden GEZAEHLT und genannt (erlaubt: 12). Eine Ausnahme, die niemand
sieht, waechst -- und irgendwann steht der echte Fall darin.

GEPRUEFT

  pruef-struktur   59 -> 68 Pruefungen, 0 Fehler
  node --check auf allen geaenderten JS-Dateien
  nachgemessen: 199 geaendert, 12 mit Grund stehen geblieben

  gruen geblieben: bewerbung-aufgaben 163, nachwuchs 262,
  reaktion 421, support 63, content 45, terminregel 35, treff 85

  Und nachgesehen, ob eine Pruefung noch die alte Schreibweise
  ERWARTET: 13 Fundstellen, alle dreizehn nur Text in ihrer eigenen
  Ausgabe, keine einzige ein Vergleich mit dem Seitentext.

GEGENPROBE: In reaktion.html ein Schlusszeichen zurueckgedreht ->
„workspace/reaktion.html:546 „Nächstes"", mit Datei und Zeile. Und
die Erkennung einzeln gegen HTML-Attribut, fortgesetzte
Zeichenkette, regulaeren Ausdruck und eingesetzten Wert geprueft.

Stempel gesetzt: workspace 670 Verweise in 45 Dateien, oeffentlich
554 in 48 Seiten.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-01 01:56:15 +02:00
co-authored by Claude Opus 5
parent 7dc5356c80
commit 95c4599baa
138 changed files with 1510 additions and 1390 deletions
+7 -7
View File
@@ -334,7 +334,7 @@
denselben Worten wie überall im Haus. */
const ja = await window.frageNach?.({
titel: 'Botschaft löschen?',
was: `„${b.text}" wird aus dem Band genommen.`,
was: `„${b.text}“ wird aus dem Band genommen.`,
endgueltig: true,
ja: 'Löschen', nein: 'Behalten',
});
@@ -2338,7 +2338,7 @@
reihe.append(kasten);
}
$('ton-hinweis').textContent =
'Die Regler gelten für das, was DU hörst. Nur „Mein Mikro" und der '
'Die Regler gelten für das, was DU hörst. Nur „Mein Mikro“ und der '
+ 'Stummschalter an einer Gastkarte gelten für alle. Der Balken zeigt '
+ 'den gemessenen Pegel — beim YouTube-Regler die eingestellte '
+ 'Lautstärke, denn Ton aus einem fremden Rahmen lässt sich nicht messen.';
@@ -3131,11 +3131,11 @@
gleichzeitig, und drei Zeilen untereinander liest mitten in
einer Sendung niemand. */
$('kamecke-hinweis').textContent = !kamerasDa
? 'Bei „Nur Video" sind die Kamerafenster ganz weg — Größe und Ecke '
? 'Bei „Nur Video“ sind die Kamerafenster ganz weg — Größe und Ecke '
+ 'gelten wieder, sobald sie zurückkommen.'
: eckeGilt
? 'Unten rechts liegt bei TikTok die Knopfreihe — such dir eine freie Ecke.'
: 'Die Ecke gilt bei „Video groß" — gerade stehen die Fenster in der Mitte.';
: 'Die Ecke gilt bei „Video groß“ — gerade stehen die Fenster in der Mitte.';
/* ---- Der Umschalter ----
Er steht nur da, wenn es etwas zum Umschalten GIBT. Ein Knopf,
@@ -3146,7 +3146,7 @@
if (lage.zweit) {
const wort = lage.zweit.titel || lage.zweit.video;
$('v-tausch-titel').textContent = wort.length > 34 ? wort.slice(0, 33) + '…' : wort;
tausch.title = `Wechseln zu „${wort}"`
tausch.title = `Wechseln zu „${wort}“`
+ (lage.zweit.sekunde > 2 ? ` — weiter bei ${alsZeit(lage.zweit.sekunde)}` : '');
}
if (document.activeElement !== $('p-zweit')) {
@@ -3510,7 +3510,7 @@
const leer = el('li');
leer.append(el('p', 'warte-leer',
'Nichts vorbereitet. Häng oben eine YouTube-Adresse an — dann '
+ 'reicht im Live ein Druck auf „Nächstes".'));
+ 'reicht im Live ein Druck auf „Nächstes“.'));
kasten.append(leer);
return;
}
@@ -4585,7 +4585,7 @@
kasten.append(el('p', 'raus__text',
wort === 'treff_massnahme'
? 'Im Treff läuft eine Maßnahme gegen dich. Solange sie läuft, bist du '
+ 'bei der Reaction nicht dabei. Was los ist, steht im Treff unter „Meine Maßnahmen".'
+ 'bei der Reaction nicht dabei. Was los ist, steht im Treff unter „Meine Maßnahmen“.'
: 'Die Moderation hat dich aus dieser Sendung genommen. Das gilt nur für heute — '
+ 'bei der nächsten Reaction bist du wieder dabei.'));
document.body.append(kasten);