func tokenclass(tok token.Token) int { switch { case tok.IsLiteral(): return literal case tok.IsOperator(): return operator case tok.IsKeyword(): return keyword } return special }
// TokenKind returns a syntaxhighlight token kind value for the given tok and lit. func TokenKind(tok token.Token, lit string) syntaxhighlight.Kind { switch { case tok.IsKeyword() || (tok.IsOperator() && tok <= token.ELLIPSIS): return syntaxhighlight.Keyword // Literals. case tok == token.INT || tok == token.FLOAT || tok == token.IMAG || tok == token.CHAR: return syntaxhighlight.Decimal case tok == token.STRING: return syntaxhighlight.String case lit == "true" || lit == "false" || lit == "iota" || lit == "nil": return syntaxhighlight.Literal case tok == token.COMMENT: return syntaxhighlight.Comment default: return syntaxhighlight.Plaintext } }
// getClass returns the CSS class name associated with tok. func (h *Highlighter) getClass(tok token.Token) string { switch { case tok.IsKeyword(): return h.KeywordClass case tok.IsLiteral(): if tok == token.IDENT { return h.IdentClass } else { return h.LiteralClass } case tok.IsOperator(): return h.OperatorClass case tok == token.COMMENT: return h.CommentClass case tok == token.ILLEGAL: break default: panic(fmt.Sprintf("unknown token type: %v", tok)) } return "" }
func getColor(tok token.Token) string { switch { case tok.IsKeyword(): return Colors[Keyword] case tok.IsLiteral(): if tok == token.IDENT { return Colors[Identifier] } else { return Colors[Literal] } case tok.IsOperator(): return Colors[Operator] case tok == token.COMMENT: return Colors[Comment] case tok == token.ILLEGAL: return Colors[Illegal] default: panic(fmt.Sprintf("unknown token type: %v", tok)) } return "" }
func (self *HTMLStyler) Token(tok token.Token) ([]byte, printer.HTMLTag) { extra := "" if tok.IsKeyword() { extra += " go-keyword" } if tok.IsLiteral() { extra += " go-literal" } if tok.IsOperator() { extra += " go-operator" } self.prev = tok return []byte(tok.String()), printer.HTMLTag{ Start: "<span class=\"go-token" + extra + "\">", End: "</span>", } }