17 tokenError tokenType = iota
33 tokenDoubleLeftBracket
34 tokenDoubleRightBracket
48 var tokenTypeNames = []string{
86 func (tt tokenType) String() string {
88 if idx < len(tokenTypeNames) {
89 return tokenTypeNames[idx]
94 func (t token) Int() int {
95 if result, err := strconv.Atoi(t.val); err != nil {
102 func (t token) String() string {
110 return fmt.Sprintf("%q", t.val)
113 func isSpace(r rune) bool {
114 return r == ' ' || r == '\t'
117 func isAlphanumeric(r rune) bool {
118 return unicode.IsLetter(r) || r == '_'
121 func isKeyChar(r rune) bool {
122 // Keys start with the first character that isn't whitespace or [ and end
123 // with the last non-whitespace character before the equals sign. Keys
124 // cannot contain a # character."
125 return !(r == '\r' || r == '\n' || r == eof || r == '=')
128 func isKeyStartChar(r rune) bool {
129 return !(isSpace(r) || r == '\r' || r == '\n' || r == eof || r == '[')
132 func isDigit(r rune) bool {
133 return unicode.IsNumber(r)
136 func isHexDigit(r rune) bool {
138 (r >= 'a' && r <= 'f') ||
139 (r >= 'A' && r <= 'F')