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
}