--v20
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"
-- configlocal textSize = '90%'local tableClass="infobox"local tableStyle="margin-left:auto; margin-right:auto; clear:left; float:left; width:auto;"local evenRowStyle = "background-color:#f3f3f3;"local oddRowStyle = ""local labelStyle = "text-align:right; font-weight: bold; padding-right: 1em"local listStyle = "text-align:left; font-weight: normal;"local greyLinkColor = "#888"
-- globals for this modulelocal debugging = falselocal debugmsg = ""local tableRowNum = 0local includeNewCounties = truelocal useCountyWord = truelocal title_prefix = ""local title_suffix = ""local displayAbbrevCounty = falselocal countySet = nillocal title_prefixlocal title_suffixlocal thisPageCountylocal isNorniron = false
local getArgs = require('Module:Arguments').getArgslocal yesno = require('Module:Yesno')local p =
local TwentySixCounties =
local SixCounties =
local newCounties =
local Traditional32Counties =
local GAACounties =
local abbreviatedCountyName =
function makeTableRow(rowLabel, useCountyWord, countyList) debugLog(2, "makeTableRow, label: ") if (rowLabel
0 then debugLog(3, "Even-numbered") thisRow = '
"")) then thisRow = thisRow .. '
\n' local i, aCounty debugLog(3, "Process countyList") for i, aCounty in ipairs(countyList) do debugLog(4, "No. [" .. tostring(i) .. ": [" .. aCounty .. "]") myCatName = makeCatName(countyWord .. aCounty, title_prefix, title_suffix) thisRow = thisRow .. "* " .. makeCatLink(myCatName, aCounty) .. "\n" local j, nuCounty if (includeNewCounties and (aCounty
function makeTable debugLog(1, "makeTable") tableRowNum = 0 local myTable = '
function makeAbbreviatedCountyName(s) debugLog(5, "displayAbbrevCounty? ")
if not displayAbbrevCounty then debugLog(nil, " No") return s end debugLog(nil, " Yes") if (abbreviatedCountyName[s] ~= nil) then debugLog(5, "AbbreviatedCountyName for: [" .. s .. "] = [" .. abbreviatedCountyName[s] .. "]") return abbreviatedCountyName[s] end debugLog(5, "No abbreviatedCountyName for: [" .. s .. "]") return send
-- Make a piped link to a category, if it exists-- If it doesn't exist, just display the greyed the link title without linkingfunction 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+%(.+$", ""); displaytext = makeAbbreviatedCountyName(displaytext) else displaytext = catname end local fmtlink local catPage = mw.title.new(catname, "Category") if (catPage.exists) then fmtlink = "" .. displaytext .. "" else fmtlink = '
' .. displaytext .. "" endreturn fmtlinkend
function makeCatName(countyName, prefix, suffix) 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
function patternSearchEncode(s) return mw.ustring.gsub(s, "([%W])", "%%%1")end
-- Does the pagename include a county name?-- with or without the prefix "County", depending on value of useCountyWordfunction findCountyNameInPagename(pn, countylist, description, prefixCountyWord) local i, aCounty, testCounty debugLog(2, "checking [" .. pn .."] for a county name in county set: " .. description) for i, aCounty in ipairs(countylist) do if prefixCountyWord then testCounty = "County " .. aCounty else testCounty = aCounty end debugLog(3, "testing: [" .. testCounty .. "]") local testCountyEncoded = patternSearchEncode(testCounty) -- 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 -- more precise checks -- This check 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 word debugLog(4, "simple match? ") if (not mw.ustring.match(pn, testCountyEncoded)) then debugLog(nil, "Fail") else debugLog(nil, "Success")
debugLog(4, "match at start, followed by separator? ") if mw.ustring.match(pn, "^" .. testCountyEncoded .. "[^%w]") then debugLog(nil, "Yes") return testCounty end debugLog(nil, "No") debugLog(4, "match at end, preceded by separator? ") if mw.ustring.match(pn, "[^%w]" .. testCountyEncoded .. "$") then debugLog(nil, "Yes") return testCounty end debugLog(nil, "No")
debugLog(4, "match anywhere, preceded and followed by separator? ") if mw.ustring.match(pn, "[^%w]" .. testCountyEncoded .. "[^%w]") then debugLog(nil, "Yes") return testCounty end debugLog(nil, "No") end end return nilend
-- check whether a given county name is in a particular setfunction isCountyInSet(s, aSet, description) local thisCounty = mw.ustring.gsub(s, "^County +", "") debugLog(4, "Checking [" .. thisCounty .. "] in set: " .. description) local aValidCounty for i, aValidCounty in ipairs(aSet) do debugLog(4, "Compare with [" .. aValidCounty .. "]: ") if mw.ustring.match(thisCounty, "^" .. aValidCounty .. "$") then debugLog(nil, " match") return true end debugLog(nil, " not matched") end return falseend
-- parse the pagename to find 3 parts: prefix, county name, suffixfunction parsePagename(pn) debugLog(1, "parsePagename: [" .. pn .. "]") isNorniron = false local validCountyName if (countySet
nil and includeNewCounties) then validCountyName = findCountyNameInPagename(pn, newCounties, "new counties", false) end elseif (countySet
nil and includeNewCounties) then validCountyName = findCountyNameInPagename(pn, newCounties, "new counties", false) end elseif (countySet
"gaa") then validCountyName = findCountyNameInPagename(pn, GAACounties, "gaa", useCountyWord, false) else -- default: treat as (countySet
nil then validCountyName = findCountyNameInPagename(pn, SixCounties, "six", useCountyWord) if validCountyName ~= nil then isNorniron = true end end if (validCountyName
end if validCountyName
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 local i for i = 1, level do if (i % 2)
function getYesNoParam(args, thisParamName, defaultVal) local returnValue debugLog(2, "Evaluate yes/no parameter: [" .. thisParamName .. "] = [" .. (((args[thisParamName]
function p.main(frame) debugLog(1, "Check parameters") debugging = getYesNoParam(frame.args, "debug", false) useCountyWord = getYesNoParam(frame.args, "usecountyword", true) displayAbbrevCounty = getYesNoParam(frame.args, "abbrev", false) includeNewCounties = getYesNoParam(frame.args, "newcounties", true)
countySetParam = "twentysixplussix" -- default debugLog(2, "countySet") if ((frame.args['countyset']
"")) then debugLog(3, "not set") countySet = nil else debugLog(3, "countyset=[" .. frame.args['countyset'] .. "]") local countySetParam = mw.text.trim(mw.ustring.lower(frame.args['countyset'])) debugLog(4, "Evaluate as: ") if (countySetParam
"six") or (countySetParam
"gaa") or (countySetParam
"gaa") then useCountyWord = false includeNewCounties = false debugLog(5, "Yes/no parameter [newcounties] reset to [no]") debugLog(5, "Yes/no parameter [usecountyword] reset to [no]") end else countySet = nil debugLog(nil, "not a valid set") end 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