feat: Cursor in einer Beschreibung wählt ihren Knoten aus
Bisher fiel die Hervorhebung weg, sobald der Cursor von der Knotenzeile auf die `"`-Zeile darunter rückte: Die trägt keinen Knoten, also fand die Zeilensuche nichts. Falsche Auskunft — sie trägt keinen EIGENEN Knoten, gehört aber zu einem, und wer in ihr schreibt, arbeitet an genau diesem. Gilt für beide Formen, nicht nur die Kurzform: Die Zuordnung entsteht an derselben Stelle im Parser, an der auch die `---`-Blöcke landen, und dort trägt die Begründung sogar weiter — der Langtext steht am Dateiende, weit weg von seinem Knoten. Zugeordnet werden Textzeilen, Block-Kopfzeile (sie nennt den Knoten) und Leerzeilen innerhalb eines Blocks; nicht der `---`-Trenner und nichts unter unbekannter ID. `node.descLines` entsteht im Parser, der Renderer gibt sie als `data-desc-lines="3 4 5"` aus, app.js trifft sie per `[data-desc-lines~="N"]`. Bewusst getrennt von `descLines` (dem Text): Dort fallen Leerzeilen zu einem Absatztrenner zusammen und Blocktext unter unbekannter ID kommt gar nicht an. Beide Richtungen gehen jetzt über eine Auflösung (`nodeOfLine()`) — sonst wäre der ausdrückliche Alt+Klick aus einer Beschreibung heraus stumm geblieben, und das ist gerade der Ort, an dem man ihn braucht. 5 neue Tests (204 gesamt). SPEC §9 und D40 (Nachtrag 2) nachgezogen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
e223734d58
commit
24a70ca49e
@@ -2245,6 +2245,37 @@ whitespace-normalisierter Beschreibung: Ein Screenreader läse vierundzwanzig
|
||||
Striche einzeln vor, und die Trennung, die ein Auge braucht, braucht ein Ohr
|
||||
nicht — die Aufzählung ist dort ohnehin schon gegliedert.
|
||||
|
||||
**Nachtrag 2 — der Cursor in einer Beschreibung wählt ihren Knoten aus.**
|
||||
Bisher fiel die Hervorhebung (D25) weg, sobald der Cursor eine Zeile
|
||||
weiterrückte: Die `"`-Zeile trägt keinen Knoten, also fand die Zeilensuche
|
||||
nichts. Das ist die falsche Auskunft — die Zeile trägt keinen **eigenen**
|
||||
Knoten, gehört aber zu einem, und wer in ihr schreibt, arbeitet an genau
|
||||
diesem Knoten.
|
||||
|
||||
**Beide Formen, nicht nur die Kurzform.** Gefragt war nach der `"`-Zeile; die
|
||||
Zuordnung entsteht aber an derselben Stelle im Parser, an der auch die
|
||||
`---`-Blöcke landen, und dieselbe Begründung trägt dort sogar weiter: Der
|
||||
Langtext steht am **Dateiende**, weit weg von seinem Knoten — die
|
||||
Hervorhebung ist die einzige Anzeige, an welchem man gerade schreibt.
|
||||
Zugeordnet werden die eingerückten Textzeilen, die **Kopfzeile** `#auth`
|
||||
(sie nennt den Knoten) und Leerzeilen **innerhalb** eines Blocks; nicht der
|
||||
`---`-Trenner selbst und nichts unter einer unbekannten ID (dort gibt es
|
||||
keinen Knoten, und `unknownDesc` steht schon).
|
||||
|
||||
**Die Zeilennummern liegen am Knoten, nicht in einer Nebenrechnung.**
|
||||
`node.descLines` entsteht im Parser (`ownLine()`), der Renderer gibt sie als
|
||||
`data-desc-lines="3 4 5"` aus, app.js findet den Knoten per
|
||||
`[data-desc-lines~="N"]` — der Attribut-Selektor trifft die Nummer als Glied
|
||||
der Liste, es braucht keine eigene Datenstruktur im UI. Bewusst **getrennt**
|
||||
von `descLines` (dem Text): Dort fallen aufeinanderfolgende Leerzeilen zu
|
||||
einem Absatztrenner zusammen und Blocktext unter unbekannter ID kommt gar
|
||||
nicht erst an — für die Zeilenzuordnung wäre beides falsch.
|
||||
|
||||
Beide Richtungen gehen jetzt über **eine** Auflösung (`nodeOfLine()`): das
|
||||
Mitlaufen der Cursor-Zeile und der ausdrückliche Alt+Klick (D25-Nachtrag 1).
|
||||
Sonst wäre die Geste aus einer Beschreibung heraus stumm geblieben — und das
|
||||
ist genau der Ort, an dem man sie braucht.
|
||||
|
||||
## D41 — Querverbindungen: Krümmung statt Farbe, Pfeil auf das Gebrauchte
|
||||
Die Abhängigkeits-Kanten (SPEC §9) sind die erste Linienart, die nicht der
|
||||
Zerlegung folgt — §11 verlangte dafür eine eigene Zeichenebene. Gebaut wie der
|
||||
|
||||
+9
-2
@@ -577,8 +577,15 @@ verknüpft (siehe D25):
|
||||
„hinschauen": Er holt **keine Bildschirmtastatur** herauf — die erscheint erst,
|
||||
wenn das Textfeld selbst angetippt wird.
|
||||
- **Text → Diagramm:** Der Knoten der **Cursor-Zeile** wird im Diagramm
|
||||
hervorgehoben und beim Zeilenwechsel ins Bild gescrollt. Zeilen ohne Knoten
|
||||
(Kommentar, Leerzeile, ausgeblendetes verworfenes Element) heben nichts
|
||||
hervorgehoben und beim Zeilenwechsel ins Bild gescrollt. **Beschreibungszeilen
|
||||
zählen zu ihrem Knoten**: Steht der Cursor in einer `"`-Zeile (§1) oder in
|
||||
einem ID-Block des `---`-Beschreibungsteils (Kopfzeile eingeschlossen), gilt
|
||||
der beschriebene Knoten als ausgewählt — solche Zeilen tragen keinen eigenen
|
||||
Knoten, gehören aber zu einem, und wer darin schreibt, arbeitet an genau
|
||||
diesem Knoten. Das gilt für beide Richtungen der Geste (also auch für den
|
||||
ausdrücklichen Alt+Klick unten) und für die Hervorhebung der
|
||||
Abhängigkeits-Kanten (§9). Zeilen ohne Knoten (Kommentar, Leerzeile, der
|
||||
`---`-Trenner selbst, ausgeblendetes verworfenes Element) heben nichts
|
||||
hervor. Die Hervorhebung arbeitet auf einer **eigenen Achse — Tiefe**: weißer
|
||||
Halo + Ring in Tinte, dazu ein Schlagschatten und eine leichte Vergrößerung,
|
||||
sodass der Knoten sich aus der Ebene hebt. Das ist der einzige Kanal, den
|
||||
|
||||
Reference in New Issue
Block a user