diff --git a/Dockerfile b/Dockerfile index cdecaff34a..aa34c28741 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,8 @@ RUN --mount=type=cache,from=luarocks,source=/opt,target=/opt make -C /opt/luaroc # Install here to install lua rocks pkgs in pararell with compilation of emmylua and luajit RUN luarocks install busted 2.2.0-1;\ luarocks install cluacov 0.1.2-1;\ - luarocks install luacov-coveralls 0.2.3-1 + luarocks install luacov-coveralls 0.2.3-1;\ + luarocks install luautf8 0.1.6-1 RUN --mount=type=cache,from=emmyluadebugger,source=/opt,target=/opt make -C /opt/EmmyLuaDebugger/build/ install RUN --mount=type=cache,from=luajit,source=/opt,target=/opt make -C /opt/LuaJIT/ install diff --git a/src/Classes/EditControl.lua b/src/Classes/EditControl.lua index 63eedfa1eb..2964057adf 100644 --- a/src/Classes/EditControl.lua +++ b/src/Classes/EditControl.lua @@ -7,6 +7,7 @@ local m_max = math.max local m_min = math.min local m_floor = math.floor local protected_replace = "*" +local utf8 = require('lua-utf8') local function lastLine(str) local lastLineIndex = 1 @@ -541,18 +542,10 @@ function EditClass:OnKeyDown(key, doubleClick) if self.caret > 1 then if ctrl then -- Skip leading space, then jump word - while self.buf:sub(self.caret-1, self.caret-1):match("[%s%p]") do - if self.caret > 1 then - self.caret = self.caret - 1 - end - end - while self.buf:sub(self.caret-1, self.caret-1):match("%w") do - if self.caret > 1 then - self.caret = self.caret - 1 - end - end + self.caret = self.caret - #utf8.match(self.buf:sub(1, self.caret-1), "[%s%p]*$") + self.caret = self.caret - #utf8.match(self.buf:sub(1, self.caret-1), "%w*$") else - self.caret = self.caret - 1 + self.caret = utf8.next(self.buf, self.caret, -1) or 0 end self.lastUndoState.caret = self.caret self:ScrollCaretIntoView() @@ -562,19 +555,11 @@ function EditClass:OnKeyDown(key, doubleClick) self.sel = shift and (self.sel or self.caret) or nil if self.caret <= #self.buf then if ctrl then - -- Jump word, then skip trailing space, - while self.buf:sub(self.caret, self.caret):match("%w") do - if self.caret <= #self.buf then - self.caret = self.caret + 1 - end - end - while self.buf:sub(self.caret, self.caret):match("[%s%p]") do - if self.caret <= #self.buf then - self.caret = self.caret + 1 - end - end + -- Jump word, then skip trailing space, + self.caret = self.caret + #utf8.match(self.buf:sub(self.caret), "^%w*") + self.caret = self.caret + #utf8.match(self.buf:sub(self.caret), "^[%s%p]*") else - self.caret = self.caret + 1 + self.caret = utf8.next(self.buf, self.caret, 1) or #self.buf + 1 end self.lastUndoState.caret = self.caret self:ScrollCaretIntoView() diff --git a/src/Modules/Common.lua b/src/Modules/Common.lua index 679b3d8ce1..3132480edd 100644 --- a/src/Modules/Common.lua +++ b/src/Modules/Common.lua @@ -26,6 +26,7 @@ common.curl = require("lcurl.safe") common.xml = require("xml") common.base64 = require("base64") common.sha1 = require("sha1") +local utf8 = require('lua-utf8') -- Try to load a library return nil if failed. https://stackoverflow.com/questions/34965863/lua-require-fallback-error-handling function prerequire(...) @@ -657,20 +658,21 @@ function formatNumSep(str) end local x, y, minus, integer, fraction = str:find("(-?)(%d+)(%.?%d*)") if main.showThousandsSeparators then - integer = integer:reverse():gsub("(%d%d%d)", "%1"..main.thousandsSeparator):reverse() + rev1kSep = utf8.reverse(main.thousandsSeparator) + integer = utf8.reverse(utf8.gsub(utf8.reverse(integer), "(%d%d%d)", "%1"..rev1kSep)) -- There will be leading separators if the number of digits are divisible by 3 -- This checks for their presence and removes them -- Don't use patterns here because thousandsSeparator can be a pattern control character, and will crash if used if main.thousandsSeparator ~= "" then - local thousandsSeparator = string.find(integer, main.thousandsSeparator, 1, 2) + local thousandsSeparator = utf8.find(integer, rev1kSep, 1, 2) if thousandsSeparator and thousandsSeparator == 1 then - integer = integer:sub(2) + integer = utf8.sub(integer, 2) end end else - integer = integer:reverse():gsub("(%d%d%d)", "%1"):reverse() + integer = utf8.reverse(utf8.gsub(utf8.reverse(integer), "(%d%d%d)", "%1")) end - return colour..minus..integer..fraction:gsub("%.", main.decimalSeparator) + return colour..minus..integer..utf8.gsub(fraction, "%.", main.decimalSeparator) end) end diff --git a/src/TreeData/PSPointsFrame.png b/src/TreeData/PSPointsFrame.png index 421555822f..c190f8e279 100644 Binary files a/src/TreeData/PSPointsFrame.png and b/src/TreeData/PSPointsFrame.png differ diff --git a/src/TreeData/PSStartNodeBackgroundInactive.png b/src/TreeData/PSStartNodeBackgroundInactive.png index f36bc9f38d..6daf004d39 100644 Binary files a/src/TreeData/PSStartNodeBackgroundInactive.png and b/src/TreeData/PSStartNodeBackgroundInactive.png differ diff --git a/src/UpdateCheck.lua b/src/UpdateCheck.lua index 636473305f..000232ab25 100644 --- a/src/UpdateCheck.lua +++ b/src/UpdateCheck.lua @@ -78,8 +78,8 @@ end ConPrintf("Checking for update...") -local scriptPath = GetScriptPath() -local runtimePath = GetRuntimePath() +local scriptPath = "." +local runtimePath = "." -- Load and process local manifest local localVer