From 17045d86313a9d06784dcddecf3887a4da893929 Mon Sep 17 00:00:00 2001 From: laelnasan Date: Sat, 5 Dec 2020 11:43:54 -0300 Subject: [PATCH] Supports utf8 printing and input Changes to be committed: modified: src/ltui/label.lua modified: src/ltui/textedit.lua --- src/ltui/label.lua | 16 ++++++++++++++-- src/ltui/textedit.lua | 10 +++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ltui/label.lua b/src/ltui/label.lua index 2e33f05..4e7c16a 100644 --- a/src/ltui/label.lua +++ b/src/ltui/label.lua @@ -127,8 +127,20 @@ function label:splitext(text, width) for idx = 1, #lines do local line = lines[idx] while #line > width do - table.insert(result, line:sub(1, width)) - line = line:sub(width + 1) + local size = 0 + for i = 1, #line do + if line:byte(i) < 0x80 or line:byte(i) >= 0xc0 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 table.insert(result, line) end diff --git a/src/ltui/textedit.lua b/src/ltui/textedit.lua index 0acef24..b2efbf5 100644 --- a/src/ltui/textedit.lua +++ b/src/ltui/textedit.lua @@ -77,8 +77,8 @@ function textedit:on_event(e) -- update text if e.type == event.ev_keyboard then - if e.key_code > 0x1f and e.key_code < 0x7f then - self:text_set(self:text() .. e.key_name) + if e.key_code > 0x1f and e.key_code < 0x100 then + self:text_set(self:text() .. string.char(e.key_code)) return true elseif e.key_name == "Enter" and self:option("multiline") then self:text_set(self:text() .. '\n') @@ -86,7 +86,11 @@ function textedit:on_event(e) elseif e.key_name == "Backspace" then local text = self:text() if #text > 0 then - self:text_set(text:sub(1, #text - 1)) + local ch_size = -1 + while text:byte(ch_size) > 0x7f and text:byte(ch_size) < 0xc0 do + ch_size = ch_size - 1 + end + self:text_set(text:sub(1, #text + ch_size)) end return true elseif e.key_name == "CtrlV" then