34 lines
761 B
Lua
34 lines
761 B
Lua
local function chsize(char)
|
|
if not char then
|
|
return 0
|
|
elseif char > 240 then
|
|
return 4
|
|
elseif char > 225 then
|
|
return 3
|
|
elseif char > 192 then
|
|
return 2
|
|
else
|
|
return 1
|
|
end
|
|
end
|
|
|
|
function utf8sub(str, startChar, numChars)
|
|
local startIndex = 1
|
|
while startChar > 1 do
|
|
local char = string.byte(str, startIndex)
|
|
startIndex = startIndex + chsize(char)
|
|
startChar = startChar - 1
|
|
end
|
|
|
|
local currentIndex = startIndex
|
|
|
|
while numChars > 0 and currentIndex <= #str do
|
|
local char = string.byte(str, currentIndex)
|
|
currentIndex = currentIndex + chsize(char)
|
|
numChars = numChars -1
|
|
end
|
|
return str:sub(startIndex, currentIndex - 1)
|
|
end
|
|
|
|
|