110 lines
3.1 KiB
Lua
110 lines
3.1 KiB
Lua
-- mod-version:3
|
|
local config = require "core.config"
|
|
local command = require "core.command"
|
|
local keymap = require "core.keymap"
|
|
local common = require "core.common"
|
|
local DocView = require "core.docview"
|
|
|
|
config.plugins.code_plus = common.merge({
|
|
enabled = true, --- enabled by default
|
|
config_spec = { --- config specification used by the settings gui
|
|
name = "Code+",
|
|
{
|
|
label = "Enable",
|
|
description = "Toggle to enable this plugin.",
|
|
path = "enabled",
|
|
type = "toggle",
|
|
default = true
|
|
},
|
|
{
|
|
label = "Todo Color",
|
|
description = "Define the color that highlights the todo comments.",
|
|
path = "todo",
|
|
type = "color",
|
|
default = "#5592CF"
|
|
},
|
|
{
|
|
label = "Fixme Color",
|
|
description = "Defines the color that highlights the fixme comments.",
|
|
path = "fixme",
|
|
type = "color",
|
|
default = "#EF6385"
|
|
},
|
|
}
|
|
}, config.plugins.code_plus)
|
|
|
|
--- draw comments highlights
|
|
local white = { common.color "#ffffff" }
|
|
|
|
local function draw_highlight(self, str, line, x, y, s, e, color)
|
|
local x1 = x + self:get_col_x_offset(line, s)
|
|
local x2 = x + self:get_col_x_offset(line, e + 1)
|
|
local oy = self:get_line_text_y_offset()
|
|
renderer.draw_rect(x1, y, x2 - x1, self:get_line_height(), color)
|
|
renderer.draw_text(self:get_font(), str, x1, y + oy, white)
|
|
end
|
|
|
|
|
|
local function highlight_comment(self, line, x, y, comment, color)
|
|
local text = self.doc.lines[line]
|
|
local s, e = 0, 0
|
|
|
|
while true do
|
|
s, e = text:lower():find(comment .. "%((.-)%)", e + 1)
|
|
if s then
|
|
local str = text:sub(s, e)
|
|
draw_highlight(self, str, line, x, y, s, e, color)
|
|
end
|
|
|
|
if not s then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
local draw_line_text = DocView.draw_line_text
|
|
|
|
function DocView:draw_line_text(line, x, y)
|
|
local lh = draw_line_text(self, line, x, y)
|
|
|
|
if config.plugins.code_plus.enabled then
|
|
highlight_comment(self, line, x, y, "@todo", config.plugins.code_plus.todo)
|
|
highlight_comment(self, line, x, y, "@fixme", config.plugins.code_plus.fixme)
|
|
end
|
|
return lh
|
|
end
|
|
|
|
--- auto complete brackets, parantheses, etc...
|
|
|
|
local function complete(dv, characters)
|
|
local doc = dv.doc
|
|
local idx = dv.doc.last_selection
|
|
local line1, col1 = doc:get_selection_idx(idx)
|
|
doc:insert(line1, col1, characters)
|
|
doc:move_to_cursor(idx, idx)
|
|
end
|
|
|
|
command.add("core.docview!", {
|
|
["code_plus:complete_brackets"] = function(dv)
|
|
complete(dv, "[]")
|
|
end,
|
|
["code_plus:complete_curly_brackets"] = function(dv)
|
|
complete(dv, "{}")
|
|
end,
|
|
["code_plus:complete_parantheses"] = function(dv)
|
|
complete(dv, "()")
|
|
end,
|
|
["code_plus:complete_quotation_marks"] = function(dv)
|
|
complete(dv, '""')
|
|
end,
|
|
})
|
|
|
|
keymap.add {
|
|
["altgr+8"] = "code_plus:complete_brackets",
|
|
["ctrl+alt+8"] = "code_plus:complete_brackets",
|
|
["altgr+7"] = "code_plus:complete_curly_brackets",
|
|
["ctrl+alt+7"] = "code_plus:complete_curly_brackets",
|
|
["shift+8"] = "code_plus:complete_parantheses",
|
|
["shift+2"] = "code_plus:complete_quotation_marks"
|
|
}
|
|
|