tal/mod/core/string.lua
2025-02-06 02:30:52 +02:00

71 lines
1.3 KiB
Lua

--- @diagnostic disable: duplicate-set-field
return function (glob)
--- @param self string
function glob.string:split(sep)
sep = sep or "";
local lines = array {};
local pos = 1;
if sep == "" then
for i = 1, #self do
lines:push(self:sub(1, 1));
end
else
while true do
local b, e = self:find(sep, pos);
if not b then
table.insert(lines, self:sub(pos));
break;
else
table.insert(lines, self:sub(pos, b - 1));
pos = e + 1;
end
end
end
return lines;
end
--- @param self string
function glob.string:at(i)
return self:sub(i, i);
end
--- @param self string
function glob.string:replace_first(old, new)
local b, e = self:find(old, 1, true);
if b == nil then
return self;
else
return self:sub(1, b - 1) .. new .. self:sub(e + 1);
end
end
--- @param self string
function glob.string:quote()
return ("%q"):format(self);
end
--- @param self string
function glob.string:quotesh()
return "'" .. self
:gsub("*", "\\*")
:gsub("?", "\\?")
:gsub("~", "\\~")
:gsub("$", "\\$")
:gsub("&", "\\&")
:gsub("|", "\\|")
:gsub(";", "\\;")
:gsub("<", "\\<")
:gsub(">", "\\>")
:gsub("(", "\\)")
:gsub("[", "\\]")
:gsub("{", "\\}")
:gsub("%\\", "\\\\")
:gsub("\'", "\\\'")
:gsub("\"", "\\\"")
:gsub("`", "\\`") .. "'";
end
end