aboutsummaryrefslogtreecommitdiffhomepage
path: root/modules/textadept/mime_types.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/textadept/mime_types.lua')
-rw-r--r--modules/textadept/mime_types.lua43
1 files changed, 24 insertions, 19 deletions
diff --git a/modules/textadept/mime_types.lua b/modules/textadept/mime_types.lua
index 51b60636..8a11be5d 100644
--- a/modules/textadept/mime_types.lua
+++ b/modules/textadept/mime_types.lua
@@ -3,9 +3,12 @@
local L = locale.localize
local events = events
+local M = {}
+
+--[[ This comment is for LuaDoc.
---
-- Handles file-specific settings.
-module('_m.textadept.mime_types', package.seeall)
+module('_m.textadept.mime_types', package.seeall)]]
-- Markdown:
-- ## Overview
@@ -36,19 +39,19 @@ events.LANGUAGE_MODULE_LOADED = 'language_module_loaded'
-- File extensions with their associated lexers.
-- @class table
-- @name extensions
-extensions = {}
+M.extensions = {}
---
-- Shebang words and their associated lexers.
-- @class table
-- @name shebangs
-shebangs = {}
+M.shebangs = {}
---
-- First-line patterns and their associated lexers.
-- @class table
-- @name patterns
-patterns = {}
+M.patterns = {}
-- Load mime-types from `modules/textadept/mime_types.conf`.
local mime_types
@@ -66,11 +69,11 @@ for line in mime_types:gmatch('[^\r\n]+') do
if not line:find('^%s*%%') then
if line:find('^%s*[^#/]') then -- extension definition
local ext, lexer_name = line:match('^%s*(.+)%s+(%S+)$')
- if ext and lexer_name then extensions[ext] = lexer_name end
+ if ext and lexer_name then M.extensions[ext] = lexer_name end
else -- shebang or pattern
local ch, text, lexer_name = line:match('^%s*([#/])(.+)%s+(%S+)$')
if ch and text and lexer_name then
- (ch == '#' and shebangs or patterns)[text] = lexer_name
+ (ch == '#' and M.shebangs or M.patterns)[text] = lexer_name
end
end
end
@@ -81,7 +84,7 @@ end
-- Lexers are read from `lexers/` and `~/.textadept/lexers/`.
-- @class table
-- @name lexers
-lexers = {}
+M.lexers = {}
-- Generate lexer list
local lexers_found = {}
@@ -97,14 +100,15 @@ if lfs.attributes(_USERHOME..'/lexers') then
end
end
end
-for lexer in pairs(lexers_found) do lexers[#lexers + 1] = lexer end
-table.sort(lexers)
+for lexer in pairs(lexers_found) do M.lexers[#M.lexers + 1] = lexer end
+table.sort(M.lexers)
---
-- Prompts the user to select a lexer from a filtered list for the current
-- buffer.
-function select_lexer()
- local lexer = gui.filteredlist(L('Select Lexer'), 'Name', lexers)
+-- @name select_lexer
+function M.select_lexer()
+ local lexer = gui.filteredlist(L('Select Lexer'), 'Name', M.lexers)
if lexer then buffer:set_lexer(lexer) end
end
@@ -129,14 +133,13 @@ local function set_lexer(buffer, lang)
buffer._lexer = lang
buffer:private_lexer_call(SETDIRECTPOINTER, buffer.direct_pointer)
buffer:private_lexer_call(SETLEXERLANGUAGE, lang)
- local ok, err = pcall(require, lang)
- if ok then
- ok, err = pcall(require, lang..'.post_init')
+ if package.searchpath(lang, package.path) then
+ _m[lang] = require(lang)
+ local post_init = lang..'.post_init'
+ if package.searchpath(post_init, package.path) then require(post_init) end
_m[lang].set_buffer_properties()
events.emit(events.LANGUAGE_MODULE_LOADED, lang)
end
- local module_not_found = "^module '"..lang.."[^\']*' not found:"
- if not ok and not err:find(module_not_found) then error(err) end
buffer:colourise(0, -1)
-- Create the ws_styles[lexer] lookup table for `get_lexer()`.
if ws_styles[lang] then return end
@@ -175,17 +178,17 @@ local function handle_new()
local line = buffer:get_line(0)
if line:find('^#!') then
for word in line:gsub('[/\\]', ' '):gmatch('%S+') do
- lexer = shebangs[word]
+ lexer = M.shebangs[word]
if lexer then break end
end
end
if not lexer then
- for patt, lex in pairs(patterns) do
+ for patt, lex in pairs(M.patterns) do
if line:find(patt) then lexer = lex break end
end
end
if not lexer and buffer.filename then
- lexer = extensions[buffer.filename:match('[^/\\.]+$')]
+ lexer = M.extensions[buffer.filename:match('[^/\\.]+$')]
end
buffer:set_lexer(lexer or 'container')
end
@@ -203,3 +206,5 @@ events.connect(events.VIEW_NEW, restore_lexer, 1)
events.connect(events.RESET_AFTER,
function() buffer:set_lexer(buffer._lexer or 'container') end)
+
+return M