mirror of
https://github.com/zed-industries/zed.git
synced 2026-08-23 07:55:20 +00:00
Mermaid diagrams with long node labels rendered as an unreadable jumble: each label was painted as one long line over a box sized for wrapped text, overflowing into neighboring nodes. With this change, labels wrap to the box width the layout computed. **Root cause:** mermaid's default `htmlLabels: true` makes merman emit labels as HTML inside `<foreignObject>`, which resvg cannot rasterize. merman's resvg-safe pipeline replaces each one with a single-line `<text>` fallback that only honors explicit `<br>` breaks, so soft-wrapped labels collapse onto one long line — while the node boxes were laid out for the wrapped text. **Fix:** disable HTML labels in the site config (both the top-level key, which merman reads for node labels, and `flowchart.htmlLabels`, which it reads for edge labels). merman then emits native SVG `<text>`/`<tspan>` labels wrapped to the same measured width the layout used, and the foreignObject fallback never runs for these diagrams. One behavior preserved deliberately: a literal `\n` in label text used to become a line break as a side effect of the foreignObject fallback (`fallback.rs` converts `\n` when flattening HTML labels). `render_mermaid` now normalizes `\n` to `<br/>` before rendering so the native path keeps that behavior; the existing `backslash_n_converted_to_line_break` test covers it. Side effect: class diagram member text also switches from the lossy fallback to native SVG text; the accent-class test was updated accordingly (accent classes now land directly on `text`/`tspan` elements). Verified with `cargo nextest run -p mermaid_render`, `-p markdown`, `script/clippy -p mermaid_render`, and `cargo fmt --check`. Release Notes: - Fixed mermaid diagram labels overflowing and overlapping nodes when long labels wrap --------- Co-authored-by: cameron <cameron.studdstreet@gmail.com> |
||
|---|---|---|
| .. | ||
| check_invalid_attrs.rs | ||