-- each title consists of 3 parts -- * prefix -- * county name -- * suffix -- e.g. "Foo in County Mayo" -- * prefix = "Foo in " -- * county name = "County Mayo" -- * suffix = "" -- e.g. "County Sligo-related lists" -- * prefix = "" -- * county name = "County Sligo" -- * suffix = "-related lists"
local debugging = falselocal debugmsg = " "local getArgs = require('Module:Arguments').getArgslocal yesno = require('Module:Yesno')local p =
local TwentySixCounties =
local SixCounties =
local New_counties =
local Traditional32Counties =
local GAACounties =
function makeTable local i, myCounty local myTable = '
' .. 'Northern Ireland | \n' for i, myCounty in ipairs(SixCounties) do myCatName = makeCatName("County " .. myCounty, title_prefix, title_suffix, title_nocountyword) myTable = myTable .. "* " .. makeCatLink(myCatName, myCounty) .. "\n" end myTable = myTable .. " |
function makeCatLink(catname, disp) local displaytext if (disp ~= "") and (disp ~= nil) then -- use 'disp' parameter, but strip any trailing disambiguator displaytext = mw.ustring.gsub(disp, "%s+%(.+$", ""); else displaytext = catname end local link = "" .. displaytext .. "" local fmtlink local linktitle = mw.title.new(catname, "Category") if (linktitle.exists) then fmtlink = link else fmtlink = "
" .. displaytext .. "" endreturn fmtlinkend
function makeCatName(countyname, prefix, suffix, nocounty) local this_cat_name = ; this_cat_name = this_cat_name .. prefix this_cat_name = this_cat_name .. countyname this_cat_name = this_cat_name .. suffix return this_cat_nameend
-- Does the pagename include a bare county name? (i.e. without the prefix "County ")-- This would be one line in regex, but Lua pattern matching is cruder, so-- we need several passes to ensure that any match is of a complete wordfunction findBareCountyNameInPagename(pn, countylist, description) local i, testCounty debugLog(2, "trying bare_county name [" .. pn .."] in county set: " .. description) for i, testCounty in ipairs(countylist) do debugLog(3, "testing new_county: [" .. testCounty .. "]") local testCountyEncoded = mw.ustring.gsub(testCounty, "([%W])", "%%%1") -- for efficiency, the first test is a simple match as a a screening test -- if the bare county name is nowhere in the pagename, then no need for if (mw.ustring.match(pn, testCountyEncoded)) then debugLog(4, "simple match success") debugLog(4, "match at start, followed by separator? ") if mw.ustring.match(pn, "^" .. testCountyEncoded .. "[^%w]") then debugLog(nil, "Yes") return testCounty else debugLog(nil, "No") end debugLog(4, "match at end, preceded by separator? ") if mw.ustring.match(pn, "[^%w]" .. testCountyEncoded .. "$") then debugLog(nil, "Yes") return testCounty else debugLog(nil, "No") end debugLog(4, "match anywhere, preceded and followed by separator? ") if mw.ustring.match(pn, "[^%w]" .. testCountyEncoded .. "[^%w]") then debugLog(nil, "Yes") return testCounty else debugLog(nil, "No") end else debugLog(4, "simple match fail") end end return nilend
-- check whether a given county name is in a particular setfunction isCountyInSet(s, countySet) local thisCounty = mw.ustring.gsub(s, "^County +", "") local aValidCounty for i, aValidCounty in ipairs(countySet) do if mw.ustring.match(thisCounty, "^" .. aValidCounty .. "$") then return true end end return falseend
function parsePagename(pn) debugLog(1, "parsePagename: [" .. pn .. "]") debugLog(2, "simple parse") match_prefix, match_county, match_suffix = mw.ustring.match(pn, "^(.*)(County%s+%a+)(.*)$") if not(match_county
) then debugLog(3, "County Foo = [" .. match_county .. "]") -- we have a "County Foo" ... but is it one of the 32 counties? debugLog(3, "is [" .. match_county .. "] one of the 32 counties?") if isCountyInSet(match_county, Traditional32Counties) then debugLog(nil, "Yes") else debugLog(nil, "No") return false end else -- simple debugLog(3, "No match_'County Foo'") local new_county = findBareCountyNameInPagename(pn, New_counties, "New_counties") if new_county
function publishDebugLog if not debugging then return "" end return "
\n\n" .. debugmsg .. "\n
\n"end
-- debugLog builds a log which can be output if debuging is enabled-- each log entry is given a level, so that the output is not simply a flat list-- a debug msg may be appended to the previous msg by setting the level to nilfunction debugLog(level, msg)
if (debugmsg
if (level ~= nil) then -- not appending, so make a new line debugmsg = debugmsg .. "\n" -- then add the level if (level
2) then debugmsg = debugmsg .. "#* " elseif (level
4) then debugmsg = debugmsg .. "#*#* " end end debugmsg = debugmsg .. " " .. msg return trueend
function argValueFunc(value) if (value
function p.main(frame)-- getArgs-- In all cases, convert to blank (i.e. )-- * a nil value-- * a value consisting only of whitespace
if (frame.args['debug'] ~= nil) then if yesno(frame.args['debug'], false) then debugLog(1, "debug=Yes") debugging = true end end
local myArgs = local x debugLog(1, "frame.args") for x = 1, 9 do -- debugLog(2, "frame.args[" .. tostring(x) .. "] = [" .. frame.args[x] .. "]") end debugLog(1, "myArgs") for x = 1, 9 do myArgs[x] = argValueFunc(frame.args[x]) debugLog(2, "myArgs[" .. tostring(x) .. "] = [" .. myArgs[x] .. "]") end
-- now set the key variables title_prefix = myArgs[1] title_suffix = myArgs[2] title_nocountyword = false
debugLog(1, "set main variables") debugLog(2, "title_prefix = [" .. title_prefix .. "]") debugLog(2, "title_suffix = [" .. title_suffix .. "]")
debugLog(1, "check named parameters") if yesno(myArgs['nocountyword'], false) then debugLog(2, "nocountyword=Yes") title_nocountyword = true end
-- get the page title thispage = mw.title.getCurrentTitle thispagename = thispage.text; debugLog(1, "mw.title.getCurrentTitle") debugLog(2, "thispage.text = [" .. thispage.text .."]") debugLog(2, "thispage.namespace = [" .. thispage.namespace .."]") debugLog(2, "thispage.nsText = [" .. thispage.nsText .."]") debugLog(2, "is it a cat? using (thispage:inNamespace(14)): ") if not (thispage:inNamespace(14)) then debugLog(nil, "No, this is not a category") debugLog(1, "Not a category, so no output") return publishDebugLog end debugLog(nil, "Yes, this is a category")
if not parsePagename(thispagename) then -- some error parsing the title, so don't proceed to output return publishDebugLog end debugLog(1, "all parse done") debugLog(2, "title_prefix = [" .. title_prefix .. "]") debugLog(2, "title_suffix = [" .. title_suffix .. "]")
return publishDebugLog .. makeTable
end
return p