diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index f3d28e56..60490dd1 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -908,7 +908,8 @@ func (b *Buffer) UpdateRules() { if b.SyntaxDef != nil { b.Settings["filetype"] = b.SyntaxDef.FileType } else { - for _, f := range config.ListRuntimeFiles(config.RTSyntax) { + // search for the default file in the user's custom syntax files + for _, f := range config.ListRealRuntimeFiles(config.RTSyntax) { if f.Name() == "default" { data, err := f.Data() if err != nil { @@ -916,6 +917,12 @@ func (b *Buffer) UpdateRules() { continue } + header, err = highlight.MakeHeaderYaml(data) + if err != nil { + screen.TermMessage("Error parsing header for syntax file " + f.Name() + ": " + err.Error()) + continue + } + file, err := highlight.ParseFile(data) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) @@ -931,6 +938,33 @@ func (b *Buffer) UpdateRules() { break } } + + if b.SyntaxDef == nil { + // search for the default file in the runtime files + for _, f := range config.ListRuntimeFiles(config.RTSyntax) { + if f.Name() == "default" { + data, err := f.Data() + if err != nil { + screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error()) + continue + } + + file, err := highlight.ParseFile(data) + if err != nil { + screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) + continue + } + + syndef, err := highlight.ParseDef(file, header) + if err != nil { + screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) + continue + } + b.SyntaxDef = syndef + break + } + } + } } }