notation: Faltmarke rückt hinter die Statusbox (D34-Nachtrag 2)

`- > [x] Backend` wird zu `- [x] > Backend`. Die alte Stellung verschob die
Statusbox um genau eine Einrückungsstufe — die Box einer gefalteten Zeile
stand damit in der Spalte der Boxen ihrer eigenen Kinder. Vor dem Label
kostet die Verschiebung nichts, weil Labels ohnehin ausgefranst sind.

Nebengewinn: Die Regel wird einfacher. Statt „zwischen Zeichen und Statusbox,
bei Wurzelknoten am Zeilenanfang" heißt sie jetzt ausnahmslos „unmittelbar
vor dem Label"; für Zeilen ohne Statusbox ändert sich nichts.

Die alte Stellung wird weiter gelesen (Pads und ?sourceUrl=-Quellen lassen
sich nicht migrieren), aber nie mehr geschrieben — setFoldMark() löst sie in
die neue auf. SPEC §1 hält zusätzlich fest, dass `<` gelesen, aber nie
erzeugt wird.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-23 10:04:16 +02:00
co-authored by Claude Fable 5
parent 321bdc9dfa
commit be729239ce
9 changed files with 183 additions and 60 deletions
+26 -9
View File
@@ -7,15 +7,15 @@ Syntaxänderungen werden zuerst hier dokumentiert, dann implementiert.
## 1. Zeilenformat
```
[Einrückung][Zeichen] [Faltmarke] [Statusbox] Label (Größe) URL @tag … !!! %% Kommentar
[Einrückung][Zeichen] [Statusbox] [Faltmarke] Label (Größe) URL @tag … !!! %% Kommentar
```
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.
2. Einrückung, Zeichen (`-` / `+` / `|` / `=`), Faltmarke (`>` / `<`) und
Statusbox `[…]` per Zeilen-Regex; `=` nur mit folgendem Leerraum (§3),
2. Einrückung, Zeichen (`-` / `+` / `|` / `=`), Statusbox `[…]` und Faltmarke
(`>` / `<`) per Zeilen-Regex; `=` nur mit folgendem Leerraum (§3),
die Faltmarke ebenso (siehe unten).
3. URL: erstes Token, das auf `https?://\S+` passt (dadurch stören `@` in URLs nicht).
4. Größe: erstes `(XS|S|M|L|XL|XXL)`, Groß-/Kleinschreibung egal.
@@ -27,13 +27,22 @@ dieser Reihenfolge (wichtig für Kollisionsfreiheit):
**Faltmarke `>` / `<`** — bestimmt, wie das Dokument **eröffnet** wird:
- Steht **zwischen** Zerlegungszeichen und Statusbox (`- > [x] Backend`); bei
Wurzelknoten (ohne Zeichen) am Zeilenanfang. Erkannt nur mit **folgendem
Leerraum** — `- >Achtung` bleibt damit ein Label. Begründung der Stellung:
D34-Nachtrag.
- Steht **unmittelbar vor dem Label**, also hinter der Statusbox
(`- [x] > Backend`); ohne Statusbox rückt sie an deren Stelle
(`- > Backend`, bei Wurzelknoten an den Zeilenanfang). Erkannt nur mit
**folgendem Leerraum**`- [x] >Achtung` bleibt damit ein Label. Die
Stellung hält die Spalte der Statusboxen über die Ebenen hinweg bündig;
Begründung: D34-Nachtrag 2.
- Die frühere Stellung **zwischen Zeichen und Statusbox** (`- > [x] Backend`)
wird weiterhin **gelesen**, aber nie mehr geschrieben: Beim Zurückschreiben
(§9) wird sie in die neue aufgelöst. Stehen beide, gilt die erste.
- `>` heißt: der Teilbaum dieses Knotens ist beim Öffnen **eingeklappt**.
- `<` innerhalb eines eingeklappten Bereichs holt den **eigenen Teilbaum**
gezielt wieder hervor (Mechanik: §9).
gezielt wieder hervor (Mechanik: §9). Es ist eine **Schreibhilfe für
Autoren**: gelesen wird es unverändert, erzeugt wird es nie — das
Zurückschreiben (§9) setzt ausschließlich `>`. Ein von Hand gesetztes `<`
bleibt stehen, solange es den Zustand noch richtig beschreibt, und wird
aufgelöst, sobald alle Marken neu gesetzt werden.
- Die Marken beschreiben den **Faltzustand des Dokuments**: Beim Öffnen stellen
sie ihn her, und Umklappen im Diagramm schreibt sie zurück (§9) — Text und
Bild sagen dasselbe. Sie sagen nichts über Fortschritt (§4) oder
@@ -138,7 +147,15 @@ Text zu einem Knoten (Anzeige: §9):
Referenz-Regex der Implementierung:
```
^([ \t]*)([-|+]|=(?=[ \t]))?\s*(?:([><])(?=[ \t])\s*)?(?:\[([ ?~xX^/-])\]\s*)?(.*)$
^([ \t]*)([-|+]|=(?=[ \t]))?\s*(?:([><])(?=[ \t])\s*)?(?:\[([ ?~xX^/-])\]\s*)?(?:([><])(?=[ \t])\s*)?(.*)$
```
Die **zweite** Faltmarken-Gruppe ist die gültige Stellung, die erste die
weiterhin gelesene alte (siehe oben). Umkehrung fürs Zurückschreiben (§9) —
sie setzt die Marke immer in die zweite Stellung und löst die erste dabei auf:
```
^([ \t]*(?:[-|+]|=(?=[ \t]))?[ \t]*)(?:[><](?=[ \t])[ \t]*)?((?:\[[^\]]\][ \t]*)?)(?:[><](?=[ \t])[ \t]*)?
```
Für die Knoten-ID (Schritt 6, nur der erste Treffer; die letzte Gruppe ist der