Actions

Module

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