71 lines
1.3 KiB
Lua
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
|