====== std.svg ====== SVG-Bibliothek für Lyx: Vektorgrafiken programmatisch erzeugen, stilisieren und als ''.svg''-Datei speichern. Die Bibliothek deckt den gesamten SVG 1.1-Standard ab — von einfachen Grundformen über Pfade, Texte und Farbverläufe bis hin zu SMIL-Animationen und Filtern. Optionaler Parser zum Einlesen und Traversieren vorhandener SVG-Dateien. → [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:units:pdf|std.pdf]] ---- ===== Architektur ===== Übersicht der internen Schichten und Abhängigkeiten: ┌──────────────────────────────────────────────────────────┐ │ std.svg (Public API) │ ├────────────────────────┬─────────────────────────────────┤ │ Inhalt │ Infrastruktur │ │ elements · path │ builder · xml │ │ text · defs │ │ │ filter · image │ │ │ anim │ │ ├────────────────────────┴─────────────────────────────────┤ │ Querschnitt: style │ ├──────────────────────────────────────────────────────────┤ │ Lesen: parser │ └──────────────────────────────────────────────────────────┘ ---- ===== Minimales Beispiel ===== Die Bibliothek arbeitet **zustandsbehaftet**: Stil setzen, Form zeichnen, mit ''SvgApply'' abschließen. Style-Strings gibt es nicht. 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, 600.0); SvgSetPrettyPrint(doc, 1); SvgSetFillHex(doc, "blue"); SvgSetStroke(doc, 0.0, 0.0, 0.5); SvgSetStrokeWidth(doc, 2.0); SvgCircle(doc, 400.0, 300.0, 100.0); SvgApply(doc); SvgSetFillHex(doc, "white"); SvgSetFont(doc, "DejaVu Sans", 24.0); SvgSetTextAnchor(doc, SVG_ANCHOR_MIDDLE); SvgTextAt(doc, 400.0, 300.0, "Hallo SVG"); SvgApply(doc); var rc: int64 := SvgSave(doc, "ausgabe.svg"); PrintLn(IntToStr(rc)); // 0 = geschrieben SvgFree(doc); return 0; } 0 Die erzeugte Datei: Hallo SVG ---- ===== Units ===== ^ Unit ^ Beschreibung ^ | [[lyx_-_programmiersprache:units:svg:builder|std.svg.builder]] | Dokumentlebenszyklus: SvgNew, SvgSave, SvgFree, Viewport | | [[lyx_-_programmiersprache:units:svg:xml|std.svg.xml]] | XML-Schreiber: Puffer, Zahlenformatierung, Dokumentstruktur | | [[lyx_-_programmiersprache:units:svg:style|std.svg.style]] | Fill, Stroke, Opacity, Transforms, Dash-Muster | | [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]] | Grundformen: rect, circle, ellipse, line, polyline, polygon | | [[lyx_-_programmiersprache:units:svg:path|std.svg.path]] | Pfad-Builder: moveto, lineto, Bezier-Kurven, Bögen | | [[lyx_-_programmiersprache:units:svg:text|std.svg.text]] | Text: SvgTextAt, tspan, Text auf Pfad, Font-Styling | | [[lyx_-_programmiersprache:units:svg:defs|std.svg.defs]] | Definitionen: Farbverläufe, Muster, Symbole, Marker, Clips | | [[lyx_-_programmiersprache:units:svg:filter|std.svg.filter]] | Filter: Unschärfe, Schatten, Graustufen, feComposite | | [[lyx_-_programmiersprache:units:svg:image|std.svg.image]] | Bilder: JPEG/PNG einbetten, Base64, RGB→PNG | | [[lyx_-_programmiersprache:units:svg:anim|std.svg.anim]] | SMIL-Animation: animate, animateTransform, Keyframes | | [[lyx_-_programmiersprache:units:svg:parser|std.svg.parser]] | SVG-Reader: SvgOpen, DOM-Traversierung, Attribut-Zugriff | ---- ===== Hauptfunktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SvgNew(width: f64, height: f64): int64'' | pub | Dokument anlegen; ein eigener ''Svg''-Typ existiert nicht | | ''SvgNewViewBox(width: f64, height: f64, vbX: f64, vbY: f64, vbW: f64, vbH: f64): int64'' | pub | Dokument mit ''viewBox'' | | ''SvgSetPrettyPrint(doc: int64, enabled: int64): void'' | pub | Einrückung an/aus | | ''SvgSave(doc: int64, path: pchar): int64'' | pub | In eine Datei schreiben; ''0'' bei Erfolg | | ''SvgToString(doc: int64): pchar'' | pub | Dokument als Zeichenkette | | ''SvgFree(doc: int64): void'' | pub | Speicher freigeben | > **''SvgNewViewBox'' gibt es inzwischen** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1246|#1246]] behoben): Die Hülle ruft ''SvgNew'' und danach ''SvgSetViewBox''. Beide Wege sind mit ''lyxc 1.1.3I'' nachgemessen. Letzte Aktualisierung: 2026-08-19 — Einstiegsbeispiel und Funktionstabelle gegen die echten Signaturen berichtigt (kein Style-String, kein ''Svg''-Typ, ''SvgSave'' mit Rückgabewert, ''SvgNewViewBox'' vorhanden). Beispiel mit ''lyxc 1.1.3I'' übersetzt, ausgeführt und die erzeugte Datei übernommen. Vorherige Aktualisierung: 2026-08-10