====== std.svg.text ======
Text ausgeben: einzeilig mit ''SvgTextAt'', mehrzeilig über ''SvgTextBegin'' + ''SvgTspan'', dazu Text entlang eines Pfads.
Wie überall in ''std.svg'' gibt es **keinen Style-String**: Schrift, Gewicht, Anker und Ausrichtung werden vorab am Dokument gesetzt und gelten für das nächste Element. Ein einzeiliger Text wird mit ''SvgApply'' abgeschlossen; ein Textblock mit ''SvgTextEnd''.
→ [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:style|std.svg.style]] · [[lyx_-_programmiersprache:units:svg:defs|std.svg.defs]]
----
===== Verwendung =====
import std.io;
import std.svg.builder;
import std.svg.elements;
import std.svg.style;
import std.svg.text;
fn main(): int64 {
var doc: int64 := SvgNew(800.0, 400.0);
SvgSetPrettyPrint(doc, 1);
SvgSetFont(doc, "DejaVu Sans", 24.0);
SvgSetFillHex(doc, "black");
SvgTextAt(doc, 100.0, 50.0, "Hallo Welt");
SvgApply(doc);
SvgSetTextAnchor(doc, SVG_ANCHOR_MIDDLE);
SvgSetFontWeight(doc, SVG_WEIGHT_BOLD);
SvgTextAt(doc, 400.0, 150.0, "Zentriert und fett");
SvgApply(doc);
// Mehrzeilig: dy je Zeile in Benutzereinheiten
SvgSetFont(doc, "DejaVu Sans", 18.0);
SvgTextBegin(doc, 50.0, 250.0);
SvgTspan(doc, "Erste Zeile", 0.0, 0.0);
SvgTspan(doc, "Zweite Zeile", 0.0, 22.0);
SvgTspanStyle(doc, "Dritte fett", SVG_WEIGHT_BOLD, 0.0, 22.0);
SvgTextEnd(doc);
Print(SvgToString(doc)); Print("\n");
SvgFree(doc);
return 0;
}
Am zweiten Text sieht man die Regel: Die Schriftangabe des ersten Aufrufs ist mit dessen ''SvgApply'' verbraucht und muss für den Block erneut gesetzt werden.
----
===== Konstanten =====
^ Name ^ Wert ^ Verwendung ^
| ''SVG_ANCHOR_START'' / ''SVG_ANCHOR_MIDDLE'' / ''SVG_ANCHOR_END'' | 0–2 | ''SvgSetTextAnchor'' |
| ''SVG_WEIGHT_NORMAL'' / ''SVG_WEIGHT_BOLD'' | 0 / 1 | ''SvgSetFontWeight'', ''SvgTspanStyle'' |
| ''SVG_STYLE_NORMAL'' / ''SVG_STYLE_ITALIC'' | 0 / 1 | ''SvgSetFontStyle'' |
| ''SVG_DECO_NONE'' / ''SVG_DECO_UNDERLINE'' / ''SVG_DECO_STRIKE'' / ''SVG_DECO_OVERLINE'' | 0–3 | ''SvgSetTextDecoration'' |
| ''SVG_BASELINE_AUTO'' / ''SVG_BASELINE_MIDDLE'' / ''SVG_BASELINE_HANGING'' | 0–2 | ''SvgSetDominantBaseline'' |
----
===== Funktionen =====
^ Signatur ^ Sichtbarkeit ^ Beschreibung ^
| ''SvgSetFont(doc: int64, family: pchar, size: f64): void'' | pub | Schriftfamilie und -größe |
| ''SvgSetFontWeight(doc: int64, weight: int64): void'' | pub | Gewicht, ''SVG_WEIGHT_*'' |
| ''SvgSetFontStyle(doc: int64, style: int64): void'' | pub | Stil, ''SVG_STYLE_*'' |
| ''SvgSetTextAnchor(doc: int64, anchor: int64): void'' | pub | Ausrichtung, ''SVG_ANCHOR_*'' |
| ''SvgSetDominantBaseline(doc: int64, baseline: int64): void'' | pub | Grundlinie, ''SVG_BASELINE_*'' |
| ''SvgSetLetterSpacing(doc: int64, spacing: f64): void'' | pub | Zeichenabstand |
| ''SvgSetWordSpacing(doc: int64, spacing: f64): void'' | pub | Wortabstand |
| ''SvgSetTextDecoration(doc: int64, deco: int64): void'' | pub | Unterstreichung usw., ''SVG_DECO_*'' |
| ''SvgTextAt(doc: int64, x: f64, y: f64, text: pchar): void'' | pub | Einzeiliger Text, danach ''SvgApply'' |
| ''SvgTextBegin(doc: int64, x: f64, y: f64): int64'' | pub | Textblock beginnen |
| ''SvgTspan(doc: int64, text: pchar, dx: f64, dy: f64): void'' | pub | Zeile im Block |
| ''SvgTspanStyle(doc: int64, text: pchar, weight: int64, dx: f64, dy: f64): void'' | pub | Zeile mit eigenem Gewicht |
| ''SvgTextEnd(doc: int64): void'' | pub | Textblock schließen |
| ''SvgTextOnPath(doc: int64, pathId: pchar, text: pchar, offset: f64): void'' | pub | Text entlang eines Pfads |
Nicht vorhanden: ''SvgTextRotated'', ''SvgTextSpan'' und die ''SvgTextBlock''-Familie — für gedrehten Text die Transformationen aus ''std.svg.style'' vor dem Textaufruf setzen.
Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben (kein Style-Parameter, Konstanten statt Zeichenketten, ''SvgTextBegin''/''SvgTspan''/''SvgTextEnd'' statt Textblock-Typ). Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt, Ausgabe übernommen.