Implement tables
This commit is contained in:
@@ -58,8 +58,7 @@ func parseExpression(b []byte) ([]byte, error) {
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
if b[0] == '[' {
|
if b[0] == '[' {
|
||||||
// TODO: parse 'table'
|
b, err = parseTable(b)
|
||||||
panic("todo")
|
|
||||||
} else {
|
} else {
|
||||||
b, err = parseKeyval(b)
|
b, err = parseKeyval(b)
|
||||||
}
|
}
|
||||||
@@ -77,6 +76,48 @@ func parseExpression(b []byte) ([]byte, error) {
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseTable(b []byte) ([]byte, error) {
|
||||||
|
//table = std-table / array-table
|
||||||
|
if len(b) > 1 && b[1] == '[' {
|
||||||
|
return parseArrayTable(b)
|
||||||
|
}
|
||||||
|
return parseStdTable(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseArrayTable(b []byte) ([]byte, error) {
|
||||||
|
//array-table = array-table-open key array-table-close
|
||||||
|
//array-table-open = %x5B.5B ws ; [[ Double left square bracket
|
||||||
|
//array-table-close = ws %x5D.5D ; ]] Double right square bracket
|
||||||
|
|
||||||
|
b = b[2:]
|
||||||
|
b = parseWhitespace(b)
|
||||||
|
b, err := parseKey(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b = parseWhitespace(b)
|
||||||
|
b, err = expect(']', b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return expect(']', b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseStdTable(b []byte) ([]byte, error) {
|
||||||
|
//std-table = std-table-open key std-table-close
|
||||||
|
//std-table-open = %x5B ws ; [ Left square bracket
|
||||||
|
//std-table-close = ws %x5D ; ] Right square bracket
|
||||||
|
|
||||||
|
b = b[1:]
|
||||||
|
b = parseWhitespace(b)
|
||||||
|
b, err := parseKey(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b = parseWhitespace(b)
|
||||||
|
return expect(']', b)
|
||||||
|
}
|
||||||
|
|
||||||
func parseKeyval(b []byte) ([]byte, error) {
|
func parseKeyval(b []byte) ([]byte, error) {
|
||||||
//keyval = key keyval-sep val
|
//keyval = key keyval-sep val
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user