diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/drawwhitespace.lua | 7 | ||||
-rw-r--r-- | plugins/inanimate.lua | 12 | ||||
-rw-r--r-- | plugins/indentguide.lua | 10 | ||||
-rw-r--r-- | plugins/language_sass.lua | 45 | ||||
-rw-r--r-- | plugins/lineguide.lua | 4 | ||||
-rw-r--r-- | plugins/projectmanager.lua | 128 | ||||
-rw-r--r-- | plugins/scale.lua | 8 | ||||
-rw-r--r-- | plugins/workspace.lua | 164 |
8 files changed, 63 insertions, 315 deletions
diff --git a/plugins/drawwhitespace.lua b/plugins/drawwhitespace.lua index c6ed07d..4e2e109 100644 --- a/plugins/drawwhitespace.lua +++ b/plugins/drawwhitespace.lua @@ -16,17 +16,18 @@ function DocView:draw_line_text(idx, x, y) if not config.draw_whitespace then return end local text = self.doc.lines[idx] - local tx, ty = x, y + self:get_line_text_y_offset() local font = self:get_font() + local ss = font:subpixel_scale() + local tx, ty = ss * x, y + self:get_line_text_y_offset() local color = style.whitespace or style.syntax.comment local map = config.whitespace_map for chr in common.utf8_chars(text) do local rep = map[chr] if rep then - renderer.draw_text(font, rep, tx, ty, color) + renderer.draw_text_subpixel(font, rep, tx, ty, color) end - tx = tx + font:get_width(chr) + tx = tx + font:get_width_subpixel(chr) end end diff --git a/plugins/inanimate.lua b/plugins/inanimate.lua deleted file mode 100644 index a01aa40..0000000 --- a/plugins/inanimate.lua +++ /dev/null @@ -1,12 +0,0 @@ -local core = require "core" -local View = require "core.view" - -function View:move_towards(t, k, dest) - if type(t) ~= "table" then - return self:move_towards(self, t, k, dest) - end - if t[k] ~= dest then - core.redraw = true - end - t[k] = dest -end diff --git a/plugins/indentguide.lua b/plugins/indentguide.lua index daf7d8b..db57f9e 100644 --- a/plugins/indentguide.lua +++ b/plugins/indentguide.lua @@ -34,12 +34,16 @@ local draw_line_text = DocView.draw_line_text function DocView:draw_line_text(idx, x, y) local spaces = get_line_indent_guide_spaces(self.doc, idx) - local sw = self:get_font():get_width(" ") local w = math.ceil(1 * SCALE) local h = self:get_line_height() - for i = 0, spaces - 1, config.indent_size do + local sspaces = "" + local font = self:get_font() + local ss = font:subpixel_scale() + for _ = 0, spaces - 1, config.indent_size do local color = style.guide or style.selection - renderer.draw_rect(x + sw * i, y, w, h, color) + local sw = font:get_width_subpixel(sspaces) / ss + renderer.draw_rect(x + sw, y, w, h, color) + sspaces = sspaces .. (' '):rep(config.indent_size) end draw_line_text(self, idx, x, y) end diff --git a/plugins/language_sass.lua b/plugins/language_sass.lua new file mode 100644 index 0000000..5b043c1 --- /dev/null +++ b/plugins/language_sass.lua @@ -0,0 +1,45 @@ +local syntax = require "core.syntax" + +syntax.add { + files = { "%.sass$" }, + comment = "//", + patterns = { + { pattern = "/[/%*].-\n", type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "$%w+", type = "keyword" }, + { pattern = "@%w+", type = "literal" }, + { pattern = "[#,]%w+", type = "function" }, + { pattern = "&", type = "keyword2" }, + { pattern = "[:%/%*%-]", type = "operator" }, + { pattern = "[%a][%w-]*%s*%f[:]", type = "keyword2" }, + { pattern = "-?%d+[%d%.]*p[xt]", type = "number" }, + { pattern = "-?%d+[%d%.]*deg", type = "number" }, + { pattern = "-?%d+[%d%.]*[s%%]", type = "number" }, + { pattern = "-?%d+[%d%.]*", type = "number" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["transparent"] = "literal", + ["none"] = "literal", + ["absolute"] = "literal", + ["relative"] = "literal", + ["solid"] = "literal", + ["flex"] = "literal", + ["flex-start"] = "literal", + ["flex-end"] = "literal", + ["row"] = "literal", + ["center"] = "literal", + ["column"] = "literal", + ["pointer"] = "literal", + ["ease"] = "literal", + ["white"] = "function", + ["black"] = "function", + ["gray"] = "function", + ["blue"] = "function", + ["red"] = "function", + ["purple"] = "function", + ["green"] = "function", + ["yellow"] = "function" + } +} diff --git a/plugins/lineguide.lua b/plugins/lineguide.lua index fc24567..7669c52 100644 --- a/plugins/lineguide.lua +++ b/plugins/lineguide.lua @@ -7,7 +7,9 @@ local draw = DocView.draw function DocView:draw(...) draw(self, ...) - local offset = self:get_font():get_width("n") * config.line_limit + local ns = ("n"):rep(config.line_limit) + local ss = self:get_font():subpixel_scale() + local offset = self:get_font():get_width_subpixel(ns) / ss local x = self:get_line_screen_position(1) + offset local y = self.position.y local w = math.ceil(SCALE * 1) diff --git a/plugins/projectmanager.lua b/plugins/projectmanager.lua deleted file mode 100644 index b5a66e3..0000000 --- a/plugins/projectmanager.lua +++ /dev/null @@ -1,128 +0,0 @@ -local project_manager = {} - -local core = require "core" -local command = require "core.command" -local common = require "core.common" -local keymap = require "core.keymap" - -local projects_file = ".lite_projects.lua" - -project_manager.projects = {} - -local function load_projects() - local ok, t = pcall(dofile, EXEDIR .. "/" .. projects_file) - if ok then project_manager.projects = t end -end - -load_projects() - -local function serialize(val) - if type(val) == "string" then - return string.format("%q", val) - elseif type(val) == "table" then - local t = {} - for k, v in pairs(val) do - table.insert(t, "[" .. serialize(k) .. "]=" .. serialize(v)) - end - return "{" .. table.concat(t, ",") .. "}" - end - return tostring(val) -end - -local function save_projects() - local fp = io.open(EXEDIR .. "/" .. projects_file, "w") - if fp then - fp:write("return ", serialize(project_manager.projects), "\n") - fp:close() - end -end - -local function path_base_name(str) - local pattern = "[\\/]?([^\\/]+)[\\/]?$" - return str:match(pattern) -end - -function project_manager.add_project() - local proj_dir = system.absolute_path(".") - local proj_name = path_base_name(proj_dir) - core.command_view:set_text(proj_name) - core.command_view:enter("Project Name", - function(text) - if text then - project_manager.projects[text] = proj_dir - save_projects() - end - end) -end - -local function get_project_names() - local t = {} - for k, v in pairs(project_manager.projects) do table.insert(t, k) end - return t -end - -local function project_lister(func) - local projects = get_project_names(); - core.command_view:enter("Open Project", func, function(text) - local res = common.fuzzy_match(projects, text) - for i, name in ipairs(res) do - res[i] = { - text = name, - info = project_manager.projects[name], - } - end - return res - end) -end - -function project_manager.rename_project(func) - project_lister(function(text, item) - if item then - core.command_view:set_text(item.text) - core.command_view:enter("Rename ".. item.text, - function(_text) - if _text then - project_manager.projects[_text] = project_manager.projects[item.text] - project_manager.projects[item.text] = nil - save_projects() - end - end) - end - end) -end - -function project_manager.open_project() - project_lister(function(text, item) - if item then - system.exec(string.format("%q %q", EXEFILE, item.info)) - end - end) -end - -function project_manager.switch_project() - project_lister(function(text, item) - if item then - system.exec(string.format("%q %q", EXEFILE, item.info)) - os.exit() - end - end) -end - -function project_manager.remove_project() - project_lister(function(text, item) - if item then - project_manager.projects[item.text] = nil - save_projects() - end - end) -end - -command.add(nil, { - ["project-manager:open-project"] = project_manager.open_project, - ["project-manager:switch-project"] = project_manager.switch_project, - ["project-manager:add-project"] = project_manager.add_project, - ["project-manager:remove-project"] = project_manager.remove_project, - ["project-manager:rename-project"] = project_manager.rename_project, - }) - -return project_manager diff --git a/plugins/scale.lua b/plugins/scale.lua index 5dfa699..9d9ea73 100644 --- a/plugins/scale.lua +++ b/plugins/scale.lua @@ -13,10 +13,10 @@ config.scale_use_mousewheel = true local font_cache = setmetatable({}, { __mode = "k" }) -- the following should be kept in sync with core.style's default font settings -font_cache[style.font] = { EXEDIR .. "/data/fonts/font.ttf", 14 * SCALE } -font_cache[style.big_font] = { EXEDIR .. "/data/fonts/font.ttf", 34 * SCALE } -font_cache[style.icon_font] = { EXEDIR .. "/data/fonts/icons.ttf", 14 * SCALE } -font_cache[style.code_font] = { EXEDIR .. "/data/fonts/monospace.ttf", 13.5 * SCALE } +font_cache[style.font] = { DATADIR .. "/fonts/font.ttf", 14 * SCALE } +font_cache[style.big_font] = { DATADIR .. "/fonts/font.ttf", 34 * SCALE } +font_cache[style.icon_font] = { DATADIR .. "/fonts/icons.ttf", 14 * SCALE } +font_cache[style.code_font] = { DATADIR .. "/fonts/monospace.ttf", 13.5 * SCALE } local load_font = renderer.font.load diff --git a/plugins/workspace.lua b/plugins/workspace.lua deleted file mode 100644 index 028e0a2..0000000 --- a/plugins/workspace.lua +++ /dev/null @@ -1,164 +0,0 @@ -local core = require "core" -local DocView = require "core.docview" - -local workspace_filename = ".lite_workspace.lua" - - -local function serialize(val) - if type(val) == "string" then - return string.format("%q", val) - elseif type(val) == "table" then - local t = {} - for k, v in pairs(val) do - table.insert(t, "[" .. serialize(k) .. "]=" .. serialize(v)) - end - return "{" .. table.concat(t, ",") .. "}" - end - return tostring(val) -end - - -local function has_no_locked_children(node) - if node.locked then return false end - if node.type == "leaf" then return true end - return has_no_locked_children(node.a) and has_no_locked_children(node.b) -end - - -local function get_unlocked_root(node) - if node.type == "leaf" then - return not node.locked and node - end - if has_no_locked_children(node) then - return node - end - return get_unlocked_root(node.a) or get_unlocked_root(node.b) -end - - -local function save_view(view) - local mt = getmetatable(view) - if mt == DocView then - return { - type = "doc", - active = (core.active_view == view), - filename = view.doc.filename, - selection = { view.doc:get_selection() }, - scroll = { x = view.scroll.to.x, y = view.scroll.to.y }, - text = not view.doc.filename and view.doc:get_text(1, 1, math.huge, math.huge) - } - end - for name, mod in pairs(package.loaded) do - if mod == mt then - return { - type = "view", - active = (core.active_view == view), - module = name - } - end - end -end - - -local function load_view(t) - if t.type == "doc" then - local ok, doc = pcall(core.open_doc, t.filename) - if not ok then - return DocView(core.open_doc()) - end - local dv = DocView(doc) - if t.text then doc:insert(1, 1, t.text) end - doc:set_selection(table.unpack(t.selection)) - dv.last_line, dv.last_col = doc:get_selection() - dv.scroll.x, dv.scroll.to.x = t.scroll.x, t.scroll.x - dv.scroll.y, dv.scroll.to.y = t.scroll.y, t.scroll.y - return dv - end - return require(t.module)() -end - - -local function save_node(node) - local res = {} - res.type = node.type - if node.type == "leaf" then - res.views = {} - for _, view in ipairs(node.views) do - local t = save_view(view) - if t then - table.insert(res.views, t) - if node.active_view == view then - res.active_view = #res.views - end - end - end - else - res.divider = node.divider - res.a = save_node(node.a) - res.b = save_node(node.b) - end - return res -end - - -local function load_node(node, t) - if t.type == "leaf" then - local res - for _, v in ipairs(t.views) do - local view = load_view(v) - if v.active then res = view end - node:add_view(view) - end - if t.active_view then - node:set_active_view(node.views[t.active_view]) - end - return res - else - node:split(t.type == "hsplit" and "right" or "down") - node.divider = t.divider - local res1 = load_node(node.a, t.a) - local res2 = load_node(node.b, t.b) - return res1 or res2 - end -end - - -local function save_workspace() - local root = get_unlocked_root(core.root_view.root_node) - local fp = io.open(workspace_filename, "w") - if fp then - fp:write("return ", serialize(save_node(root)), "\n") - fp:close() - end -end - - -local function load_workspace() - local ok, t = pcall(dofile, workspace_filename) - os.remove(workspace_filename) - if ok then - local root = get_unlocked_root(core.root_view.root_node) - local active_view = load_node(root, t) - if active_view then - core.set_active_view(active_view) - end - end -end - - -local run = core.run - -function core.run(...) - if #core.docs == 0 then - core.try(load_workspace) - - local exit = os.exit - function os.exit(...) - save_workspace() - exit(...) - end - end - - core.run = run - return core.run(...) -end |