Array tables
This commit is contained in:
@@ -35,6 +35,8 @@ type builder interface {
|
|||||||
InlineTableSeparator()
|
InlineTableSeparator()
|
||||||
StandardTableBegin()
|
StandardTableBegin()
|
||||||
StandardTableEnd()
|
StandardTableEnd()
|
||||||
|
ArrayTableBegin()
|
||||||
|
ArrayTableEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
type position struct {
|
type position struct {
|
||||||
@@ -46,6 +48,14 @@ type documentBuilder struct {
|
|||||||
document Document
|
document Document
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *documentBuilder) ArrayTableBegin() {
|
||||||
|
fmt.Println("ARRAY-TABLE[[")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *documentBuilder) ArrayTableEnd() {
|
||||||
|
fmt.Println("ARRAY-TABLE]]")
|
||||||
|
}
|
||||||
|
|
||||||
func (d *documentBuilder) StandardTableBegin() {
|
func (d *documentBuilder) StandardTableBegin() {
|
||||||
fmt.Println("STD-TABLE[")
|
fmt.Println("STD-TABLE[")
|
||||||
}
|
}
|
||||||
@@ -878,12 +888,57 @@ func (p *parser) parseTable() error {
|
|||||||
//array-table-close = ws %x5D.5D ; ]] Double right square bracket
|
//array-table-close = ws %x5D.5D ; ]] Double right square bracket
|
||||||
|
|
||||||
if p.follows("[[") {
|
if p.follows("[[") {
|
||||||
panic("TODO") // TODO: array-table
|
return p.parseArrayTable()
|
||||||
}
|
}
|
||||||
|
|
||||||
return p.parseStandardTable()
|
return p.parseStandardTable()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *parser) parseArrayTable() error {
|
||||||
|
//;; Array Table
|
||||||
|
//
|
||||||
|
//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
|
||||||
|
err := p.expect('[')
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = p.expect('[')
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.ignore()
|
||||||
|
p.builder.ArrayTableBegin()
|
||||||
|
|
||||||
|
err = p.parseWhitespace()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = p.parseKey()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = p.parseWhitespace()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = p.expect(']')
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = p.expect(']')
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.ignore()
|
||||||
|
p.builder.ArrayTableEnd()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (p *parser) parseStandardTable() error {
|
func (p *parser) parseStandardTable() error {
|
||||||
//;; Standard Table
|
//;; Standard Table
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ var inputs = []string{
|
|||||||
`[ "hello".world ]`,
|
`[ "hello".world ]`,
|
||||||
`[test]
|
`[test]
|
||||||
a = false`,
|
a = false`,
|
||||||
|
`[[foo]]`,
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParse(t *testing.T) {
|
func TestParse(t *testing.T) {
|
||||||
@@ -52,6 +53,8 @@ func TestParse(t *testing.T) {
|
|||||||
type noopBuilder struct {
|
type noopBuilder struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n noopBuilder) ArrayTableBegin() {}
|
||||||
|
func (n noopBuilder) ArrayTableEnd() {}
|
||||||
func (n noopBuilder) StandardTableBegin() {}
|
func (n noopBuilder) StandardTableBegin() {}
|
||||||
func (n noopBuilder) StandardTableEnd() {}
|
func (n noopBuilder) StandardTableEnd() {}
|
||||||
func (n noopBuilder) InlineTableSeparator() {}
|
func (n noopBuilder) InlineTableSeparator() {}
|
||||||
|
|||||||
Reference in New Issue
Block a user