Merge pull request #3259 from dmaluka/default-syntax-followup
Follow-ups after adding `default.yaml` support
This commit is contained in:
commit
169a9a65fa
2 changed files with 56 additions and 46 deletions
|
@ -727,7 +727,7 @@ func findRealRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.
|
||||||
}
|
}
|
||||||
|
|
||||||
// findRuntimeSyntaxDef finds a specific syntax definition
|
// findRuntimeSyntaxDef finds a specific syntax definition
|
||||||
// in the runtime files
|
// in the built-in syntax files
|
||||||
func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def {
|
func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def {
|
||||||
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
|
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
|
||||||
if f.Name() == name {
|
if f.Name() == name {
|
||||||
|
@ -740,6 +740,45 @@ func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resolveIncludes(syndef *highlight.Def) {
|
||||||
|
includes := highlight.GetIncludes(syndef)
|
||||||
|
if len(includes) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var files []*highlight.File
|
||||||
|
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
|
||||||
|
data, err := f.Data()
|
||||||
|
if err != nil {
|
||||||
|
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
header, err := highlight.MakeHeaderYaml(data)
|
||||||
|
if err != nil {
|
||||||
|
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, i := range includes {
|
||||||
|
if header.FileType == i {
|
||||||
|
file, err := highlight.ParseFile(data)
|
||||||
|
if err != nil {
|
||||||
|
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
files = append(files, file)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(files) >= len(includes) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
highlight.ResolveIncludes(syndef, files)
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateRules updates the syntax rules and filetype for this buffer
|
// UpdateRules updates the syntax rules and filetype for this buffer
|
||||||
// This is called when the colorscheme changes
|
// This is called when the colorscheme changes
|
||||||
func (b *Buffer) UpdateRules() {
|
func (b *Buffer) UpdateRules() {
|
||||||
|
@ -753,6 +792,8 @@ func (b *Buffer) UpdateRules() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b.SyntaxDef = nil
|
||||||
|
|
||||||
// syntaxFileInfo is an internal helper structure
|
// syntaxFileInfo is an internal helper structure
|
||||||
// to store properties of one single syntax file
|
// to store properties of one single syntax file
|
||||||
type syntaxFileInfo struct {
|
type syntaxFileInfo struct {
|
||||||
|
@ -828,7 +869,7 @@ func (b *Buffer) UpdateRules() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !foundDef {
|
if !foundDef {
|
||||||
// search for the syntax file in the runtime files
|
// search for the syntax file in the built-in syntax files
|
||||||
for _, f := range config.ListRuntimeFiles(config.RTSyntaxHeader) {
|
for _, f := range config.ListRuntimeFiles(config.RTSyntaxHeader) {
|
||||||
data, err := f.Data()
|
data, err := f.Data()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -909,53 +950,19 @@ func (b *Buffer) UpdateRules() {
|
||||||
b.SyntaxDef = findRuntimeSyntaxDef(syntaxFile, header)
|
b.SyntaxDef = findRuntimeSyntaxDef(syntaxFile, header)
|
||||||
}
|
}
|
||||||
|
|
||||||
if b.SyntaxDef != nil && highlight.HasIncludes(b.SyntaxDef) {
|
|
||||||
includes := highlight.GetIncludes(b.SyntaxDef)
|
|
||||||
|
|
||||||
var files []*highlight.File
|
|
||||||
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
|
|
||||||
data, err := f.Data()
|
|
||||||
if err != nil {
|
|
||||||
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
header, err := highlight.MakeHeaderYaml(data)
|
|
||||||
if err != nil {
|
|
||||||
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, i := range includes {
|
|
||||||
if header.FileType == i {
|
|
||||||
file, err := highlight.ParseFile(data)
|
|
||||||
if err != nil {
|
|
||||||
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
files = append(files, file)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(files) >= len(includes) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
highlight.ResolveIncludes(b.SyntaxDef, files)
|
|
||||||
}
|
|
||||||
|
|
||||||
if b.Highlighter == nil || syntaxFile != "" {
|
|
||||||
if b.SyntaxDef != nil {
|
if b.SyntaxDef != nil {
|
||||||
b.Settings["filetype"] = b.SyntaxDef.FileType
|
b.Settings["filetype"] = b.SyntaxDef.FileType
|
||||||
} else {
|
} else {
|
||||||
// search for the default file in the user's custom syntax files
|
// search for the default file in the user's custom syntax files
|
||||||
b.SyntaxDef = findRealRuntimeSyntaxDef("default", nil)
|
b.SyntaxDef = findRealRuntimeSyntaxDef("default", nil)
|
||||||
if b.SyntaxDef == nil {
|
if b.SyntaxDef == nil {
|
||||||
// search for the default file in the runtime files
|
// search for the default file in the built-in syntax files
|
||||||
b.SyntaxDef = findRuntimeSyntaxDef("default", nil)
|
b.SyntaxDef = findRuntimeSyntaxDef("default", nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if b.SyntaxDef != nil {
|
||||||
|
resolveIncludes(b.SyntaxDef)
|
||||||
}
|
}
|
||||||
|
|
||||||
if b.SyntaxDef != nil {
|
if b.SyntaxDef != nil {
|
||||||
|
|
|
@ -392,3 +392,6 @@ example, the following is possible for html:
|
||||||
rules:
|
rules:
|
||||||
- include: "css"
|
- include: "css"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that nested include (i.e. including syntax files that include other syntax
|
||||||
|
files) is not supported yet.
|
||||||
|
|
Loading…
Reference in a new issue