OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / pelletier / go-toml / query / tokens.go
1 package query
2
3 import (
4         "fmt"
5         "github.com/pelletier/go-toml"
6         "strconv"
7         "unicode"
8 )
9
10 // Define tokens
11 type tokenType int
12
13 const (
14         eof = -(iota + 1)
15 )
16
17 const (
18         tokenError tokenType = iota
19         tokenEOF
20         tokenKey
21         tokenString
22         tokenInteger
23         tokenFloat
24         tokenLeftBracket
25         tokenRightBracket
26         tokenLeftParen
27         tokenRightParen
28         tokenComma
29         tokenColon
30         tokenDollar
31         tokenStar
32         tokenQuestion
33         tokenDot
34         tokenDotDot
35 )
36
37 var tokenTypeNames = []string{
38         "Error",
39         "EOF",
40         "Key",
41         "String",
42         "Integer",
43         "Float",
44         "[",
45         "]",
46         "(",
47         ")",
48         ",",
49         ":",
50         "$",
51         "*",
52         "?",
53         ".",
54         "..",
55 }
56
57 type token struct {
58         toml.Position
59         typ tokenType
60         val string
61 }
62
63 func (tt tokenType) String() string {
64         idx := int(tt)
65         if idx < len(tokenTypeNames) {
66                 return tokenTypeNames[idx]
67         }
68         return "Unknown"
69 }
70
71 func (t token) Int() int {
72         if result, err := strconv.Atoi(t.val); err != nil {
73                 panic(err)
74         } else {
75                 return result
76         }
77 }
78
79 func (t token) String() string {
80         switch t.typ {
81         case tokenEOF:
82                 return "EOF"
83         case tokenError:
84                 return t.val
85         }
86
87         return fmt.Sprintf("%q", t.val)
88 }
89
90 func isSpace(r rune) bool {
91         return r == ' ' || r == '\t'
92 }
93
94 func isAlphanumeric(r rune) bool {
95         return unicode.IsLetter(r) || r == '_'
96 }
97
98 func isDigit(r rune) bool {
99         return unicode.IsNumber(r)
100 }
101
102 func isHexDigit(r rune) bool {
103         return isDigit(r) ||
104                 (r >= 'a' && r <= 'f') ||
105                 (r >= 'A' && r <= 'F')
106 }