lexer: constants and helpers #9
Merged
amery
merged 3 commits from pr-amery-lexer-extra
into main
1 year ago
2 changed files with 50 additions and 0 deletions
@ -0,0 +1,41 @@
|
||||
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) |
||||
} |
Loading…
Reference in new issue