|
|
@ -11,6 +11,8 @@ var wordChars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123
|
|
|
|
var LBRACKET rune = 0xF0000
|
|
|
|
var LBRACKET rune = 0xF0000
|
|
|
|
var RBRACKET rune = 0xF0001
|
|
|
|
var RBRACKET rune = 0xF0001
|
|
|
|
var ANY_CHAR rune = 0xF0002 // Represents any character - used for states where the allChars flag is on.
|
|
|
|
var ANY_CHAR rune = 0xF0002 // Represents any character - used for states where the allChars flag is on.
|
|
|
|
|
|
|
|
var LPAREN_CHAR rune = 0xF0003 // Parentheses in regex are concatenated with this - it acts as a pseudio-parentheses
|
|
|
|
|
|
|
|
var RPAREN_CHAR rune = 0xF0004
|
|
|
|
|
|
|
|
|
|
|
|
// Returns true if str[idx] and str[idx-1] are separated by a word boundary.
|
|
|
|
// Returns true if str[idx] and str[idx-1] are separated by a word boundary.
|
|
|
|
func isWordBoundary(str []rune, idx int) bool {
|
|
|
|
func isWordBoundary(str []rune, idx int) bool {
|
|
|
@ -121,3 +123,10 @@ func genRange(start, end int) []int {
|
|
|
|
func allCases(r rune) []rune {
|
|
|
|
func allCases(r rune) []rune {
|
|
|
|
return []rune{unicode.ToLower(r), unicode.ToUpper(r), unicode.ToTitle(r)}
|
|
|
|
return []rune{unicode.ToLower(r), unicode.ToUpper(r), unicode.ToTitle(r)}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Expands a slice to the given length
|
|
|
|
|
|
|
|
func expandSlice[T any](slc []T, newSize int) []T {
|
|
|
|
|
|
|
|
toRet := make([]T, newSize)
|
|
|
|
|
|
|
|
copy(toRet, slc)
|
|
|
|
|
|
|
|
return toRet
|
|
|
|
|
|
|
|
}
|
|
|
|