func lexAction()

in src/ct/parser/lexer.go [163:204]


func lexAction(l *Lexer) stateFn {
	q := l.current()
	switch r := l.next(); {
	case r == eos:
		l.emit(tokenEOF)
		return nil
	case isSpaceChar(r):
		return lexSpace
	case unicode.IsLetter(r):
		l.backup()
		return lexIdentifier
	case isComparisonChar(r):
		return lexComparison
	case r == '%':
		l.emit(tokenUnit)
	case r == '-':
		if q == ' ' && unicode.IsDigit(l.peek()) {
			l.backup()
			return lexNumber
		}
		l.emit(tokenDash)
	case r == '+' || ('0' <= r && r <= '9'):
		l.backup()
		return lexNumber
	case r == '/':
		l.emit(tokenSlash)
	case r == '(':
		l.emit(tokenLeftParenthesis)
		l.parenDepth++
	case r == ')':
		l.emit(tokenRightParenthesis)
		l.parenDepth--
		if l.parenDepth < 0 {
			l.swallow()
		}
	case isPunctuationChar(r) && r != ',':
		l.emit(tokenPunctuation)
	default:
		l.emit(tokenChar)
	}
	return lexAction
}