Merge remote-tracking branch 'rxi/master' into font-rendering-tests
This commit is contained in:
commit
9bd4a8b9de
|
@ -35,7 +35,7 @@ command.add(nil, {
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["core:command-finder"] = function()
|
["core:find-command"] = function()
|
||||||
local commands = command.get_all_valid()
|
local commands = command.get_all_valid()
|
||||||
core.command_view:enter("Do Command", function(text, item)
|
core.command_view:enter("Do Command", function(text, item)
|
||||||
if item then
|
if item then
|
||||||
|
@ -54,7 +54,7 @@ command.add(nil, {
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["core:file-finder"] = function()
|
["core:find-file"] = function()
|
||||||
core.command_view:enter("Open File From Project", function(text, item)
|
core.command_view:enter("Open File From Project", function(text, item)
|
||||||
text = item and item.text or text
|
text = item and item.text or text
|
||||||
core.root_view:open_doc(core.open_doc(text))
|
core.root_view:open_doc(core.open_doc(text))
|
||||||
|
|
|
@ -320,10 +320,10 @@ local commands = {
|
||||||
local translations = {
|
local translations = {
|
||||||
["previous-char"] = translate.previous_char,
|
["previous-char"] = translate.previous_char,
|
||||||
["next-char"] = translate.next_char,
|
["next-char"] = translate.next_char,
|
||||||
["previous-word-boundary"] = translate.previous_word_boundary,
|
["previous-word-start"] = translate.previous_word_start,
|
||||||
["next-word-boundary"] = translate.next_word_boundary,
|
["next-word-end"] = translate.next_word_end,
|
||||||
["previous-start-of-block"] = translate.previous_start_of_block,
|
["previous-block-start"] = translate.previous_block_start,
|
||||||
["next-start-of-block"] = translate.next_start_of_block,
|
["next-block-end"] = translate.next_block_end,
|
||||||
["start-of-doc"] = translate.start_of_doc,
|
["start-of-doc"] = translate.start_of_doc,
|
||||||
["end-of-doc"] = translate.end_of_doc,
|
["end-of-doc"] = translate.end_of_doc,
|
||||||
["start-of-line"] = translate.start_of_line,
|
["start-of-line"] = translate.start_of_line,
|
||||||
|
|
|
@ -28,33 +28,32 @@ function translate.next_char(doc, line, col)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function translate.previous_word_boundary(doc, line, col)
|
function translate.previous_word_start(doc, line, col)
|
||||||
local char = doc:get_char(doc:position_offset(line, col, -1))
|
local prev
|
||||||
local inword = not is_non_word(char)
|
while line > 1 or col > 1 do
|
||||||
repeat
|
local l, c = doc:position_offset(line, col, -1)
|
||||||
local line2, col2 = line, col
|
local char = doc:get_char(l, c)
|
||||||
line, col = doc:position_offset(line, col, -1)
|
if prev and prev ~= char or not is_non_word(char) then
|
||||||
if line == line2 and col == col2 then
|
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
local c = doc:get_char(doc:position_offset(line, col, -1))
|
prev, line, col = char, l, c
|
||||||
until inword and is_non_word(c) or not inword and c ~= char
|
end
|
||||||
return line, col
|
return translate.start_of_word(doc, line, col)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function translate.next_word_boundary(doc, line, col)
|
function translate.next_word_end(doc, line, col)
|
||||||
|
local prev
|
||||||
|
local end_line, end_col = translate.end_of_doc(doc, line, col)
|
||||||
|
while line < end_line or col < end_col do
|
||||||
local char = doc:get_char(line, col)
|
local char = doc:get_char(line, col)
|
||||||
local inword = not is_non_word(char)
|
if prev and prev ~= char or not is_non_word(char) then
|
||||||
repeat
|
|
||||||
local line2, col2 = line, col
|
|
||||||
line, col = doc:position_offset(line, col, 1)
|
|
||||||
if line == line2 and col == col2 then
|
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
local c = doc:get_char(line, col)
|
line, col = doc:position_offset(line, col, 1)
|
||||||
until inword and is_non_word(c) or not inword and c ~= char
|
prev = char
|
||||||
return line, col
|
end
|
||||||
|
return translate.end_of_word(doc, line, col)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,30 +85,30 @@ function translate.end_of_word(doc, line, col)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function translate.previous_start_of_block(doc, line, col)
|
function translate.previous_block_start(doc, line, col)
|
||||||
while true do
|
while true do
|
||||||
line = line - 1
|
line = line - 1
|
||||||
if line <= 1 then
|
if line <= 1 then
|
||||||
return 1, 1
|
return 1, 1
|
||||||
end
|
end
|
||||||
if doc.lines[line-1]:match("^%s*$")
|
if doc.lines[line-1]:find("^%s*$")
|
||||||
and not doc.lines[line]:match("^%s*$") then
|
and not doc.lines[line]:find("^%s*$") then
|
||||||
return line, (doc.lines[line]:find("%S"))
|
return line, (doc.lines[line]:find("%S"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function translate.next_start_of_block(doc, line, col)
|
function translate.next_block_end(doc, line, col)
|
||||||
while true do
|
while true do
|
||||||
line = line + 1
|
|
||||||
if line >= #doc.lines then
|
if line >= #doc.lines then
|
||||||
return #doc.lines, 1
|
return #doc.lines, 1
|
||||||
end
|
end
|
||||||
if doc.lines[line-1]:match("^%s*$")
|
if doc.lines[line+1]:find("^%s*$")
|
||||||
and not doc.lines[line]:match("^%s*$") then
|
and not doc.lines[line]:find("^%s*$") then
|
||||||
return line, (doc.lines[line]:find("%S"))
|
return line+1, #doc.lines[line+1]
|
||||||
end
|
end
|
||||||
|
line = line + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,19 @@ function core.init()
|
||||||
CommandView = require "core.commandview"
|
CommandView = require "core.commandview"
|
||||||
Doc = require "core.doc"
|
Doc = require "core.doc"
|
||||||
|
|
||||||
|
local project_dir = "."
|
||||||
|
local files = {}
|
||||||
|
for i = 2, #ARGS do
|
||||||
|
local info = system.get_file_info(ARGS[i]) or {}
|
||||||
|
if info.type == "file" then
|
||||||
|
table.insert(files, system.absolute_path(ARGS[i]))
|
||||||
|
elseif info.type == "dir" then
|
||||||
|
project_dir = ARGS[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
system.chdir(project_dir)
|
||||||
|
|
||||||
core.frame_start = 0
|
core.frame_start = 0
|
||||||
core.clip_rect_stack = {{ 0,0,0,0 }}
|
core.clip_rect_stack = {{ 0,0,0,0 }}
|
||||||
core.log_items = {}
|
core.log_items = {}
|
||||||
|
@ -103,25 +116,38 @@ function core.init()
|
||||||
local got_user_error = not core.try(require, "user")
|
local got_user_error = not core.try(require, "user")
|
||||||
local got_project_error = not core.load_project_module()
|
local got_project_error = not core.load_project_module()
|
||||||
|
|
||||||
for i = 2, #ARGS do
|
for _, filename in ipairs(files) do
|
||||||
local filename = ARGS[i]
|
|
||||||
local info = system.get_file_info(filename)
|
|
||||||
if info and info.type == "file" then
|
|
||||||
core.root_view:open_doc(core.open_doc(filename))
|
core.root_view:open_doc(core.open_doc(filename))
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if got_plugin_error or got_user_error or got_project_error then
|
if got_plugin_error or got_user_error or got_project_error then
|
||||||
command.perform("core:open-log")
|
command.perform("core:open-log")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local info = ARGS[2] and system.get_file_info(ARGS[2])
|
|
||||||
system.chdir(info and info.type == "dir" and ARGS[2] or ".")
|
local temp_uid = (system.get_time() * 1000) % 0xffffffff
|
||||||
|
local temp_file_prefix = string.format(".lite_temp_%08x", temp_uid)
|
||||||
|
local temp_file_counter = 0
|
||||||
|
|
||||||
|
local function delete_temp_files()
|
||||||
|
for _, filename in ipairs(system.list_dir(EXEDIR)) do
|
||||||
|
if filename:find(temp_file_prefix, 1, true) == 1 then
|
||||||
|
os.remove(EXEDIR .. PATHSEP .. filename)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function core.temp_filename(ext)
|
||||||
|
temp_file_counter = temp_file_counter + 1
|
||||||
|
return EXEDIR .. PATHSEP .. temp_file_prefix
|
||||||
|
.. string.format("%06x", temp_file_counter) .. (ext or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function core.quit(force)
|
function core.quit(force)
|
||||||
if force then
|
if force then
|
||||||
|
delete_temp_files()
|
||||||
os.exit()
|
os.exit()
|
||||||
end
|
end
|
||||||
local dirty_count = 0
|
local dirty_count = 0
|
||||||
|
@ -374,10 +400,10 @@ function core.step()
|
||||||
|
|
||||||
-- update window title
|
-- update window title
|
||||||
local name = core.active_view:get_name()
|
local name = core.active_view:get_name()
|
||||||
if name ~= "---" then
|
local title = (name ~= "---") and (name .. " - lite") or "lite"
|
||||||
system.set_window_title(name .. " - lite")
|
if title ~= core.window_title then
|
||||||
else
|
system.set_window_title(title)
|
||||||
system.set_window_title("lite")
|
core.window_title = title
|
||||||
end
|
end
|
||||||
|
|
||||||
-- draw
|
-- draw
|
||||||
|
|
|
@ -84,8 +84,8 @@ end
|
||||||
|
|
||||||
|
|
||||||
keymap.add {
|
keymap.add {
|
||||||
["ctrl+shift+p"] = "core:command-finder",
|
["ctrl+shift+p"] = "core:find-command",
|
||||||
["ctrl+p"] = "core:file-finder",
|
["ctrl+p"] = "core:find-file",
|
||||||
["ctrl+o"] = "core:open-file",
|
["ctrl+o"] = "core:open-file",
|
||||||
["ctrl+n"] = "core:new-doc",
|
["ctrl+n"] = "core:new-doc",
|
||||||
["alt+return"] = "core:toggle-fullscreen",
|
["alt+return"] = "core:toggle-fullscreen",
|
||||||
|
@ -132,12 +132,12 @@ keymap.add {
|
||||||
["shift+tab"] = "doc:unindent",
|
["shift+tab"] = "doc:unindent",
|
||||||
["backspace"] = "doc:backspace",
|
["backspace"] = "doc:backspace",
|
||||||
["shift+backspace"] = "doc:backspace",
|
["shift+backspace"] = "doc:backspace",
|
||||||
["ctrl+backspace"] = "doc:delete-to-previous-word-boundary",
|
["ctrl+backspace"] = "doc:delete-to-previous-word-start",
|
||||||
["ctrl+shift+backspace"] = "doc:delete-to-previous-word-boundary",
|
["ctrl+shift+backspace"] = "doc:delete-to-previous-word-start",
|
||||||
["delete"] = "doc:delete",
|
["delete"] = "doc:delete",
|
||||||
["shift+delete"] = "doc:delete",
|
["shift+delete"] = "doc:delete",
|
||||||
["ctrl+delete"] = "doc:delete-to-next-word-boundary",
|
["ctrl+delete"] = "doc:delete-to-next-word-end",
|
||||||
["ctrl+shift+delete"] = "doc:delete-to-next-word-boundary",
|
["ctrl+shift+delete"] = "doc:delete-to-next-word-end",
|
||||||
["return"] = { "command:submit", "doc:newline" },
|
["return"] = { "command:submit", "doc:newline" },
|
||||||
["ctrl+return"] = "doc:newline-below",
|
["ctrl+return"] = "doc:newline-below",
|
||||||
["ctrl+shift+return"] = "doc:newline-above",
|
["ctrl+shift+return"] = "doc:newline-above",
|
||||||
|
@ -155,10 +155,10 @@ keymap.add {
|
||||||
["right"] = "doc:move-to-next-char",
|
["right"] = "doc:move-to-next-char",
|
||||||
["up"] = { "command:select-previous", "doc:move-to-previous-line" },
|
["up"] = { "command:select-previous", "doc:move-to-previous-line" },
|
||||||
["down"] = { "command:select-next", "doc:move-to-next-line" },
|
["down"] = { "command:select-next", "doc:move-to-next-line" },
|
||||||
["ctrl+left"] = "doc:move-to-previous-word-boundary",
|
["ctrl+left"] = "doc:move-to-previous-word-start",
|
||||||
["ctrl+right"] = "doc:move-to-next-word-boundary",
|
["ctrl+right"] = "doc:move-to-next-word-end",
|
||||||
["ctrl+["] = "doc:move-to-previous-start-of-block",
|
["ctrl+["] = "doc:move-to-previous-block-start",
|
||||||
["ctrl+]"] = "doc:move-to-next-start-of-block",
|
["ctrl+]"] = "doc:move-to-next-block-end",
|
||||||
["home"] = "doc:move-to-start-of-line",
|
["home"] = "doc:move-to-start-of-line",
|
||||||
["end"] = "doc:move-to-end-of-line",
|
["end"] = "doc:move-to-end-of-line",
|
||||||
["ctrl+home"] = "doc:move-to-start-of-doc",
|
["ctrl+home"] = "doc:move-to-start-of-doc",
|
||||||
|
@ -170,10 +170,10 @@ keymap.add {
|
||||||
["shift+right"] = "doc:select-to-next-char",
|
["shift+right"] = "doc:select-to-next-char",
|
||||||
["shift+up"] = "doc:select-to-previous-line",
|
["shift+up"] = "doc:select-to-previous-line",
|
||||||
["shift+down"] = "doc:select-to-next-line",
|
["shift+down"] = "doc:select-to-next-line",
|
||||||
["ctrl+shift+left"] = "doc:select-to-previous-word-boundary",
|
["ctrl+shift+left"] = "doc:select-to-previous-word-start",
|
||||||
["ctrl+shift+right"] = "doc:select-to-next-word-boundary",
|
["ctrl+shift+right"] = "doc:select-to-next-word-end",
|
||||||
["ctrl+shift+["] = "doc:select-to-previous-start-of-block",
|
["ctrl+shift+["] = "doc:select-to-previous-block-start",
|
||||||
["ctrl+shift+]"] = "doc:select-to-next-start-of-block",
|
["ctrl+shift+]"] = "doc:select-to-next-block-end",
|
||||||
["shift+home"] = "doc:select-to-start-of-line",
|
["shift+home"] = "doc:select-to-start-of-line",
|
||||||
["shift+end"] = "doc:select-to-end-of-line",
|
["shift+end"] = "doc:select-to-end-of-line",
|
||||||
["ctrl+shift+home"] = "doc:select-to-start-of-doc",
|
["ctrl+shift+home"] = "doc:select-to-start-of-doc",
|
||||||
|
|
|
@ -9,22 +9,33 @@ local DocView = require "core.docview"
|
||||||
|
|
||||||
local EmptyView = View:extend()
|
local EmptyView = View:extend()
|
||||||
|
|
||||||
function EmptyView:draw()
|
local function draw_text(x, y, color)
|
||||||
self:draw_background(style.background)
|
local th = style.big_font:get_height()
|
||||||
local pos = self.position
|
local dh = th + style.padding.y * 2
|
||||||
local x, y, w, h = pos.x, pos.y, self.size.x, self.size.y
|
x = renderer.draw_text(style.big_font, "lite", x, y + (dh - th) / 2, color)
|
||||||
local _, y = common.draw_text(style.big_font, style.dim, "empty", "center", x, y, w, h)
|
x = x + style.padding.x
|
||||||
|
renderer.draw_rect(x, y, math.ceil(1 * SCALE), dh, color)
|
||||||
local lines = {
|
local lines = {
|
||||||
{ fmt = "%s to run a command", cmd = "core:command-finder" },
|
{ fmt = "%s to run a command", cmd = "core:find-command" },
|
||||||
{ fmt = "%s to open a file from the project", cmd = "core:file-finder" },
|
{ fmt = "%s to open a file from the project", cmd = "core:find-file" },
|
||||||
}
|
}
|
||||||
local th = style.font:get_height()
|
th = style.font:get_height()
|
||||||
|
y = y + (dh - th * 2 - style.padding.y) / 2
|
||||||
|
local w = 0
|
||||||
for _, line in ipairs(lines) do
|
for _, line in ipairs(lines) do
|
||||||
local text = string.format(line.fmt, keymap.get_binding(line.cmd))
|
local text = string.format(line.fmt, keymap.get_binding(line.cmd))
|
||||||
y = y + style.padding.y
|
w = math.max(w, renderer.draw_text(style.font, text, x + style.padding.x, y, color))
|
||||||
common.draw_text(style.font, style.dim, text, "center", x, y, w, th)
|
y = y + th + style.padding.y
|
||||||
y = y + th
|
|
||||||
end
|
end
|
||||||
|
return w, dh
|
||||||
|
end
|
||||||
|
|
||||||
|
function EmptyView:draw()
|
||||||
|
self:draw_background(style.background)
|
||||||
|
local w, h = draw_text(0, 0, { 0, 0, 0, 0 })
|
||||||
|
local x = self.position.x + math.max(style.padding.x, (self.size.x - w) / 2)
|
||||||
|
local y = self.position.y + (self.size.y - h) / 2
|
||||||
|
draw_text(x, y, style.dim)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ style.background = { common.color "#fbfbfb" }
|
||||||
style.background2 = { common.color "#f2f2f2" }
|
style.background2 = { common.color "#f2f2f2" }
|
||||||
style.background3 = { common.color "#f2f2f2" }
|
style.background3 = { common.color "#f2f2f2" }
|
||||||
style.text = { common.color "#404040" }
|
style.text = { common.color "#404040" }
|
||||||
style.caret = { common.color "#181818" }
|
style.caret = { common.color "#fc1785" }
|
||||||
style.accent = { common.color "#fc1785" }
|
style.accent = { common.color "#fc1785" }
|
||||||
style.dim = { common.color "#b0b0b0" }
|
style.dim = { common.color "#b0b0b0" }
|
||||||
style.divider = { common.color "#e8e8e8" }
|
style.divider = { common.color "#e8e8e8" }
|
||||||
|
|
|
@ -20,8 +20,6 @@ static double get_scale(void) {
|
||||||
SDL_GetDisplayDPI(0, NULL, &dpi, NULL);
|
SDL_GetDisplayDPI(0, NULL, &dpi, NULL);
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
return dpi / 96.0;
|
return dpi / 96.0;
|
||||||
#elif __APPLE__
|
|
||||||
return 1.0; /* dpi / 72.0; */
|
|
||||||
#else
|
#else
|
||||||
return 1.0;
|
return 1.0;
|
||||||
#endif
|
#endif
|
||||||
|
@ -100,7 +98,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
lua_setglobal(L, "ARGS");
|
lua_setglobal(L, "ARGS");
|
||||||
|
|
||||||
lua_pushstring(L, "1.05");
|
lua_pushstring(L, "1.06");
|
||||||
lua_setglobal(L, "VERSION");
|
lua_setglobal(L, "VERSION");
|
||||||
|
|
||||||
lua_pushstring(L, SDL_GetPlatform());
|
lua_pushstring(L, SDL_GetPlatform());
|
||||||
|
|
Loading…
Reference in New Issue