词条 | Module:Sandbox/BrownHairedGirl/IrelandByCountyCatNav17 |
释义 | --[[ v16each 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;" local listStyle = "text-align:left; font-weight: normal;" local greyLinkColor = "#888" -- globals for this modulelocal debugging = false local debugmsg = "" local tableRowNum = 0 local includeNewCounties = true local useCountyWord = true local title_prefix = "" local title_suffix = "" local displayAbbrevCounty = false local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local p = {} local TwentySixCounties = { 'Carlow', 'Cavan', 'Clare', 'Cork', 'Donegal', 'Dublin', 'Galway', 'Kerry', 'Kildare', 'Kilkenny', 'Laois', 'Leitrim', 'Limerick', 'Longford', 'Louth', 'Mayo', 'Meath', 'Monaghan', 'Offaly', 'Roscommon', 'Sligo', 'Tipperary', 'Waterford', 'Westmeath', 'Wexford', 'Wicklow' } local SixCounties = { 'Antrim', 'Armagh', 'Down', 'Fermanagh', 'Londonderry', 'Tyrone' } local newCounties = { 'Dún Laoghaire–Rathdown', 'Fingal', 'South Dublin (county)' } local Traditional32Counties = { 'Antrim', 'Armagh', 'Carlow', 'Cavan', 'Clare', 'Cork', 'Donegal', 'Down', 'Dublin', 'Fermanagh', 'Galway', 'Kerry', 'Kildare', 'Kilkenny', 'Laois', 'Leitrim', 'Limerick', 'Londonderry', 'Longford', 'Louth', 'Mayo', 'Meath', 'Monaghan', 'Offaly', 'Roscommon', 'Sligo', 'Tipperary', 'Tyrone', 'Waterford', 'Westmeath', 'Wexford', 'Wicklow' } local GAACounties = { 'Antrim', 'Armagh', 'Carlow', 'Cavan', 'Clare', 'Cork', 'Donegal', 'Derry', 'Down', 'Dublin', 'Fermanagh', 'Galway', 'Kerry', 'Kildare', 'Kilkenny', 'Laois', 'Leitrim', 'Limerick', 'Longford', 'Louth', 'Mayo', 'Meath', 'Monaghan', 'Offaly', 'Roscommon', 'Sligo', 'Tipperary', 'Tyrone', 'Waterford', 'Westmeath', 'Wexford', 'Wicklow' } local abbreviatedCountyName = { --using ISO 3166-2:IE['Cork'] = 'CO', ['Clare'] = 'CE', ['Cavan'] = 'CN', ['Carlow'] = 'CW', ['Dublin'] = 'D', ['Donegal'] = 'DL', ['Galway'] = 'G', ['Kildare'] = 'KE', ['Kilkenny'] = 'KK', ['Kerry'] = 'KY', ['Limerick'] = 'LK', ['Longford'] = 'LD', ['Louth'] = 'LH', ['Leitrim'] = 'LM', ['Laois'] = 'LS', ['Meath'] = 'MH', ['Monaghan'] = 'MN', ['Mayo'] = 'MO', ['Offaly'] = 'OY', ['Roscommon'] = 'RN', ['Sligo'] = 'SO', ['Tipperary'] = 'TA', ['Waterford'] = 'WD', ['Westmeath'] = 'WH', ['Wexford'] = 'WX', ['Wicklow'] = 'WW', -- made-up codes for new counties['Fingal'] = 'FL', ['South Dublin'] = 'SD', ['South Dublin (county)'] = 'SD', ['Dún Laoghaire–Rathdown'] = 'DLR', -- made-up codes for Northern Ireland['Antrim'] = 'AM', ['Armagh'] = 'AH', ['Down'] = 'DN', ['Fermanagh'] = 'FH', ['Londonderry'] = 'LY', ['Tyrone'] = 'TE' } function makeTableRow(rowLabel, useCountyWord, countyList) debugLog(2, "makeTableRow: [" .. rowLabel .. "]") tableRowNum = tableRowNum + 1 local thisRow if (tableRowNum % 2) == 0 then debugLog(3, "Even-numbered") thisRow = ' |
' .. rowLabel .. ' | \'\' 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) .. "\" local j, nuCounty if (includeNewCounties and (aCounty == "Dublin")) then -- make a sub-list for the newCounties local subCatName for j, nuCounty in ipairs(newCounties) do subCatName = makeCatName(nuCounty, title_prefix, title_suffix) thisRow = thisRow .. "** " .. makeCatLink(subCatName, nuCounty) .. "\" end subCatName = makeCatName("Dublin (city)", title_prefix, title_suffix) thisRow = thisRow .. "** " .. makeCatLink(subCatName, "City") .. "\" end end thisRow = thisRow .. ' | \
return myTable
end
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 s
end
-- 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 .. ""
end
return fmtlink
end
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_name
end
-- 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
-- more precise checks
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 nil
end
-- 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 false
end
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 == nil or 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 parse failed
debugLog(3, "No match_'County Foo'")
local new_county = findBareCountyNameInPagename(pn, newCounties, "New_counties")
if new_county == nil then
debugLog(3, "no match in new counties")
return false
end
debugLog(3, "found new county: [" .. new_county .. "]")
local testCountyEncoded = mw.ustring.gsub(new_county, "([%W])", "%%%1")
match_prefix, match_county, match_suffix = mw.ustring.match(pn, "^(.*)(" .. testCountyEncoded .. ")(.*)$")
end
title_prefix = match_prefix
title_suffix = match_suffix
debugLog(2, "parse successful")
debugLog(3, "match_prefix = [" .. match_prefix .. "]")
debugLog(3, "match_county = [" .. match_county .. "]")
debugLog(3, "match_suffix = [" .. match_suffix .. "]")
return true
end
function publishDebugLog()
if not debugging then
return ""
end
return "==Debugging ==\\" .. debugmsg .. "\== Output ==\"
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 == nil) then
debugmsg = ""
end
if (level ~= nil) then
-- not appending, so make a new line
debugmsg = debugmsg .. "\"
-- then add the level
if (level == 1) then
debugmsg = debugmsg .. "# "
elseif (level == 2) then
debugmsg = debugmsg .. "#* "
elseif (level == 3) then
debugmsg = debugmsg .. "#*# "
elseif (level == 4) then
debugmsg = debugmsg .. "#*#* "
elseif (level == 5) then
debugmsg = debugmsg .. "#*#*# "
end
end
debugmsg = debugmsg .. " " .. msg
return true
end
function argValueFunc(value)
if (value == nil) then
value = -- nil value = blank
end
value = mw.ustring.gsub(value, "^%s+$", "") -- only whitespace, so replace with
return value
end
function p.main(frame)
-- getArgs-- In all cases, convert to blank (i.e. )-- * a nil value-- * a value consisting only of whitespacedebugLog(1, "Check parameters")
debugLog(2, "debug")
if (frame.args['debug'] == nil) then
debugLog(3, "not set")
else
debugLog(3, "debug=[" .. frame.args['debug'] .. "]")
debugLog(4, "Evaluate as: ")
if (yesno(frame.args['debug'], false)) then
debugLog(nil, "Yes")
debugging = true
else
debugLog(nil, "No, or invalid")
debugging = false
end
end
debugLog(2, "usecountyword")
if (frame.args['usecountyword'] == nil) then
debugLog(3, "not set")
else
debugLog(3, "debug=[" .. frame.args['usecountyword'] .. "]")
debugLog(4, "Evaluate as: ")
if (yesno(frame.args['usecountyword'], true)) then
debugLog(nil, "Yes, or invalid")
useCountyWord = true
else
debugLog(nil, "No")
useCountyWord = false
end
end
debugLog(2, "abbrev")
if (frame.args['abbrev'] == nil) then
debugLog(3, "not set")
else
debugLog(3, "abbrev=[" .. frame.args['abbrev'] .. "]")
debugLog(4, "Evaluate as: ")
if (yesno(frame.args['abbrev'], false)) then
debugLog(nil, "Yes, or invalid")
displayAbbrevCounty = true
else
debugLog(nil, "No")
displayAbbrevCounty = false
end
end
debugLog(2, "newcounties")
if (frame.args['newcounties'] == nil) then
debugLog(3, "not set")
else
debugLog(3, "debug=[" .. frame.args['newcounties'] .. "]")
debugLog(4, "Evaluate as: ")
if (yesno(frame.args['newcounties'], false)) then
debugLog(nil, "Yes, or invalid")
includeNewCounties = true
else
debugLog(nil, "No")
includeNewCounties = false
end
end
-- still need to add a "countyset" parameter, to choose [all 32]/[only 26]/[only 6]/[GAACounties]/[26+6]
-- this is just a crude start
debugLog(2, "countySet")
if (frame.args['countyset'] == nil) then
debugLog(3, "not set")
else
local countySet = mw.ustring.lower(frame.args['countyset'])
debugLog(3, "countyset=[" .. countySet .. "]")
debugLog(4, "Evaluate as: ")
if (yesno(frame.args['countyset'], false)) then
debugLog(nil, "Yes, or invalid")
-- do something
else
debugLog(nil, "No")
-- do something
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
开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。