notation: \ am Zeilenende setzt die Zeile fort (SPEC §1, D59)

Eine Zeile trägt alles auf einmal — im mitgelieferten Plan ist die längste
122 Zeichen lang, und seit das Textfeld nicht mehr umbricht (D49) muss man
dafür schieben. Ein `\` am Zeilenende verteilt sie jetzt auf mehrere
Textzeilen, ohne dass ein neuer Knoten entsteht.

Leerraum davor ist Pflicht (`… \`, nicht `…\`) — bewusst gegen die
Shell-Gewohnheit: Ohne die Regel verschluckt ein Label wie `C:\temp\` stumm
den folgenden Knoten, mit ihr bekommt man nur keine Fortsetzung, was man
sofort sieht. Der laute Fehler ist der bessere.

Umgesetzt als Vor-Durchlauf `logicalLines()`: Die Folgezeile ist Teil der
Zeile, bevor irgendetwas aus ihr gelesen wird — die Extraktionsreihenfolge
aus §1 bleibt unangetastet. Alles gehört zur ersten Zeile: Einrückung,
Warnungs-Zeilennummer, Rückschreiber; der Cursor in der Fortsetzung wählt
ihren Knoten aus, wie bei Beschreibungszeilen.

SPEC §1/§9, llms.md, Legende in neun Sprachen, D59; 20 neue Tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-24 13:17:26 +02:00
co-authored by Claude Opus 5
parent 257aab08dd
commit 410dacdc6c
8 changed files with 331 additions and 6 deletions
+38 -2
View File
@@ -14,6 +14,8 @@ Alle Bestandteile außer dem Label sind optional. Die Extraktion erfolgt in
dieser Reihenfolge (wichtig für Kollisionsfreiheit):
1. Kommentar entfernen: alles ab `%%` bis Zeilenende.
1b. Fortsetzung: Endet die Zeile jetzt auf Leerraum + `\`, gehört die
Folgezeile noch dazu (siehe unten). Erst danach ist die Zeile vollständig.
2. Einrückung, Zeichen (`-` / `+` / `|` / `=`), Statusbox `[…]` und Faltmarke
(`>` / `<`) per Zeilen-Regex; `=` nur mit folgendem Leerraum (§3),
die Faltmarke ebenso (siehe unten).
@@ -25,6 +27,38 @@ dieser Reihenfolge (wichtig für Kollisionsfreiheit):
8. Fokusmarke: `!!!` als **alleinstehendes** Token (siehe unten).
9. Rest, whitespace-normalisiert = Label. Leeres Label ⇒ Zeile ignorieren.
**Fortsetzungszeile `\`** — eine lange Zeile darf auf mehrere Textzeilen
verteilt werden, ohne dass ein neuer Knoten entsteht:
- Endet eine Zeile — **nach** dem Entfernen des Kommentars — auf **Leerraum und
dann `\`** als letztem Zeichen, wird die **Folgezeile angehängt**: Der `\`
entfällt, die Einrückung der Folgezeile entfällt, verbunden wird mit **genau
einem Leerzeichen**. Mehrere `\` hintereinander setzen die Zeile über
entsprechend viele Textzeilen fort.
- **Leerraum davor ist Pflicht** (`… \`, nicht `…\`) — dieselbe Sorte Regel wie
bei `=`, `>`/`<` und `"`, nur an der anderen Seite des Zeichens. Sie hält
Labels heraus, die selbst auf einen Backslash enden (`C:\temp\`): Ohne sie
verschluckte so eine Zeile stumm den folgenden Knoten. Der Preis ist die
umgekehrte Verwechslung — wer aus der Shell `…\` gewohnt ist, bekommt keine
Fortsetzung —, und die ist die harmlosere: Die Zeile bleibt stehen, was man
sofort sieht.
- **Alles gehört zur ersten Zeile:** Ihre Einrückung bestimmt die Ebene (§2),
ihre Nummer nennen die Warnungen, und Werkzeuge, die zurückschreiben
(Faltmarke §9, ID-Kurzform §9), fassen nur sie an. Der Cursor in einer
Fortsetzungszeile wählt den Knoten der ersten aus (§9, Sprung).
- Ein Token darf **nicht** über den Umbruch hinweg getrennt werden — verbunden
wird mit einem Leerzeichen, eine zerschnittene URL bleibt zerschnitten.
- Gilt nur im **Baumteil**. Im Beschreibungsteil hinter `---` (siehe unten) sind
Zeilenumbrüche Absatzstruktur; ein `\` bleibt dort gewöhnlicher Text.
- Steht der `\` in der **letzten** Zeile der Datei, gibt es nichts anzuhängen:
Er entfällt, die Zeile bleibt für sich.
Referenz-Regex (Schritt 1b, geprüft auf der kommentarfreien Zeile):
```
(^|[ \t])\\[ \t]*$
```
**Faltmarke `>` / `<`** — bestimmt, wie das Dokument **eröffnet** wird:
- Steht **unmittelbar vor dem Label**, also hinter der Statusbox
@@ -709,8 +743,10 @@ 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. **Beschreibungszeilen
zählen zu ihrem Knoten**: Steht der Cursor in einer `"`-Zeile (§1) oder in
hervorgehoben und beim Zeilenwechsel ins Bild gescrollt. **Beschreibungs- und
Fortsetzungszeilen (§1)
zählen zu ihrem Knoten**: Steht der Cursor in einer `"`-Zeile (§1), in einer
Fortsetzung hinter `\` 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