Parse past annotations

This commit is contained in:
Emery Hemingway 2022-11-02 13:58:37 -05:00
parent 4e795cb92a
commit 2d2df1f918
4 changed files with 14 additions and 2 deletions

View File

@ -1,6 +1,6 @@
# Package # Package
version = "20221030" version = "20221102"
author = "Emery Hemingway" author = "Emery Hemingway"
description = "data model and serialization format" description = "data model and serialization format"
license = "Unlicense" license = "Unlicense"

View File

@ -568,6 +568,11 @@ proc decodePreserves*(s: Stream; E = void): Preserve[E] =
result = Preserve[E](kind: pkDouble) result = Preserve[E](kind: pkDouble)
var be = s.readFloat64() var be = s.readFloat64()
swapEndian64(result.double.addr, be.addr) swapEndian64(result.double.addr, be.addr)
of 0x85:
discard decodePreserves(s, E)
while s.peekUint8() == 0x85:
discard s.readUint8()
discard decodePreserves(s, E)
of 0x86: of 0x86:
result = decodePreserves(s, E) result = decodePreserves(s, E)
result.embedded = true result.embedded = true

View File

@ -13,7 +13,7 @@ grammar "Preserves":
Value <- Value <-
(ws * (Record | Collection | Atom | Embedded | Compact)) | (ws * (Record | Collection | Atom | Embedded | Compact)) |
(ws * '@' * Value * Value) | (ws * Annotation) |
(ws * ';' * @'\n' * Value) (ws * ';' * @'\n' * Value)
Collection <- Sequence | Dictionary | Set Collection <- Sequence | Dictionary | Set
@ -64,6 +64,8 @@ grammar "Preserves":
Embedded <- "#!" * Value Embedded <- "#!" * Value
Annotation <- '@' * Value * Value
Compact <- "#=" * ws * ByteString Compact <- "#=" * ws * ByteString
unescaped <- utf8.any - { '\x00'..'\x19', '"', '\\', '|' } unescaped <- utf8.any - { '\x00'..'\x19', '"', '\\', '|' }

View File

@ -166,6 +166,11 @@ proc parsePreserves*(text: string): Preserve[void] {.gcsafe.} =
v.embedded = true v.embedded = true
pushStack v pushStack v
Preserves.Annotation <- Preserves.Annotation:
var val = stack.pop.value
discard stack.pop.value
pushStack val
Preserves.Compact <- Preserves.Compact: Preserves.Compact <- Preserves.Compact:
pushStack decodePreserves(stack.pop.value.bytes, void) pushStack decodePreserves(stack.pop.value.bytes, void)