50 lines
978 B
Lua
50 lines
978 B
Lua
-- basic.lua
|
|
|
|
local basic = {}
|
|
package.loaded[...] = basic
|
|
|
|
function basic.index(table, item)
|
|
for k, v in pairs(table) do
|
|
if v == item then return k end
|
|
end
|
|
end
|
|
|
|
function basic.map(table, func)
|
|
local t = {}
|
|
for k, v in pairs(table) do
|
|
t[k] = func(v)
|
|
end
|
|
return t
|
|
end
|
|
|
|
function basic.matchstr(str, pat)
|
|
local t = {}
|
|
for i in str:gmatch(pat) do
|
|
t[#t + 1] = i
|
|
end
|
|
return t
|
|
end
|
|
|
|
function basic.utf8chars(str, ...)
|
|
local chars = {}
|
|
for pos, code in utf8.codes(str) do
|
|
chars[#chars + 1] = utf8.char(code)
|
|
end
|
|
return chars
|
|
end
|
|
|
|
function basic.utf8sub(str, first, ...)
|
|
local last = ...
|
|
if last == nil or last > utf8.len(str) then
|
|
last = utf8.len(str)
|
|
elseif last < 0 then
|
|
last = utf8.len(str) + 1 + last
|
|
end
|
|
local fstoff = utf8.offset(str, first)
|
|
local lstoff = utf8.offset(str, last + 1)
|
|
if fstoff == nil then fstoff = 1 end
|
|
if lstoff ~= nil then lstoff = lstoff - 1 end
|
|
return string.sub(str, fstoff, lstoff)
|
|
end
|
|
|