====== std.yaml ====== YAML-Parser für die gebräuchlichsten YAML-Strukturen (Scalare: null, bool, int, float, string; Sequenzen und Maps). Pfad-basierter Zugriff (''GetString(doc, "database.host", "localhost")''), typisierte Getter (String, Int, Float, Bool, Array, Object), Datei-Load/Save, Schlüssel-Iteration (''GetKeys''), Typ-Abfrage und YAML-Escape/Unescape. Einsatzbereiche: Kubernetes/Docker-Konfigurationen, Anwendungs-Configs (einfacher als XML, lesbarer als JSON), CI/CD-Pipelines, Infrastructure-as-Code. **Autor:** Andreas Röne\\ **Copyright:** 2024-2025 Andreas Röne ---- ===== Imports ===== * ''[[lyx_-_programmiersprache:units:string|std.string]]'' ---- ===== Konstanten ===== ^ Name ^ Typ ^ Wert ^ Sichtbarkeit ^ ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''ParseString(input: pchar): int64'' | pub | YAML-String in Dokumentstruktur parsen | | ''GetString(doc: int64, path: pchar, default_val: pchar): pchar'' | pub | Stringwert per Pfad lesen | | ''GetInt(doc: int64, path: pchar, default_val: int64): int64'' | pub | Ganzzahlwert per Pfad lesen | | ''GetFloat(doc: int64, path: pchar, default_val: f64): f64'' | pub | Fließkommawert per Pfad lesen | | ''GetBool(doc: int64, path: pchar, default_val: bool): bool'' | pub | Booleschen Wert per Pfad lesen | | ''GetArray(doc: int64, path: pchar): int64'' | pub | Array-Knoten per Pfad lesen | | ''GetObject(doc: int64, path: pchar): int64'' | pub | Objekt-Knoten per Pfad lesen | | ''WriteString(doc: int64, output: pchar, max_len: int64): int64'' | pub | Dokument als YAML-String serialisieren | | ''WriteFile(doc: int64, path: pchar): bool'' | pub | Dokument in YAML-Datei schreiben | | ''SetString(doc: int64, path: pchar, value: pchar): void { }'' | pub | Stringwert per Pfad setzen | | ''SetInt(doc: int64, path: pchar, value: int64): void { }'' | pub | Ganzzahlwert per Pfad setzen | | ''SetFloat(doc: int64, path: pchar, value: f64): void { }'' | pub | Fließkommawert per Pfad setzen | | ''SetBool(doc: int64, path: pchar, value: bool): void { }'' | pub | Booleschen Wert per Pfad setzen | | ''SetArray(doc: int64, path: pchar, values: pchar, count: int64): void { }'' | pub | Array-Werte per Pfad setzen | | ''SetObject(doc: int64, path: pchar, keys: pchar, values: pchar, count: int64): void { }'' | pub | Objekt-Schlüssel und -Werte setzen | | ''DeleteKey(doc: int64, path: pchar): bool'' | pub | Schlüssel per Pfad löschen | | ''LoadFile(path: pchar): int64'' | pub | YAML-Datei laden und parsen | | ''SaveFile(doc: int64, path: pchar): bool'' | pub | Dokument als YAML-Datei speichern | | ''HasPath(doc: int64, path: pchar): bool'' | pub | Prüft ob Pfad im Dokument existiert | | ''GetType(doc: int64, path: pchar): int64'' | pub | Datentyp eines Pfadwerts ermitteln | | ''GetKeys(doc: int64, path: pchar, output: pchar, max_count: int64): int64'' | pub | Alle Schlüssel eines Objekts liefern | | ''GetArrayLen(doc: int64, path: pchar): int64'' | pub | Länge eines Arrays per Pfad lesen | | ''EscapeString(input: pchar, output: pchar): int64'' | pub | YAML-Sonderzeichen in String escapen | | ''UnescapeString(input: pchar, output: pchar): int64'' | pub | YAML-Escape-Sequenzen auflösen | | ''ParseYamlInt(s: pchar): int64'' | pub | YAML-Ganzzahlwert aus String parsen | | ''ParseYamlBool(s: pchar): bool'' | pub | YAML-Booleschen Wert aus String parsen | | ''ParseYamlFloat(s: pchar): f64'' | pub | YAML-Fließkommawert aus String parsen | | ''IsValidKey(s: pchar): bool'' | pub | Prüft ob String ein gültiger YAML-Schlüssel | | ''NeedsQuoting(s: pchar): bool'' | pub | Prüft ob String in YAML gequotet werden muss | > **''SetArray'' und ''SetObject'' sind nicht umgesetzt und brechen ab.** Beide melden seit lyxc 1.0.15G ''std.yaml: SetArray ist nicht umgesetzt (#1244)'' bzw. ''… SetObject …'' und beenden das Programm — vorher liefen sie still ins Leere und ließen das Dokument unverändert. Für Arrays und Objekte den YAML-Text selbst zusammensetzen. > > **Verschachtelte Pfade arbeiten**, mit zwei Resten: Ein Punktpfad liest (''GetString(doc, "server.host"c, …)'') und ändert vorhandene Werte (''SetInt(doc, "server.port"c, …)'') korrekt. Ein **neuer** Schlüssel unter einem vorhandenen Knoten hängt jedoch einen zweiten gleichnamigen Block an das Dateiende, und ''GetType'' liefert für einen Knoten weiterhin ''0''. > ([[https://github.com/SEOLizer/LyX-Compiler/issues/1312|Issue #1312]])