2012-06-25 19:13:30 -03:00
|
|
|
-- @docclass string
|
|
|
|
|
function string:split(delim)
|
2021-07-19 19:24:59 -03:00
|
|
|
local start = 1
|
|
|
|
|
local results = {}
|
|
|
|
|
while true do
|
|
|
|
|
local pos = string.find(self, delim, start, true)
|
2022-08-17 12:51:56 -03:00
|
|
|
if not pos then
|
|
|
|
|
break
|
|
|
|
|
end
|
2021-07-19 19:24:59 -03:00
|
|
|
table.insert(results, string.sub(self, start, pos - 1))
|
|
|
|
|
start = pos + string.len(delim)
|
2012-06-25 19:13:30 -03:00
|
|
|
end
|
2021-07-19 19:24:59 -03:00
|
|
|
table.insert(results, string.sub(self, start))
|
|
|
|
|
table.removevalue(results, '')
|
|
|
|
|
return results
|
2012-06-25 19:13:30 -03:00
|
|
|
end
|
|
|
|
|
|
2022-08-17 12:51:56 -03:00
|
|
|
function string:starts(start)
|
|
|
|
|
return string.sub(self, 1, #start) == start
|
|
|
|
|
end
|
2012-06-25 19:13:30 -03:00
|
|
|
|
2022-08-17 12:51:56 -03:00
|
|
|
function string:ends(test)
|
|
|
|
|
return test == '' or string.sub(self, -string.len(test)) == test
|
|
|
|
|
end
|
2012-10-04 19:35:02 -03:00
|
|
|
|
2022-08-17 12:51:56 -03:00
|
|
|
function string:trim()
|
|
|
|
|
return string.match(self, '^%s*(.*%S)') or ''
|
|
|
|
|
end
|
2012-06-25 19:13:30 -03:00
|
|
|
|
|
|
|
|
function string:explode(sep, limit)
|
2022-08-17 12:51:56 -03:00
|
|
|
if type(sep) ~= 'string' or tostring(self):len() == 0 or sep:len() == 0 then
|
|
|
|
|
return {}
|
|
|
|
|
end
|
2012-06-25 19:13:30 -03:00
|
|
|
|
2022-04-29 23:14:24 -03:00
|
|
|
local i, pos, tmp, t = 0, 1, '', {}
|
2022-08-17 12:51:56 -03:00
|
|
|
for s, e in function()
|
|
|
|
|
return string.find(self, sep, pos)
|
|
|
|
|
end do
|
2021-07-19 19:24:59 -03:00
|
|
|
tmp = self:sub(pos, s - 1):trim()
|
|
|
|
|
table.insert(t, tmp)
|
|
|
|
|
pos = e + 1
|
2012-06-25 19:13:30 -03:00
|
|
|
|
2021-07-19 19:24:59 -03:00
|
|
|
i = i + 1
|
2022-08-17 12:51:56 -03:00
|
|
|
if limit ~= nil and i == limit then
|
|
|
|
|
break
|
|
|
|
|
end
|
2012-06-25 19:13:30 -03:00
|
|
|
end
|
|
|
|
|
|
2021-07-19 19:24:59 -03:00
|
|
|
tmp = self:sub(pos):trim()
|
|
|
|
|
table.insert(t, tmp)
|
|
|
|
|
return t
|
2012-06-25 19:13:30 -03:00
|
|
|
end
|
2014-07-31 20:25:31 +02:00
|
|
|
|
|
|
|
|
function string:contains(str, checkCase, start, plain)
|
2021-07-19 19:24:59 -03:00
|
|
|
if (not checkCase) then
|
|
|
|
|
self = self:lower()
|
|
|
|
|
str = str:lower()
|
|
|
|
|
end
|
2022-04-29 23:14:24 -03:00
|
|
|
return string.find(self, str, start and start or 1, plain == nil and true or false)
|
2014-07-31 20:25:31 +02:00
|
|
|
end
|
2024-06-21 18:10:07 -03:00
|
|
|
|
|
|
|
|
function string:wrap(width)
|
|
|
|
|
local wrapped = ""
|
|
|
|
|
local lineWidth = 0
|
|
|
|
|
for word in self:gmatch("%S+") do
|
|
|
|
|
local wordWidth = #word * 10 -- Assuming each character is 10 pixels wide
|
|
|
|
|
if lineWidth + wordWidth > width then
|
|
|
|
|
wrapped = wrapped .. "\n" .. word .. " "
|
|
|
|
|
lineWidth = wordWidth + 1
|
|
|
|
|
else
|
|
|
|
|
wrapped = wrapped .. word .. " "
|
|
|
|
|
lineWidth = lineWidth + wordWidth + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return wrapped
|
2025-10-25 04:28:51 -03:00
|
|
|
end
|