asciigoat's core library
https://asciigoat.org/core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
909 B
41 lines
909 B
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) |
|
}
|
|
|