Module:Utils
--[=[
Module:utils v0.3.1
Date: 2015-08-14
This module contains some common useful functions.
Fill free to add another universal functions here.
]=]--
local export = {}
-- Function to clone table (sometimes it works better then mw.clone)
function export.clone(original)
local copy = {}
for key, value in pairs(original) do
copy[key] = value
end
return copy
end
-- Function to get current PAGENAME and related
function export.get_base()
local PAGENAME = mw.title.getCurrentTitle().text
local SUBPAGENAME = mw.title.getCurrentTitle().subpageText
local NAMESPACE = mw.title.getCurrentTitle().nsText
if NAMESPACE == 'User' or NAMESPACE == 'Участник' then
return SUBPAGENAME
end
return PAGENAME
end
-- Function to iterate table with sorted keys (sorting function can be different)
function export.spairs(t, order)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- sort
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
-- Functions to measure working time of scripts (start)
function export.start()
export.started = os.clock()
end
-- Functions to measure working time of scripts (stop)
function export.stop(desc)
export.stoped = os.clock()
export.delta = export.stoped - export.started
if desc == nil then
desc = 'time delta'
end
mw.log('™ ' .. desc .. ' = ' .. export.delta)
end
-- Function to find common part (length) of two strings
-- (common part from the beginning of strings)
function export.find_common(str_1, str_2)
if not str_1 or not str_2 then
return 1
end
for pos = 1, #str_1 do
local char_1 = str_1:sub(pos, pos)
local char_2 = str_2:sub(pos, pos)
if char_1 ~= char_2 then
return pos
end
end
return 1
end
-- Function that allows easily add values into dict of dicts of lists
-- Example of this structure:
-- dict = {
-- key1 = {
-- sub_key1 = {value1, value2, value3},
-- sub_key2 = {value4, value5},
-- },
-- key2 = {
-- sub_key3 = {value6},
-- sub_key4 = {value7, value8},
-- },
-- }
function export.put_value(dict, key, sub_key, value)
if not dict[key] then
dict[key] = {}
end
if not dict[key][sub_key] then
dict[key][sub_key] = {}
end
table.insert(dict[key][sub_key], value)
end
-- Compare two items, recursively comparing lists.
-- FIXME, doesn't work for tables that aren't lists.
function export.equals(x, y)
if type(x) == "table" and type(y) == "table" then
if #x ~= #y then
return false
end
for key, value in ipairs(x) do
if not export.equals(value, y[key]) then
return false
end
end
return true
end
return x == y
end
-- true if list contains item
function export.contains(tab, item)
for _, value in pairs(tab) do
if export.equals(value, item) then
return true
end
end
return false
end
-- append to list if element not already present
function export.insert_if_not(tab, item, pos)
if not export.contains(tab, item) then
if pos then
table.insert(tab, pos, item)
else
table.insert(tab, item)
end
end
end
-- convert list to set
function export.list_to_set(list)
local set = {}
for _, item in ipairs(list) do
set[item] = true
end
return set
end
-- Inhibit Regular Expression magic characters ^$()%.[]*+-?)
function export.escape(value)
-- Prefix every non-alphanumeric character (%W) with a % escape character,
-- where %% is the % escape, and %1 is original character
return mw.ustring.gsub(value, "(%W)","%%%1")
end
return export
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.