Pruefung der Texte: weniger Ausnahmen, Geviertstriche, Navigation bis Post 9
ae/oe/ue gilt hinter einem Vokal nicht mehr als fehlender Umlaut, Mailadressen und Domains sind ausgenommen, Geviertstriche werden gemeldet. Das Menue nennt Post 8 und Post 9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5a65b5444c
commit
76ac3e4cce
9 files changed
+403
-58
No files matched your search
+50
-7
@@ -1048,6 +1048,8 @@ if (location.search.indexOf("nur=anim") >= 0)
|
||||
<button type="button" data-gehe="./post5.html">Post 5 · Projektmanagement</button>
|
||||
<button type="button" data-gehe="./post6.html">Post 6 · Team-Chat</button>
|
||||
<button type="button" data-gehe="./post7.html">Post 7 · Form Builder</button>
|
||||
<button type="button" data-gehe="./post8.html">Post 8 · E-Mail-Marketing</button>
|
||||
<button type="button" data-gehe="./post9.html">Post 9 · Webinar</button>
|
||||
<hr>
|
||||
<button type="button" data-gehe="./uebersicht.html">Alle Projekte im Streifen</button>
|
||||
<hr>
|
||||
@@ -4371,8 +4373,17 @@ if (location.search.indexOf("nur=anim") >= 0)
|
||||
|
||||
Kanalnamen sind Absicht: "# waermepumpe-mueller" ist ein Handle, und die
|
||||
schreiben Chatwerkzeuge klein und ohne Umlaute. */
|
||||
/* Woerter, in denen ae/oe/ue kein verkruepppelter Umlaut ist, sondern zwei
|
||||
Laute an einer Silbengrenze. Die Eintraege wirken als Wortanfang.
|
||||
|
||||
Die Liste ist kurz geworden, weil die Regel darunter den groessten Teil
|
||||
der Ausnahmen von selbst erledigt: ein ersatzweise geschriebener Umlaut
|
||||
steht nie hinter einem Vokal. Vorher standen hier dauer, neue, steuer,
|
||||
feuer, bauer -- alle nach demselben Muster, und die Liste waere mit
|
||||
jedem Beitrag weitergewachsen. Was bleibt, sind die echten Sonderfaelle:
|
||||
"Michael" (ae hinter h), "aktuell" (ue hinter t). */
|
||||
const UMLAUT_ERLAUBT = new Set([
|
||||
"michael", "dauer", "neue", "steuer", "feuer", "aktuell", "museum",
|
||||
"michael", "aktuell", "museum",
|
||||
"waermepumpe-mueller", "waermepumpe-abnahme",
|
||||
]);
|
||||
const BRAUCHT_SCHARFES_S = new Set([
|
||||
@@ -4383,11 +4394,42 @@ if (location.search.indexOf("nur=anim") >= 0)
|
||||
function umlautFehler(wurzel) {
|
||||
const raus = [];
|
||||
wurzel.querySelectorAll("text, .headline, .body, .badge").forEach(e => {
|
||||
String(e.textContent || "").split(/[^A-Za-zÄÖÜäöüß0-9./#@-]+/).forEach(w => {
|
||||
/* Nicht textContent, sondern die Textknoten mit Leerzeichen dazwischen.
|
||||
Eine Ueberschrift ist "Formulare selbst bauen.<br><span>Per
|
||||
Drag-and-drop.</span>" -- textContent klebt daraus "bauen.Per"
|
||||
zusammen, ein Wort, das es nicht gibt. Ein Umbruch und eine
|
||||
Elementgrenze sind Wortgrenzen. */
|
||||
const stuecke = [];
|
||||
const lauf = document.createTreeWalker(e, NodeFilter.SHOW_TEXT);
|
||||
for (let k = lauf.nextNode(); k; k = lauf.nextNode()) stuecke.push(k.nodeValue);
|
||||
const ganz = stuecke.join(" ");
|
||||
/* Geviertstriche gehoeren nicht in unsere Texte. Der Halbgeviertstrich
|
||||
als Gedankenstrich ist richtiges Deutsch und bleibt erlaubt; der
|
||||
lange Strich ist eine englische Angewohnheit und liest sich auf einer
|
||||
deutschen Slide fremd. Er kam nicht aus einer Quelle, sondern beim
|
||||
Schreiben mit hinein. */
|
||||
if (ganz.indexOf("\u2014") >= 0) {
|
||||
const stelle = "Geviertstrich in „" + ganz.trim().slice(0, 40) + "“";
|
||||
if (!raus.includes(stelle)) raus.push(stelle);
|
||||
}
|
||||
ganz.split(/[^A-Za-zÄÖÜäöüß0-9./#@-]+/).forEach(w => {
|
||||
if (!w) return;
|
||||
const k = w.toLowerCase().replace(/^[@#]+/, "").replace(/[.,;:!?)(]+$/, "");
|
||||
if (!k || UMLAUT_ERLAUBT.has(k) || raus.includes(w)) return;
|
||||
if (/ae|oe|ue/.test(k) || BRAUCHT_SCHARFES_S.has(k)) raus.push(w);
|
||||
if (!k || raus.includes(w)) return;
|
||||
/* Mailadressen und Domains sind ausgenommen. Dort ist die
|
||||
umlautfreie Schreibung keine Schludrigkeit, sondern Pflicht:
|
||||
"buero@muster-shk.de" kann gar kein ue ersetzen. Ohne diese
|
||||
Ausnahme meldete Post 8 drei Adressen als Fehler. */
|
||||
if (/@/.test(k) || /\.(de|com|net|org|eu|at|ch|io)$/.test(k)) return;
|
||||
if ([...UMLAUT_ERLAUBT].some(a => k.startsWith(a))) return;
|
||||
/* ae/oe/ue nur dann als verunglueckter Umlaut, wenn kein Vokal
|
||||
davorsteht. Ein ae, oe oder ue, das fuer ae, oe oder ue steht,
|
||||
folgt immer einem Konsonanten oder steht am Wortanfang: "fuer",
|
||||
"ueber", "gruen", "Sanitaer", "Lueftung". Hinter einem Vokal sind
|
||||
es dagegen immer zwei eigene Laute: bauen, Bauer, neue, Dauer,
|
||||
Steuer, Feuer, Mauer, genauer. Die Regel ersetzt sechs Eintraege
|
||||
in UMLAUT_ERLAUBT und alle, die dort noch gelandet waeren. */
|
||||
if (/(^|[^aeiou])(ae|oe|ue)/.test(k) || BRAUCHT_SCHARFES_S.has(k)) raus.push(w);
|
||||
});
|
||||
});
|
||||
return raus;
|
||||
@@ -4413,11 +4455,12 @@ if (location.search.indexOf("nur=anim") >= 0)
|
||||
el.dataset.editmode = "aus";
|
||||
try {
|
||||
await document.fonts.ready;
|
||||
/* Umlaute pruefen, bevor gerendert wird. Lieber ein Abbruch mit
|
||||
/* Den Text pruefen, bevor gerendert wird. Lieber ein Abbruch mit
|
||||
klarer Meldung als ein fertiges PNG mit "Sanitaer" darauf. */
|
||||
const uf = umlautFehler(el);
|
||||
if (uf.length) throw new Error("Slide " + (i + 1) + ": Umlaut fehlt bei " +
|
||||
uf.join(", ") + ". Wenn das Wort so richtig ist, gehoert es in UMLAUT_ERLAUBT.");
|
||||
if (uf.length) throw new Error("Slide " + (i + 1) + ": " + uf.join(", ") +
|
||||
". Fehlt ein Umlaut, schreib ihn; ist das Wort so richtig, gehoert es " +
|
||||
"in UMLAUT_ERLAUBT. Einen Geviertstrich ersetzt ein Punkt oder ein Komma.");
|
||||
const imgs = [...el.querySelectorAll("img")];
|
||||
await Promise.all(imgs.map(im =>
|
||||
im.complete ? im.decode().catch(() => {})
|
||||
|
||||
Reference in new issue
Block a user