全站通知:
模块:Utils
刷
历
编
跳到导航
跳到搜索
local arguments = require("Module:Arguments")
---@diagnostic disable-next-line: undefined-global
local mw = mw
local p = {}
function p.getArg(input, index)
if not index then index = 1 end
if type(input) == "string" then return input end
local result = input[index] or (input.args and input.args[index]) or
input:getParent().args[index] or ""
return result
end
-- Normalizes various invocation styles (frame, table, single value) into an args table.
function p.resolveArgs(input, options)
if type(input) == "table" then
if type(input.getParent) == "function" then
return arguments.getArgs(input, options)
end
if type(input.args) == "table" then return input.args end
return input
end
return {input}
end
function p.hasChinese(str)
return type(str) == 'string' and
string.match(str, "[\228-\233][\128-\191][\128-\191]") ~= nil
end
function p.LazyLoad(moduleName, toLowerCase)
toLowerCase = toLowerCase or false
local loaded = nil
local function doLoad()
if loaded == nil then
loaded = mw.loadData(moduleName)
if toLowerCase then
local lowerCaseLoaded = {}
for key, value in pairs(loaded) do
lowerCaseLoaded[string.lower(key)] = value
end
loaded = lowerCaseLoaded
end
end
return loaded
end
local meta = {}
meta.__index = function(_table, key) return doLoad()[key] end
meta.__pairs = function(_table) return pairs(doLoad()) end
meta.__ipairs = function(_table) return ipairs(doLoad()) end
local ret = {}
setmetatable(ret, meta)
return ret
end
function p.ExpandTemplate(title, args)
return mw.getCurrentFrame():expandTemplate{title = title, args = args}
end
function p.fileExists(filename)
local url = mw.getCurrentFrame():callParserFunction('filepath', filename)
return url ~= ''
end
function p.normalizeKey(text)
if not text then return nil end
return text:lower():gsub("_", " ")
end
function p.deepCopy(original)
local copy = {}
for key, value in pairs(original) do
if type(value) == "table" then
copy[key] = p.deepCopy(value)
else
copy[key] = value
end
end
return copy
end
function p.tableContains(tbl, element)
if type(tbl) ~= "table" then return false end
for _, value in ipairs(tbl) do if value == element then return true end end
return false
end
function p.uniqueValues(sequence)
if type(sequence) ~= "table" then return {} end
local ordered, seen = {}, {}
for _, value in ipairs(sequence) do
if not seen[value] then
seen[value] = true
table.insert(ordered, value)
end
end
return ordered
end
function p.tablesEqual(t1, t2)
if t1 == t2 then return true end
if type(t1) ~= "table" or type(t2) ~= "table" then return false end
for _, value in pairs(t1) do
if not p.tableContains(t2, value) then return false end
end
for _, value in pairs(t2) do
if not p.tableContains(t1, value) then return false end
end
return true
end
function p.tablesOverlap(t1, t2)
if t1 == t2 then return true end
if type(t1) ~= "table" or type(t2) ~= "table" then return false end
for _, value in pairs(t1) do
if p.tableContains(t2, value) then return true end
end
for _, value in pairs(t2) do
if p.tableContains(t1, value) then return true end
end
return false
end
function p.stringContains(text, substring)
if type(text) ~= "string" or type(substring) ~= "string" then
return false
end
return string.find(text, substring, 1, true) ~= nil
end
p.lazyload = p.LazyLoad
p.lazyLoad = p.LazyLoad
p.expandTemplate = p.ExpandTemplate
return p

沪公网安备 31011002002714 号