模組:FUMOCount
外觀
可在模組:FUMOCount/doc建立此模組的說明文件
local p = {}
local TARGET_PAGE = "聯合微國家組織會員國列表"
local function getContent()
return mw.title.new(TARGET_PAGE):getContent() or ""
end
local function countMatches(s)
local n = 0
for _ in s:gmatch("AutonumTable/index") do n = n + 1 end
return n
end
-- 從區段內依序擷取每個 AutonumTable/index 後的第一個 flag 名稱
local function extractFlags(section)
local flags = {}
local pos = 1
while true do
local iStart, iEnd = section:find("AutonumTable/index", pos)
if not iStart then break end
-- 從 index 之後找最近的 {{flag|...}} 或 {{Flag|...}}
local flagName = section:match("%{%{[Ff]lag%|([^}]+)%}%}", iEnd)
if flagName then
flagName = flagName:match("^%s*(.-)%s*$")
table.insert(flags, flagName)
end
pos = iEnd + 1
end
return flags
end
-- 成員國數
function p.chengyuan(frame)
local c = getContent()
local section = c:match("%{%{!!%}%} 成員國 %{%{!!%}%}(.-)%{%{!!%}%} 觀察國 %{%{!!%}%}")
if not section then return 0 end
return countMatches(section)
end
-- 觀察國數(限定至 id=fumoguanchaguo,避免計入前會員國)
function p.guancha(frame)
local c = getContent()
local section = c:match("%{%{!!%}%} 觀察國 %{%{!!%}%}(.-)id=fumoguanchaguo")
if not section then return 0 end
return countMatches(section)
end
-- 會員國總數(限定至 id=fumoguanchaguo,避免計入前會員國)
function p.total(frame)
local c = getContent()
local section = c:match("(.-)id=fumoguanchaguo")
if not section then return 0 end
return countMatches(section)
end
-- 輸出成員國列表,供導覽框使用
function p.chengyuanList(frame)
local c = getContent()
local section = c:match("%{%{!!%}%} 成員國 %{%{!!%}%}(.-)%{%{!!%}%} 觀察國 %{%{!!%}%}")
if not section then return "" end
local flags = extractFlags(section)
local lines = {}
for _, name in ipairs(flags) do
table.insert(lines, "* <span style=\"white-space:nowrap;\">{{flag|" .. name .. "}}</span>")
end
local wikitext = table.concat(lines, "\n")
return frame:preprocess(wikitext)
end
-- 輸出觀察國列表,供導覽框使用(限定至 id=fumoguanchaguo,避免輸出前會員國)
function p.guanchaList(frame)
local c = getContent()
local section = c:match("%{%{!!%}%} 觀察國 %{%{!!%}%}(.-)id=fumoguanchaguo")
if not section then return "" end
local flags = extractFlags(section)
local lines = {}
for _, name in ipairs(flags) do
table.insert(lines, "* <span style=\"white-space:nowrap;\">{{flag|" .. name .. "}}</span>")
end
local wikitext = table.concat(lines, "\n")
return frame:preprocess(wikitext)
end
return p