Merge pull request #27 from laelnasan/utf8-printing-support

Utf8 printing support
This commit is contained in:
ruki
2020-12-06 21:44:50 +08:00
committed by GitHub
2 changed files with 24 additions and 7 deletions

View File

@@ -127,8 +127,20 @@ function label:splitext(text, width)
for idx = 1, #lines do for idx = 1, #lines do
local line = lines[idx] local line = lines[idx]
while #line > width do while #line > width do
table.insert(result, line:sub(1, width)) local size = 0
line = line:sub(width + 1) for i = 1, #line do
if (line:byte(i) & 0xc0) ~= 0x80 then
size = size + 1
if size > width then
table.insert(result, line:sub(1, i - 1))
line = line:sub(i)
break
end
end
end
if size <= width then
break
end
end end
table.insert(result, line) table.insert(result, line)
end end

View File

@@ -77,16 +77,18 @@ function textedit:on_event(e)
-- update text -- update text
if e.type == event.ev_keyboard then if e.type == event.ev_keyboard then
if e.key_code > 0x1f and e.key_code < 0x7f then if e.key_name == "Enter" and self:option("multiline") then
self:text_set(self:text() .. e.key_name)
return true
elseif e.key_name == "Enter" and self:option("multiline") then
self:text_set(self:text() .. '\n') self:text_set(self:text() .. '\n')
return true return true
elseif e.key_name == "Backspace" then elseif e.key_name == "Backspace" then
local text = self:text() local text = self:text()
if #text > 0 then if #text > 0 then
self:text_set(text:sub(1, #text - 1)) local size = 1
-- while continuation byte
while (text:byte(#text - size + 1) & 0xc0) == 0x80 do
size = size + 1
end
self:text_set(text:sub(1, #text - size))
end end
return true return true
elseif e.key_name == "CtrlV" then elseif e.key_name == "CtrlV" then
@@ -95,6 +97,9 @@ function textedit:on_event(e)
self:text_set(self:text() .. pastetext) self:text_set(self:text() .. pastetext)
end end
return true return true
elseif e.key_code > 0x1f and e.key_code < 0xf8 then
self:text_set(self:text() .. string.char(e.key_code))
return true
end end
end end