I knew making comments work couldn't be that easy...
This commit is contained in:
parent
801c5df9b6
commit
0dae59c108
39
parse.go
39
parse.go
@ -81,19 +81,26 @@ var UintChars = CharSet{
|
|||||||
Char(','),
|
Char(','),
|
||||||
}
|
}
|
||||||
|
|
||||||
//Looks at (but doesn't consume) the first byte in the buffer
|
|
||||||
func FirstByte(rbuf *bufio.Reader) (byte,error) {
|
func FirstByte(rbuf *bufio.Reader) (byte,error) {
|
||||||
b,err := rbuf.Peek(1)
|
b,err := rbuf.Peek(1)
|
||||||
if err != nil {
|
if err != nil { return 0,err }
|
||||||
return 0,err
|
|
||||||
} else if b[0] == ';' {
|
|
||||||
rbuf.ReadLine()
|
|
||||||
return FirstByte(rbuf)
|
|
||||||
}
|
|
||||||
|
|
||||||
return b[0],err
|
return b[0],err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Looks at (but doesn't consume) the first uncommented byte in the buffer
|
||||||
|
func FirstUncommentedByte(rbuf *bufio.Reader) (byte,error) {
|
||||||
|
b,err := FirstByte(rbuf)
|
||||||
|
if err != nil {
|
||||||
|
return 0,err
|
||||||
|
} else if b == ';' {
|
||||||
|
rbuf.ReadLine()
|
||||||
|
return FirstUncommentedByte(rbuf)
|
||||||
|
}
|
||||||
|
|
||||||
|
return b,err
|
||||||
|
}
|
||||||
|
|
||||||
func PrettyChar(c byte) string {
|
func PrettyChar(c byte) string {
|
||||||
switch c {
|
switch c {
|
||||||
case '\n': return "newline"
|
case '\n': return "newline"
|
||||||
@ -127,7 +134,7 @@ func ConcatByteSlices(a,b []byte) []byte {
|
|||||||
func PullWhitespace(rbuf *bufio.Reader) (int,error) {
|
func PullWhitespace(rbuf *bufio.Reader) (int,error) {
|
||||||
var i int
|
var i int
|
||||||
for i=0;;i++{
|
for i=0;;i++{
|
||||||
b,err := FirstByte(rbuf)
|
b,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return i,err }
|
if err != nil { return i,err }
|
||||||
if Whitespace.includes(b) != true { return i,nil }
|
if Whitespace.includes(b) != true { return i,nil }
|
||||||
rbuf.ReadByte()
|
rbuf.ReadByte()
|
||||||
@ -138,7 +145,7 @@ func PullWhitespace(rbuf *bufio.Reader) (int,error) {
|
|||||||
func PullUint(rbuf *bufio.Reader) ([]byte,error) {
|
func PullUint(rbuf *bufio.Reader) ([]byte,error) {
|
||||||
r := make([]byte,0,16)
|
r := make([]byte,0,16)
|
||||||
for {
|
for {
|
||||||
b,err := FirstByte(rbuf)
|
b,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return r,err }
|
if err != nil { return r,err }
|
||||||
if UintChars.includes(b) != true { return r,nil }
|
if UintChars.includes(b) != true { return r,nil }
|
||||||
if b != ',' { r = append(r,b) }
|
if b != ',' { r = append(r,b) }
|
||||||
@ -148,7 +155,7 @@ func PullUint(rbuf *bufio.Reader) ([]byte,error) {
|
|||||||
|
|
||||||
func PullInteger(rbuf *bufio.Reader) ([]byte,error) {
|
func PullInteger(rbuf *bufio.Reader) ([]byte,error) {
|
||||||
neg := false
|
neg := false
|
||||||
nb,err := FirstByte(rbuf)
|
nb,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return nil,err }
|
if err != nil { return nil,err }
|
||||||
if nb == '-' {
|
if nb == '-' {
|
||||||
neg = true
|
neg = true
|
||||||
@ -173,7 +180,7 @@ func PullFullString(rbuf *bufio.Reader) ([]byte,error) {
|
|||||||
r := make([]byte,0,256)
|
r := make([]byte,0,256)
|
||||||
|
|
||||||
//Make sure string starts with dquote
|
//Make sure string starts with dquote
|
||||||
dq,err := FirstByte(rbuf)
|
dq,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return nil,err }
|
if err != nil { return nil,err }
|
||||||
if dq != '"' { return r,nil }
|
if dq != '"' { return r,nil }
|
||||||
rbuf.ReadByte()
|
rbuf.ReadByte()
|
||||||
@ -206,7 +213,7 @@ func PullSimpleString(rbuf *bufio.Reader) ([]byte,error) {
|
|||||||
r := make([]byte,0,16)
|
r := make([]byte,0,16)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
b,err := FirstByte(rbuf)
|
b,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return r,err }
|
if err != nil { return r,err }
|
||||||
if SimpleChars.includes(b) {
|
if SimpleChars.includes(b) {
|
||||||
rbuf.ReadByte()
|
rbuf.ReadByte()
|
||||||
@ -218,7 +225,7 @@ func PullSimpleString(rbuf *bufio.Reader) ([]byte,error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PullByte(rbuf *bufio.Reader) ([]byte,error) {
|
func PullByte(rbuf *bufio.Reader) ([]byte,error) {
|
||||||
sq,err := FirstByte(rbuf)
|
sq,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return nil,err }
|
if err != nil { return nil,err }
|
||||||
if sq != '\'' { return []byte{},nil }
|
if sq != '\'' { return []byte{},nil }
|
||||||
rbuf.ReadByte()
|
rbuf.ReadByte()
|
||||||
@ -247,7 +254,7 @@ func PullByte(rbuf *bufio.Reader) ([]byte,error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PullSeq(rbuf *bufio.Reader) ([]GngType,error) {
|
func PullSeq(rbuf *bufio.Reader) ([]GngType,error) {
|
||||||
d,err := FirstByte(rbuf)
|
d,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil { return nil,err }
|
if err != nil { return nil,err }
|
||||||
od,ok := SeqMap[d]
|
od,ok := SeqMap[d]
|
||||||
if !ok { return nil,fmt.Errorf("Unknown seq type") }
|
if !ok { return nil,fmt.Errorf("Unknown seq type") }
|
||||||
@ -255,7 +262,7 @@ func PullSeq(rbuf *bufio.Reader) ([]GngType,error) {
|
|||||||
|
|
||||||
r := make([]GngType,0,16)
|
r := make([]GngType,0,16)
|
||||||
for {
|
for {
|
||||||
b,err := FirstByte(rbuf)
|
b,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return r,err
|
return r,err
|
||||||
} else if (b == od) {
|
} else if (b == od) {
|
||||||
@ -275,7 +282,7 @@ func PullSeq(rbuf *bufio.Reader) ([]GngType,error) {
|
|||||||
|
|
||||||
func PullElement(rbuf *bufio.Reader) (GngType,error) {
|
func PullElement(rbuf *bufio.Reader) (GngType,error) {
|
||||||
for {
|
for {
|
||||||
b,err := FirstByte(rbuf)
|
b,err := FirstUncommentedByte(rbuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil,err
|
return nil,err
|
||||||
} else if Whitespace.includes(b) {
|
} else if Whitespace.includes(b) {
|
||||||
|
Loading…
Reference in New Issue
Block a user