模組:PJBSClass/unit
外观
local p = {}
function p.processInput(input_data, default_value)
local retult = input_data
if type((input_data or {}).args) ~= type(nil) then --input_data is a frame
retult = input_data.args['1'] or input_data.args[1] or default_value
end
return retult
end
function p.getClassByPage(input_data)
local page_name = p.processInput(input_data)
local page = (type(page_name) ~= type(nil)) and ({pcall(mw.title.new, page_name)})[2] or mw.title.getCurrentTitle()
local talk_page = (page or {}).talkPageTitle
return p.getClassByWikitext(talk_page:getContent() or "")
end
function p.processWPBSRedirect(input_data)
local text = p.processInput(input_data, '')
local norm_name = "WPBS"
local match_list = { --Template:WikiProject banner shell的重定向匹配表
"wiki%s*project%s*banner%s*shell",
"w?pj?%s*banner%s*shell",
"wiki%s*project%s*banners",
"multiple%s*wikiprojects?",
"wiki%s*project%s*shell",
"[維维]基[专專][题題][橫横]幅",
"多?[個个]?[維维]?基?[专專][题題][橫横]幅",
"[維维]基[专專][题題]",
"多?[個个]?[維维]?基?[专專][题題]",
"[专專][题題][橫横]幅",
}
local lotext = mw.ustring.lower(text)
local normtext = text
for i = 1,#match_list do
local j, k = mw.ustring.find(lotext, match_list[i])
while j ~= nil do
normtext = mw.ustring.sub(normtext, 1, j-1)..norm_name..mw.ustring.sub(normtext, k+1, -1)
lotext = mw.ustring.lower(normtext)
j, k = mw.ustring.find(lotext, match_list[i])
end
end
normtext = mw.ustring.gsub(normtext, "[Ww][Pp][Bb][Ss]", "WikiProject banner shell")
text=normtext
return text
end
function p.getTemplateSection(input_data)
local text = p.processInput(input_data, '')..'\n'
local i,j = mw.ustring.find(text, "%=+[^\n]*%=+%s*\n")
if i == nil then
i,j = mw.ustring.find(text, "%{%{%s*[Dd][Yy][Kk][Ee]ntry/archive")
end
text = mw.ustring.sub(text, 1, (i or 0)-1)
return text
end
function p.getWPBSTemplateContent(input_data)
local text = p.processInput(input_data, '')
local re_WPBS_header = "%{%{%s*[Ww]iki[Pp]roject [Bb]anner [Ss]hell"
local it = text
local old_it = text.."-"
while it ~= old_it do
if not mw.ustring.match(it, re_WPBS_header) then break end
old_it = it
it = mw.ustring.gsub(it, "%{[^%{%}]*%}", "")
end
local WPBS = mw.ustring.match(old_it, re_WPBS_header.."[^%{%}]*%}%}") or ''
return WPBS
end
function p.getClassByWikitext(input_data)
local wikitext = input_data
if type((input_data or {}).args) ~= type(nil) then --input_data is a frame
wikitext = input_data.args['1'] or input_data.args[1] or ''
end
local text=wikitext or ''
text = p.getTemplateSection(text) --取得掛模板的段落
text = p.processWPBSRedirect(text) --處理WPBS的重定向頁
local WPBS = p.getWPBSTemplateContent(text) --讀取WPBS模板內容
--匹配 | class = XX
local select_class = mw.ustring.gsub(mw.ustring.match(WPBS, "%|%s*[Cc][Ll][Aa][Ss][Ss]%s*%=%s*([^%|%}]+)") or '', '\n', '')
return select_class
end
return p