792b4dba2c
* update github.com/blevesearch/bleve v2.0.2 -> v2.0.3 * github.com/denisenkom/go-mssqldb v0.9.0 -> v0.10.0 * github.com/editorconfig/editorconfig-core-go v2.4.1 -> v2.4.2 * github.com/go-chi/cors v1.1.1 -> v1.2.0 * github.com/go-git/go-billy v5.0.0 -> v5.1.0 * github.com/go-git/go-git v5.2.0 -> v5.3.0 * github.com/go-ldap/ldap v3.2.4 -> v3.3.0 * github.com/go-redis/redis v8.6.0 -> v8.8.2 * github.com/go-sql-driver/mysql v1.5.0 -> v1.6.0 * github.com/go-swagger/go-swagger v0.26.1 -> v0.27.0 * github.com/lib/pq v1.9.0 -> v1.10.1 * github.com/mattn/go-sqlite3 v1.14.6 -> v1.14.7 * github.com/go-testfixtures/testfixtures v3.5.0 -> v3.6.0 * github.com/issue9/identicon v1.0.1 -> v1.2.0 * github.com/klauspost/compress v1.11.8 -> v1.12.1 * github.com/mgechev/revive v1.0.3 -> v1.0.6 * github.com/microcosm-cc/bluemonday v1.0.7 -> v1.0.8 * github.com/niklasfasching/go-org v1.4.0 -> v1.5.0 * github.com/olivere/elastic v7.0.22 -> v7.0.24 * github.com/pelletier/go-toml v1.8.1 -> v1.9.0 * github.com/prometheus/client_golang v1.9.0 -> v1.10.0 * github.com/xanzy/go-gitlab v0.44.0 -> v0.48.0 * github.com/yuin/goldmark v1.3.3 -> v1.3.5 * github.com/6543/go-version v1.2.4 -> v1.3.1 * do github.com/lib/pq v1.10.0 -> v1.10.1 again ...
137 lines
1.9 KiB
Go
Vendored
137 lines
1.9 KiB
Go
Vendored
package toml
|
|
|
|
import "fmt"
|
|
|
|
// Define tokens
|
|
type tokenType int
|
|
|
|
const (
|
|
eof = -(iota + 1)
|
|
)
|
|
|
|
const (
|
|
tokenError tokenType = iota
|
|
tokenEOF
|
|
tokenComment
|
|
tokenKey
|
|
tokenString
|
|
tokenInteger
|
|
tokenTrue
|
|
tokenFalse
|
|
tokenFloat
|
|
tokenInf
|
|
tokenNan
|
|
tokenEqual
|
|
tokenLeftBracket
|
|
tokenRightBracket
|
|
tokenLeftCurlyBrace
|
|
tokenRightCurlyBrace
|
|
tokenLeftParen
|
|
tokenRightParen
|
|
tokenDoubleLeftBracket
|
|
tokenDoubleRightBracket
|
|
tokenLocalDate
|
|
tokenLocalTime
|
|
tokenTimeOffset
|
|
tokenKeyGroup
|
|
tokenKeyGroupArray
|
|
tokenComma
|
|
tokenColon
|
|
tokenDollar
|
|
tokenStar
|
|
tokenQuestion
|
|
tokenDot
|
|
tokenDotDot
|
|
tokenEOL
|
|
)
|
|
|
|
var tokenTypeNames = []string{
|
|
"Error",
|
|
"EOF",
|
|
"Comment",
|
|
"Key",
|
|
"String",
|
|
"Integer",
|
|
"True",
|
|
"False",
|
|
"Float",
|
|
"Inf",
|
|
"NaN",
|
|
"=",
|
|
"[",
|
|
"]",
|
|
"{",
|
|
"}",
|
|
"(",
|
|
")",
|
|
"]]",
|
|
"[[",
|
|
"LocalDate",
|
|
"LocalTime",
|
|
"TimeOffset",
|
|
"KeyGroup",
|
|
"KeyGroupArray",
|
|
",",
|
|
":",
|
|
"$",
|
|
"*",
|
|
"?",
|
|
".",
|
|
"..",
|
|
"EOL",
|
|
}
|
|
|
|
type token struct {
|
|
Position
|
|
typ tokenType
|
|
val string
|
|
}
|
|
|
|
func (tt tokenType) String() string {
|
|
idx := int(tt)
|
|
if idx < len(tokenTypeNames) {
|
|
return tokenTypeNames[idx]
|
|
}
|
|
return "Unknown"
|
|
}
|
|
|
|
func (t token) String() string {
|
|
switch t.typ {
|
|
case tokenEOF:
|
|
return "EOF"
|
|
case tokenError:
|
|
return t.val
|
|
}
|
|
|
|
return fmt.Sprintf("%q", t.val)
|
|
}
|
|
|
|
func isSpace(r rune) bool {
|
|
return r == ' ' || r == '\t'
|
|
}
|
|
|
|
func isAlphanumeric(r rune) bool {
|
|
return 'a' <= r && r <= 'z' || 'A' <= r && r <= 'Z' || r == '_'
|
|
}
|
|
|
|
func isKeyChar(r rune) bool {
|
|
// Keys start with the first character that isn't whitespace or [ and end
|
|
// with the last non-whitespace character before the equals sign. Keys
|
|
// cannot contain a # character."
|
|
return !(r == '\r' || r == '\n' || r == eof || r == '=')
|
|
}
|
|
|
|
func isKeyStartChar(r rune) bool {
|
|
return !(isSpace(r) || r == '\r' || r == '\n' || r == eof || r == '[')
|
|
}
|
|
|
|
func isDigit(r rune) bool {
|
|
return '0' <= r && r <= '9'
|
|
}
|
|
|
|
func isHexDigit(r rune) bool {
|
|
return isDigit(r) ||
|
|
(r >= 'a' && r <= 'f') ||
|
|
(r >= 'A' && r <= 'F')
|
|
}
|