模块:Namespace detect
来自SAPedia
更多操作
模块文档
| 本模块部分或全部内容最初来源于萌娘百科,依CC BY-NC-SA 3.0 CN引入,原贡献者可参见此处。经双方编辑者修改后,这些内容可能已有很大不同。 |
用于实现{{Namespace detect}},参数与用法参见模板文档。
local p = {}
local lower = mw.ustring.lower
local trim = mw.text.trim
local getArgs = require('Module:Arguments').getArgs
local namespaceKeysCache = {}
-- 主命名空间的别名集合
local MAIN_NAMESPACE_ALIASES = {
"main",
"条目", -- 简体
"條目", -- 繁体
"主"
}
local function addUniqueKey(keys, seen, value)
if not value or value == '' then
return
end
value = lower(value)
if seen[value] then
return
end
seen[value] = true
table.insert(keys, value)
end
-- 规范化参数名:小写 + 下划线转空格 + trim
local function normaliseKey(s)
if not s then return nil end
s = tostring(s)
s = lower(s)
s = s:gsub('_', ' ')
s = trim(s)
return s
end
-- 规范化整个参数表
local function normaliseArgs(args)
local out = {}
for k, v in pairs(args) do
if type(k) == 'number' then
out[k] = v
else
out[normaliseKey(k)] = v
end
end
return out
end
-- 获取 namespace 可匹配 key 列表(含 alias)
local function getNamespaceKeys(nsid)
if namespaceKeysCache[nsid] then
return namespaceKeysCache[nsid]
end
local ns = mw.site.namespaces[nsid]
local keys = {}
local seen = {}
if ns then
addUniqueKey(keys, seen, ns.name)
if ns.canonicalName then
addUniqueKey(keys, seen, ns.canonicalName)
end
for _, alias in ipairs(ns.aliases or {}) do
addUniqueKey(keys, seen, alias)
end
end
-- 主命名空间
if nsid == 0 then
for _, alias in ipairs(MAIN_NAMESPACE_ALIASES) do
addUniqueKey(keys, seen, alias)
end
end
namespaceKeysCache[nsid] = keys
return keys
end
function p.main(frame)
local rawArgs = getArgs(frame, {
removeBlanks = false
})
local args = normaliseArgs(rawArgs)
local nsid = mw.title.getCurrentTitle().namespace
local keys = getNamespaceKeys(nsid)
-- 按 namespace alias 顺序匹配参数
for _, key in ipairs(keys) do
if args[key] ~= nil then
return args[key]
end
end
-- fallback
return args.other or ''
end
return p