This commit is contained in:
parent
ceed34c634
commit
79846e372a
@ -133,14 +133,28 @@ func (r *Row) updateSyntax() {
|
|||||||
keywords1 := s.Keywords1
|
keywords1 := s.Keywords1
|
||||||
keywords2 := s.Keywords2
|
keywords2 := s.Keywords2
|
||||||
|
|
||||||
|
// Scan for comments
|
||||||
var scsIndex int = -1
|
var scsIndex int = -1
|
||||||
|
var mcsIndex int = -1
|
||||||
|
var mceIndex int = -1
|
||||||
scs := s.LineCommentStart
|
scs := s.LineCommentStart
|
||||||
|
mcs := s.MultilineCommentStart
|
||||||
|
mce := s.MultilineCommentEnd
|
||||||
|
hasMcs := len(mcs) > 0
|
||||||
|
hasMce := len(mce) > 0
|
||||||
if len(scs) > 0 {
|
if len(scs) > 0 {
|
||||||
scsIndex = strings.Index(renderStr, scs)
|
scsIndex = strings.Index(renderStr, scs)
|
||||||
}
|
}
|
||||||
|
if hasMcs {
|
||||||
|
mcsIndex = strings.Index(renderStr, mcs)
|
||||||
|
}
|
||||||
|
if hasMce {
|
||||||
|
mceIndex = strings.Index(renderStr, mce)
|
||||||
|
}
|
||||||
|
|
||||||
prevSep := true
|
prevSep := true
|
||||||
inString := '0'
|
inString := '0'
|
||||||
|
inComment := false
|
||||||
for i < r.RenderSize() {
|
for i < r.RenderSize() {
|
||||||
ch := r.render[i]
|
ch := r.render[i]
|
||||||
prevHl := highlight.Normal
|
prevHl := highlight.Normal
|
||||||
@ -151,13 +165,43 @@ func (r *Row) updateSyntax() {
|
|||||||
ip1 := i + 1
|
ip1 := i + 1
|
||||||
|
|
||||||
// Single line comments
|
// Single line comments
|
||||||
if inString == '0' && scsIndex == i {
|
if inString == '0' && !inComment && scsIndex == i {
|
||||||
for j := scsIndex; j < renderLen; j++ {
|
for j := scsIndex; j < renderLen; j++ {
|
||||||
r.Hl[j] = highlight.Comment
|
r.Hl[j] = highlight.Comment
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Multiline comments
|
||||||
|
if hasMcs && hasMce && inString == '0' {
|
||||||
|
if inComment {
|
||||||
|
r.Hl[i] = highlight.MLComment
|
||||||
|
// We found the end of the multiline comment
|
||||||
|
if mceIndex == i {
|
||||||
|
for j := i; j < (i + len(mce)); j++ {
|
||||||
|
r.Hl[j] = highlight.MLComment
|
||||||
|
}
|
||||||
|
i += len(mce)
|
||||||
|
inComment = false
|
||||||
|
prevSep = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Found the start of the multiline comment
|
||||||
|
if mcsIndex == i {
|
||||||
|
for j := i; j < (i + len(mce)); j++ {
|
||||||
|
r.Hl[j] = highlight.MLComment
|
||||||
|
}
|
||||||
|
i += len(mcs)
|
||||||
|
inComment = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// String literals
|
// String literals
|
||||||
if s.Flags&highlight.DoStrings == highlight.DoStrings {
|
if s.Flags&highlight.DoStrings == highlight.DoStrings {
|
||||||
// At the start of a string literal
|
// At the start of a string literal
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
Normal = iota
|
Normal = iota
|
||||||
Comment
|
Comment
|
||||||
|
MLComment
|
||||||
Keyword1
|
Keyword1
|
||||||
Keyword2
|
Keyword2
|
||||||
String
|
String
|
||||||
@ -28,13 +29,14 @@ const (
|
|||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
var syntaxColorMap = map[int]string{
|
var syntaxColorMap = map[int]string{
|
||||||
Comment: terminal.FGCyan,
|
Comment: terminal.FGCyan,
|
||||||
Keyword1: terminal.FGYellow,
|
MLComment: terminal.FGBrightCyan,
|
||||||
Keyword2: terminal.FGGreen,
|
Keyword1: terminal.FGYellow,
|
||||||
String: terminal.FGBrightMagenta,
|
Keyword2: terminal.FGGreen,
|
||||||
Number: terminal.FGRed,
|
String: terminal.FGBrightMagenta,
|
||||||
Match: terminal.FGBlue,
|
Number: terminal.FGRed,
|
||||||
Normal: terminal.DefaultFGColor,
|
Match: terminal.FGBlue,
|
||||||
|
Normal: terminal.DefaultFGColor,
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyntaxToColor Take a highlighting type and map it to
|
// SyntaxToColor Take a highlighting type and map it to
|
||||||
@ -53,12 +55,14 @@ func SyntaxToColor(hl int) string {
|
|||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
type Syntax struct {
|
type Syntax struct {
|
||||||
FileType string
|
FileType string
|
||||||
FileMatch []string
|
FileMatch []string
|
||||||
LineCommentStart string
|
LineCommentStart string
|
||||||
Keywords1 []string
|
MultilineCommentStart string
|
||||||
Keywords2 []string
|
MultilineCommentEnd string
|
||||||
Flags int
|
Keywords1 []string
|
||||||
|
Keywords2 []string
|
||||||
|
Flags int
|
||||||
}
|
}
|
||||||
|
|
||||||
// HLDB - The "database" of syntax types
|
// HLDB - The "database" of syntax types
|
||||||
@ -66,20 +70,44 @@ var HLDB = []*Syntax{{
|
|||||||
"c",
|
"c",
|
||||||
[]string{".c", ".h", ".cpp"},
|
[]string{".c", ".h", ".cpp"},
|
||||||
"//",
|
"//",
|
||||||
[]string{"switch", "if", "while", "for", "break", "continue", "return", "else", "struct", "union", "typedef", "static", "enum", "class", "case"},
|
"/*",
|
||||||
[]string{"int", "long", "double", "float", "char", "unsigned", "signed", "void"},
|
"*/",
|
||||||
|
[]string{
|
||||||
|
"switch", "if", "while", "for", "break", "continue", "return",
|
||||||
|
"else", "struct", "union", "typedef", "static", "enum",
|
||||||
|
"class", "case",
|
||||||
|
},
|
||||||
|
[]string{"int",
|
||||||
|
"long", "double", "float", "char", "unsigned", "signed", "void",
|
||||||
|
"#define", "#endif", "#error", "#if", "#ifdef", "#ifndef", "#include",
|
||||||
|
"#undef",
|
||||||
|
},
|
||||||
DoNumbers | DoStrings,
|
DoNumbers | DoStrings,
|
||||||
}, {
|
}, {
|
||||||
"go",
|
"go",
|
||||||
[]string{".go", "go.mod"},
|
[]string{".go", "go.mod"},
|
||||||
"//",
|
"//",
|
||||||
[]string{"break", "case", "chan", "const", "continue", "default", "defer", "else", "fallthrough", "for", "func", "go", "goto", "if", "import", "interface", "map", "package", "range", "return", "select", "struct", "switch", "type", "var", "iota"},
|
"/*",
|
||||||
[]string{"bool", "uint8", "uint16", "uint32", "uint64", "int8", "int16", "int32", "int64", "float32", "float64", "complex64", "complex128", "byte", "rune", "uint", "int", "uintptr", "string", "struct", "type", "map"},
|
"*/",
|
||||||
|
[]string{
|
||||||
|
"break", "case", "chan", "const", "continue", "default", "defer",
|
||||||
|
"else", "fallthrough", "for", "func", "go", "goto", "if",
|
||||||
|
"import", "interface", "map", "package", "range", "return", "select",
|
||||||
|
"struct", "switch", "type", "var", "iota",
|
||||||
|
},
|
||||||
|
[]string{
|
||||||
|
"bool", "uint8", "uint16", "uint32", "uint64", "int8", "int16",
|
||||||
|
"int32", "int64", "float32", "float64", "complex64", "complex128",
|
||||||
|
"byte", "rune", "uint", "int", "uintptr", "string",
|
||||||
|
"struct", "type", "map",
|
||||||
|
},
|
||||||
DoNumbers | DoStrings,
|
DoNumbers | DoStrings,
|
||||||
}, {
|
}, {
|
||||||
"makefile",
|
"makefile",
|
||||||
[]string{"Makefile", "makefile", "justfile"},
|
[]string{"Makefile", "makefile", "justfile"},
|
||||||
"#",
|
"#",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
[]string{},
|
[]string{},
|
||||||
[]string{},
|
[]string{},
|
||||||
0,
|
0,
|
||||||
|
Loading…
Reference in New Issue
Block a user