Add archive helpers and harden task runtime

This commit is contained in:
udo
2026-05-21 00:00:23 +00:00
parent 9f7625c7fd
commit 02e153a6a7
71 changed files with 12817 additions and 305 deletions
+57
View File
@@ -0,0 +1,57 @@
:sig
DTree yaml_decode(String s)
:params
s : YAML source string
return value : decoded DTree
:see
>markup
yaml_encode
json_decode
xml_decode
0_DTree
:content
Parses a practical YAML subset into a `DTree`.
`yaml_decode()` is designed for concise UCE config files. It intentionally avoids full YAML schema behavior and does not support anchors, aliases, tags, directives, or complex inline collection syntax.
Try the live example in the [YAML demo](../demo/yaml.uce).
Example:
```uce
String source = "app:\n"
" name: UCE Starter\n"
" debug: true\n"
" port: 8080\n"
" paths:\n"
" - site\n"
" - cache\n";
DTree cfg = yaml_decode(source);
cfg["app"]["name"].to_string(); // UCE Starter
cfg["app"]["debug"].to_bool(); // true
cfg["app"]["port"].to_s64(); // 8080
cfg["app"]["paths"]["1"].to_string(); // cache
```
Supported syntax:
- indentation-based maps
- indentation-based lists
- `key: value` map entries
- list entries with `- value`
- quoted strings with single or double quotes
- booleans `true` and `false`
- empty/null-ish values as empty strings
- comments beginning with `#` outside quoted strings
- literal block strings with `|`
- folded block strings with `>`
- optional `---` and `...` document markers
Numeric-looking values are stored as strings, matching `json_decode()`'s current behavior. Use `to_s64()`, `to_u64()`, or `to_f64()` when reading numeric config values.
Malformed input raises a request-visible `yaml_decode(): ...` runtime error.