This release is focused on bug fixes and compliance with the YAML test suite.
Fix parsing behavior of root-level scalars: now these are parsed into a DOCVAL, not SEQ->VAL (5ba0d56, from PR #144). Eg,
---
this is a scalar
--- # previously this was parsed as
- this is a scalar
Cleanup type predicate API (PR #155)):
Tree
and NodeRef
forward to the corresponding predicate in NodeType
remove all type predicates and methods from NodeData
; use the equivalent call from Tree
or NodeRef
. For example, for is_map()
:
Tree t = parse("{foo: bar}");
size_t map_id = t.root_id();
NodeRef map = t.rootref();
t.get(map_id)->is_map(); // compile error: no longer exists
assert(t.is_map(map_id)); // OK
assert(map.is_map()); // OK
Further cleanup to the type predicate API will be done in the future, especially around the .has_*()
vs corresponding .is_*()
naming scheme.
Tree::lookup_path_or_modify()
: add overload to graft existing branches (PR #141){&a a: &b b, *b: *a}
Fix parsing of implicit scalars when tags are present (PR #145):
- &a # test case PW8X
- a
- &a : a
b: &b
- &c : &a
- ? &d
- ? &e
: &a
Fix #151: scalars beginning with *
or &
or <<
are now correctly quoted when emitting (PR #156).
Also from PR #156, map inheritance nodes like <<: *anchor
or <<: [*anchor1, *anchor2]
now have a KEYREF
flag in their type (until a call to Tree::resolve()
):
Tree tree = parse("{map: &anchor {foo: bar}, copy: {<<: *anchor}}");
assert(tree["copy"]["<<"].is_key_ref()); // previously this did not hold
assert(tree["copy"]["<<"].is_val_ref()); // ... but this did
Fix parsing of tag dense maps and seqs (PR #144):
--- !!map {
k: !!seq [ a, !!str b],
j: !!seq
[ a, !!str b]
--- !!seq [
!!map { !!str k: v},
!!map { !!str ? k: v}
]
--- !!map
!!str foo: !!map # there was a parse error with the multiple tags
!!int 1: !!float 20.0
!!int 3: !!float 40.0
--- !!seq
- !!map
!!str k1: v1
!!str k2: v2
!!str k3: v3
Fix parsing of double-quoted scalars with tabs (PR #145):
"This has a\ttab"
# is now correctly parsed as "This has a<TAB>tab"
Fix filtering of leading and trailing whitespace within double-quoted scalars (PR #145):
# test case 4ZYM, 7A4E, TL85
"
<SPC><SPC>foo<SPC>
<SPC>
<SPC><TAB><SPC>bar
<SPC><SPC>baz
"
# is now correctly parsed as " foo\nbar\nbaz "
Fix parsing of tabs within YAML tokens (PR #145):
---<TAB>scalar # test case K54U
---<TAB>{} # test case Q5MG
--- # test case DC7X
a: b<TAB>
seq:<TAB>
- a<TAB>
c: d<TAB>#X
Fix parsing of flow-style maps with ommitted values without any space (PR #145):
# test case 4ABK
- {foo: , bar: , baz: } # this was parsed correctly as {foo: ~, bar: ~, baz: ~}
- {foo:, bar:, baz:} # ... but this was parsed as {'foo:': , 'bar:': ~, 'baz:': ~}
Unescape forward slashes in double quoted string (PR #145):
--- escaped slash: "a\/b" # test case 3UYS
# is now parsed as:
--- escaped slash: "a/b"
Fix filtering of indented regions in folded scalars (PR #145):
# test case 7T8X
- >
folded
line
next
line
* bullet
* list
* lines
last
line
is now correctly parsed as \nfolded line\nnext line\n * bullet\n\n * list\n * lines\n\nlast line\n
.
Fix parsing of special characters within plain scalars (PR #145):
# test case 3MYT
k:#foo
&a !t s
!t s
# now correctly parsed as "k:#foo &a !t s !t s"
Fix parsing of comments after complex keys (PR #145):
# test case X8DW
? key
# comment
: value
# now correctly parsed as {key: value}
Fix parsing of consecutive complex keys within maps (PR #145)
# test case 7W2P, ZWK4
? a
? b
c:
? d
e:
# now correctly parsed as {a: ~, b: ~, c: ~, d: ~, e: ~}
Fix #152: parse error with folded scalars that are the last in a container (PR #157):
exec:
command:
# before the fix, this folded scalar failed to parse
- |
exec pg_isready -U "dog" -d "dbname=dog" -h 127.0.0.1 -p 5432
parses: no
Fix: documents consisting of a quoted scalar now retain the VALQUO flag (PR #156)
Tree tree = parse("'this is a quoted scalar'");
assert(tree.rootref().is_doc());
assert(tree.rootref().is_val());
assert(tree.rootref().is_val_quoted());
Empty docs are now parsed as a docval with a null node:
--- # test cases 6XDY, 6ZKB, 9BXL, PUW8
---
---
is now parsed as
--- ~
--- ~
--- ~
Prevent creation of DOC nodes from stream-level comments or tags (PR #145):
!foo "bar"
...
# Global
%TAG ! tag:example.com,2000:app/
---
!foo "bar"
was parsed as
---
!foo "bar"
---
# notice the empty doc in here
---
!foo "bar"
and it is now correctly parsed as
---
!foo "bar"
---
!foo "bar"
(other than the known limitation that ryml does not do tag lookup).
.nan
, .inf
, -.inf
(PR #149)preprocess_json()
: ensure quoted ranges are skipped when slurping containers