package lexer import ( "strings" "unicode" ) // NewIsNot generates a rune condition checker that reverses the // decision of the given checker. func NewIsNot(cond func(rune) bool) func(rune) bool { return func(r rune) bool { return !cond(r) } } // NewIsIn generates a rune condition checker that accepts runes // contained on the provided string func NewIsIn(s string) func(rune) bool { return func(r rune) bool { return strings.ContainsRune(s, r) } } // NewIsOneOf generates a run condition checker that accepts runes // accepted by any of the given checkers func NewIsOneOf(s ...func(rune) bool) func(rune) bool { return func(r rune) bool { for _, cond := range s { if cond(r) { return true } } return false } } // IsSpace reports whether the rune is a space character as // defined by Unicode's White Space property func IsSpace(r rune) bool { return unicode.IsSpace(r) }