Beispiel #1
0
// Lexer::NonMatchOneOrMoreRunes
func (l *lexer) NonMatchOneOrMoreRunes(match []rune) bool {
	var r rune
	if r = l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) == -1 {
		l.NextRune()
		for r = l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) == -1; r = l.PeekRune(0) {
			l.NextRune()
		}
		return true
	}
	return false
}
Beispiel #2
0
// Lexer::NonMatchOneRunes
func (l *lexer) NonMatchOneRunes(match []rune) bool {
	if r := l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) == -1 {
		l.NextRune()
		return true
	}
	return false
}
Beispiel #3
0
// Lexer::MatchMinMaxRunes
func (l *lexer) MatchMinMaxRunes(match []rune, min int, max int) bool {
	marker := l.Marker()
	count := 0
	for r := l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) >= 0; r = l.PeekRune(0) {
		l.NextRune()
		count++
		if max > 0 && count >= max { // Check here to avoid unused PeekRune()
			break
		}
	}
	if count < min {
		l.Reset(marker)
		return false
	}
	return true
}
Beispiel #4
0
// Lexer::NonMatchZeroOrMoreRunes
func (l *lexer) NonMatchZeroOrMoreRunes(match []rune) bool {
	for r := l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) == -1; r = l.PeekRune(0) {
		l.NextRune()
	}
	return true
}
Beispiel #5
0
// Lexer::MatchZeroOrOneRunes
func (l *lexer) MatchZeroOrOneRunes(match []rune) bool {
	if r := l.PeekRune(0); r != RuneEOF && runes.IndexRune(match, r) >= 0 {
		l.NextRune()
	}
	return true
}