Module:Test/lib/util
< Module:Test
Jump to navigation
Jump to search
Revision as of 17:01, 13 April 2021 by Dr. Strangelove (talk | contribs) (Created page with "local util = { _DESCRIPTION = 'an assortment of useful things', } --ref: https://gist.github.com/ripter/4270799 function util.tprint(tbl, indent) if not indent then inden...")
This page has been marked as needing documentation of its function and purpose. You can help RimWorld Wiki by creating it here |
local util = { _DESCRIPTION = 'an assortment of useful things', } --ref: https://gist.github.com/ripter/4270799 function util.tprint(tbl, indent) if not indent then indent = 0 end if type(tbl) ~= "table" then print(tbl) return 0 end for k, v in pairs(tbl) do formatting = string.rep(" ", indent) .. k .. ": " if type(v) == "table" then print(formatting) util.tprint(v, indent+1) elseif type(v) == 'boolean' then print(formatting .. tostring(v)) else print(formatting .. v) end end end --ref: http://lua-users.org/wiki/CopyTable function util.shallowcopy(original_table) local orig_type = type(original_table) local copy if orig_type == 'table' then copy = {} for orig_key, orig_value in pairs(original_table) do copy[orig_key] = orig_value end else -- number, string, boolean, etc copy = original_table end return copy end --ref: https://gist.github.com/balaam/3122129 function util.reverse_numeric_table(tbl) local reversed_table = {} local length = #tbl for i,v in ipairs(tbl) do reversed_table[length + 1 - i] = v end return reversed_table end ---procedure function util.hl(title, width) width = width or 80 if type(title) == "string" then title = " " .. title .. " " local before = math.floor((width - #title) / 2) local after = width - before - #title print(string.rep("-", before) .. title .. string.rep("-", after)) else print(string.rep("-", width)) end end function util.count(tbl, key_type) local length = 0; for k,v in pairs(tbl) do if key_type then if type(k) == key_type then length = length + 1 end else length = length + 1 end end return length end -- "delimiter" must be a single character or the removal of the final one won't work function util.table_to_csv_string(simple_table, delimiter) local f_name = "string_csv" delimiter = tostring(delimiter) or "," assert(#delimiter == 1, string.format("bad argument #2 to '%s' (single character expected)", f_name)) local list = "" for k,v in pairs(simple_table) do list = tostring(list) .. v .. delimiter end list = string.sub(list, 1, -2) return list end ---procedure -- this could be implemented with metatable events -- ignore_keys: {"foo", "bar", ... } function util.overwrite_first_table_with_second(first_table, second_table, ignore_keys) ignore_keys = ignore_keys or {} for k,v in pairs(second_table) do local ignore = false for _, ignored_key in ipairs(ignore_keys) do if k == ignored_key then ignore = true end end if not ignore then if type(v) == "table" then if type(first_table[k]) == "table" then util.overwrite_first_table_with_second(first_table[k], v) else first_table[k] = {} util.overwrite_first_table_with_second(first_table[k], v) end else first_table[k] = v end end end end return util