diff --git a/data/core/doc/init.lua b/data/core/doc/init.lua index bb09ce2..83b5fc0 100644 --- a/data/core/doc/init.lua +++ b/data/core/doc/init.lua @@ -56,7 +56,8 @@ end function Doc:reset_syntax() - local syn = syntax.get(self.filename or "") + local header = self:get_text(1, 1, self:position_offset(1, 1, 128)) + local syn = syntax.get(self.filename or "", header) if self.syntax ~= syn then self.syntax = syn self.highlighter:reset() diff --git a/data/core/syntax.lua b/data/core/syntax.lua index fe8cc86..a763ac7 100644 --- a/data/core/syntax.lua +++ b/data/core/syntax.lua @@ -11,14 +11,19 @@ function syntax.add(t) end -function syntax.get(filename) +local function find(string, field) for i = #syntax.items, 1, -1 do local t = syntax.items[i] - if common.match_pattern(filename, t.files) then + if common.match_pattern(string, t[field] or {}) then return t end end - return plain_text_syntax +end + +function syntax.get(filename, header) + return find(filename, "files") + or find(header, "headers") + or plain_text_syntax end diff --git a/data/plugins/language_lua.lua b/data/plugins/language_lua.lua index 79e2fce..c577a28 100644 --- a/data/plugins/language_lua.lua +++ b/data/plugins/language_lua.lua @@ -2,6 +2,7 @@ local syntax = require "core.syntax" syntax.add { files = "%.lua$", + headers = "^#!.*[ /]lua", comment = "--", patterns = { { pattern = { '"', '"', '\\' }, type = "string" }, diff --git a/data/plugins/language_python.lua b/data/plugins/language_python.lua index ef79f23..4a6ada3 100644 --- a/data/plugins/language_python.lua +++ b/data/plugins/language_python.lua @@ -2,6 +2,7 @@ local syntax = require "core.syntax" syntax.add { files = "%.py$", + headers = "^#!.*[ /]python", comment = "#", patterns = { { pattern = { "#", "\n" }, type = "comment" }, diff --git a/data/plugins/language_xml.lua b/data/plugins/language_xml.lua index 9400e77..5240bdc 100644 --- a/data/plugins/language_xml.lua +++ b/data/plugins/language_xml.lua @@ -2,6 +2,7 @@ local syntax = require "core.syntax" syntax.add { files = { "%.xml$", "%.html?$" }, + headers = "<%?xml", patterns = { { pattern = { "" }, type = "comment" }, { pattern = { '%f[^>][^<]', '%f[<]' }, type = "normal" },