From 2d2df1f918f4e6ef5b6c51e139bf24bc28101634 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 2 Nov 2022 13:58:37 -0500 Subject: [PATCH] Parse past annotations --- preserves.nimble | 2 +- src/preserves.nim | 5 +++++ src/preserves/pegs.nim | 4 +++- src/preserves/private/parse.nim | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/preserves.nimble b/preserves.nimble index 6382aff..bbd7362 100644 --- a/preserves.nimble +++ b/preserves.nimble @@ -1,6 +1,6 @@ # Package -version = "20221030" +version = "20221102" author = "Emery Hemingway" description = "data model and serialization format" license = "Unlicense" diff --git a/src/preserves.nim b/src/preserves.nim index 270700a..ad5a2dd 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -568,6 +568,11 @@ proc decodePreserves*(s: Stream; E = void): Preserve[E] = result = Preserve[E](kind: pkDouble) var be = s.readFloat64() 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: result = decodePreserves(s, E) result.embedded = true diff --git a/src/preserves/pegs.nim b/src/preserves/pegs.nim index b64b5d4..d2072d6 100644 --- a/src/preserves/pegs.nim +++ b/src/preserves/pegs.nim @@ -13,7 +13,7 @@ grammar "Preserves": Value <- (ws * (Record | Collection | Atom | Embedded | Compact)) | - (ws * '@' * Value * Value) | + (ws * Annotation) | (ws * ';' * @'\n' * Value) Collection <- Sequence | Dictionary | Set @@ -64,6 +64,8 @@ grammar "Preserves": Embedded <- "#!" * Value + Annotation <- '@' * Value * Value + Compact <- "#=" * ws * ByteString unescaped <- utf8.any - { '\x00'..'\x19', '"', '\\', '|' } diff --git a/src/preserves/private/parse.nim b/src/preserves/private/parse.nim index 6c8f8fb..c65740c 100644 --- a/src/preserves/private/parse.nim +++ b/src/preserves/private/parse.nim @@ -166,6 +166,11 @@ proc parsePreserves*(text: string): Preserve[void] {.gcsafe.} = v.embedded = true pushStack v + Preserves.Annotation <- Preserves.Annotation: + var val = stack.pop.value + discard stack.pop.value + pushStack val + Preserves.Compact <- Preserves.Compact: pushStack decodePreserves(stack.pop.value.bytes, void)