diff --git a/cmd/tools/vdoc/html.v b/cmd/tools/vdoc/html.v
index 0da4da7509..2df2ff6dc3 100644
--- a/cmd/tools/vdoc/html.v
+++ b/cmd/tools/vdoc/html.v
@@ -89,6 +89,9 @@ enum HighlightTokenTyp {
punctuation
string
symbol
+ none_
+ module_
+ prefix
}
struct SearchModuleResult {
diff --git a/cmd/tools/vdoc/utils.v b/cmd/tools/vdoc/utils.v
index 6dbb401d79..157f57bb80 100644
--- a/cmd/tools/vdoc/utils.v
+++ b/cmd/tools/vdoc/utils.v
@@ -160,9 +160,18 @@ fn color_highlight(code string, tb &table.Table) string {
.function {
term.cyan(tok.lit)
}
- .number {
+ .number, .module_ {
term.bright_blue(tok.lit)
}
+ .boolean {
+ term.bright_magenta(tok.lit)
+ }
+ .none_ {
+ term.red(tok.lit)
+ }
+ .prefix {
+ term.magenta(tok.lit)
+ }
else {
tok.lit
}
@@ -170,6 +179,7 @@ fn color_highlight(code string, tb &table.Table) string {
return lit
}
mut s := scanner.new_scanner(code, .parse_comments, &pref.Preferences{})
+ mut prev_prev := token.Token{}
mut prev := token.Token{}
mut tok := s.scan()
mut next_tok := s.scan()
@@ -181,13 +191,23 @@ fn color_highlight(code string, tb &table.Table) string {
match tok.kind {
.name {
if (tok.lit in builtin || tb.known_type(tok.lit))
- && (next_tok.kind != .lpar || prev.kind != .key_fn) {
+ && (next_tok.kind != .lpar || prev.kind !in [.key_fn, .rpar]) {
tok_typ = .builtin
- } else if next_tok.kind in [.lcbr, .rpar, .eof]
- && (next_tok.kind != .rpar || prev.kind in [.name, .amp]) {
+ } else if
+ next_tok.kind in [.lcbr, .rpar, .eof, .comma, .pipe, .name, .rcbr, .assign, .key_pub, .key_mut, .pipe, .comma]
+ && prev.kind in [.name, .amp, .rsbr, .key_type, .assign, .dot, .question, .rpar, .key_struct, .key_enum, .pipe, .key_interface]
+ && (tok.lit[0].ascii_str().is_upper() || prev_prev.lit in ['C', 'JS']) {
tok_typ = .symbol
} else if next_tok.kind in [.lpar, .lt] {
tok_typ = .function
+ } else if next_tok.kind == .dot {
+ if tok.lit in ['C', 'JS'] {
+ tok_typ = .prefix
+ } else {
+ tok_typ = .module_
+ }
+ } else if tok.lit in ['r', 'c'] && next_tok.kind == .string {
+ tok_typ = .prefix
} else {
tok_typ = .name
}
@@ -210,6 +230,9 @@ fn color_highlight(code string, tb &table.Table) string {
.lpar, .lcbr, .rpar, .rcbr, .lsbr, .rsbr, .semicolon, .colon, .comma, .dot {
tok_typ = .punctuation
}
+ .key_none {
+ tok_typ = .none_
+ }
else {
if token.is_key(tok.lit) || token.is_decl(tok.kind) {
tok_typ = .keyword
@@ -220,18 +243,20 @@ fn color_highlight(code string, tb &table.Table) string {
}
}
buf.write_string(highlight_code(tok, tok_typ))
- if prev.kind != .eof {
- prev = tok
- } else {
+ if prev_prev.kind == .eof {
break
}
- if next_tok.kind != .eof {
- i = tok.pos + tok.len
- tok = next_tok
- next_tok = s.scan()
- } else {
+ prev_prev = prev
+ if prev.kind == .eof {
break
}
+ prev = tok
+ if next_tok.kind == .eof {
+ break
+ }
+ i = tok.pos + tok.len
+ tok = next_tok
+ next_tok = s.scan()
} else {
buf.write_b(code[i])
i++