模組:WHS criteria
(重定向自Module:UNESCO WHS type)
本模块用于格式化世界遗产登录标准,由{{Infobox UNESCO World Heritage Site}}自动调用。
用法
{{#invoke:WHS criteria|format|<标准>}}
如:{{#invoke:WHS criteria|format|(i)(ii)}}
→ 文化:(i)(ii)
本模块能自动去除多余文字,并将标准排序,如:
{{#invoke:WHS criteria|format|世界遗产(vii)、(x)}}
→ 自然:(vii)(x){{#invoke:WHS criteria|format|(x),(ii)(vii)}}
→ 文化:(ii),自然:(vii)(x)
本模块支持多种输入格式,如:
{{#invoke:WHS criteria|format|文化:ii,自然:vii}}
→ 文化:(ii),自然:(vii){{#invoke:WHS criteria|format|I、IV}}
→ 文化:(i)(iv)
追踪分类
参见
local p = {}
local cultural_criteria = {"(i)", "(ii)", "(iii)", "(iv)", "(v)", "(vi)"}
local natural_criteria = {"(vii)", "(viii)", "(ix)", "(x)"}
-- 处理文本
local function processText(text)
local arabic_to_roman = {
["(1)"] = "(i)", ["(2)"] = "(ii)", ["(3)"] = "(iii)",
["(4)"] = "(iv)", ["(5)"] = "(v)", ["(6)"] = "(vi)",
["(7)"] = "(vii)", ["(8)"] = "(viii)", ["(9)"] = "(ix)",
["(10)"] = "(x)"
}
text = text:gsub(":", "("):gsub(":", "(")
:gsub("、", ")(")
:gsub(",", ")(")
:gsub(",", ")(")
:gsub("/", ")(")
:gsub("%s+", ")(")
:gsub("\n", ")(")
:gsub("(", "("):gsub(")", ")")
-- 罗马数字大写转小写
:gsub("I", "i")
:gsub("V", "v")
:gsub("X", "x")
-- 阿拉伯数字转罗马数字
text = text:gsub("%(%d+%)", arabic_to_roman)
text = "(" .. text .. ")"
return text
end
-- 匹配标准
local function checkCriteria(text, criteria)
local found = {}
for _, criterion in ipairs(criteria) do
if text:find(criterion, 1, true) then
table.insert(found, criterion)
end
end
return found
end
-- 主函数
function p.format(frame)
local input = frame.args[1] or ""
input = processText(input)
-- 检查是否是文化、自然遗产
local cultural_found = checkCriteria(input, cultural_criteria)
local natural_found = checkCriteria(input, natural_criteria)
local result = ""
if #cultural_found > 0 and #natural_found > 0 then
result = "[[文化遗产|文化]]:" .. table.concat(cultural_found) .. ",[[自然遗产|自然]]:" .. table.concat(natural_found)
elseif #cultural_found > 0 then
result = "[[文化遗产|文化]]:" .. table.concat(cultural_found)
elseif #natural_found > 0 then
result = "[[自然遗产|自然]]:" .. table.concat(natural_found)
else
if mw.title.getCurrentTitle().namespace == 0 then
result = "[[Category:世界遗产登录标准无法识别]]"
end
end
return result
end
return p