Module:Ns
跳到导航
跳到搜索
- 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