====== std.svg.parser ====== SVG-Leser: eine vorhandene ''.svg''-Datei öffnen, den Baum durchlaufen, Elemente nach ''id'' oder Tag finden und Attribute auslesen. Schreiben kann der Parser nicht. Knoten und Dokument sind ''int64''-Handles; ein nicht vorhandener Knoten ist ''0'', nicht ''null''. Eigene Typen (''SvgDoc'', ''SvgNode'', ''SvgNodeList'') gibt es nicht. → [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:builder|std.svg.builder]] · [[lyx_-_programmiersprache:units:svg:xml|std.svg.xml]] ---- ===== Verwendung ===== import std.io; import std.svg.parser; fn main(): int64 { var doc: int64 := SvgOpen("in.svg"); if (doc == 0) { PrintLn("nicht lesbar"); return 1; } var vb: pchar := SvgReadViewBox(doc); Print("viewBox: "); Print(vb); Print("\n"); // Kinder der Wurzel durchlaufen var root: int64 := SvgRootElement(doc); var child: int64 := SvgFirstChild(root); while (child != 0) { var tag: pchar := SvgElementTag(child); var fill: pchar := SvgAttrStr(child, "fill"); Print(" <"); Print(tag); Print("> fill="); Print(fill); Print("\n"); child := SvgNextSibling(child); } Print("Kreise: "); PrintLn(IntToStr(SvgCountByTag(doc, "circle"))); SvgParserFree(doc); return 0; } Eingabe: Ausgabe: viewBox: 0 0 400 300 fill=red fill=blue fill= Kreise: 2 Ein Attribut, das es nicht gibt, liefert ''0'' als ''pchar'' — ''Print'' gibt dafür nichts aus (siehe die ''rect''-Zeile). > **Die Zahlenseite des Parsers ist derzeit unbrauchbar** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1687|#1687]]): ''SvgReadWidth'', ''SvgReadHeight'' und ''SvgAttrF64'' liefern das IEEE-Bitmuster als Zahl (''400.0'' kommt als ''4645744490609377280'' zurück). Bis zur Behebung hilft nur der Umweg über ''SvgAttrStr'' und eigenes Umwandeln. > > Die Zeichenkettenseite — ''SvgAttrStr'', ''SvgElementTag'', ''SvgElementId'', ''SvgReadViewBox'', ''SvgFindId'', ''SvgCountByTag'' — arbeitet korrekt; das obige Beispiel ist damit gemessen. ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SvgOpen(path: pchar): int64'' | pub | Datei einlesen und Baum bauen; ''0'' bei Fehler | | ''SvgGetError(doc: int64): pchar'' | pub | Fehlertext des letzten Öffnens | | ''SvgReadWidth(doc: int64): f64'' | pub | Breite (siehe Kasten) | | ''SvgReadHeight(doc: int64): f64'' | pub | Höhe (siehe Kasten) | | ''SvgReadViewBox(doc: int64): pchar'' | pub | ''viewBox'' als Zeichenkette | | ''SvgRootElement(doc: int64): int64'' | pub | Wurzelknoten | | ''SvgFirstChild(elem: int64): int64'' | pub | Erstes Kind, sonst ''0'' | | ''SvgNextSibling(elem: int64): int64'' | pub | Nächstes Geschwister, sonst ''0'' | | ''SvgElementTag(elem: int64): pchar'' | pub | Tag-Name | | ''SvgElementId(elem: int64): pchar'' | pub | ''id'' des Knotens | | ''SvgAttrStr(elem: int64, name: pchar): pchar'' | pub | Attributwert als Zeichenkette, sonst ''0'' | | ''SvgAttrF64(elem: int64, name: pchar, defaultVal: f64): f64'' | pub | Attributwert als Zahl mit Vorgabe (siehe Kasten) | | ''SvgPathData(elem: int64): pchar'' | pub | Das ''d''-Attribut eines Pfads | | ''SvgFindId(doc: int64, id: pchar): int64'' | pub | Knoten mit dieser ''id'' | | ''SvgCountByTag(doc: int64, tag: pchar): int64'' | pub | Anzahl der Knoten mit diesem Tag | | ''SvgParserFree(doc: int64): void'' | pub | Baum freigeben | Nicht vorhanden: ''SvgDocRoot'', ''SvgDocWidth'', ''SvgDocHeight'', ''SvgNodeFirstChild'', ''SvgNodeNext'', ''SvgNodeTag'', ''SvgFindById'', ''SvgFindByTag'' und die ganze ''SvgNodeList''-Familie — frühere Fassungen dieser Seite führten sie auf. Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben; Beispiel mit ''lyxc 1.1.3I'' übersetzt und gegen die oben gezeigte Eingabedatei ausgeführt, Ausgabe übernommen. Befund zur Zahlenseite als #1687 gemeldet.