Add tokens to Document
This commit is contained in:
+51
@@ -2,7 +2,40 @@ package toml
|
|||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
|
type tokenKind int
|
||||||
|
|
||||||
|
const (
|
||||||
|
whitespace tokenKind = iota
|
||||||
|
arrayTableBegin
|
||||||
|
arrayTableEnd
|
||||||
|
standardTableBegin
|
||||||
|
standardTableEnd
|
||||||
|
inlineTableSeparator
|
||||||
|
inlineTableBegin
|
||||||
|
inlineTableEnd
|
||||||
|
arraySeparator
|
||||||
|
arrayBegin
|
||||||
|
arrayEnd
|
||||||
|
equal
|
||||||
|
boolean
|
||||||
|
dot
|
||||||
|
basicString
|
||||||
|
literalString
|
||||||
|
unquotedKey
|
||||||
|
comment
|
||||||
|
)
|
||||||
|
|
||||||
|
type token struct {
|
||||||
|
data []byte
|
||||||
|
kind tokenKind
|
||||||
|
}
|
||||||
|
|
||||||
type Document struct {
|
type Document struct {
|
||||||
|
tokens []token
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Document) appendToken(kind tokenKind, data []byte) {
|
||||||
|
d.tokens = append(d.tokens, token{data: data, kind: kind})
|
||||||
}
|
}
|
||||||
|
|
||||||
type docParser struct {
|
type docParser struct {
|
||||||
@@ -11,82 +44,100 @@ type docParser struct {
|
|||||||
|
|
||||||
func (d *docParser) ArrayTableBegin() {
|
func (d *docParser) ArrayTableBegin() {
|
||||||
fmt.Println("ARRAY-TABLE[[")
|
fmt.Println("ARRAY-TABLE[[")
|
||||||
|
d.document.appendToken(arrayTableBegin, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) ArrayTableEnd() {
|
func (d *docParser) ArrayTableEnd() {
|
||||||
fmt.Println("ARRAY-TABLE]]")
|
fmt.Println("ARRAY-TABLE]]")
|
||||||
|
d.document.appendToken(arrayTableEnd, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) StandardTableBegin() {
|
func (d *docParser) StandardTableBegin() {
|
||||||
fmt.Println("STD-TABLE[")
|
fmt.Println("STD-TABLE[")
|
||||||
|
d.document.appendToken(standardTableBegin, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) StandardTableEnd() {
|
func (d *docParser) StandardTableEnd() {
|
||||||
fmt.Println("STD-TABLE]")
|
fmt.Println("STD-TABLE]")
|
||||||
|
d.document.appendToken(standardTableEnd, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) InlineTableSeparator() {
|
func (d *docParser) InlineTableSeparator() {
|
||||||
fmt.Println(", InlineTable SEPARATOR")
|
fmt.Println(", InlineTable SEPARATOR")
|
||||||
|
d.document.appendToken(inlineTableSeparator, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) InlineTableBegin() {
|
func (d *docParser) InlineTableBegin() {
|
||||||
fmt.Println("{ InlineTable BEGIN")
|
fmt.Println("{ InlineTable BEGIN")
|
||||||
|
d.document.appendToken(inlineTableBegin, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) InlineTableEnd() {
|
func (d *docParser) InlineTableEnd() {
|
||||||
fmt.Println("} InlineTable END")
|
fmt.Println("} InlineTable END")
|
||||||
|
d.document.appendToken(inlineTableEnd, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) ArraySeparator() {
|
func (d *docParser) ArraySeparator() {
|
||||||
fmt.Println(", ARRAY SEPARATOR")
|
fmt.Println(", ARRAY SEPARATOR")
|
||||||
|
d.document.appendToken(arraySeparator, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) ArrayBegin() {
|
func (d *docParser) ArrayBegin() {
|
||||||
fmt.Println("[ ARRAY BEGIN")
|
fmt.Println("[ ARRAY BEGIN")
|
||||||
|
d.document.appendToken(arrayBegin, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) ArrayEnd() {
|
func (d *docParser) ArrayEnd() {
|
||||||
fmt.Println("] ARRAY END")
|
fmt.Println("] ARRAY END")
|
||||||
|
d.document.appendToken(arrayEnd, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) Equal(b []byte) {
|
func (d *docParser) Equal(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("EQUAL: '%s'\n", s)
|
fmt.Printf("EQUAL: '%s'\n", s)
|
||||||
|
d.document.appendToken(equal, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) Boolean(b []byte) {
|
func (d *docParser) Boolean(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("Boolean: '%s'\n", s)
|
fmt.Printf("Boolean: '%s'\n", s)
|
||||||
|
d.document.appendToken(boolean, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) Dot(b []byte) {
|
func (d *docParser) Dot(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("DOT: '%s'\n", s)
|
fmt.Printf("DOT: '%s'\n", s)
|
||||||
|
d.document.appendToken(dot, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) BasicString(b []byte) {
|
func (d *docParser) BasicString(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("BasicString: '%s'\n", s)
|
fmt.Printf("BasicString: '%s'\n", s)
|
||||||
|
d.document.appendToken(basicString, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) LiteralString(b []byte) {
|
func (d *docParser) LiteralString(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("LiteralString: '%s'\n", s)
|
fmt.Printf("LiteralString: '%s'\n", s)
|
||||||
|
d.document.appendToken(literalString, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) UnquotedKey(b []byte) {
|
func (d *docParser) UnquotedKey(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("UnquotedKey: '%s'\n", s)
|
fmt.Printf("UnquotedKey: '%s'\n", s)
|
||||||
|
d.document.appendToken(unquotedKey, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) Comment(b []byte) {
|
func (d *docParser) Comment(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("Comment: '%s'\n", s)
|
fmt.Printf("Comment: '%s'\n", s)
|
||||||
|
d.document.appendToken(comment, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *docParser) Whitespace(b []byte) {
|
func (d *docParser) Whitespace(b []byte) {
|
||||||
s := string(b)
|
s := string(b)
|
||||||
fmt.Printf("Whitespace: '%s'\n", s)
|
fmt.Printf("Whitespace: '%s'\n", s)
|
||||||
|
d.document.appendToken(whitespace, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Parse(b []byte) (Document, error) {
|
func Parse(b []byte) (Document, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user