@@ -727,7 +727,7 @@ func findRealRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.
727727}
728728
729729// findRuntimeSyntaxDef finds a specific syntax definition
730- // in the runtime files
730+ // in the built-in syntax files
731731func findRuntimeSyntaxDef (name string , header * highlight.Header ) * highlight.Def {
732732 for _ , f := range config .ListRuntimeFiles (config .RTSyntax ) {
733733 if f .Name () == name {
@@ -740,6 +740,45 @@ func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def
740740 return nil
741741}
742742
743+ func resolveIncludes (syndef * highlight.Def ) {
744+ includes := highlight .GetIncludes (syndef )
745+ if len (includes ) == 0 {
746+ return
747+ }
748+
749+ var files []* highlight.File
750+ for _ , f := range config .ListRuntimeFiles (config .RTSyntax ) {
751+ data , err := f .Data ()
752+ if err != nil {
753+ screen .TermMessage ("Error loading syntax file " + f .Name () + ": " + err .Error ())
754+ continue
755+ }
756+
757+ header , err := highlight .MakeHeaderYaml (data )
758+ if err != nil {
759+ screen .TermMessage ("Error parsing syntax file " + f .Name () + ": " + err .Error ())
760+ continue
761+ }
762+
763+ for _ , i := range includes {
764+ if header .FileType == i {
765+ file , err := highlight .ParseFile (data )
766+ if err != nil {
767+ screen .TermMessage ("Error parsing syntax file " + f .Name () + ": " + err .Error ())
768+ continue
769+ }
770+ files = append (files , file )
771+ break
772+ }
773+ }
774+ if len (files ) >= len (includes ) {
775+ break
776+ }
777+ }
778+
779+ highlight .ResolveIncludes (syndef , files )
780+ }
781+
743782// UpdateRules updates the syntax rules and filetype for this buffer
744783// This is called when the colorscheme changes
745784func (b * Buffer ) UpdateRules () {
@@ -753,6 +792,8 @@ func (b *Buffer) UpdateRules() {
753792 return
754793 }
755794
795+ b .SyntaxDef = nil
796+
756797 // syntaxFileInfo is an internal helper structure
757798 // to store properties of one single syntax file
758799 type syntaxFileInfo struct {
@@ -828,7 +869,7 @@ func (b *Buffer) UpdateRules() {
828869 }
829870
830871 if ! foundDef {
831- // search for the syntax file in the runtime files
872+ // search for the syntax file in the built-in syntax files
832873 for _ , f := range config .ListRuntimeFiles (config .RTSyntaxHeader ) {
833874 data , err := f .Data ()
834875 if err != nil {
@@ -909,53 +950,19 @@ func (b *Buffer) UpdateRules() {
909950 b .SyntaxDef = findRuntimeSyntaxDef (syntaxFile , header )
910951 }
911952
912- if b .SyntaxDef != nil && highlight .HasIncludes (b .SyntaxDef ) {
913- includes := highlight .GetIncludes (b .SyntaxDef )
914-
915- var files []* highlight.File
916- for _ , f := range config .ListRuntimeFiles (config .RTSyntax ) {
917- data , err := f .Data ()
918- if err != nil {
919- screen .TermMessage ("Error loading syntax file " + f .Name () + ": " + err .Error ())
920- continue
921- }
922-
923- header , err := highlight .MakeHeaderYaml (data )
924- if err != nil {
925- screen .TermMessage ("Error parsing syntax file " + f .Name () + ": " + err .Error ())
926- continue
927- }
928-
929- for _ , i := range includes {
930- if header .FileType == i {
931- file , err := highlight .ParseFile (data )
932- if err != nil {
933- screen .TermMessage ("Error parsing syntax file " + f .Name () + ": " + err .Error ())
934- continue
935- }
936- files = append (files , file )
937- break
938- }
939- }
940- if len (files ) >= len (includes ) {
941- break
942- }
953+ if b .SyntaxDef != nil {
954+ b .Settings ["filetype" ] = b .SyntaxDef .FileType
955+ } else {
956+ // search for the default file in the user's custom syntax files
957+ b .SyntaxDef = findRealRuntimeSyntaxDef ("default" , nil )
958+ if b .SyntaxDef == nil {
959+ // search for the default file in the built-in syntax files
960+ b .SyntaxDef = findRuntimeSyntaxDef ("default" , nil )
943961 }
944-
945- highlight .ResolveIncludes (b .SyntaxDef , files )
946962 }
947963
948- if b .Highlighter == nil || syntaxFile != "" {
949- if b .SyntaxDef != nil {
950- b .Settings ["filetype" ] = b .SyntaxDef .FileType
951- } else {
952- // search for the default file in the user's custom syntax files
953- b .SyntaxDef = findRealRuntimeSyntaxDef ("default" , nil )
954- if b .SyntaxDef == nil {
955- // search for the default file in the runtime files
956- b .SyntaxDef = findRuntimeSyntaxDef ("default" , nil )
957- }
958- }
964+ if b .SyntaxDef != nil {
965+ resolveIncludes (b .SyntaxDef )
959966 }
960967
961968 if b .SyntaxDef != nil {
0 commit comments