First release. The API is complete and the package is well tested, but it is not frozen: names, defaults and return types may still change. Pin the version if you depend on it.
yaml_parse() / yaml_parse_all() parse YAML 1.2 from a string or a raw
vector, yaml_emit() / yaml_emit_all() convert R objects back to YAML, and
yaml_read() / yaml_read_all() / yaml_write() / yaml_write_all() do the
same for files. Throughout, _all means a YAML stream: several documents
separated by ---, which is a different thing from a sequence.
Scalars follow the YAML 1.2 core schema, so yes and no are strings and
dates are not coerced. Quoted scalars are always strings, and a quoted empty
string never becomes NULL.
Integers beyond 2^53 are preserved as zuyaml_bigint rather than silently
rounded. big_integers selects a different policy.
Tags override schema resolution, so !!str 12 is the string "12", in every
spelling a core tag has: the shorthand, the verbatim form, and a handle bound
by a %TAG directive. Application tags such as !duration are ignored by
default; tags = "error" refuses them.
Mappings whose keys are sequences or mappings become zuyaml_map rather than
having their structure flattened into names. This is parse-only.
Errors are classed conditions carrying a stable code, line and column,
so callers never have to match on message text.
max_size, max_depth and max_nodes bound untrusted input. The last of
these is what stops alias-expansion bombs, which are small and shallow by
construction and so escape the first two.
A value emitted with yaml_emit() parses back to the same value. Strings
containing a line break, and strings with leading or trailing whitespace, are
quoted so that neither is lost; a double with an integral value emits as
1.0, so it does not come back as an integer; and mapping keys are treated
exactly like values. Asserted over the whole yaml-test-suite and over
generated input. The exceptions are listed in vignette("zuyaml").
A literal NUL byte in the input is refused with an embedded_nul condition
and a position. The underlying library treats one as end of input, so the
rest of the document -- including any later documents in the stream -- would
otherwise be discarded without a word.
A UTF-8 byte order mark at the start of a stream is not part of the document.
A float outside the range of a double converts to the nearest one: 1e309 is
Inf, 1e-324 is 0, and 1e-323 is the subnormal it names. One extreme
value never changes the R type of a field.
simplify defaults to FALSE: the shape of the result never depends on the
contents of the document.
The cyaml C library is bundled and pinned to v0.1.3. See inst/COPYRIGHTS
for licensing and the modifications made for R compatibility, and
tools/patches/README.md for why each one is required.