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.

Standard Library · 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:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
  <circle cx="400" cy="300" r="100" fill="blue" stroke="#000080" stroke-width="2"/>
  <text x="400" y="300" font-family="DejaVu Sans" font-size="24" text-anchor="middle" fill="white">Hallo SVG</text>
</svg>


Units

Unit Beschreibung
std.svg.builder Dokumentlebenszyklus: SvgNew, SvgSave, SvgFree, Viewport
std.svg.xml XML-Schreiber: Puffer, Zahlenformatierung, Dokumentstruktur
std.svg.style Fill, Stroke, Opacity, Transforms, Dash-Muster
std.svg.elements Grundformen: rect, circle, ellipse, line, polyline, polygon
std.svg.path Pfad-Builder: moveto, lineto, Bezier-Kurven, Bögen
std.svg.text Text: SvgTextAt, tspan, Text auf Pfad, Font-Styling
std.svg.defs Definitionen: Farbverläufe, Muster, Symbole, Marker, Clips
std.svg.filter Filter: Unschärfe, Schatten, Graustufen, feComposite
std.svg.image Bilder: JPEG/PNG einbetten, Base64, RGB→PNG
std.svg.anim SMIL-Animation: animate, animateTransform, Keyframes
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 (#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