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

Module:Ns

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
Lih讨论 | 贡献2022年9月23日 (五) 09:28的版本 (搬运自萌娘百科的同名条目)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. local module = {}
  2. --判断两个名字空间名称是否相等。
  3. --规则:
  4. -- 1.下划线与空白字符相等。
  5. -- 2.首尾的空白字符忽略。
  6. -- 3.大小写不敏感。
  7. function ns_eq(ns1, ns2)
  8. ns1 = mw.ustring.gsub(ns1 or "", "[%s_]+", " ")
  9. ns1 = mw.text.trim(ns1)
  10. ns2 = mw.ustring.gsub(ns2 or "", "[%s_]+", " ")
  11. ns2 = mw.text.trim(ns2)
  12. if ns1 == ns2 then return true
  13. elseif mw.ustring.len(ns1) ~= mw.ustring.len(ns2) then return false
  14. else return mw.ustring.lower(ns1) == mw.ustring.lower(ns2)
  15. end
  16. end
  17. function ns_find(page)
  18. local ns = mw.ustring.match(page, "^[^:]*")
  19. for _, entry in ipairs(module.getmap()) do
  20. if ns_eq(ns, entry[1]) then return ns end
  21. for _, alias in ipairs(entry[2]) do
  22. if ns_eq(ns, alias) then
  23. return ns, entry
  24. end
  25. end
  26. end
  27. return nil
  28. end
  29. function module.search(frame)
  30. local args = require("Module:Arguments").getArgs(frame)
  31. local ns = ns_find(args[1] or "")
  32. return ns
  33. end
  34. function module.normalize(frame)
  35. local args = require("Module:Arguments").getArgs(frame)
  36. local _, entry = ns_find(args[1] or "")
  37. return entry[3]
  38. end
  39. function module.getmap(frame)
  40. local key = { }
  41. local map = { }
  42. for _, item in pairs(mw.site.namespaces) do
  43. table.insert(key, item.id)
  44. end
  45. table.sort(key)
  46. for _, index in ipairs(key) do
  47. local item = mw.site.namespaces[index]
  48. local aliases = item.aliases
  49. table.insert(aliases, 1, item.canonicalName)
  50. table.insert(map, { item.id, aliases, item.name })
  51. end
  52. --如果frame为nil,即从模块外部(模板)调用本函数,则创建一个能在外部使用的序列化数据。
  53. --如果frame不为nil,即从模块内部或其他模块调用本函数,则返回映射表。
  54. if frame == nil then return map
  55. else
  56. local var_array = require("Module:Var-array")
  57. var_array.new("ns.map", map)
  58. end
  59. end
  60. return module