Implement inline tables
This commit is contained in:
@@ -175,8 +175,8 @@ func parseVal(b []byte) ([]byte, error) {
|
|||||||
return b[5:], nil
|
return b[5:], nil
|
||||||
case '[':
|
case '[':
|
||||||
return parseValArray(b)
|
return parseValArray(b)
|
||||||
|
case '{':
|
||||||
// TODO inline-table
|
return parseInlineTable(b)
|
||||||
|
|
||||||
// TODO date-time
|
// 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) {
|
func parseValArray(b []byte) ([]byte, error) {
|
||||||
//array = array-open [ array-values ] ws-comment-newline array-close
|
//array = array-open [ array-values ] ws-comment-newline array-close
|
||||||
//array-open = %x5B ; [
|
//array-open = %x5B ; [
|
||||||
|
|||||||
Reference in New Issue
Block a user