cmd/tools/vdoc: highlight nested string quotes properly (#9341)
parent
ae401bd930
commit
2e84773ef1
|
@ -141,39 +141,50 @@ fn color_highlight(code string, tb &table.Table) string {
|
||||||
builtin := ['bool', 'string', 'i8', 'i16', 'int', 'i64', 'i128', 'byte', 'u16', 'u32', 'u64',
|
builtin := ['bool', 'string', 'i8', 'i16', 'int', 'i64', 'i128', 'byte', 'u16', 'u32', 'u64',
|
||||||
'u128', 'rune', 'f32', 'f64', 'int_literal', 'float_literal', 'byteptr', 'voidptr', 'any']
|
'u128', 'rune', 'f32', 'f64', 'int_literal', 'float_literal', 'byteptr', 'voidptr', 'any']
|
||||||
highlight_code := fn (tok token.Token, typ HighlightTokenTyp) string {
|
highlight_code := fn (tok token.Token, typ HighlightTokenTyp) string {
|
||||||
lit := match typ {
|
mut lit := ''
|
||||||
|
match typ {
|
||||||
.unone, .operator, .punctuation {
|
.unone, .operator, .punctuation {
|
||||||
tok.kind.str()
|
lit = tok.kind.str()
|
||||||
}
|
}
|
||||||
.string {
|
.string {
|
||||||
term.yellow("'$tok.lit'")
|
use_double_quote := tok.lit.contains("'") && !tok.lit.contains('"')
|
||||||
|
unescaped_val := tok.lit.replace('\\\\', '\x01').replace_each(["\\'", "'", '\\"',
|
||||||
|
'"',
|
||||||
|
])
|
||||||
|
if use_double_quote {
|
||||||
|
s := unescaped_val.replace_each(['\x01', '\\\\', '"', '\\"'])
|
||||||
|
lit = term.yellow('"$s"')
|
||||||
|
} else {
|
||||||
|
s := unescaped_val.replace_each(['\x01', '\\\\', "'", "\\'"])
|
||||||
|
lit = term.yellow("'$s'")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.char {
|
.char {
|
||||||
term.yellow('`$tok.lit`')
|
lit = term.yellow('`$tok.lit`')
|
||||||
}
|
}
|
||||||
.keyword {
|
.keyword {
|
||||||
term.bright_blue(tok.lit)
|
lit = term.bright_blue(tok.lit)
|
||||||
}
|
}
|
||||||
.builtin, .symbol {
|
.builtin, .symbol {
|
||||||
term.green(tok.lit)
|
lit = term.green(tok.lit)
|
||||||
}
|
}
|
||||||
.function {
|
.function {
|
||||||
term.cyan(tok.lit)
|
lit = term.cyan(tok.lit)
|
||||||
}
|
}
|
||||||
.number, .module_ {
|
.number, .module_ {
|
||||||
term.bright_blue(tok.lit)
|
lit = term.bright_blue(tok.lit)
|
||||||
}
|
}
|
||||||
.boolean {
|
.boolean {
|
||||||
term.bright_magenta(tok.lit)
|
lit = term.bright_magenta(tok.lit)
|
||||||
}
|
}
|
||||||
.none_ {
|
.none_ {
|
||||||
term.red(tok.lit)
|
lit = term.red(tok.lit)
|
||||||
}
|
}
|
||||||
.prefix {
|
.prefix {
|
||||||
term.magenta(tok.lit)
|
lit = term.magenta(tok.lit)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tok.lit
|
lit = tok.lit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lit
|
return lit
|
||||||
|
|
Loading…
Reference in New Issue