From 9fa2fd413d76491c861c174d1a8a2a1cf6be8695 Mon Sep 17 00:00:00 2001 From: Thomas Pelletier Date: Sat, 6 Feb 2021 09:33:20 -0500 Subject: [PATCH] Implement inline tables --- toml.go | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/toml.go b/toml.go index 0abbee7..ffe1b1a 100644 --- a/toml.go +++ b/toml.go @@ -175,8 +175,8 @@ func parseVal(b []byte) ([]byte, error) { return b[5:], nil case '[': return parseValArray(b) - - // TODO inline-table + case '{': + return parseInlineTable(b) // TODO date-time @@ -188,6 +188,37 @@ func parseVal(b []byte) ([]byte, error) { } } +func parseInlineTable(b []byte) ([]byte, error) { + //inline-table = inline-table-open [ inline-table-keyvals ] inline-table-close + //inline-table-open = %x7B ws ; { + //inline-table-close = ws %x7D ; } + //inline-table-sep = ws %x2C ws ; , Comma + //inline-table-keyvals = keyval [ inline-table-sep inline-table-keyvals ] + + b = b[1:] + + first := true + var err error + for len(b) > 0 { + b = parseWhitespace(b) + if b[0] == '}' { + break + } + + if !first { + b, err = expect(',', b) + if err != nil { + return nil, err + } + b = parseWhitespace(b) + } + b, err = parseKeyval(b) + + first = false + } + return expect('}', b) +} + func parseValArray(b []byte) ([]byte, error) { //array = array-open [ array-values ] ws-comment-newline array-close //array-open = %x5B ; [