You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
808 B
43 lines
808 B
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 bool // Have we just seen a eof |
|
} |
|
|
|
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 |
|
} |
|
// delay the newline handling until the next token is delivered, |
|
// fixes off-by-one errors when reporting a parse error. |
|
if s.eof == true { |
|
s.position.Line++ |
|
s.position.Column = 0 |
|
s.eof = false |
|
} |
|
if c == '\n' { |
|
s.eof = true |
|
return c, nil |
|
} |
|
s.position.Column++ |
|
return c, nil |
|
}
|
|
|