feat: Labels brechen balanciert um, ID-Zeile über dem Titel, Falt-Chip — D64

Lange Knotentitel brechen bei ~40 Zeichen um, gleichmäßig auf die Zeilen
verteilt — vom Renderer (wrapLabel, headless getestet) statt text-wrap:balance,
damit der Kasten auf die längste balancierte Zeile schrumpft. Der
23-px-Abzweig ankert an der ersten Zeile; der Optional-Kreis sitzt fest auf
der Abzweighöhe. Der Grafikexport misst die gerenderten Zeilen (labelLines)
und gibt je Zeile ein <text> aus. Dazu: die eingeblendete ID (D56) steht in
einer eigenen Zeile über dem Titel, und das Falt-Zeichen ist ein gerahmter
19×16-px-Chip mit gedeckelter Höhe. Plan: #ed.render.wrap, #ed.render M→L
(D62-Prüfung schlug korrekt an).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-24 17:45:11 +02:00
co-authored by Claude Fable 5
parent 1debb7d9da
commit 52232f2c20
10 changed files with 318 additions and 32 deletions
+7 -1
View File
@@ -34,10 +34,11 @@
- [~] #ed: Editor (XXL) https://werkbaum.javagil.de
- [^] #ed.live: Live diagram from text (L)
- [^] #ed.parser: Parser (S)
- [^] #ed.render: Renderer, three layout modes (M)
- [^] #ed.render: Renderer, three layout modes (L)
- [^] #ed.render.horiz: Horizontal fan (S)
- [^] #ed.render.vert: Vertical, transposed (S)
- [^] #ed.render.comp: Compact (S)
- [x] #ed.render.wrap: Long titles wrap into balanced lines (S) %% max ~40 chars, see D64
- [^] #ed.deplink: Cross links for dependencies (M)
- [^] #ed.deplink.calm: Visually secondary — the tree carries the message (S)
- [^] #ed.deplink.focus: Highlight what a selected node needs and feeds (S)
@@ -368,6 +369,11 @@
Everything runs downward, so the tree stays narrow. Here the line style
alone carries the gate: solid for and, dashed for or.
#ed.render.wrap
A single long title used to cost a whole column of width. Titles beyond
forty characters now break into evenly balanced lines, set by the renderer
so the box shrinks to the longest line; connectors anchor on the first line.
#ed.deplink
Dependencies drawn as curved dotted edges on their own layer behind the
nodes — the first line type that does not follow the decomposition.