utilities: Difference between revisions
From SUALEX
Created page with "-- Module:utilities local utilities = {} function utilities.split_string(str, delimiter) local result = {} delimiter = delimiter or "" if delimiter == "" then for c in str:gmatch(".") do table.insert(result, c) end return result end for part in (str .. delimiter):gmatch("(.-)" .. delimiter) do table.insert(result, part) end return result end function utilities.join_strings(parts, delimiter) return table.concat(pa..." |
No edit summary |
||
| Line 2: | Line 2: | ||
local utilities = {} | local utilities = {} | ||
local ESC_PLACEHOLDER = "__ESCAPED_COLON__" | |||
function utilities.escape_colons_for_split(s) | |||
if not s then return s end | |||
return (s:gsub("\\:", ESC_PLACEHOLDER)) | |||
end | |||
function utilities.unescape_colons_after_split(s) | |||
if not s then return s end | |||
return (s:gsub(ESC_PLACEHOLDER, ":")) | |||
end | |||
function utilities.split_string(str, delimiter) | function utilities.split_string(str, delimiter) | ||
local result = {} | local result = {} | ||
if not str then return result end | |||
delimiter = delimiter or "" | delimiter = delimiter or "" | ||
if delimiter == ":" then | |||
local tmp = utilities.escape_colons_for_split(str) | |||
for part in (tmp .. delimiter):gmatch("(.-)" .. delimiter) do | |||
table.insert(result, utilities.unescape_colons_after_split(part)) | |||
end | |||
return result | |||
end | |||
if delimiter == "" then | if delimiter == "" then | ||
for c in str:gmatch(".") do table.insert(result, c) end | for c in str:gmatch(".") do table.insert(result, c) end | ||
return result | return result | ||
end | end | ||
for part in (str .. delimiter):gmatch("(.-)" .. delimiter) do | for part in (str .. delimiter):gmatch("(.-)" .. delimiter) do | ||
table.insert(result, part) | table.insert(result, part) | ||
Latest revision as of 07:25, 29 January 2026
Documentation for this module may be created at Module:utilities/doc
-- Module:utilities
local utilities = {}
local ESC_PLACEHOLDER = "__ESCAPED_COLON__"
function utilities.escape_colons_for_split(s)
if not s then return s end
return (s:gsub("\\:", ESC_PLACEHOLDER))
end
function utilities.unescape_colons_after_split(s)
if not s then return s end
return (s:gsub(ESC_PLACEHOLDER, ":"))
end
function utilities.split_string(str, delimiter)
local result = {}
if not str then return result end
delimiter = delimiter or ""
if delimiter == ":" then
local tmp = utilities.escape_colons_for_split(str)
for part in (tmp .. delimiter):gmatch("(.-)" .. delimiter) do
table.insert(result, utilities.unescape_colons_after_split(part))
end
return result
end
if delimiter == "" then
for c in str:gmatch(".") do table.insert(result, c) end
return result
end
for part in (str .. delimiter):gmatch("(.-)" .. delimiter) do
table.insert(result, part)
end
return result
end
function utilities.join_strings(parts, delimiter)
return table.concat(parts, delimiter)
end
function utilities.table_contains(tbl, value)
for _, v in ipairs(tbl) do
if v == value then return true end
end
return false
end
function utilities.deep_copy(tbl)
local copy = {}
for k, v in pairs(tbl) do
if type(v) == "table" then
copy[k] = utilities.deep_copy(v)
else
copy[k] = v
end
end
return copy
end
function utilities.trim_string(str)
if not str then return str end
return str:match("^%s*(.-)%s*$")
end
function utilities.table_keys_count(tbl)
local count = 0
for _ in pairs(tbl) do count = count + 1 end
return count
end
return utilities