dns/scanner.go
Miek Gieben c15d4fe3a3 Ugly hack to get line count correct
When the parser has read a \n to error messsage is off-by-one.
This fixes that.
2012-11-21 17:19:16 +01:00

39 lines
651 B
Go

package dns
// Implement a simple scanner, return a byte stream from an io reader.
import (
"bufio"
"io"
"text/scanner"
)
type scan struct {
src *bufio.Reader
position scanner.Position
eof int // have we just seen an EOF (0 no, 1 yes)
}
func scanInit(r io.Reader) *scan {
s := new(scan)
s.src = bufio.NewReader(r)
s.position.Line = 1
return s
}
// tokenText returns the next byte from the input
func (s *scan) tokenText() (byte, error) {
c, err := s.src.ReadByte()
if err != nil {
return c, err
}
s.eof = 0
if c == '\n' {
s.position.Line++
s.position.Column = 0
s.eof = 1
}
s.position.Column++
return c, nil
}