置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Ns

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local module = {}

--判断两个名字空间名称是否相等。
--规则:
--  1.下划线与空白字符相等。
--  2.首尾的空白字符忽略。
--  3.大小写不敏感。
function ns_eq(ns1, ns2)
    ns1 = mw.ustring.gsub(ns1 or "", "[%s_]+", " ")
    ns1 = mw.text.trim(ns1)
    ns2 = mw.ustring.gsub(ns2 or "", "[%s_]+", " ")
    ns2 = mw.text.trim(ns2)
    
    if ns1 == ns2 then return true
    elseif mw.ustring.len(ns1) ~= mw.ustring.len(ns2) then return false
    else return mw.ustring.lower(ns1) == mw.ustring.lower(ns2)
    end
end

function ns_find(page)
    local ns = mw.ustring.match(page, "^[^:]*")
    for _, entry in ipairs(module.getmap()) do
        if ns_eq(ns, entry[1]) then return ns end
        for _, alias in ipairs(entry[2]) do
            if ns_eq(ns, alias) then
                return ns, entry
            end
        end
    end
    return nil
end

function module.search(frame)
    local args = require("Module:Arguments").getArgs(frame)
    local ns = ns_find(args[1] or "")
    return ns
end

function module.normalize(frame)
    local args = require("Module:Arguments").getArgs(frame)
    local _, entry = ns_find(args[1] or "")
    return entry[3]
end

function module.getmap(frame)
    local key = { }
    local map = { }
    for _, item in pairs(mw.site.namespaces) do
        table.insert(key, item.id)
    end
    table.sort(key)
    for _, index in ipairs(key) do
        local item = mw.site.namespaces[index]
        local aliases = item.aliases
        table.insert(aliases, 1, item.canonicalName)
        table.insert(map, { item.id, aliases, item.name })
    end
    
    --如果frame为nil,即从模块外部(模板)调用本函数,则创建一个能在外部使用的序列化数据。
    --如果frame不为nil,即从模块内部或其他模块调用本函数,则返回映射表。
    if frame == nil then return map
    else
        local var_array = require("Module:Var-array")
        var_array.new("ns.map", map)
    end
end

return module