feat(editor): Warndreieck als Zeiger über fehlerhaften Zeilennummern

Das `?` von `cursor:help` sagte nur „hier gibt es etwas zu lesen". Über der
orange gefärbten Zahl einer Warn-Zeile steht jetzt dasselbe ⚠, das im
Warnungsbereich vor jeder Meldung steht — der Zeiger sagt dieselbe Sache wie
das Ziel, auf das er zeigt.

Der Pfeil bleibt daneben stehen (sonst zeigte der Zeiger auf nichts), Spitze
auf dem Brennpunkt; als data:-URI im Stylesheet, `help` als Rückfall.

SPEC §9 (Zeilennummern) und D33-Nachtrag 2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-24 12:20:08 +02:00
co-authored by Claude Opus 5
parent 3fbc772d81
commit 71bfb62b35
3 changed files with 43 additions and 3 deletions
+32
View File
@@ -1895,6 +1895,38 @@ untereinander, `&` und `"` unverfälscht; keine Zahl ohne Warnung trägt einen
mit (Zeile 3 ganz, Zeile 2 von zwei Meldungen auf eine). Im mitgelieferten mit (Zeile 3 ganz, Zeile 2 von zwei Meldungen auf eine). Im mitgelieferten
Werkbaum-Plan (941 Zeilen, 155 Knoten, 0 Warnungen): 0 Tooltips. Werkbaum-Plan (941 Zeilen, 155 Knoten, 0 Warnungen): 0 Tooltips.
**Nachtrag 2 — der Zeiger trägt ein Warndreieck, kein Fragezeichen.** Der
Nachtrag oben begründete `cursor:help` damit, es sage, „dass es hier etwas zu
lesen gibt" — richtig, aber zu unbestimmt: Das `?` des Systemzeigers heißt
„Hilfe", und Hilfe ist etwas anderes als eine Warnung. Über der orange
gefärbten Zahl einer fehlerhaften Zeile steht jetzt ⚠ — **dasselbe Zeichen,
das im Warnungsbereich vor jeder Meldung steht**. Der Zeiger sagt damit
dieselbe Sache wie das Ziel, auf das er zeigt, und niemand lernt ein neues
Symbol; dieselbe Sparsamkeit wie bei der Diskrepanz-Marke, die die Statusbox
der Notation spiegelt (D39), und bei der ”-Marke der Beschreibungen (D40).
**Der Pfeil bleibt.** Ein Zeiger, der nur aus einem Dreieck besteht, zeigt auf
nichts — man wüsste nicht mehr, welche Zeile getroffen ist, und das Ziel ist
hier keine 18 px hoch. Gebaut ist er deshalb wie der `help`-Zeiger selbst:
Pfeil plus Abzeichen, nur mit dem Dreieck statt dem `?`. Die Spitze liegt auf
dem Brennpunkt (`1 1`), der Pfeil trägt eine weiße Kontur — der Streifen ist
hell, das Diagramm dahinter nicht überall.
**Ein Bild-Zeiger, und `help` als Rückfall.** `cursor:url(…) 1 1, help` — wo
ein Browser das Bild ablehnt (Größenbeschränkungen, restriktive Umgebungen),
gilt wieder das Bisherige, ohne Sonderfall. Als `data:`-URI im Stylesheet, wie
alles andere auch: kein externer Request (D20), und der Build muss nichts
zusätzlich einbetten. 32 × 32 px, weil größere Zeiger auf manchen Plattformen
stillschweigend verworfen werden.
**Nachgemessen** am echten Selektor (`.lineno-inner span.warn` im laufenden
Streifen): Der berechnete Wert endet auf `1 1, help`, das Bild lädt als
32 × 32. Zur Beurteilung der Lesbarkeit auf ein 32-px-`canvas` gezeichnet und
erst **danach** hochskaliert — ein `<img>` mit SVG-Quelle rastert in seiner
Anzeigegröße, die erste Prüfung zeigte deshalb eine glatte Vorschau statt der
Wahrheit. Bei echter 32-px-Rasterung war das Ausrufezeichen zu dünn (1,8 px)
und ging unter; es steht jetzt auf 2,2 px.
## D34 — Abhängigkeiten, IDs, XOR, Falten, Beschreibungen: erst reserviert, dann gebaut ## D34 — Abhängigkeiten, IDs, XOR, Falten, Beschreibungen: erst reserviert, dann gebaut
Fünf Erweiterungen auf einmal — Knoten-**IDs** (`#auth`), **Abhängigkeiten** Fünf Erweiterungen auf einmal — Knoten-**IDs** (`#auth`), **Abhängigkeiten**
(`:#auth,#api`) samt effektivem Status, **XOR** (`x`), ein- und ausklappbare (`:#auth,#api`) samt effektivem Status, **XOR** (`x`), ein- und ausklappbare
+3
View File
@@ -751,6 +751,9 @@ im Text abzählen.
Für Screenreader ist die Live-Region des Warnungsbereichs die Quelle, der Für Screenreader ist die Live-Region des Warnungsbereichs die Quelle, der
Tooltip erspart nur den Weg dorthin. Ohne Zeiger gibt es ihn nicht (wie Tooltip erspart nur den Weg dorthin. Ohne Zeiger gibt es ihn nicht (wie
überall) — die Meldung steht dort ohnehin vollständig. Siehe D33-Nachtrag. überall) — die Meldung steht dort ohnehin vollständig. Siehe D33-Nachtrag.
- Über einer Warn-Zeile trägt der **Zeiger ein Warndreieck** — dasselbe ⚠, das
im Warnungsbereich vor jeder Meldung steht. Der Pfeil bleibt daneben stehen,
damit der Zeiger weiter zeigt. Siehe D33-Nachtrag 2.
- Reine Lesehilfe: kein Bestandteil des Notationstexts, nicht im Grafikexport - Reine Lesehilfe: kein Bestandteil des Notationstexts, nicht im Grafikexport
und nicht im Druck (dort ist ohnehin nur das Diagramm zu sehen). und nicht im Druck (dort ist ohnehin nur das Diagramm zu sehen).
+8 -3
View File
@@ -554,11 +554,16 @@
/* Die Zahl einer Warn-Zeile trägt die Meldung als Tooltip (D33-Nachtrag). /* Die Zahl einer Warn-Zeile trägt die Meldung als Tooltip (D33-Nachtrag).
Dafür reicht ihr Kasten über die **ganze** Streifenbreite statt nur über Dafür reicht ihr Kasten über die **ganze** Streifenbreite statt nur über
die Ziffern: Ein zwei Zeichen breites Ziel trifft man sonst kaum. Die die Ziffern: Ein zwei Zeichen breites Ziel trifft man sonst kaum. Die
Ziffern selbst bleiben, wo sie sind (rechtsbündig, 6 px Abstand), und Ziffern selbst bleiben, wo sie sind (rechtsbündig, 6 px Abstand). */
`cursor:help` sagt, dass es hier etwas zu lesen gibt. */ /* Der Zeiger sagt, WAS hier steht: Pfeil mit **Warndreieck** statt des `?`
von `cursor:help` dasselbe wie vor jeder Meldung im Warnungsbereich
(D33-Nachtrag 2). Der Pfeil bleibt, sonst zeigte der Zeiger auf nichts;
die Spitze liegt auf dem Brennpunkt (1 1). `help` ist der Rückfall, wo ein
Bild-Zeiger nicht angenommen wird. */
.lineno-inner span.warn{ .lineno-inner span.warn{
opacity:1;color:var(--warn);font-weight:600; opacity:1;color:var(--warn);font-weight:600;
left:0;right:0;padding-right:6px;text-align:right;cursor:help; left:0;right:0;padding-right:6px;text-align:right;
cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M1 1V17.6L5.3 13.5 8.3 20.2 11.2 18.9 8.2 12.4 13.8 12.2Z' fill='%23243447' stroke='%23fff' stroke-width='1.4' stroke-linejoin='round'/%3E%3Cpath d='M20.5 14 29.5 30 11.5 30Z' fill='%23B45309' stroke='%23fff' stroke-width='1.6' stroke-linejoin='round'/%3E%3Cpath d='M19.4 19.8h2.2v5.2h-2.2zM19.4 26.6h2.2v2.2h-2.2z' fill='%23fff'/%3E%3C/svg%3E") 1 1, help;
} }
.hint{ .hint{
padding:12px 16px;border-top:1px dashed rgba(36,52,71,.18); padding:12px 16px;border-top:1px dashed rgba(36,52,71,.18);