Wikipedia
gvwiki
https://gv.wikipedia.org/wiki/Ard-ghuillag
MediaWiki 1.47.0-wmf.2
first-letter
Meanyn
Er lheh
Resooney
Ymmydeyr
Resooney ymmydeyr
Wikipedia
Resooney Wikipedia
Coadan
Resooney coadan
MediaWiki
Resooney MediaWiki
Clowan
Resooney clowan
Cooney
Resooney cooney
Ronney
Resooney ronney
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Reeriaght Unnaneysit
0
979
379167
378494
2026-05-17T21:55:54Z
InternetArchiveBot
16702
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379167
wikitext
text/x-wiki
{{Art reiht rollage}}
{{Kishtey fys çheer
|ennym_dooghyssagh = Reeriaght Unnaneysit y Vretyn Vooar as Nerin Hwoaie
|ennym_foddey_cadjincliaghtagh= {{nobold|United Kingdom of Great Britain and Northern Ireland {{small|([[Baarle]])}}}}
|ennym_gienneydagh = y Reeriaght Unnaneysit
|jalloo_brattagh = Flag of the United Kingdom.svg
|jalloo_cleinney = Royal Coat of Arms of the United Kingdom.svg
|sorçh_cowrey = Armys reeoil
|jalloo_caslys = Europe-UK_(orthographic_projection).svg
|arrane_ashoonagh = "[[God Save the King]]"{{Efn|She "God Save the King" ("Dy Sauail Jee yn Ree" 'sy Ghaelg) yn [[arrane ashoonagh]] rere cadjin-chliaghtey, cha rere yn leigh, as cha nel lhieggan eaghtyrit ayn. Dy cadjin, cha nel agh y chied rane er ghoaill, ga dy vel y nah rane er ghoaill keayrtyn ec taghyrtyn steat as theayagh.<ref>{{Cite web |title=National Anthem |url=https://www.royal.uk/encyclopedia/national-anthem |access-date=10 Averil 2024 |website=The Royal Family |archive-date=20 Boaldyn 2024 |archive-url=https://web.archive.org/web/20240520130352/https://www.royal.uk/encyclopedia/national-anthem |url-status=live }}</ref> Ta ny focklyn ''King, he, him, his'', ta ymmydit jiu, scughit as ny focklyn ''Queen, she, her'' currit stiagh 'syn ynnyd oc tra she ben y monark.}}{{parabr}}{{center|[[File:United_States_Navy_Band_-_God_Save_the_Queen.ogg]]}}
|sorçh_çhengaghyn = [[Çhengey ashoonagh]]
|çhengaghyn = [[Baarle]]{{Efn|Ga nagh vel [[çhengey oikoil|staydys oikoil]] ''[[de jure]]'' ec y Vaarle, ta staydys er lheh currit da'n [[Baarle Albinagh|Vaarle Albinagh]], da'n [[Baarle Albinagh Ultagh|Baarle Albinagh Ultagh]], da'n [[Bretnish|Vretnish]], da'n [[Cornish|Chornish]], da [[Gaelg ny h-Albey]], as da'n [[Yernish]] myr [[çhengey ardjynagh|çhengaghyn ardjynagh]] ny [[myn-çhengey|myn-çhengaghyn]] rere y [[Kaart Oarpagh cour Çhengaghyn Ardjynagh as Myn-çhengaghyn|Chaart Oarpagh cour Çhengaghyn Ardjynagh ny Myn-çhengaghyn]] lesh [[Coonseil yn Oarpey]].<ref name="reglang">{{Cite web |title=List of declarations made with respect to treaty No. 148 |url=http://conventions.coe.int/treaty/Commun/ListeDeclarations.asp?CL=ENG&NT=148&VL=1 |access-date=12 Nollick 2013 |publisher=[[Coonseil yn Oarpey]] |archive-date=12 Nollick 2013 |archive-url=https://web.archive.org/web/20131212175720/http://conventions.coe.int/treaty/Commun/ListeDeclarations.asp?CL=ENG&NT=148&VL=1 |url-status=dead }}</ref> T'ad goaill stiagh currymyn ry hoi cur-er-oaie ny çhengaghyn shen.<ref>{{Cite web |title=Welsh language on GOV.UK – Content design: planning, writing and managing content – Guidance |url=https://www.gov.uk/guidance/content-design/welsh-language-on-gov-uk |access-date=3 Luanistyn 2018 |website=gov.uk |archive-date=4 Luanistyn 2018 |archive-url=https://web.archive.org/web/20180804014121/https://www.gov.uk/guidance/content-design/welsh-language-on-gov-uk |url-status=live }}</ref><ref>{{Cite news |title=Welsh language scheme |work=GOV.UK |url=https://www.gov.uk/government/organisations/department-for-transport/about/welsh-language-scheme |access-date=3 Luanistyn 2018 |archive-date=4 Luanistyn 2018 |archive-url=https://web.archive.org/web/20180804014119/https://www.gov.uk/government/organisations/department-for-transport/about/welsh-language-scheme |url-status=live }}</ref><ref>{{Cite news |title=Welsh language scheme |work=GOV.UK |url=https://www.gov.uk/government/organisations/home-office/about/welsh-language-scheme |access-date=3 Luanistyn 2018 |archive-date=2 Luanistyn 2018 |archive-url=https://web.archive.org/web/20180802010917/https://www.gov.uk/government/organisations/home-office/about/welsh-language-scheme |url-status=live }}</ref> Chammah's shen, ta staydys enmyssit currit da'n [[Çhengey Chowree Ghoaldagh]]. Jeeagh er [[Çhengaghyn y Reeriaght Unnaneysit]] chammah.}}
|preeu-valley = [[Lunnin]]
|latd=51 |latm=30 |latNS=N |longd=0 |longm=07 |longEW=W |latNSgael=Hwoaie |longEWgael=Heear
|balley_smoo = preeu-valley
|sorçh_reiltys = [[Monarkaght vunraghtoil#Nalbin, Sostyn, as y Reeriaght Unnaneysit|Monarkaght vunraghtoil pharlamaidagh]] unnaneagh
|enmys1_fer-toshee = [[Monark y Reeriaght Unnaneysit|Ree]]
|ennym1_fer-toshee = [[Çhalse III y Reeriaght Unnaneysit|Çhalse III]]
|enmys2_fer-toshee = [[Ard-vinishter y Reeriaght Unnaneysit|Ard-vinishter]]
|ennym2_fer-toshee = [[Keir Starmer]]
|eaghtyr_km2 = 244,820
|eaghtyr_mi_ker = 94,526
|eaghtyr_rhenk = 79oo
|ushtey_sy_cheead = 1.34
|pobble_ooley = 60,975,000<ref>{{Cite web |title=Archive copy |url=http://www.nationalstatistics.gov.uk/cci/nugget.asp?id=6 |access-date=2008-08-31 |archive-date=2005-10-28 |archive-url=https://web.archive.org/web/20051028130741/http://www.nationalstatistics.gov.uk/cci/nugget.asp?id=6 |url-status=dead }}</ref>
|blein_ooley_pobble = 2007
|rhenk_ooley_pobble = 22h
|pobble_coontey = {{WD Earroo yn Phobble cour Kishtey Fys}}
|blein_coontey_pobble = 2001
|rhenk_coontey_pobble =
|glooaght_pobble_km2 = 246
|glooaght_pobble_mi_ker = 637
|rhenk_glooaght_pobble = 48oo
|blein_possanyn_kynneeagh = 2001
|blein_LTS_CCK = 2006
|LTS_CCK = $2.270 trillioon
|rhenk_LTS_CCK = 6oo
|LTS_CCK_yn_dooinney = $37,328
|rhenk_LTS_CCK_yn_dooinney = 13oo
|LTS_ennymagh = $2.772 trillioon
|rhenk_LTS_ennymagh = 5oo
|blein_LTS_ennymagh = 2007
|LTS_ennymagh_yn_dooinney = $45,845
|rhenk_LTS_ennymagh_yn_dooinney = 9oo
|blein_ALD = 2005
|ALD = {{bishaghey}} 0.946
|rhenk_ALD = 16oo
|ronney_ALD = <font color="#009900">ard</font>
|Gini = 34<ref name=factbook>[https://web.archive.org/web/20090513124910/https://www.cia.gov/library/publications/the-world-factbook/fields/2172.html CIA World Factbook][Rang-oardraghey Gini]</ref>
|blein_Gini = 2005
|sorçh_kiondeeaght = [[Shennaghys y Reeriaght Unnaneysit|Crooaght]]
|quaiyl = [[Ard-whaiyl y Reeriaght Unnaneyssit as Nerin Hwoaie|Ard-whaiyl]]
|quaiyl_syrjey = [[Quaiyl ny Çhiarnyn]]
|quaiyl_s'inshley = [[Quaiyl s'inshley yn Reeriaght Unnaneysit|Quaiyl Hostyn]]
|note_kiondeeaght =
|taghyrt1_bunnit = [[Slattyssyn yn Unnaneys 1707]]
|date1_bunnit = 1 Boaldyn 1707
|taghyrt2_bunnit = [[Slattyssyn yn Unnaneys 1800]]
|date2_bunnit = 1 Jerrey Geuree 1801
|taghyrt3_bunnit = [[Conaant Anglo-Yernagh]]
|date3_bunnit = 12 Averil 1922
|argid = [[punt Sostynagh]] (£)
|coad_argid = GBP
|traa_ynnydagh = [[Traa Mean Greenwich|GMT]]
|ashchur_utc = +0
|traa_ynnydagh_TTLS = [[Traa Souree Goaldagh|BST]]
|ashchur_utc_TTLS = +1
|cctld = [[.uk]]
|coad_çhellvane = 44
|fo-noteyn =
}}
She çheer ayns sheear hwoaie yn [[Yn Oarpey|Oarpey]] ee '''Reeriaght Unnaneysit y Vretyn Vooar as Nerin Hwoaie''' ([[Baarle]]: ''United Kingdom of Great Britain and Northern Ireland'') ny '''yn Reeriaght Unnaneysit''', yn '''RU''', '''yn Vretyn Vooar''' ny '''Çheer ny Goal''' ny keayrtyn. T'eh ny heer ellanagh<ref>
{{cite web
| url = http://www.britannica.com/EBchecked/topic/615557/United-Kingdom
| title = Encyclopaedia Britannica
| quote = Island country located off the north-western coast of mainland Europe
| accessdaymonth=25 Mean Fouyir|accessyear = 2007}}</ref><ref name="Countries">{{cite web |url=http://www.number10.gov.uk/Page823 |title=Countries within a country |publisher=www.number-10.gov.uk |accessdaymonth=13 Mean Souree|accessyear=2007|quote=Countries within a country|archiveurl=http://webarchive.nationalarchives.gov.uk/20080909013512/http://www.number10.gov.uk/Page823|archivedate=2008-09-09}}</ref> ta goll reish [[y Vretyn Vooar]], shiar hwoaie [[Nerin]], as ram ellanyn beggey. Cha nel joarey thallooin ayns y Reeriaght Unnaneysit agh ayns [[Nerin Hwoaie]] liorish [[Pobblaght Nerin]].<ref>{{Cite web|url = http://www.eu2005.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1115141709899|title = Member States: United Kingdom|accessdaymonth = 29 Boaldyn|accessyear = 2006|publisher = UK Presidency of the EU 2005|accessdate = 2008-11-14|archivedate = 2006-03-14|archiveurl = https://web.archive.org/web/20060314081107/http://www.eu2005.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1115141709899}}</ref> Faagail magh y joarey shoh, ta'n RU caglit liorish [[Yn Keayn Sheear|y Cheayn Sheear]], [[Mooir Hostyn]], [[Mooir yn Eeaght]], as [[Mooir Vannin]]. Ta'n ellan smoo, yn Vretyn Vooar, kianglt rish [[y Rank]] liorish [[Thiollane Vooir Eeaght]].
Ta'n Reeriaght Unnaneysit ny steat unnaneagh as t'eh jeant seose jeh kiare [[Çheeraghyn y Reeriaght Unnaneysit|çheeraghyn]]: [[Bretin]], [[Nalbin]], [[Nerin Hwoaie]] as [[Sostyn]].<ref>{{cite web|url=http://www.statistics.gov.uk/geography/uk_countries.asp|title=The Countries of the UK|publisher=www.statistics.gov.uk|accessdaymonth=10 Jerrey Fouyir|accessyear=2008|archiveurl=http://webarchive.nationalarchives.gov.uk/20020329130655/http://www.statistics.gov.uk/geography/uk_countries.asp|archivedate=2002-03-29}}</ref> T'eh reillit liorish [[corys ard-whaiylagh]] lesh soiaghey yn reiltys ayns y [[preeu-valley]] [[Lunnin]], agh ta tree [[reirey jeeveanit|reiraghyn ashoonagh jeeveanit]] ayns [[Beeal Feirshtey]], [[Cayr Deeth]] as [[Doon Edin]], preeu-valjyn Nerin Hwoaie, Vretin, as ny h-Albey. Ta'n RU ny [[reeriaght vunraghtoil]] lesh [[Çhalse III y Reeriaght Unnaneysit|Ree Çhalse III]] myr fer toshee y steat. She [[Croghaneyn-Crooin]] [[Ellanyn Vooir Eeaght]] as [[Mannin]] as cha nel ad nyn gooid jeh'n RU, agh t'ad jannoo conastey lesh.<ref>{{cite web| url = http://www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517| title = Key facts about the United Kingdom| accessdaymonth = 26 Mean Souree| accessyear = 2008| work = Government, citizens and rights| publisher = [[Directgov]]| quote = The full title of this country is 'the United Kingdom of Great Britain and Northern Ireland'. 'The UK' is made up of England, Scotland, Wales and Northern Ireland. 'Great Britain' (or just 'Britain') does not include Northern Ireland. The Channel Islands and the Isle of Man are not part of the UK.| accessdate = 2008-11-14| archivedate = 2008-11-15| archiveurl = https://web.archive.org/web/20081115150128/http://www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517}}</ref> Ta kiare [[thallooyn har mooir Goaldagh]] jeig ec yn RU,<ref>
{{cite web | url = http://www.fco.gov.uk/en/fco-in-action/global-network/
| title = FCO global network | work = FCO in Action | publisher = [[Foreign and Commonwealth Office]] | accessdaymonth=26 Mean Souree|accessyear=2008|archiveurl=http://webarchive.nationalarchives.gov.uk/20080331091058/http://www.fco.gov.uk/en/fco-in-action/global-network/|archivedate=2008-03-31}}</ref> as t'ad nyn remladyn jeh'n [[Impiraght Ghoaldagh]], yn impiraght smoo ayns shennaghys y theihill. Ta Ree Çhalse III foast ny 'er toshee er [[Co-unnaneys ny h-Ashoonyn]] as ny ben hoshee er dagh ream co-unnaneysagh.
== Shennaghys ==
{{ardart|Shennaghys y Reeriaght Unnaneysit}}
[[Coadan:Sadler, Battle of Waterloo.jpg|left|thumb|Va [[Cah Waterloo]] jerrey [[ny Caggaghyn Napoleonagh]]]]
Er 1 Boaldyn 1707, va yabanagada [[Reeriaght ny Bretyn Mooar]]<ref>{{cite web|url=http://www.parliament.uk/actofunion/ |title=Welcome|publisher=www.parliament.uk|accessdaymonth=7 Jerrey Fouyir|accessyear=2008}}</ref><ref>{{cite web |url=http://www.scotshistoryonline.co.uk/union.html |title=THE TREATY or Act of the Union |publisher=www.scotshistoryonline.co.uk |accessdaymonth=27 Luanistyn |accessyear=2008 |access-date=2008-11-14 |archive-date=2019-05-27 |archive-url=https://web.archive.org/web/20190527074630/http://www.scotshistoryonline.co.uk/union.html |url-status=dead }}</ref> crooit rere [[unnaneys politickagh]] eddyr [[Reeriaght Hostyn]] (as eh goaill stiagh [[Bretin]]) as [[Reeriaght ny h-Albey]]. Va'n taghyrt shen ny eiyrtys jeh [[Conaant yn Unnaneys]] as eh fo-screeuit er 22 Jerrey Souree 1706,<ref>{{cite web|url=http://www.nationalarchives.gov.uk/pathways/citizenship/rise_parliament/docs/articles_union.htm |title=Articles of Union with Scotland 1707|publisher=www.parliament.uk |accessdaymonth=19 Jerrey Fouyir|accessyear=2008}}</ref> as eh shickyrit liorish [[Ard-whaiyl Hostyn]] as [[Ard-whaiyl ny h-Albey]] lesh çheet [[Slattyssyn yn Unnaneys 1707|Slattys yn Unnaneys]] ayns 1707. Begnagh keead ny s'anmey, va [[Reeriaght Nerin]] kianglt rish Reeriaght ny Bretyn Mooar liorish çheet [[Slattys yn Unnaneys 1800]].<ref>{{cite web |url=http://www.actofunion.ac.uk/actofunion.htm#act | title=The Act of Union |publisher=Act of Union Virtual Library |accessdaymonth=15 Boaldyn|accessyear=2006}}</ref> Faagail magh dy row Sostyn as Nalbin nyn steatyn anchaslagh roish 1707, v'ad ayns [[unnaneys persoonagh]] veih [[Unnaneys ny Crooinyn]] ayns 1603, tra va troyn Reeriaghtyn Hostyn as Nerin eirit ec [[Jamys I Hostyn|Jamys VI Ree ny h-Albey]] as va'n cooyrt reeoil arraghit veih Doon Edin gys Lunnin.<ref>{{cite book|title=Chronology of Scottish History|publisher=Geddes & Grosset|isbn=1855343800|last=Ross|first=David|date=2002|quote=''1603:'' James VI becomes [[James I of England]] in the [[Union of the Crowns]], and leaves Edinburgh for London|page=56}}</ref><ref>{{cite book|title=Claiming Scotland: National Identity and Liberal Culture|publisher=Edinburgh University Press|isbn=1902930169|last=Hearn|first=Jonathan|date=2002|quote=Inevitably, James moved his court to London|page=104}}</ref>
[[Coadan:British Empire 1897.jpg|thumb|left|Yn [[Impiraght Ghoaldagh]] ayns 1897. Ayns 1920 haink urree dy ve ny h-impiraght smoo er y theihll.]]
'Sy chied cheead, va paart mooar ayns lhiasaghey eieyn heear y [[corys ard-whaiylagh|chorys ard-whaiylagh]] as va cohortysyn mooarey jeant ec y çheer ayns lettyraght, ellynyn as oaylleeaght.<ref>{{cite book |last=Ferguson |first=Niall |authorlink=Niall Ferguson |year=2003 |title=Empire: The Rise and Demise of the British World Order |publisher=Basic Books |isbn=0465023282}}</ref> Cheaghil [[y Çhyndaa Çhynskylagh]] y çheer as hug eh cooney er lhiasaghey [[yn Impiraght Ghoaldagh]]. Ec y traa shen, chammah as çheeraghyn mooarey elley, va paart ec yn RU ayns y [[Coloinaghys|choloinaghys]], goaill stiagh [[cochionneeaght sleab yn Atlantagh]], ga dy dy hie [[Slattys Cochionneeaght Sleab 1807]] ny hrooid. Va'n RU ny chied çheer dy chur jerrey lesh cochionneeaght sleabyn.<ref>[http://www.bbc.co.uk/devon/content/articles/2007/03/20/abolition_navy_feature.shtml Sailing against slavery. Liorish Jo Loosemore] BBC</ref>
Lurg traastagh [[Napoleon I ny Frank|Napoleon]] ayns ny [[Caggaghyn Napoleonagh]], dirree yn RU dy ve ny phreeu-chummaght lhuingyssagh y 19oo eash as hannee yn stayd shen echey derrey yn 20oo eash meanagh. Daase yn Impiraght Ghoaldagh gys y cheim smoo ayns 1921, as hooar eh anney [[Leeg ny h-Ashoonyn]] harrish shen-choloinyn ny Germaan as yn Impiraght Turkagh lurg [[Yn Chied Chaggey Dowanagh|y Chied Chaggey Dowanagh]].
She trooid çhionnidyn broie ayns Nerin, haghyr [[Slattys Reiltys Nerin 1920|rheynn magh]] yn ellan ayns 1920, as seyrsnys [[Seyr Steat Nerin|Heyr Steat Nerin]] ayns 1922 ny lurg. Hannee Nerin Hwoaie lesh yn RU. Myr eiyrtys, ayns 1927, va ennym formoil ny çheerey çhyndaait gys y lhieggan roie, Reeriaght Unnaneysit ny Bretyn Mooar as Nerin Hwoaie.<ref name="CAIN">{{cite web |url=http://cain.ulst.ac.uk/issues/politics/docs/ait1921.htm |title=The Anglo-Irish Treaty, 6 December 1921 |publisher=CAIN |accessdaymonth=15 Boaldyn |accessyear=2006 |access-date=14 November 2008 |archive-date=14 May 2012 |archive-url=https://web.archive.org/web/20120514145108/http://cain.ulst.ac.uk/issues/politics/docs/ait1921.htm |url-status=dead }}</ref>
[[Coadan:Supermarinespitfire.JPG|thumb|right|[[Cah ny Bretyn Mooar]]. Hannee yn RU ynrican, mastey çheeraghyn cochaarjagh Oarpagh [[Yn Nah Chaggey Dowanagh|y Nah Chaggey Dowanagh]], seyr veih cumaltys ny Natsee.]]
Rish ny 1920yn, va'n [[BBC]], kied ghreasane creeley eddyr-ashoonagh y theihll, currit er bun. Ren yn RU caggey rish [[Yn Ghermaan Natseeagh|y Ghermaan Natseeagh]] myr nane jeh cummaghtyn Cochaarjagh [[Yn Nah Chaggey Dowanagh|y Nah Chaggey Dowanagh]] as hug eh cooney da'n theihll heear-chaggeeagh. By chyndagh rish y Nah Chaggey Dowanagh va'n Reeriaght Unnaneysit jeeyllit rere argidys. Hug eeasaghtyn costallagh veih'n [[Yn Chanadey|Chanadey]] as veih [[ny Steatyn Unnaneysit]] cooney da'n RU as eh geearree slaanaghey.
Ayns bleeantyn jeeragh ny lurg y chaggey, va'n [[steat lhiasee]] Goaldagh currit er bun, goaill stiagh [[Shirveish Ashoonagh ny Slaynt]], nane jeh ny kied corysyn ooilley-ghoaillagh y torçh shen. Rere aggyrtysyn y claanaghey, haink earroo mooar dy 'leih veih'n [[Co-unnaneys ny h-Ashoonyn|Cho-unnaneys]] as va'n Vretyn Vooar yl-chynneeagh currit er bun. Faagail magh dy row joaraghyn heear-chaggeeagh noa phaart [[Jee-choloinaghey|politickagh]] ny Bretyn Mooar shickyrit liorish [[Geyre-ghaue Huez]] ny bleeaney 1956, va sheeyney magh eddyr-ashoonagh ny [[Baarle]] çheet er cleayney beaynagh [[Lettyragh Ghoaldagh|lettyraght]] as [[Cultoor y Reeriaght Unnaneysit|cultoor]] Goaldagh. Veih ny 1960yn hooar [[cultoor yn phobbyl|cultoor phobble Ghoaldagh]] cleayney ass y çheer.
Lurg keyllaghey tarmaynagh dowanagh as boirey çhynskylagh ayns ny 1970yn, va bishaghey çheetyn stiagh [[ooill Vooir Hostyn]] as lhiasaghey tarmaynagh ayns ny 1980yn. Car toshiaghys [[Margaret Thatcher]] va çhyndaa ayns troa politickagh as tarmaynagh y Reeriaght Unnaneysit; troa t'ayn derrey yn laa t'ain fo currym reiltys [[Partee yn Lught Obbyr (RU)#Partee yn Lught Obbyr Noa|Phartee yn Lught Obbyr Noa]] fo stiurey [[Tony Blair]] as [[Gordon Brown]] veih 1997.
Va'n Reeriaght Unnaneysit nane jeh 12 chiaddeyder [[yn Unnaneys Oarpagh]] ec y toshiaght ayns 1992 lesh fo-screeuyn [[Conaant Vaastricht]]. Roish shen, v'eh ny oltey jeh'n çheshaght roish shen, y [[Boodeeys Tarmaynagh Oarpagh]] (BTO), veih 1973. Ta ymmyrkey reiltys [[Partee yn Lught Obbyr (RU)|Phartee yn Lught Obbyr]] rish mestey stiagh lesh y çheshaght mestit,<ref name=Times>{{cite web |url=http://www.timesonline.co.uk/tol/news/politics/article775115.ece |title=Modest progress but always on back foot |publisher=Times Online |date=21 Nollick 2005 |accessdaymonth=16 Boaldyn |accessyear=2006 |access-date=2008-11-14 |archive-date=2011-07-17 |archive-url=https://web.archive.org/web/20110717104113/http://www.timesonline.co.uk/tol/news/politics/article775115.ece |url-status=dead }}</ref> lesh [[Ny Condaigee (Reeriaght Unnaneysit)|ny Condaigee]], yn [[Partee Cumaadagh (RU)|Partee Cumaadagh]], as ad shassoo er son freayltys cummaghtyn as cummeydysyn.<ref>{{cite web |url=http://www.conservatives.com/Policy/Where_we_stand/Foreign_Affairs_and_Europe.aspx |title=Foreign Affairs and Europe |publisher=Conservative Party |accessdaymonth=17 Jerrey Fouyir |accessyear=2008 |accessdate=2008-11-14 |archivedate=2008-09-29 |archiveurl=https://web.archive.org/web/20080929133409/http://www.conservatives.com/Policy/Where_we_stand/Foreign_Affairs_and_Europe.aspx }}</ref>
Ec jerrey yn 20oo eash haghyr ceaghlaghyn mooarey ayns reiltys y Reeriaght Unnaneysit lesh bunneeaght reiltysyn ashoonagh [[jee-veanaghey|jee-veanit]] da Nerin Hwoaie, Nalbin as Bretin ny lurg [[Refraneyn 'sy Reeriaght Unnaneysit|refraneyn]] roie-slattyssagh.<ref>{{cite web|url=http://publius.oxfordjournals.org/cgi/content/abstract/28/1/217 |title=Reforging the Union: Devolution and Constitutional Change in the United Kingdom|publisher= publius.oxfordjournals.org|accessdaymonth=7 Jerrey Fouyir|acessyear=2008}}</ref>
== Reiltys as politickaght ==
{{ardart|Reeaghyn as benreinyn y Reeriaght Unnaneysit|Politickaght y Reeriaght Unnaneysit|Reihyssyn 'sy Reeriaght Unnaneysit}}
Ta'n Reeriaght Unnaneysit ny [[reeriaght vunraghtoil]]: ta [[Çhalse III y Reeriaght Unnaneysit|Ree Çhalse III]] ny 'er toshee er yn RU chammah as er kiare [[Ream y Cho-unnaneys|çheeraghyn]] jeig y [[Co-unnaneys ny h-Ashoonyn|Cho-unnaneys]], as eh cur yn RU ayns [[unnaneys persoonagh]] lesh ny steatyn shen. Ta ny [[Croghane-Crooin|Croghaneyn-Crooin]] [[Mannin]], [[Jersee]] as [[Guernsey]] fo reealtys y Chrooin, as cha nel ad nyn gooid jeh'n Reeriaght Unnaneysit ga-reih ta cooishyn joarree as coadey fo stiurey reiltys yn RU.
Ta'n Reeriaght Unnaneysit nane jeh tree çheeraghyn y theihill lesh bunraght nagh vel currit ayns coad.<ref>{{cite web |url=http://www.llrx.com/features/uk2.htm#UK%20Legal%20System |title=A Guide To the UK Legal System |author=Sarah Carter |publisher=[[University of Kent|University of Kent at Canterbury]] |accessdaymonth=16 Boaldyn |accessyear=2006 |accessdate=2008-11-14 |archivedate=2012-06-03 |archiveurl=https://web.archive.org/web/20120603172102/http://www.llrx.com/features/uk2.htm#UK%20Legal%20System }}</ref> Ta [[Bunraght y Reeriaght Unnaneysit]] jeant seose, son y chooid smoo, jeh geillyn screeuit, goaill stiagh slattysyn, leigh caseyn briwnyssit, as conaantyn eddyr-ashoonagh. Er y fa nagh vel anchaslysyn eddyr slattysyn cadjin as "leigh bunraghtoil", foddee [[Ard-whaiyl y Reeriaght Unnaneysit|Ard-whaiyl yn RU]] "aachroo bunraghtoil" y yannoo rere çheet [[Aght yn Ard-whaiyl|Aghtyn yn Ard-whaiyl]] ny hrooid, as myr shen ta niart echey geillyn screeuit ny neu-screeuit y vunraght dy cheaghley ny dy scryssey magh. Ansherbee, cha nel Ard-whaiylyn billaghyn goll er hrooid y yannoo as ad noi-cheaghlagh.<ref>{{cite web|url=http://www.parliament.uk/about/how/laws/sovereignty.cfm|title=Ynnyd eggey oikoil Ard-whaiyl yn RU}}</ref>
[[Coadan:Location of the BOTs.png|thumb|right|[[Thallooin har mooir Goaldagh|Thallooin har mooir]] faagit y Reeriaght Unnaneysit]]
Ta [[corys ard-whaiylagh]] ec y Reeriaght Unnaneysit as eh bunnit er [[corys y Vannishter Heear]], as t'eh eiyrtit mygeayrt ny Cruinney – sheckteraght yn [[Impiraght Ghoaldagh]]. Ta daa hie – [[Quaiyl Hostyn]] reiht as [[Quaiyl ny Çhiarnyn]] teihyssagh – ayns [[Ard-whaiyl y Reeriaght Unnaneysit]] as t'ad çheet ry-cheilley ayns [[Plaase y Vannishter Heear]]. T'eh ny reiltys slattyssagh jerrinagh 'sy Reeriaght Unnaneysit er y fa nagh vel ard-whaiyl jee-veanit ayns [[Ard-whaiyl ny h-Albey|Nalbin]] as cruinnaghtyn jee-veanit ayns [[Kiannoortys Nerin Hwoaie|Nerin Hwoaie]] as [[Reiltys Chruinnaght Vretyn|Bretyn]] seyr as foddee reiltys yn RU adsyn y ghooney, faagail magh dy row ad currit er bun rere coontey theayagh ayns [[refrane]]yn.
[[Coadan:Westminster palace.jpg|thumb|[[Plaase y Vannishter Heear|Thieyn yn Ard-whaiyl]]]]
Ta ynnyd yn [[Ard-vinishter y Reeriaght Unnaneysit|Ard-vinishter]], fir toshee y reiltys, bentyn da Oltey yn Ard-whaiyl quoi ec ta smaght echey er y chooid smoo ayns [[Quaiyl Hostyn]]. Dy cadjin ta'n Ard-vinishter ny 'er toshee er y phartee politickagh smoo 'sy thie. Ta'n Ard-vinishter as Lugh ny h-Airaghtyn enmyssit ec y Venrein dy chroo [[Reiltys yn Ard Ooashley]]. Ta olteynyn ny h-Airaghtyn reiht veih olteynyn partee yn Ard-vinishter ayns y daa hie slattyssagh, agh veih [[Quail Hostyn]] son y chooid smoo.
Er son reihysyn da [[Quaiyl Hostyn]], ta'n RU rheynnit magh ayns [[Co-heiyderysyn y Reeriaght Unnaneysit|646 co-heiyderysyn]], lesh 529 jeu ayns Sostyn, 18 ayns Nerin Hwoaie, 59 ayns Nalbin as 40 ayns Bretin,<ref>[http://webarchive.nationalarchives.gov.uk/20020518024611/http://www.statistics.gov.uk/geography/westminster.asp Westminster Parliamentary Constituencies] statistics.gov.uk, feddynit magh er 10 Jerrey Fouyir, 2008</ref> agh bee 650 co-heiyderysyn veih'n Ard-reihys s'niessey. Ta un Oltey yn Ard-whaiyl reiht ec dagh co-heiyderys rere yl-raght neuchramp. Ta ard-reihysyn eieit ec y Venrein lurg coyrle yn Ard-vinishter. Cha nel çheorey er traa yn Ard-whaiyl, agh rere [[Aght yn Ard-whaiyl 1911|Aght yn Ard-whaiyl (1911)]] shegin reihysyn noa dy ve ayn çheusthie jeh queig bleeaney veih'n reihys jerrinagh.
T'ad [[Partee yn Lugh Obbyr (RU)|Partee yn Lught Obbyr]], [[Partee Cumaadagh (RU)|y Partee Cumaadagh]] as [[Partee Libraalagh Deynlagh (RU)|y Partee Libraalagh Deynlagh]] ny tree [[Rolley parteeghyn politickagh 'sy Reeriaght Unnaneysit#Parteeghyn politickagh smoo 'sy Reeriaght Unnaneysit|parteeghyn politickagh smoo]] 'sy Reeriaght Unnaneysit, as va 616 ass 646 ynnydyn cosnit ec ny tree parteeghyn shen 'sy reihys jerrinagh. Va'n chooid smoo jeh ny h-ynnydyn faagit cosnit ec parteeghyn slystagh yn RU lheid as [[Partee Ashoonagh ny h-Albey]] (Nalbin ynrican), [[Plaid Cymru]] (Bretin ynrican), as [[Partee Unnaneysagh Deynlagh]], [[Partee Soshiallagh Deynlagh y Lught Obbyr]], [[Partee Unnaneysagh Ullee]], as [[Sinn Féin]] (Nerin Hwoaie ynrican, agh ta olteynyn y phartee gleckey noi ynnydyn ayns [[Pobblaght Nerin|Nerin]] myrgeddin). Ayns freggyrtys politickaght y phartee, cha ghow oltey erbee yn phartee ynnyd ayns Quaiyl Hostyn er y fa dy shegin daue guee er y Ree ny er y Venrein.<ref>Ansherbee, ta ny queig OAyn jannoo ymmyd jeh ny h-oikyn as ny so-lhoobaghtyn elley ry gheddyn 'sy Vannishter Heear veih'n vlein 2002.{{cite web|url=http://news.bbc.co.uk/1/hi/uk_politics/1771635.stm |title=Sinn Fein moves into Westminster|publisher=BBC|date=21 Jerrey Geuree, 2002|accessdaymonth=17 Jerrey Fouyir|accessyear=2008}}</ref>
=== Reirey ashoonagh jee-veanit ===
{{ardart|Çhionnal Nerin Hwoaie|Reiltys ny h-Albey|Reiltys Cruinnaght Vretin}}
[[Coadan:Edinburgh Scottish Parliament01 2006-04-29.jpg|thumb|220px|Ta [[Ard-whaiyl ny h-Albey]] ny whaiyl ashoonagh ny h-Albey.]]
[[Coadan:Stormont Parliamentary Building 01.JPG|thumb|220px|[[Thieyn Parlamaid (Nerin Hwoaie)|Thieyn Parlamaid]] ayns [[Stormont, Beeal Feirshtey]], ynnyd y Çhionnal]]
Ta [[Kiannoortys|reiltys ny kiannoortys]] ec [[Bretin]], [[Nalbin]] as [[Nerin Hwoaie]], as t'ad fo stiurey [[Kied-vinishter]], as quaiyl [[Un-hamyraghys|un-hamyragh]] [[jee-veanaghey|jee-veanit]]. Cha nel kiannoortys ny quaiyl jee-veanit ec Sostyn, y çheer smoo 'syn RU, as t'ee jeeragh fo reirey reiltys as parlamaid yn RU ayns dagh keisht. Ta'n stayd shen enmyssit myr [[Feysht Lodainn Heear]] as eh mychione y nhee dy vel OAyn veih Bretin, Nalbin as Nerin Hwoaie abyl votal, dy briwnyssagh ny keayrtyn,<ref>{{cite web|url=http://news.bbc.co.uk/1/hi/scotland/3432767.stm|title=Scots MPs attacked over fees vote|publisher=BBC News|date=27 Jerrey Geuree 2004|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref> er nheeghyn bentyn rish Sostyn quoi ta loaghtit liorish cruinnaghtyn jee-veanit da ny co-heiyderysyn oc hene.<ref>{{cite web|url=http://news.bbc.co.uk/1/hi/uk_politics/talking_politics/82358.stm|title=UK Politics: Talking Politics The West Lothian Question|publisher=BBC News|date=1 Mean Souree 1998|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref>
Ta cummaghtyn lheeadagh er dagh nhee nagh vel 'freaylt' ec Parlamaid yn RU ec [[Reiltys ny h-Albey|Reiltys]] as [[Parlamaid ny h-Albey]]. Ta ny cumaghtyn shen goaill stiagh nheeghyn lheid as [[Ynsagh ayns Nalbin|ynsagh]], [[SSA ny h-Albey|currym slaynt]], [[leigh ny h-Albey|leigh]] as [[Gurneilys ynnydagh ayns Nalbin|gurneilys ynnydagh]].<ref>{{cite web|url=http://news.bbc.co.uk/1/hi/events/scotland_99/the_scottish_parliament/310036.stm|title=Scotland's Parliament - powers and structures|publisher=BBC News|date=8 Averil 1999|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref> Lurg barriaght [[seyrsnys ny h-Albey|partee ashoonagh ny h-Albey]], [[Partee Ashoonagh ny h-Albey]], ayns [[reihys Parlamaid ny h-Albey, 2007]], va [[reiltys 3oo Parlamaid ny h-Albey|reiltys mynlagh]] fo reirey yn PAA currit er bun fo stiurey yn 'er toshee, [[Alex Salmond]], as haink er dy ve ny [[Kied-vinishter ny h-Albey|Chied-vinishter]].<ref>{{cite web|url=http://news.bbc.co.uk/1/hi/scotland/6659531.stm|title=Salmond elected as first minister|publisher=BBC News|date=16 Boaldyn 2007|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref>
Ta cummaghtyn ny s'jeorit na t'ayns Nalbin ec [[Reiltys Cruinnaght Vretin]] as [[Çhionnal Ashoonagh Vretin]]<ref>{{cite web |url=http://news.bbc.co.uk/1/hi/events/wales_99/the_welsh_assembly/309033.stm |title=Structure and powers of the Assembly |publisher=BBC News |date=9 Averil 1999|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref> agh ny lurg çheet [[Aght Reiltys Vretin 2006]] ny hrooid, foddee yn Chruinnaght jannoo slattys er nheeghyn ennagh trooid [[Oardagh Cummeydys Slattyssagh|Oardee Cummeydys Slattyssagh]] as ad giootit er bunneydys case er chase.<ref>{{cite web |url=http://www.guardian.co.uk/politics/2007/jul/16/wales.devolution |title=What powers does the Welsh Assembly have? |publisher=Guardian |date=16 Jerrey Souree 2007|accessdaymonth=21 Jerrey Fouyir|accessyear=2008}}</ref> Va [[Reiltys Cruinnaght Vretin]] roie crooit shiartanse shiaghtinyn ny yei [[reihys da Çhionnal Ashoonagh Vretin, 2007]], lurg traa giare reirey mynlagh. Ta'n reiltys roie ny [[Reiltys 3oo Çhionnal Ashoonagh Vretin|cho-chiangley]] eddyr [[Plaid Cymru]] as [[Partee Lught Obbyr Vretin|Partee yn Lught Obbyr]] as she Kied-vinishter [[Rhodri Morgan]].
Ta cummaghtyn begnagh myr ta jee-veanit ayns Nalbin ec [[Kiannoortys Nerin Hwoaie]] as [[Çhionnal Nerin Hwoaie]]. Ec y traa t'ayn ta Kiannoortys Nerin Hwoaie fo stiurey yn Chied-vinishter [[Peter Robinson (politickeyr)|Peter Robinson]] ([[Partee Unnaneysagh Deynlagh]]) as y lhiass Chied-vinishter [[Martin McGuinness]] ([[Sinn Féin]]).<ref name="northernireland1">{{cite web|url=http://www.northernireland.gov.uk/index/your-government/devolved-government.htm|title=Devolved Government - Ministers and their departments|publisher=Northern Ireland Executive|accessdaymonth=17 Jerrey Fouyir|accessyear=2008|archiveurl=https://web.archive.org/web/20070822230925/http://www.northernireland.gov.uk/index/your-government/devolved-government.htm|archivedate=2007-08-22|accessdate=2008-11-15}}</ref>
=== Gurneilys ynnydagh ===
{{ardart|Shennaghys gurneilys ynnydagh 'sy Reeriaght Unnaneysit}}
{{jeeagh|Gurneilys ynnydagh ayns Sostyn|Gurneilys ynnydagh ayns Nerin Hwoaie|Gurneilys ynnydagh ayns Nalbin|Gurneilys ynnydagh ayns Bretyn}}
[[Coadan:ManchesterTownHall OwlofDoom.jpg|thumb|[[Halley Baljey Vanchuin]], ymmydit ry hoi gurneilys ynnydagh ayns Manchuin.]]
Ta [[shennaghys gurneilys ynnydagh 'sy Reeriaght Unnaneysit]] cowrit liorish ceaghlaghyn beggey ayns reaghysyn roish yn Unnaneys derrey yn 19oo eash. Veih shen ta aafilley beayn ayns paart as obbraghey.<ref name=barlow>Barlow, I., ''Metropolitan Government'', (1991)</ref> Cha haghyr ny ceaghlaghyn ayns oash cullee ayns Bretin, Nalbin, Nerin Hwoaie as Bretin as ta jee-veanaghey cummaght harrish gurneilys ynnydagh gys Bretin, Nalbin as Nerin Hwoaie keayllaghey nagh vel ceaghlaghyn ry-heet ayns oash cullee.
Ta reagheydys [[gurneilys ynnydagh ayns Sostyn]] co-chast, lesh livrey-ys obbraghey anchasley rere reaghysyn ynnydagh. Ta slattyssyn kianglt lesh gurneilys ynnydagh ayns [[Sostyn]] reaghit liorish parlamaid yn RU as [[Reiltys yn Ard Ooashley|reiltys y Reeriaght Unnaneysit]], er y fa nagh vel parlamaid jee-veanit ec Sostyn. Ta'd ny [[Aarheynnyn Hostyn|h-aarheynnyn ayns Sostyn]] na ny nuy [[Ardjyn Hostyn|ardjyn oik y Reiltys]] ny ardjyn oik reiltys yn Unnaneys Oarpagh.<ref>{{cite web|url=http://www.gos.gov.uk/national/|publisher=gos.gov.uk|accessdaymonth=31 Jerrey Souree|accessyear=2008|title=Welcome to the national site of the Government Office Network}}</ref> Ta cruinnaght as meoir jeeragh-reiht veih'n vlein 2000 ec un ard ny çheerey, [[Lught-reill Lunnin Vooar]] ny yei bhut er son y treealtys ayns refrane 'sy vlein 1998.<ref>{{cite web|url=http://www.london.gov.uk/london-life/city-government/history.jsp|title=A short history of London government|publisher=www.london.gov.uk|accessdaymonth=4 Jerrey Fouyir|accessyear=2008|archiveurl=https://www.webarchive.org.uk/wayback/archive/20100107035814/http://www.london.gov.uk/london-life/city-government/history.jsp|archivedate=2010-01-07|accessdate=2008-11-15}}</ref> V'eh kiarit dy vel cruinnaghtyn ardjynagh ennagh ec ny h-ardjyn elley, agh va'n eie shen jiooldit ny yei refrane ayns [[Shiar Hwoaie Hostyn]] 'sy vlein 2004.<ref>"The Government is now expected to tear up its twelve-year-old plan to create eight or nine regional assemblies in England to mirror devolution in Scotland and Wales."{{cite web|url=http://www.timesonline.co.uk/tol/news/uk/article503255.ece|title=Prescott's dream in tatters as North East rejects assembly|accessdaymonth=15 Toshiaght Arree|accessyear=2008|publisher=The Times|access-date=2008-11-15|archive-date=2010-05-25|archive-url=https://web.archive.org/web/20100525121618/http://www.timesonline.co.uk/tol/news/uk/article503255.ece|url-status=dead}}</ref> Heese veih'n leval ardjynagh, ta Lunnin jeant seose jeh 32 [[Balley corpagh Lunnin|valley corpagh]] as ta'n chooid elley dy Hostyn jeant seose jeh [[coondaeghyn moirvaljagh as neu-voirvaljagh Hostyn|coonseilyn coontae]] as coonseilyn ardjynagh ny [[lught-reill unnaneagh]]. Ta ny cooinseilee reiht ayns wardysyn un-oltey as wardysyn yl-oltey.<ref>{{cite web|url=http://www.lga.gov.uk/lga/aio/39780|title=Local Authority Elections|publisher=Local Government Association|accessdaymonth=3 Jerrey Fouyir|accessyear=2008|archiveurl=https://www.webarchive.org.uk/wayback/archive/20081027151017/http://www.lga.gov.uk/lga/aio/39780|archivedate=2008-10-27|accessdate=2008-11-15}}</ref>
Ta [[gurneilys ynnydagh ayns Nerin Hwoaie]], veih'n vlein 1973, reaghit ayns 26 coonseilyn ardjynagh, as ad reiht liorish [[un-vote yn-astreeaghey]] lesh cummaghtyn ta jeorit da shirvishyn lheid as çhaglym smooirlagh, stiuree moddee, as meansalaght pairkyn as ruillickyn.<ref>{{cite web|url=http://news.bbc.co.uk/1/hi/northern_ireland/4449092.stm|title=NI local government set for shake-up|publisher=BBC|date=18 Sauin 2005|accessdaymonth=15 Jerrey Fouyir|accessyear=2008}}</ref> Er 13 Mart 2008, ansherbee, va'n kiannoortys ayns coardailys rish treealtysyn un choonseil jeig y chroo as ad y chur ayns ynnyd y chorys roie<ref>{{cite web|url=http://www.northernireland.gov.uk/news/news-doe/news-doe-130308-foster-announces-the.htm|title=''Foster announces the future shape of local government''|publisher=NI Executive|accessdaymonth=20 Jerrey Fouyir|accessyear=2008|accessdate=2008-11-15|archivedate=2008-07-25|archiveurl=https://web.archive.org/web/20080725002254/http://www.northernireland.gov.uk/news/news-doe/news-doe-130308-foster-announces-the.htm}}</ref> as bee ny reihysyn s'niessey shlearit gys 2011 dy chooney lesh y çhyndaa.<ref>{{cite web|url=http://www.nio.gov.uk/local-government-elections-to-be-aligned-with-review-of-public-administration/media-detail.htm?newsID=15153|title=Local Government elections to be aligned with review of public administration|publisher=www.nio.gov.uk|accessdaymonth=2 Luanistyn|accessyear=2008|accessdate=2008-11-15|archivedate=2013-02-17|archiveurl=https://web.archive.org/web/20130217174725/http://www.nio.gov.uk/local-government-elections-to-be-aligned-with-review-of-public-administration/media-detail.htm?newsID=15153}}</ref>
Ta [[gurneilys ynnydagh ayns Nalbin]] rheynnit er bunneydys [[Aarheynnyn ny h-Albey|32 ard conseilagh]] lesh anchaslysyn mooarey ayns mooadys as earroo yn phobble. Ta ard-valjyn [[Glaschu]], [[Doon Edin]], [[Aberdon]] as [[Dùn Dèagh]] nyn ardjyn coonseilagh lhieu hene chammah as [[Politickaght Cooinseil ny Gaeltaght|Cooinseil ny Gaeltaght]] as goaill stiagh un trass eaghtyr ny h-Albey agh lesh 200,000 cummaltee. Ta'n cummaght currymit ayns ny lughtyn-reill ynnydagh fo stiurey coonseilee reiht, as ta 1,222<ref>{{cite web|url=http://www.psa.ac.uk/2007/pps/Bennie.pdf|title=STV in Scotland:Local Government Elections 2007|publisher=Political Studies Association|accessdaymonth=2 Luanistyn|accessyear=2008|accessdate=2008-11-15|archivedate=2011-03-10|archiveurl=https://web.archive.org/web/20110310194256/http://www.psa.ac.uk/2007/pps/Bennie.pdf}}</ref> jeu ec y traa t'ayn. T'ad geddyn çheet stiagh paart-emshiragh. Ta ny reihysyn gurneilit liorish [[un-vote yn-astreeaghey]] ayns wardysyn yl-olteynagh as ad reih tree ny kiare coonseilee. Ta Smaghteyr ny Symneyder reiht dy stiurey cruinnaghtyn. Ta ny coonseilee biallagh da coad aghtey as eh currit ayns bree liorish [[Commishoon Stundayrtyn ny h-Albey]].<ref>Ethical Standards in Public Life framework: {{cite web |title=Ethical Standards in Public Life |url=http://www.scotland.gov.uk/Topics/Government/local-government/ethical-standards |publisher=The Scottish Government |accessdate=2008-10-03 |archivedate=2014-12-11 |archiveurl=https://web.archive.org/web/20141211075152/http://www.scotland.gov.uk/Topics/Government/local-government/ethical-standards }}</ref> She [[Co-chruinnaght Lughtyn-reill Ynnydagh ny h-Albey]] (CLYA) sheshaght reihdagh coonseilyn ynnydagh ny h-Albey.<ref>{{cite web|url=http://www.cosla.gov.uk/index.asp?leftId=10001D0EF-10766726|title=About COSLA|publisher=cosla.gov.uk|accessdaymonth=3 Jerrey Fouyir|accessyear=2008|accessdate=2008-11-15|archivedate=2008-09-21|archiveurl=https://web.archive.org/web/20080921104646/http://www.cosla.gov.uk/index.asp?leftId=10001D0EF-10766726}}</ref>
Ta [[gurneilys ynnydagh ayns Bretin]] jeant seose jeh 22 choonseil unnaneagh, goaill stiagh ard-valjyn [[Cayr Deeth]], [[Abertawe]] as [[Casnewydd]], as ad nyn goonseilyn ynnydagh lheu hene.<ref>{{cite web|url=http://new.wales.gov.uk/topics/localgovernment/localauthorities/?lang=en|title=Local Authorities in Wales|publisher=new.wales.gov.uk|accessdaymonth=31 Jerrey Souree|accessyear=2008|accessdate=2008-11-15|archivedate=2014-05-30|archiveurl=https://web.archive.org/web/20140530004428/http://new.wales.gov.uk/topics/localgovernment/localauthorities/?lang=en}}</ref> Ta reihysyn ayn dagh kiare bleeaney liorish [[voteyn singil neu-astreeaghey]].<ref>{{cite web|url=http://www.aboutmyvote.co.uk/how_do_i_vote/voting_systems/local_government_elections_i-3.aspx|title=How do I vote?|publisher=www.aboutmyvote.co.uk|accessdaymonth=3 Jerrey Fouyir|accessyear=2008|accessdate=2008-11-15|archivedate=2008-10-19|archiveurl=https://web.archive.org/web/20081019215436/http://www.aboutmyvote.co.uk/how_do_i_vote/voting_systems/local_government_elections_i-3.aspx}}</ref> Va ny reihysyn jerrinagh ayns Mee Voaldyn ny bleeaney 2008. Ta [[Sheshaght Gurneilys Ynnydagh Vretin]] soiaghey magh parteeasyn ny coonseilyn ynnydagh ayns Bretin.<ref>{{cite web|url=http://www.wlga.gov.uk/|title=Welsh Local Government Association|publisher=Welsh Local Government Association|accessdaymonth=3 Jerrey Fouyir|accessyear=2008|access-date=2008-11-15|archive-date=2008-11-11|archive-url=https://web.archive.org/web/20081111154039/http://www.wlga.gov.uk/|url-status=dead}}</ref>
== Çheer-oaylleeaght ==
{{ardart|Çheer-oaylleeaght y Reeriaght Unnaneysit|Speyr y Reeriaght Unnaneysit}}
[[Coadan:uk topo en.jpg|thumb|Boayloaylleeaght y Reeriaght Unnaneysit]]
Ta'n Reeriaght Unnaneysit mygeayrt 245,000 kilometeryn kerrinagh (94,600 mi ker) er eaghtyr slane as eshyn jeant seose jeh ellan ny Bretyn Mooar, çheu hiar hwoaie ellan Nerin (Nerin Hwoaie) as ellanyn beggey elley.<ref name=factbook/> T'eh soit eddyr [[Yn Keayn Sheear|y Cheayn Sheear]] as [[Mooir Hostyn]], as eh 35 kilometeryn magh veih slyst hwoaie ny Frank ec boayl unnaneagh. Eddyr y daa heer ta [[Mooir yn Eeaght]].<ref name=factbook/> Ta'n Vretyn Vooar soit ayns dowan-lheeadyn eddyr 49° as 59° Hwoaie (ta Shetlynn sheeyney magh da 61° Hwoaie), as ayns dowan-liuridyn eddyr 8° Heear gys 2° Hiar. She boayl meenaghey y [[Preeu-linney Vunlaa|Phreeu-linney Vunlaa]] Thie Rollageydys Reeoil Ghreenwich, faggys da Lunnin. Ta'n Vretyn Vooar beggan ny smoo na 1,100 km (700 mi) er liurid as begnagh 500 km (300 mi) er lheead ayns y boayl s'lhea, agh she 1,350 km (840 mi) yn 'oddeeaght s'liurey eddyr daa voayl as ee ny foddeeaght eddyr [[Penn an Wlas]] 'sy [[Yn Chorn|Chorn]] as [[Thie Yuan Ghroat]] ayns [[Gallaibh]] ny h-Albey. Ta'n joarey thallooin eddyr Nerin Hwoaie as [[Pobblaght Nerin]] 360 kilometeryn (224 mi) er liurid.<ref name=factbook/>
Ta [[speyr]] tempreilagh 'sy Reeriaght Unnaneysit, lesh palçhid dy 'liaghee car ny bleeaney.<ref name=factbook/> Ta'n çhiassid arraghey rish ny raiee, agh t'eh neuchadjin çhiassidyn ny sloo na -10 °C (14.0 °F) ny ny smoo na 35 °C (95 °F) dy gheddyn. Ta ny geayaghyn baardee çheet veih'n sheear yiass, as ad cur emshyr fliugh as bog lheu veih'n Cheayn Sheear.<ref name=factbook/> Ta ny ronnaghyn hiar ny smoo fasteeagh veih'n gheay shoh, as myr shen t'ad nyn muill smoo çhirrym. Ta ny strooghyn Atlantagh, as adsyn çhiowit liorish [[Stroo yn Eearvooir]], cur lheu geuraghyn boggey, ayns y çheu heear er lheh, raad dy vel ny geuraghyn fliughey, er thalloo ard er lheh. Ta ny souraghyn ny s'çhoe ayns shiar yiass Hostyn, as y boayl shen ny s'faggys da'n vooarheer Oarpagh, as ny s'feayrey ayns y twoaie. Ta'n ceau niaghtee jantagh 'sy gheurey as ayns arragh gheuree.
Ta lieh chooid eaghtyr y Reeriaght Unnaneysit jeant seose jeh [[Sostyn]], as ee 130,410 kilometeryn kerrinagh (50,350 mi ker) er eaghtyr. Çheer injil t'aynjee son y chooid smoo agh ta çheer sleitagh ry gheddyn sheear hwoaie jeh [[linney Tees-Exe]] as goaill stiagh [[Sleityn Cumbria]] ayns Slyst ny Loghyn, [[Sleityn Pennine]] as cruink chlagh eayil ayns [[Slyst ny Binn]], [[Exmoor]] as [[Dartmoor]]. She [[Yn Thaimish|y Thaimish]], [[yn Severn|y Severn]] as [[Yn Humber|y Humber]] preeu-awinyn as inveryn Hostyn. She [[Scafell Pike]] (978 m er yrjid), as eh soit ayns [[Slyst ny Loghyn]], y slieau s'yrjey. Ta ram baljyn as ard-valjyn mooarey ayns Sostyn as, rere [[Cryssyn Baljagh Mooarey]], ta shey jeh ny 50 Cryssyn smoo yn Unnaneys Oarpagh soit aynjee.
[[Coadan:BenNevis2005.jpg|thumb|She [[Beinn Nivish]], ayns [[Sleityn Grampiagh]] ny h-Albey, yn slieau s'yrjey ayns [[ny h-Ellanyn Goaldagh]].]]
Trass eaghtyr y Reeriaght Unnaneysit t'ayns [[Nalbin]] as ee 78,772 kilometeryn kerrinagh (30,410 mi ker) er eaghtyr<ref>{{cite web |url=http://www.scotland.org/about/fact-file/index.html |title=Scotland Facts |publisher=www.scotland.org |accessedaymonth=16 Jerrey Souree |accessyear=2008 |accessdate=2008-11-16 |archivedate=2008-06-21 |archiveurl=https://web.archive.org/web/20080621045248/http://www.scotland.org/about/fact-file/index.html }}</ref> as t'ee goaill stiagh begnagh 800 ellanyn, çheu heear as hwoaie jeh'n vooarheer son y chooid smoo, [[ny h-Ellanyn Heear]], [[yn Orkaid]] as [[Shetlynn]] er lheh. Ta boayloaylleeaght ny h-Albey cowrit liorish [[Scoltey Joaree ny Gaeltaght]] - scoltey creggey creg-oaylleeagh – ta goll harrish mooarheer ny h-Albey veih [[Balley Eaylee]] gys [[Cala na Creige]]. Ta'n linney scoltey rheynn magh daa ard anchasley; [[yn Ghaeltaght]] ayns y twoaie as y sheear as [[Goaltaght ny h-Albey|y Ghoaltaght]] ayns y jiass as y shiar. Ta'n Ghaeltaght chregganagh goaill stiagh y chooid smoo jeh çheer sleitagh ny h-Albey, goaill stiagh slieau s'yrjey [[ny h-Ellanyn Goaldagh]] [[Beinn Nivish]] as ee 1,343 m (4,406 tr) er yrjid.<ref>{{cite web |url=http://www.bennevisweather.co.uk/index.asp |title=Ben Nevis Weather |publisher=www.bennevisweather.co.uk |accessedaymonth=26 Jerrey Fouyir |accessyear=2008 |accessdate=2008-11-16 |archivedate=2018-09-24 |archiveurl=https://web.archive.org/web/20180924202417/http://www.bennevisweather.co.uk/index.asp }}</ref> Ta'n Ghoaltaght, y chryss cheyll eddyr [[Keyllys y Chleayee]] as [[Linne Foirthe]] enmyssit myr "y Chryss Veanagh", ny s'inshley as ny s'rea as ta'n chooid smoo dy 'leih nyn gummal ayn goaill stiagh [[Glaschu]], yn ard-valley smoo ayns Nalbin, as [[Doon Edin]], preeu-valley as ynnyd politickagh ny h-Albey.
Cha nel [[Bretin]] agh 20,758 kilometeryn kerrinagh (8,010 mi ker) er eaghtyr, ny jeihoo eaghtyr y Reeriaght Unnaneysit. Çheer sleitagh t'aynjee son y chooid smoo, agh cha nel Bretin Jiass cho sleitagh na myr t'ayns y twoaie. Ta ny preeu-ardjyn çhynskylagh as y chooid smoo dy chummaltee ayns jiass Vretin, as ee goaill stiagh baljyn slystagh lheid as [[Cayr Deeth]] (preeu-valley as ynnyd politickagh as tarmaynagh), [[Abertawe]], [[Casnewydd]] as [[Glionyn Vretin Yiass]]. Ta ny sleityn s'yrjey ayns Bretin ayns [[Eryri]] (Baarle: ''Snowdonia'') as t'ad goaill stiagh [[yr Wyddfa]] as eh 1,085 m er yrjid – y slieau s'yrjey ayns Bretin. Ta ny smoo na 1,200 km (750 mi) oirr ny marrey ec Bretin. Ta shiartanse ellanyn magh ass mooarheer Vretin, as t'eh [[Moan]] (Bretnish: ''Ynys Môn'', Baarle: ''Anglesey'') yn ellan smoo as eh soit sheear hwoaie veih'n çheer.
Çheer sleityn beggey t'ayns [[Nerin Hwoaie]] as ee 14,160 kilometeryn kerrinagh (5,470 mi ker) er eaghtyr. Ta [[Logh Nay]], as eh 388 kilometeryn kerrinagh, ny logh smoo ayns ny h-Ellanyn Goaldagh.<ref>{{cite web |url=http://cain.ulst.ac.uk/ni/geog.htm |title=Geography of Northern Ireland |publisher=University of Ulster |accessdaymonth=22 Boaldyn |accessyear=2006 |access-date=2008-11-16 |archive-date=2012-01-18 |archive-url=https://web.archive.org/web/20120118133131/http://cain.ulst.ac.uk/ni/geog.htm |url-status=dead }}</ref> She [[Slieau Dónairt]] (849 m) y slieau s'yrjey 'sy çheer.
=== Ard-valjyn as covaljyssyn ===
{{ardart|Rolley ny baljyn smoo rere earroo yn phobble 'sy Reeriaght Unnaneysit|Rolley covaljyssyn 'sy Reeriaght Unnaneysit}}
T'ad preeu-valjyn ny çheeraghyn ennagh 'syn RU na: Beeal Feirshtey (Nerin Hwoaie), Cayr Deeth (Bretin), Doon Edin (Nalbin) as Lunnin (Sostyn); ta Lunnin ny phreeu-valley er y çheer slane.<ref name=factbook/>
{{Baljyn smoo y Reeriaght Unnaneysit}}
T'ad ny covaljyssyn smoo na:
* [[Slyst Baljagh Lunnin Mooar]] – 8.5 millioon;
* [[Covaljys West Midlands]] – 2.3 millioon;
* [[Slyst Baljagh Vanchuin Mooar]] – 2.2 millioon;
* [[Slyst Baljagh West Yorkshire]] – 1.5 millioon;
* [[Glaschu Mooar]] – 1.2 millioon.
== Sleih ==
Ta coontey-pobble ayns dagh çheer yn Reeriaght Unnaneysit dagh jeih bleeaney.<ref>{{cite web|url=http://www.statistics.gov.uk/geography/census_geog.asp|title=Census Geography|publisher=www.statistics.gov.uk|accessdaymonth=10 Jerrey Fouyir|accessyear=2008|archiveurl=http://webarchive.nationalarchives.gov.uk/20020607155455/http://www.statistics.gov.uk/geography/census_geog.asp|archivedate=2002-06-07}}</ref> Ta [[Oik ry hoi Staydraa Ashoonagh]] freggyrtagh er son çhaglym fysseree ayns Sostyn as Bretin, as ta [[Offish Chadjin Recortyssyn ny h-Albey]] freggyrtagh er son Nalbin as [[Jantys Staydraa as Ronsee Nerin Hwoaie]] er son Nerin Hwoaie.<ref>{{cite web|url=http://www.ons.gov.uk/about/surveys/census/index.html|title=Census|publisher=www.ons.gov.uk|accessdaymonth=11 Jerrey Fouyir|accessyear=2008|archiveurl=https://web.archive.org/web/20081201132440/http://www.ons.gov.uk/about/surveys/census/index.html|archivedate=2008-12-01|accessdate=2008-11-17}}</ref>
=== Earroo yn phobble ===
Rere coontey-pobble ny bleeaney 2001, va 58,789,194 cummaltee 'sy Reeriaght Unnaneysit, y treeoo çheer smoo 'syn [[Yn Unnaneys Oarpagh|Unnaneys Oarpagh]], y wheigoo çheer smoo 'sy [[Co-unnaneys ny h-Ashoonyn|Cho-unnaneys]] as y chied çheer as feed smoo er y theihll. Ec lieh vlein 2007, v'eh er credjal dy row 60,975,000 cummaltee 'sy çheer.<ref name="Population2007">{{cite news|url=http://www.statistics.gov.uk/CCI/nugget.asp?ID=6|title=Population estimates: UK population grows to 60,975,000|date=21 August 2008|publisher=Office for National Statistics|accessdaymonth=23 Luanistyn|accessyear=2008|archiveurl=http://webarchive.nationalarchives.gov.uk/20021202165044/http://www.statistics.gov.uk/CCI/nugget.asp?ID=6|archivedate=2 December 2002}}</ref> Ta'n inymmyrkey, yn [[Rolley çheeraghyn as thallooyn rere leahys troaraght|leahys ruggyryn]] as jerkallys-vea ny share cur lesh bishaghey roie earroo yn phobble.<ref>{{cite web |url=http://www.guardian.co.uk/business/2006/aug/25/immigrationasylumandrefugees.asylum |title=Rising birth rate, longevity and migrants push population to more than 60 million |publisher=The Guardian |date=25 Luanistyn 2006|accessdaymonth = 25 Luanistyn|accessyear=2006}}</ref> Hug staydraa shen er fys dooin, son y chied cheayrt, dy row ny smoo penshyneyryn na paitçhyn ny s'aa na 16 bleeaney d'eash.<ref>{{cite news|url=http://www.guardian.co.uk/world/2008/aug/22/population.socialtrends|title=Ageing Britain: Pensioners outnumber under-16s for first time|last=Travis|first=Alan|date=22 Luanistyn 2008|work=The Guardian|accessdaymonth=23 Luanistyn|accessyear=2008}}</ref>
Rere staydraa ny bleeaney 2007, v'eh er credjal dy row 51.1 millioonyn dy chummaltee ayns Sostyn.<ref name="natpop">{{cite news|url=http://www.statistics.gov.uk/pdfdir/popest0808.pdf|title=Population estimates: UK population approaches 61 million in 2007|date=21 Luanistyn 2007|publisher=Office for National Statistics|accessdaymonth=28 Luanistyn|accessyear= 2008|archiveurl=http://webarchive.nationalarchives.gov.uk/20080821110543/http://www.statistics.gov.uk/pdfdir/popest0808.pdf|archivedate=2008-08-21}}</ref> T'ee nane jeh ny çheeraghyn smoo clannit er feie ny cruinney lesh 383 cummaltee ayns dagh kilometer kerrinagh ayns 2003,<ref name=2003density>{{cite news|url=http://www.statistics.gov.uk/cci/nugget.asp?id=760|title=Population: UK population grows to 59.6 million|date=28 Jerrey Geuree 2005|publisher=Office for National Statistics|accessdaymonth = 20 Luanistyn|accessyear=2008}}</ref> lesh co-ghlooaghey er lheh ayns Lunnin as y shiar yiass. Ta oolaghyn ny bleeaney 2007 cur sleih-earroo ny h-Albey ec 5.1 millioon dy chummaltee, Vretin ec 3 millioonyn as Nerin Hwoaie ec 1.8 millioonyn<ref name=natpop/> lesh glooaghtyn foddey ny sloo na Sostyn. Cosoylit rish glooaght pobble Hostyn (383 cummaltee/km²) t'ad shoh ny h-earrooyn co-reggyrtagh: Bretin (142 cummaltee/km²), Nerin Hwoaie (125 cummaltee/km²) as Nalbin (65 cummaltee/km²).<ref name=2003density/>
'Sy vlein 2007, v'eh mean-[[leahys slane troaraght]] (LST) harrish y Reeriaght Unnaneysit na 1.90 paitçhyn da dagh ben.<ref name=Fertility2007>{{cite news|url=http://www.statistics.gov.uk/cci/nugget.asp?ID=951|title=Fertility: Rise in UK fertility continues|publisher=Office for National Statistics|date=21 Luanistyn 2008|accessdaymonth=23 Luanistyn|accessyear=2008}}</ref> V'eh oolit 'sy vlein 2008 dy daase troaraght yn RU gys 1.91 paitçhyn ny ben.<ref>{{cite web|url=http://www.guardian.co.uk/world/2008/aug/22/population.immigrationandpublicservices |title=UK population has increased to almost 61m|publisher=The Guardian |author=Alan Travis, home affairs editor |accessdaymonth=15 Jerey Fouyir|accessyear=2008}}</ref> Choud's ta'n leahys troaraght ta gaase cur lesh bishaghey earroo yn phobble, t'eh foddey ny sloo na binn "visheydys ny lhiennoo" ec 2.95 ayns 1964,<ref name=Fertility2007/> ny sloo na leahys son cur er ash (2.1), agh t'eh ny smoo na'n earroo ayns 2001 (1.63 – yn earroo s'loo).<ref name=Fertility2007/> She 1.92 as 1.90 ny leahysyn troaraght ayns Sostyn as Bretin, 1.73 ayns Nalbin, as 2.02 ayns Nerin Hwoaie.<ref name=Fertility2007/> Ta leahys ruggyryn ny s'yrjey mastey mraane joarree-ruggit na mraane Goaldagh, agh ta'n leahys gaase mastey mraane Goaldagh ynrican.<ref name=Fertility2007/>
=== Arraghey ===
Ta kiart ec seyranee [[yn Unnaneys Oarpagh]] cummal as obbraghey 'sy Reeriaght Unnaneysit<ref>[http://europa.eu/scadplus/leg/en/lvb/l33152.htm Right of Union citizens and their family members to move and reside freely within the territory of the Member States] europa.eu, feddynit er 6 Sauin 2008</ref> agh ta oardee shallidagh currit ayns bree lesh [[Yn Romaain|Romaainee]] as [[Yn Vulgeyr|Bulgeyree]], çheeraghyn v'er heet stiagh ayns yn UO ayns Jerrey Geuree ny bleeaney 2007.<ref>{{cite news|url=http://www.guardian.co.uk/uk/2007/sep/23/immigration.eu|title=Home Office shuts the door on Bulgaria and Romania|last=Doward|first=Jamie|coauthors=Temko, Ned|date=2007-09-23|work=The Observer|page=2|accessdate=2008-08-23}}</ref>
Cosoylit rish çheeraghyn Oarpagh elley, ta'n inymmyrkey cur lesh bishaghey earroo yn phobble<ref>[https://web.archive.org/web/20081210072321/http://www.thisislondon.co.uk/news/article-23542455-details/Immigration+and+births+to+non-British+mothers+pushes+British+population+to+record+high/article.do Immigration and births to non-British mothers pushes British population to record high], This is London, 22 Luanistyn 2008</ref> as eh freggyrtagh er son lieh y visheydys ayns ny bleeantyn eddyr 1991 as 2001. Va nane ass shey jeh ny sthie-arree ass [[yn Oarpey Hiar]], lesh y chooid vooar çheet ass çheeraghyn y [[Co-unnaneys Noa|Cho-unnaneys Noa]].<ref>
{{cite web
|url=http://www.telegraph.co.uk/news/uknews/1569400/Emigration-soars-as-Britons-desert-the-UK.html
|title=Emigration soars as Britons desert the UK}}
</ref> Ta earrooyn oikoil taishbyney dy haink 2.3 millioonyn arree gleney<ref>[http://www.dailymail.co.uk/news/article-1023512/Third-World-migrants-2-3m-population-boom.html Third World migrants behind our 2.3m population boom], Daily Mail, 3 Mean Souree, 2008</ref> gys yn RU veih'n vlein 1997,<ref>[https://web.archive.org/web/20081021051705/http://www.thisislondon.co.uk/standard/article-23575160-details/Tories+get+tough+on+immigration+after+Labour%27s+U-turn/article.do Tories call for tougher control of immigration], This is London, 20 Jerrey Fouyir, 2008</ref> as va 84% jeu ass çheeraghyn çheumooie jeh'n Oarpey,<ref>[http://www.telegraph.co.uk/news/newstopics/politics/labour/3230463/Immigration-Phil-Woolas-admits-Labour-responsible-for-string-of-failures.html Immigration: Phil Woolas admits Labour responsible for string of failures], Telegraph, 21 Jerrey Fouyir, 2008</ref> as ta 7 millioonyn ny smoo jeu jerkit roish ny bleeaney 2031.<ref>[http://news.bbc.co.uk/2/hi/uk_news/7602526.stm Minister rejects migrant cap plan], BBC News, 8 Mean Fouyir, 2008</ref> Ta ny h-earrooyn by yerree (2006) taishbyney inymmyrkey glen gys yn RU fo 191,000, ny smoo na'n 185,000 'sy vlein 2005.<ref>
{{cite web
|url=http://www.dailymail.co.uk/news/article-494235/Half-million-migrants-pour-Britain-year-200-000-leave.html
|title=Half a million migrants pour into Britain in a year}}
</ref><ref name=ONS>
{{cite web
|url=http://www.statistics.gov.uk/cci/nugget.asp?id=1311
|title=International migration: Net inflow rose in 2004
|publisher=Office for National Statistics
|date=15 Nollick 2005
|accessdaymonth = 22 November|accessyear=2006}}
</ref><ref>{{cite web
|url=http://www.statistics.gov.uk/CCI/nugget.asp?ID=260&Pos=2&ColRank=2&Rank=224
|title=International migration 2005: Net inflow 185,000
|publisher=Office for National Statistics
|date=2006-11-02
|accessdate=2006-11-22
|archiveurl=https://web.archive.org/web/20070705200424/http://www.statistics.gov.uk/CCI/nugget.asp?ID=260&Pos=2&ColRank=2&Rank=224
|archivedate=2007-07-05
}}</ref> Ansherbee, rere yn arraghey magh, ta ny smoo na 5.5 millioonyn Goaldee nyn gummal ass y çheer,<ref>{{cite web |url=http://www.ippr.org/publicationsandreports/publication.asp?id=509 |title=Brits Abroad: Mapping the scale and nature of British emigration |author=Dhananjayan Sriskandarajah and Catherine Drew |publisher=Institute for Public Policy Research |date=2006-12-11 |accessdate=2007-01-20 |archivedate=2007-08-28 |archiveurl=https://web.archive.org/web/20070828011816/http://www.ippr.org/publicationsandreports/publication.asp?id=509 }}</ref><ref>{{cite web |url=http://news.bbc.co.uk/1/shared/spl/hi/in_depth/brits_abroad/html/default.stm |title=Brits Abroad |publisher=BBC News |accessdate = 2007-04-20}}</ref><ref>{{cite web |url=http://news.bbc.co.uk/2/hi/uk_news/6210358.stm |title=5.5 m Britons 'opt to live abroad' |publisher=BBC|date=2006-12-11 |accessdate = 2007-04-20}}</ref> as t'ad ny king jurnaa ennoil na'n [[Yn Austrail|Austrail]], [[y Spaainey]], [[y Rank]], [[Yn Teelynn Noa|y Teelynn Noa]] as [[ny Steatyn Unnaneysit]].<ref>{{cite web|url=http://www.aol.in/news/story/2007042004189012000001/index.html|title=Indians largest group among new immigrants to UK|access-date=2008-11-17|archive-date=2008-12-24|archive-url=https://web.archive.org/web/20081224222353/http://www.aol.in/news/story/2007042004189012000001/index.html|url-status=dead}}</ref><ref>{{cite web |url=http://www.guardian.co.uk/world/2006/jul/26/spain.gilestremlett |title=Spain attracts record levels of immigrants seeking jobs and sun |publisher=The Guardian |date=2006-07-26 |accessdate = 2007-04-20}}</ref>
Ansherbee, ta studeyrys liorish faaishneyder yn ard-valley soilshaghey magh nagh vel earrooyn yn inymmyrkey shoh heose barrantoil as va mygeayrt 400,000 sthie-arree gleney 'sy vlein 2005.<ref>{{cite web |url=http://www.telegraph.co.uk/news/uknews/1538598/Immigration-%27far-higher%27-than-figures-say.html |title=Immigration 'far higher' than figures say |publisher=The Telegraph |date=2007-01-05 |accessdate = 2007-04-20}}</ref> Ta coreir 'ir quaagh 'sy Reeriaght Unnaneysit beggan ny sloo na t'ayns çheeraghyn Oarpagh ennagh elley, ansherbee.<ref>{{cite web |url=http://www.migrationinformation.org/Feature/display.cfm?id=402 |title=Europe: Population and Migration in 2005 |author=Rainer Muenz |publisher=Migration Policy Institute |date=Mean Souree 2006 |accessdate = 2007-04-02}}</ref> Bee yn inymmyrkey daa cheayrt ny smoo harrish y daa yeihaght ry heet gys 9.1 millioonyn, er coontey veih 31 Jerrey Geuree ny bleeaney 2008.<ref name=immigrants>
{{cite web|url=http://www.telegraph.co.uk/news/uknews/1577120/Britain-to-have-'9.1m-immigrants-by-2030'.html|title=Britain to have '9.1 m immigrants by 2030'|publisher=Daily Telegraph}}</ref>
=== Possanyn kynneeagh ===
{{ardart|Possanyn kynneeagh 'sy Reeriaght Unnaneysit}}
Ta pobble roie yn RU ny sluight jeh kynneeyn fuilleeaght anchasley, [[roie-Celtiee]], [[Celtiee]], [[Seyraanaght Romanagh|Romanee]], [[Anglo-Hostnee]] as [[Normanee]] son y chooid smoo. She sheckteraght kianglaghyn va crooit liorish yn [[Impiraght Ghoaldagh]] inymmyrkey soogh veih'n [[Yn Affrick|Affrick]], [[Ny Çheeraghyn Caribagh|y Charib]] as [[yn Aishey Yiass]] veih'n vlein 1945. Veih'n vlein 2004 haink mooarane dy 'leih veih'n [[Yn Oarpey Veanagh|Oarpey Veanagh]] as [[yn Oarpey Hiar]], agh, ays 2008, ta'n troa goll ergooyl as ta ram jeh ny sthie-arree shoh goll er ash dy valley, as adsyn faagail mooadys ny kynneeyn shen gyn fys.<ref>[http://news.bbc.co.uk/1/hi/england/7374683.stm 'Why I left UK to return to Poland'], BBC News</ref> Rere coontey-pobble ny bleeaney 2001, va 92.1% sleih-earroo ny çheerey nyn vir baney as 7.9%<ref>{{cite web |url=http://www.statistics.gov.uk/CCI/nugget.asp?ID=764&Pos=4&ColRank=1&Rank=176 |title=Ethnicity: 7.9% from a non-White ethnic group |publisher=Office for National Statistics |date=2004-06-24 |accessdate = 2007-04-02|archiveurl=http://webarchive.nationalarchives.gov.uk/20090909132851/http://www.statistics.gov.uk/CCI/nugget.asp?ID=764&Pos=4&ColRank=1&Rank=176|archivedate=2009-09-09}}</ref> cur enney orroo hene myr fir mestit ny jeh mynlagh kynneeagh.
{| class="wikitable sortable" style="text-align:right; font-size:100%;"
|-
!width="200px"| [[Possan kynneeagh]] !! [[Earroo yn phobble]] !! % y clane*
|-
| align = "left"| Kynneeyn baney || 54,153,898 || 92.1%</tr>
| align = "left"| Kynneeyn gorryn || 1,148,738 || 2.0%</tr>
| align = "left"| Injinee || 1,053,411 || 1.8%</tr>
| align = "left"| Pakistaanee || 747,285 || 1.3%</tr>
| align = "left"| Kynneeyn mestit || 677,117 || 1.2%</tr>
| align = "left"| Bengaalee || 283,063 || 0.5%</tr>
| align = "left"| Aishanee elley (neu-Heenee) || 247,644 || 0.4%</tr>
| align = "left"| Sheenee || 247,403 || 0.4%</tr>
| align = "left"| Elley || 230,615 || 0.4%</tr>
|-
|colspan="3" align="left"| {{smaller|* % sleih-earroo yn RU}}
|}
Ta'n neuchaslid kynneeagh anchasley harrish yn RU. Ayns Mean Souree ny bleeaney 2005, rere oolaghyn she possanyn kynneeagh neu-vaney 30.4% sleih-earroo Lunnin<ref>{{cite web|url=http://neighbourhood.statistics.gov.uk/dissemination/LeadTableView.do;jsessionid=ac1f930dce6eace0153cf12440ca609dc762c8ae598.e38OaNuRbNuSbi0Ma3aNaxiQbNiLe6fznA5Pp7ftolbGmkTy?a=3&b=276743&c=London&d=13&e=13&g=325264&i=1001x1003x1004&m=0&r=1&s=1201351285750&enc=1&dsFamilyId=1812&bhcp=1|title=Resident population estimates by ethnic group (percentages): London|publisher=Office for National Statistics|accessdate = 2008-04-23}}</ref> as 37.4% sleih-earroo [[Leicester]]<ref>{{cite web|url=http://www.neighbourhood.statistics.gov.uk/dissemination/LeadTableView.do?a=3&b=276827&c=Leicester&d=13&e=13&g=394575&i=1001x1003x1004&m=0&r=1&s=1208962134759&enc=1&dsFamilyId=1812|title=Resident population estimates by ethnic group (percentages): Leicester|publisher=Office for National Statistics|accessdate=2008-04-23|archivedate=2019-04-18|archiveurl=https://web.archive.org/web/20190418200442/http://www.neighbourhood.statistics.gov.uk/dissemination/LeadTableView.do?a=3}}</ref>, raad nagh vel agh 5% sleih-earrooyn [[Shiar Hwoaie Hostyn|Hiar Hwoaie Hostyn]], Vretin as [[Sheear Yiass Hostyn|Heear Yiass Hostyn]] jeh mynlee kynneeagh rere coontey-pobble ny bleeaney 2001.<ref>{{cite web|url=http://www.statistics.gov.uk/census2001/profiles/commentaries/ethnicity.asp|title=Census 2001 - Ethnicity and religion in England and Wales|publisher=Office for National Statistics|accessdate=2008-04-23|archive-date=2012-06-30|archive-url=https://web.archive.org/web/20120630185133/http://www.ons.gov.uk/ons/guide-method/census/2011/index.html|url-status=dead}}</ref> 'Sy vlein 2007, va 22% scollagyn ny [[bun-scoill]]yn as 17.7% scollagyn ny [[mean-scoill]]yn ayns [[Scoill y steat|scoillyn pohlldit]] [[Sostyn|Hostyn]] jeh sluight kynneeagh mynlagh.<ref>{{cite web|url=http://www.dcsf.gov.uk/rsgateway/DB/SFR/s000744/UPDATEDSFR30_2007.pdf |title=Schools and Pupils in England|date=January 2007|format=PDF |accessdate=2008-10-17}}</ref><ref>{{cite web|url=http://www.telegraph.co.uk/news/uknews/1564365/One-fifth-of-children-from-ethnic-minorities.html |title=One fifth of children from ethnic minorities |publisher=The Daily Telegraph |author=Graeme Paton |date=2007-10-01 |accessdate = 2008-03-28}}</ref>
=== Çhengaghyn ===
{{ardart|Çhengaghyn y Reeriaght Unnaneysit}}
[[Coadan:Anglospeak (subnational version).svg|thumb|Çheeraghyn as y [[Baarle|Vaarle]] loayrit ayndaue myr çhengey oikoil ''de facto'' ny ''de jure''.]]
Cha nel çhengey oikoil ''[[de facto|de jure]]'' 'sy Reeriaght Unnaneysit agh she [[Baarle]], [[Çhengaghyn Germaanagh|çhengey Ghermaanagh]], preeu-çhengey ny çheerey. Myr eiyrtys yn Impiraght Ghoaldagh son y chooid smoo, ren y çhengey skeaylley tessen y dowan, as haink urree dy ve çhengey eddyr-ashoonagh dellal chammah as çhengey ynsit smoo lheeadagh.<ref>{{cite web |url=http://www.cepr.org/pubs/new-dps/dplist.asp?dpno=2055 |title=English-Language Dominance, Literature and Welfare |author=Jacques Melitz |publisher=Centre for Economic Policy Research |date=1999 |accessdate=2006-05-26 |archivedate=2012-05-12 |archiveurl=https://web.archive.org/web/20120512123906/http://www.cepr.org/pubs/new-dps/dplist.asp?dpno=2055 }}</ref> Ta'n [[Baarle Albinagh|Vaarle Albinagh]], çhengey ta çheet magh ass [[Mean-Vaarle|Mean-Vaarle Hwoaie]], er enney ec y leval Oarpagh<ref>{{cite web|url=http://www.eurolang.net/index.php?option=com_content&task=view&id=2449&Itemid=52&lang=en |title=Eurolang - Language Data - Scots |publisher=Eurolang.net |date= |accessdate=2008-11-02}}</ref> as cha nel ee ny h-abbyrt jeh'n Vaarle. Ta kiare [[çhengaghyn Celtiagh]] ymmydit 'syn RU: [[Bretnish]], [[Cornish]], [[Gaelg Albinagh]] as [[Yernish]]. 'Sy vlein 2001 dooyrt 21% sleih-earroo Vretin dy row ad abyl loayrt trooid Bretnish,<ref>[https://web.archive.org/web/20070312085119/http://www.statistics.gov.uk/CCI/nugget.asp?ID=447&Pos=6&ColRank=1&Rank=192 National Statistics Online] at www.statistics.gov.uk</ref> earroo ta ny smoo na'n 18% ayns Coontey-pobble ny bleeaney 1991.<ref>{{cite web|url=http://www.statistics.gov.uk/downloads/theme_compendia/fow/WelshLanguage.pdf|title=Differences in estimates of Welsh Language Skills|archiveurl=http://webarchive.nationalarchives.gov.uk/20040722055520/http://www.statistics.gov.uk/downloads/theme_compendia/fow/WelshLanguage.pdf|archivedate=2004-07-22}}</ref> Chammah as shen, t'eh oolit dy vel 200,000 loayreyderyn ny Bretnish nyn gummal ayns Sostyn.<ref>[http://www.bbc.co.uk/voices/multilingual/welsh.shtml Welsh today by Prof. Peter Wynn Thomas]bbc.co.uk</ref> Va ablid ennagh ny Gaelg Albinagh ec 92,000 cummaltee ny h-Albey (ny begnagh 2% sleih-earroo ny h-Albey), goaill stiagh 72% dy chummaltee ayns [[ny h-Ellanyn Heear]].<ref>[https://web.archive.org/web/20130522110328/http://www.gro-scotland.gov.uk/press/news2005/scotlands-census-2001-gaelic-report.html Scotland's Census 2001 - Gaelic Report] gro-scotland.gov.uk, feddynit magh er 15 Jerrey Fouyir 2008</ref> Ta'n Vretnish as y Ghaelg Albinagh loayrit mygeayrt ny cruinney lesh beggan [[Gaelg Chanadagh|Ghaelg]] foast ry-gheddyn ayns [[Nalbin Noa]], [[Yn Chanadey|y Chanadey]], as y Vretnish ayns [[Patagonia]] ny [[Yn Argenteen|h-Argenteen]].
Harrish y Reeriaght Unnaneysit, dy chadjin t'eh eginagh da scollagyn studeyrys y yannoo er nah çhengey: gys 14 bleeaney d'eash ayns Sosyn,<ref>[http://news.bbc.co.uk/1/hi/education/3983713.stm Fall in compulsory language lessons] BNC News 4 Sauin, 2004</ref> as gys 16 bleeaney d'eash ayns Nalbin. T'ad [[Frangish]] as [[Germaanish]] ny nah çhengaghyn smoo ynsit ayns Sostyn as Nalbin. Ayns Bretin ta lesoonyn gys 16 bleeaney d'eash ynsit trooid Bretnish ny ta'n Vretnish ynsit myr nah çhengey.<ref>[https://archive.is/20120530050454/www.bbc.co.uk/wales/schoolgate/aboutschool/content/inwelsh.shtml The School Gate for parents in Wales] BBC Wales, feddynit magh er 11 Jerrey Fouyir, 2008</ref>
=== Craueeaght ===
{{ardart|Craueeaght 'sy Reeriaght Unnaneysit}}
Ta tradishoonyn foddey ny [[Creestiaght]] 'sy Reeriaght Unnaneysit as ayns ny çheeraghyn er gholl roish crooaght yn RU as ta kiangley eddyr yn agglish as y steat foast ayn. Ta ronsee coyrlaghey dy vel credjue ayns [[Jee]] ec 38% sleih-earroo ny çheerey as dy vel 40% ny smoo credjal ayns "spyrryd ny bea-lajerys".<ref name=Eurobarometer>{{PDFlink|[http://ec.europa.eu/public_opinion/archives/ebs/ebs_225_report_en.pdf Eurobarometer poll conducted in 2005]|1.64 MB}}. Page 9. European Commission. Feddynit er 7 Nollick 2006</ref> Ta'n pobble cur adsyn hene er enney lesh [[craueeaght]] er son cooishyn cultooragh as crauee as t'eh aahoilshit ayns meereggyraght eddyr earrooyn sleih as ad fockley magh credjue ayns Jee as sleih as ad cur adsyn hene er enney lesh craueeaght unnaneagh. Ta'n [[Creestiaght|Chreestiaght]] ny preeu-chraueeaght: er Creearey [[Tearfund]] ny bleeaney 2007<ref name=Tearfund_Survey>{{cite web |url=http://www.tearfund.org/webdocs/Website/News/Final%20churchgoing%20report.pdf |title=Tearfund Survey 2007 |accessdate=2007-05-05 |archivedate=2007-06-14 |archiveurl=https://web.archive.org/web/20070614005402/http://www.tearfund.org/webdocs/Website/News/Final%20churchgoing%20report.pdf }}</ref> dooyrt 53% dy reggyrtee dy row ad nyn Greestee as ny h-earrooyn shen cosoylit rish creearey British Social Attitudes Survey ny bleeaney 2004,<ref name=BSAS2004>{{Cite web
|publication-date = 2006-02-20
|year = 2004
|title = British Social Attitudes Survey
|publisher = National Centre for Social Research
|url = http://www.data-archive.ac.uk/findingData/snDescription.asp?sn=5329
|accessdate = 2008-02-25
}}</ref> as rish Coontey-pobble ny bleeaney 2001 as eh gra dy vel 71.6% sleih-earroo ny çheerey nyn Greestee,<ref>{{cite web |url=http://www.statistics.gov.uk/cci/nugget.asp?id=293 |title=UK Census 2001 |accessdate=2007-04-22}}</ref> (faagail magh dy vel y feysht 'sy Choontey-pobble ny s'boggey). Ny yei'n Chreestiaght ta'n Islam, y Hindooghys, y Seeckaghys as yn Ewaghys rere earroo eiyrtyssee.
==== Creestiaght ====
[[Coadan:Westminster abbey west.jpg|thumb|upright|Ta [[Abban ny Mannishter Heear]] ymmydit da [[crooinaghey]] [[Reeaghyn as benreinyn y Reeriaght Unnaneysit|Reeaghyn as Benreinyn Goaldagh]], nar t'ad jeant fir ny mraane toshee er [[Agglish Hostyn]].]]
Ta [[Agglish Hostyn]], quoi va scarrit magh veih [[Agglish ny Raue]] ayns 1534 (jeeagh er [[Aachummey Hostyn]]), ny h-Agglish 'steat' ayns Sostyn: ta'n agglish freayll [[Çhiarnyn Spyrrydoil|tuarystallys]] ayns [[Parlamaid y Reeriaght Unnaneysit|Parlamaid yn RU]] as ta'n [[Reeaghyn as benreinyn y Reeriaght Unnaneysit|ree ny yn venrein Goaldagh]] ny oltey jeh'n Agglish (shirrit fo Olt 2 jeh [[Conaant yn Unnaneys]]) chammah as ny [[Ard-chiannoort Agglish Hostyn|Ard-chiannoort]]. Ayns ny bleeantyn shoh caie ta cummaght yeeragh ny h-agglish goll sheese agh ta kiart towseyn slattyssagh (bentyn rish reirey crauee) freaylt eck trooid yn [[Ard-choyrle Chadjin Agglish Hostyn|Ard-choyrle Chadjin]] as foddee orroo dy v'er heet nyn drooid liorish y Pharlamaid.
Ta'n [[Agglish Albinagh]] (enmyssit dy neuformoil myr y [[Kirk]]), quoi va scarrit magh veih'n Raue ayns 1560 (jeeagh er [[Calveenaghys]] as [[Aachummey ny h-Albey]]) ny h-agglish [[Presbyteyraght|Phresbyteyragh]], as t'ee er enney myr [[agglish ashoonagh]] ny h-Albey, as cha nel ee fo smaght y steat. Ta'n venrein ny h-oltey chadjin jeh'n Agglish, as ta shirreydys urree guee er shickyrys ny h-Agglish y choadey ec y chrooinaghey. Ta [[Agglish Aspickagh ny h-Albey]], quoi ta ny cooid jeh'n Chommeeys Anglicaanagh, goaill toshiaght veih bunneeaght yerrinagh ny Presbyteyraght ayns Nalbin ayns 1690 nar v'ee rheynnit magh veih'n Agglish Albinagh, as cha nel ee ny 'fo-agglish' Agglish Hostyn. Myr eiyrtys skeiltyn elley 'syn Agglish Albinagh, 'sy nuyoo eash jeig er lheh, va agglishyn Presbyteyragh anchasley elley, goaill stiagh [[Agglish Heyr ny h-Albey (ny yei 1900)|Agglish Heyr ny h-Albey]], currit er bun.
Ayns ny 1920yn, va'n [[Agglish ayns Bretin]] scarrit magh veih Agglish Hostyn as haink urree dy ve "[[Jee-vunneydaght|jee-vunnit]]". Ta'n Agglish ayns Bretin foast 'sy [[Commeeys Anglicaanagh|Chommeeys Anglicaanagh]]. Ta'n [[Saasilaght]] as agglishyn seyrey elley troshtagh dy tradishoonagh ayns Bretin.
Va'n agglish Anglicaanagh, [[Agglish Nerin]] jee-vunnit 'sy nuyoo eash jeig. T'ee goaill stiagh ellan slane [[Nerin]] ([[Nerin Hwoaie]] hene as [[Pobblaght Nerin]] hene). Ayns Nerin Hwoaie, ta ny [[Protestoonys|Protestoonee]] nyn mooar-chooid.<ref>[http://www.statistics.gov.uk/cci/nugget.asp?id=980 Communities in Northern Ireland] statistics.gov.uk, feddynit er 29 Jerrey Fouyir 2008</ref> agh ta Agglish ny Raue ny h-Agglish smoo. Ta'n [[Agglish Phresbyteyragh ayns Nerin]], as ee bentyn rish yn Agglish Albinagh rere jeeoilys as shennaghys, ny h-Agglish Phrotestoonagh smoo.
Ta Agglish ny Raue ny nah rheynn chredjue ny Creestiaght smoo 'syn RU. Lurg yn [[Aachummey Protestoonagh]], va leighyn geyrey currit ayns bree nyn oi, agh v'ad scughit liorish leighyn [[Seyrey ny Catolee]] ayns 1829. Ta reiltysyn Catoleagh er lheh ayn da Sostyn as Bretin, Nalbin, as Nerin.
T'ad agglishyn Creestee mooarey elley na [[Saasilaght|Saasilee]], bunnit ec [[John Wesley]] ayns Lunnin, as [[Bashtee]]. Ta agglishyn [[Sushtallaght|Sushtallagh]] as [[Kingeeshaghys|Kingeeshagh]] aasagh chammah, as y chooid smoo jeu bishaghey lesh inymmyrkey veih'n [[Co-unnaneys ny h-Ashoonyn|Cho-unnaneys]] as çheu hoal. Ta ny h-agglishyn Kingeeshagh 'sy treeoo ynnyd ny yei Agglish Hostyn as Agglish ny Raue rere fieaumanys.<ref>[https://web.archive.org/web/20110814125609/http://www.timesonline.co.uk/tol/news/uk/article757934.ece 'Fringe' Church winning the believers] Timesonline, 19 Nollick 2006</ref>
==== Craueeaghtyn elley ====
[[Coadan:ELM and LMC Angled View 1.jpg|thumb|[[Mosk Lunnin Hiar]], nane jeh ynnydyn ooashlee Islamagh smoo 'sy çheer.]]
T'eh er credjal dy vel mygeayrt 1.8 millioonyn [[Islam|Moslymee]].<ref>{{cite web |url=http://www.timesonline.co.uk/tol/comment/faith/article700684.ece |title=We need imams who can speak to young Muslims in their own words |accessdate=2006-08-09 |date=2006-08-05 |publisher=The Times}}</ref> Ta [[mosk]]yn ry gheddyn ayns dagh ard. T'ad ny possanyn islamagh smoo jeh'n sluight [[Yn Phakistaan|Pakistaanagh]], [[Yn Vangladesh|Bengaalagh]] as [[Yn Injey|Injinagh]]. Er y gherrid, ta kemmyrkee veih'n [[Yn Tomaal|Tomaal]], [[Pobblaght Hurkagh ny Cyprys Hwoaie|y Chyprys Hwoaie]], [[ny Çheeraghyn Balkanagh]] as çheeraghyn Arabagh cur lesh bishaghey mooad ny Moslymee Goaldagh. Ta arganys ny bleeaney 2006 fo'n [[burqa]], ayns cohaggloo liorish y pholitickeyr [[Jack Straw]], aahoilshaghey scarrey eddyr Goaldee ennagh as ad cur feyshtyn er mestey stiagh ny Moslymee lesh y çheshaght Ghoaldagh, as ad t'er credjal dy vel ceau ny breid freggyrtagh lhee, 'syn RU.<ref>{{cite web |url=http://www.cnn.com/2006/WORLD/europe/10/07/uk.straw/ |title=Veil: British papers back Straw |accessdate=2006-05-11 |date=2006-07-10 |publisher=CNN}}</ref>
Ta craueeaghtyn Injinagh ry-gheddyn foast, lheid as [[Hindooghys]], [[Seeckaghys]], [[Buddhaghys]] as [[Jainaghys]]. Rere coontey-pobble ny bleeaney 2001, va mygeayrt 560,000 Hindooee as 340,000 Seeckee 'syn RU. Ta'n Buddhaghys cliaghtit ec 150,000 dy 'leih.<ref>{{cite web |url=http://www.statistics.gov.uk/census2001/profiles/uk.asp |title=Census 2001 - Profiles |accessdate=2007-01-27 |publisher=Office for National Statistics |archive-date=2007-07-17 |archive-url=https://web.archive.org/web/20070717035415/http://www.statistics.gov.uk/census2001/profiles/uk.asp |url-status=dead }}</ref> Ta un reagheydys neu-reiltysagh ooley dy vel 800,000 Hindooee 'syn RU.<ref>{{cite web |url=http://hinduism.iskcon.com/tradition/1212.htm |title=Hinduism in Britain today |publisher=International Society for Krishna Consciousness |accessdate=2007-04-22 |archivedate=2010-12-17 |archiveurl=https://web.archive.org/web/20101217230639/http://hinduism.iskcon.com/tradition/1212.htm }}</ref> Ta nane jeh ny çhiambleyn gonney çheu mooie jeh'n [[Yn Injey|Injey]] soit ayns [[Leicester]].<ref>[https://web.archive.org/web/20100921091924/http://www.jaincentre.com/ The Jain Centre, Leicester. UK] jaincentre.com, feddynit magh er 29 Jerrey Fouyir 2008</ref>
Ta mygeayrt 270,000 Ewnyn 'sy Vretyn Vooar, rere coontey-pobble ny bleeaney 2001.<ref>{{cite web |url=http://www.statistics.gov.uk/census2001/profiles/uk.asp |title=Census 2001 - Profiles |accessdate=2007-12-02 |publisher=Office for National Statistics |archive-date=2007-07-17 |archive-url=https://web.archive.org/web/20070717035415/http://www.statistics.gov.uk/census2001/profiles/uk.asp |url-status=dead }}</ref>
Ta co-phobble anjee as meechredjuagh aasagh lesh mygeayrt 9.1 millioonyn dy 'leih (15% sleih-earroo yn RU) gaggyrt nagh vel craueeaght erbee oc ayns coontey-pobble ny bleeaney 2001.<ref>[http://webarchive.nationalarchives.gov.uk/20031221054139/http://www.statistics.gov.uk/STATBASE/ssdataset.asp?vlnk=6590 Religion: 2001 Census] National Statistics website.</ref>
== Tarmaynys ==
{{ardart|Tarmaynys y Reeriaght Unnaneysit}}
[[Coadan:City of London Skyline from Canary Wharf - Sept 2008.jpg|thumb|Ta Lunnin ny ynnyd argidoil smoo 'syn Oarpey as nane jeh ny tree ynnydyn argidoil smoo er y theihll myrane lesh [[York Noa (balley)|York Noa]] as [[Tokyo]].<ref name="London's place in economy">{{cite web|url=http://www.cityoflondon.gov.uk/NR/rdonlyres/2CAE66FB-2DD5-41A5-B916-8FFC37276059/0/BC_RS_lpuk_0511_FR.pdf|title=London's place in the UK economy, 2005–06|publisher=City of London|accessdate=2008-03-11}}</ref>]]
Ta tarmaynys yn RU jeant seose (ayns oardagh lhargee mooadys) jeh tarmaynysyn [[Tarmaynys Hostyn|Hostyn]], [[Tarmaynys ny h-Albey|ny h-Albey]], [[Tarmaynys Vretin|Vretin]] as [[Tarmaynys Nerin Hwoaie|Nerin Hwoaie]]. Rere [[leahys coonree|leahysyn coonree]] margee, ta'n Reeriaght Unnaneysit ny wheigoo tarmaynys smoo er y theihll<ref>{{cite web |url=http://www.imf.org/external/pubs/ft/weo/2006/01/data/dbcoutm.cfm?SD=2005&ED=2005&R1=1&R2=1&CS=3&SS=2&OS=C&DD=0&OUT=1&C=512-941-914-446-612-666-614-672-311-946-213-137-911-962-193-674-122-676-912-548-313-556-419-678-513-181-316-682-913-684-124-273-339-921-638-948-514-686-218-688-963-518-616-728-223-558-516-138-918-353-748-196-618-278-522-692-622-694-156-142-624-449-626-564-628-283-228-853-924-288-233-293-632-566-636-964-634-182-238-453-662-968-960-922-423-714-935-862-128-716-611-456-321-722-243-965-248-718-469-724-253-576-642-936-643-961-939-813-644-199-819-184-172-524-132-361-646-362-648-364-915-732-134-366-652-734-174-144-328-146-258-463-656-528-654-923-336-738-263-578-268-537-532-742-944-866-176-369-534-744-536-186-429-925-178-746-436-926-136-466-343-112-158-111-439-298-916-927-664-846-826-299-542-582-443-474-917-754-544-698&S=NGDPD&CMP=0&x=31&y=8 |title=Report for Selected Countries and Subjects |publisher=International Monetary Fund |date=2005 |accessdate=2006-05-15}}</ref> as ny nah harmaynys moo 'syn Oarpey lurg y [[Yn Ghermaan|Ghermaan]].
Hoshee [[yn Çhyndaa Çhynskylagh]] 'sy Reeriaght Unnaneysit lesh co-ghlooaghey toshee er çhynskylyn eddrymey lheid as troggal lhongyn, meaineyrys geayil, obbragh staillin, as çhynskyl ny feederaght. Chroo yn impiraght margey har mooir da troaryn Goaldagh, as eh lhiggey da'n RU jannoo kioneys er traght eddyr-ashoonagh 'sy 19oo eas. Ansherbee, lesh çhynskylaghey çheeraghyn elley, myrane lesh parail tarmaynagh ny yei daa chaggey dowanagh, hoshee yn Reeriaght Unnaneysit e vondeish chohirreydagh y choayl as haghyr parail ayns çhynskyl eddrym veggan as ny veggan, trooid y 20oo eash. Ta'n jantyssaght foast ny chooid trome-cheeallagh y tarmaynys, agh cha row eh coontit agh er son sheyoo y troar ashoonagh 'sy vlein 2003.<ref>{{cite web |url=http://www.dti.gov.uk/ministers/speeches/hewitt150704b.html |title=TUC Manufacturing Conference |author=Patricia Hewitt |publisher=Department for Trade and Industry |date=2004-07-15 |accessdate=2006-05-16 |archivedate=2007-06-03 |archiveurl=http://webarchive.nationalarchives.gov.uk/20070603191213/http://www.dti.gov.uk/ministers/speeches/hewitt150704b.html }}</ref> Ta'n çhynskyl gleashtanagh Goaldagh ny vooar-chooid jeh'n ronney shoh, agh haghyr pareil ayn lesh cohuittym yn [[MG Rover Group|''MG Rover Group'']], ansherbee, as ec y traa t'ayn ta'n chooid smoo jeh'n çhynskyl fo shellooderaght colughtyn joarree. She [[BAE Systems|''BAE Systems'']], y colught Oarpagh [[EADS]], shellooder ''[[Airbus]]'', ny colughtyn smoo ayns obbragh etlanyn theayagh as coadee. Ta ronney mooar margee jeshaghtyn etlanys y theihill ec [[Rolls-Royce plc|''Rolls-Royce'']]. Ta'n çhynskyl kemmigagh as potacareeagh lajer 'syn RU, lesh y nah as y sheyoo colught potacareeagh er y theihll, ''[[GlaxoSmithKline]]'' as ''[[AstraZeneca]]''.<ref>{{cite web |url=http://www.dti.gov.uk/sectors/biotech/pharmaceutical/page10219.html |title=The Pharmaceutical sector in the UK |accessdate=2007-02-27 |publisher=Department of Trade and Industry |archivedate=2007-02-05 |archiveurl=https://web.archive.org/web/20070205141427/http://www.dti.gov.uk/sectors/biotech/pharmaceutical/page10219.html }}</ref>
[[Coadan:London.bankofengland.arp.jpg|thumb|left|[[Banc Hostyn]]; [[bank meanagh]] y Reeriaght Unnaneysit.]]
Ta ronney shirveishyn yn RU bishaghey, ansherbee, as nish t'eh freggyrtagh son 73% LTS ny çheerey.<ref>{{cite web |date=2006-04-26 |url=http://www.statistics.gov.uk/statbase/Product.asp?vlnk=9333 |title=Index of Services (experimental) |publisher=Office for National Statistics |accessdate=2006-05-24}}</ref> Ta'n ronney shirveishyn jannoo kioneys er [[shirveishyn argidoil]], ayns bancaght as urryssaght er lheh. Ta Lunnin ny ynnyd argidoil smoo er y theihll lesh [[Boorse Lunnin]], [[Boorse Lunnin ry hoi Conaantyn ry-heet Argidoil as Reihyn Eddyr-ashoonagh]] (LIFFE), as y margey urryssagh [[Lloyd's of London|''Lloyd's of London'']] bunnit ayns [[Ard-valley Lunnin]]. Ta Lunnin ny ynnyd scanshoil ry hoi [[dellal eddyr-ashoonagh]] as cochionneeaght as t'eh ny valley toshee er tree "ynnydyn anney" ry hoi [[Yn Tarmaynys Dowanagh|y tarmaynys dowanagh]] (myrane lesh [[York Noa (balley)|York Noa]] as [[Tokyo]]).<ref>{{cite book|author=[[Saskia Sassen|Sassen, Saskia]]|title=The Global City: New York, London, Tokyo|year=2001|publisher=Princeton University Press|edition=2nd edition}}</ref> Ta'n co-ghlooaghey banglaneyn bancyn joarree smoo er y theihll ayn. 'Sy yeihaght jerrinagh, ta ynnyd argidoil trughanagh gaase ayns ny [[Lhonglannyn Lunnin|Lhonglannyn]], lesh [[HSBC]] as [[Barclays plc|''Barclays Bank'']] aahoiaghey ny h-ard-offishyn ayns shen. Ta mooarane colughtyn eddyr-ashoonagh nagh vel bunnit 'syn RU son y chooid smoo, lheid as ''[[Citigroup]]'', aahoiaghey ny kione-cherrooyn Oarpagh gys Lunnin. Ta nane jeh ny h-ynnydyn argidoil smoo 'syn Oarpey 'sy phreeu-valley Albinagh, Doon Edin<ref>{{cite web |url=http://www.publications.parliament.uk/pa/cm200203/cmhansrd/vo030430/halltext/30430h05.htm#30430h05_spnew0|title=Financial Services Industry |first=Mark |last=Lazarowicz (Labour MP) |date=2003-04-30|publisher=United Kingdom Parliament |accessdate=2008-10-17}}</ref> as ta kione-cherroo yn [[Royal Bank of Scotland Group|''Royal Bank of Scotland Group'']], nane jeh ny bancyn smoo 'sy dowan, soit ayn.
[[Coadan:Oil_platform_under_repair_at_Gdańsk_Shipyard,_Poland_-_20070504.jpg|thumb|Ta [[Ooill Vooir Hostyn|ooill as gas Vooir Hostyn]] cur cooid da feme bree yn RU.]]
Ta'n turrysid feer feer scanshoil da tarmaynys y Reeriaght Unnaneysit. Lesh çheet ny smoo na 27 millioonyn turryssee 'sy vlein 2004, ta'n Reeriaght Unnaneysit rang-oardraghit myr y sheyoo kione jurnaa smoo scanshoil 'sy dowan.<ref>{{PDFlink|[http://www.world-tourism.org/facts/eng/pdf/highlights/2005_eng_high.pdf International Tourism Receipts]|1.10 MB}}. UNWTO Tourism Highlights, Edition 2005 Duillag 12. World Tourism Organisation. Feddynit magh er 24 Boaldyn 2006</ref> Ta Lunnin, er oirr mooar, ny valley smoo shirrit 'sy dowan lesh 15.6 millioonyn keayrtee ayns 2006, roish Bangkok (10.4 millioonyn) as [[Paarys]] (9.7 millioonyn).<ref>{{cite news|url=http://www.euromonitor.com/Top_150_City_Destinations_London_Leads_the_Way|title=Top 150 city destinations: London leads the way|first=Caroline|last=Bremner|publisher=Euromonitor International|date-2007-10-11|accessdate=2008-08-28}}</ref>
Ta ny çhynskylyn crootagh freggyrtagh son 7% [[Lane Tooilliu Feeuid|LTF]] ny çheerey ayns 2005 as daase eh er mean-leahys 6% 'sy vlein eddyr 1997 as 2005.<ref>{{cite web |date=2007-03-09 |url=http://www.culture.gov.uk/reference_library/media_releases/2132.aspx |title=From the Margins to the Mainstream - Government unveils new action plan for the creative industries |publisher=DCMS |accessdate=2007-03-09 |archiveurl=https://archive.ph/20120628214959/http://webarchive.nationalarchives.gov.uk/+/http://www.culture.gov.uk/reference_library/media_releases/2132.aspx |archivedate=2012-06-28 }}</ref>
Ta ronney eirinagh yn RU coontit er son 0.9% LTS ny çheerey.<ref name=factbook/>
Ta tashtey beg geayil 'syn RU myrane lesh tashtaghyn tuittymagh<ref>{{cite web |date=2006-11-30 |url=http://europe.theoildrum.com/story/2006/11/19/135819/75 |title=The architecture of UK offshore oil production in relation to future production models |publisher=The Oil Drum |accessdate=2008-08-27}}</ref> [[gas najooragh]] as [[tashtaghyn ooill]]. Ta ny smoo na 400 millioonyn thunnaghyn dy hashtaghyn geayil er enney 'syn RU.<ref name="Coal 1">{{cite web|title=Coal Around the World|author=UK Coal|url=http://www.ukcoal.com/coal-around-the-world|accessdate=2008-09-23|publisher=UK Coal|year=2007|work=UK Coal website|archivedate=2008-10-13|archiveurl=https://web.archive.org/web/20081013045749/http://www.ukcoal.com/coal-around-the-world}}</ref> 'Sy vlein 2004, va lane ymmyd geayil yn RU (goaill stiagh cooid kionnit stiagh) mygeayrt 61 millioonyn hunnaghyn,<ref name="BERR 1">{{cite web|title=Chapter 2: Long term trends Solid fuels and derived gases|author=UK Coal|url=http://www.berr.gov.uk/files/file19261.pdf|accessdate=2008-09-23|publisher=Department for Business Enterprise & Regulatory Reform|year=2008|work=BERR website|archivedate=2008-09-23|archiveurl=https://web.archive.org/web/20080923193134/http://www.berr.gov.uk/files/file19261.pdf}}</ref> as eh lhiggey da'n RU dy ve hene-haieagh ayns geayl er feie 6.5 bleeaney, ansherbee rere leahysyn tayrn magh roie, bee ny meainyn foast tayrn geayl magh ayns 20 bleeantyn.<ref name="Coal 1"/> She caghlaays lostit lectraghys gientyn geayl-lostit gasaghey geayil keillit (GGK). She tilgey stiagh gaal as ocsygien trooid towl meainey GGK, as eh tilgey magh gas veih'n gheayl as cur y mestey gys y thalloo - foddee saase seyrey geayil lesh towseyn injil carboan. T'eh er credjal dy vel eddyr 7 billioonyn as 16 billioonyn thunnaghyn GGK ayns eaghtyryn er çheer, foddee.<ref name="Coal 2">{{cite web|title=Coal Reserves in the United Kingdom|author=The Coal Authority|url=http://www.coal.gov.uk/media//860AD/Response%20to%20Energy%20Review%20-%20Appendix%202.pdf|accessdate=2008-09-23|publisher=The Coal Authority|year=2007|work=Response to Energy Review|archiveurl=https://web.archive.org/web/20080923193135/http://www.coal.gov.uk/media//860AD/Response%20to%20Energy%20Review%20-%20Appendix%202.pdf|archivedate=2008-09-23}}</ref> Er ymmyd roie geayil 'syn RU, ta ny towseyn shoh cowraghey tashtaghyn as ad abyl cour er feie 200 as 400 bleeantyn ec yn RU.<ref name="Coal 3">{{cite web|title=BBC News England Expert predicts 'coal revolution'|author=BBC|url=http://news.bbc.co.uk/1/hi/england/7046981.stm|accessdate=2008-09-23|publisher=BBC|dater=2007-10-16|work=Ynnyd-eggey BBC News}}</ref>
Ta cassey yn reiltys 'sy tarmaynys fo stiurey [[Shansyleyr y Rheynn Argidys]] as eh ny 'er toshee er [[Staaitchishtey yn AO]], agh ta'n [[Ard-vinishter y Reeriaght Unnaneysit|Ard-vinishter]] ny [[Kied-hiarn y Staaitchishtey|Chied-hiarn y Staaitchishtey]]; ta Shansyleyr y Rheynn Argidys ny Nah-hiarn y Staaitchishtey. Ayns ny bleeantyn jerrinagh, va'n RU stiurit ayns freggyrtys lesh prinsabylyn feoiltaghey margee as keeshyn as curmaghey injil. Veih'n vlein 1997, ta [[Bing Pholasee Argidoil]] [[Banc Hostyn|Vanc Hostyn]], fo stiurey [[Kiannoort Vanc Hostyn|Chiannoort Vanc Hostyn]], freggyrtagh son lhie [[leahys banc oikoil|leahysyn use]] ec cormidyn as ad ymmyrçhagh dy chooilleeney lane deanyn bolgey da'n tarmaynys. Ta ny leahysyn shen currit nyn lhie ec y Shansyler dagh blein.<ref>[https://web.archive.org/web/20080312060011/http://www.bankofengland.co.uk/about/more_about.htm More About the Bank] www.bankofengland.co.uk, feddynit magh er 8 Luanistyn 2008</ref> Ta Reiltys ny h-Albey, rere lowal rish Parlamaid ny h-Albey, abyl leahys bunneydagh keeshyn er çheet stiagh ry-eeck ayns Nalbin y chaghlaa rere 3 pingyn ny smoo ny ny sloo 'sy phunt, agh cha row y cummaght shen cliaghtit derrey yn laa t'ayn.
'Sy vlein 2007, va [[feeaghan reiltys]] yn RU fo 44% [[Lane Troar Sthie|LTS]].<ref name=factbook>[https://web.archive.org/web/20090513124910/https://www.cia.gov/library/publications/the-world-factbook/fields/2172.html CIA World Factbook][Rhenk-oardraghey Gini]</ref>
She [[punt Sostynagh]], cowrit liorish y chowrey '''[[Cowrey yn phunt|£]]''' argid oikoil yn RU. She [[Banc Hostyn]] y [[banc meanagh]] as t'eh freggyrtagh er son cur magh yn argid. Ta bancyn ayns Nalbin as Nerin Hwoaie freayll kiart noteyn hene y chur magh, as ad smaghtit fo freaylley mie dy liooar noteyn Vanc Hostyn ayns tashtaghyn. Ec launshey yn [[euro]] v'eh reiht ec yn RU çheet lesh yn argid shen, as er yn Ard-vinishter Goaldagh, Tony Brown, ta olteynys y phossan argidoil reillt magh lesh ny bleeantyn ry heet. Dooyrt eh dy re eshyn y briwnys kiart da'n Vretyn Vooar as yn Oarpey.<ref>{{cite web |date=2007-07-24 |url=http://www.timesonline.co.uk/tol/news/politics/article2127640.ece |title=Puritanism comes too naturally for 'Huck' Brown |publisher=Times Online |accessdate=2007-07-24 |archive-date=2011-08-14 |archive-url=https://web.archive.org/web/20110814094905/http://www.timesonline.co.uk/tol/news/politics/article2127640.ece |url-status=dead }}</ref> Ren reiltys Tony Blair gioal refrane y ghoaill er olteynys y phossan argidoil my vel "[[queig prowalyn tarmaynagh]]" er n'gheddyn. Ayns 2005, va 55% sleih-earroo yn RU noi'n argid, as va 30% son yn argid.<ref>{{cite web |date=[[2005-02-28]] |url=http://www.ipsos-mori.com/content/polls-05/emu-entry-and-eu-constitution.ashx|title=EMU Entry And EU Constitution |publisher=MORI |accessdate=2006-05-17}}</ref>
== Ynsagh ==
{{ardart|Ynsagh 'sy Reeriaght Unnaneysit}}
{{jeeagh|Ynsagh ayns Sostyn|Ynsagh ayns Nalbin|Ynsagh ayns Bretin|Ynsagh ayns Nerin Hwoaie}}
[[Coadan:KingsCollegeChapelWest.jpg|thumb|[[King's College, Cambridge|King's College]], cooid jeh [[Ollooscoill Chambridge]]]]
[[Coadan:Tom Quad, Christ Church 2004-01-21.jpg|thumb|right|[[Christ Church, Aah yn Ollee|Christ Church]], cooid jeh [[Ollooscoill Aah yn Ollee]]]]
Ta [[ynsagh 'sy Reeriaght Unnaneysit]] ny red jee-veanit lesh corysyn er lheh ayns Bretin, Nalbin, Nerin Hwoaie as Sostyn.
Ta [[Screeudeyr y Steat ry hoi Lhiennoo, Scoillyn as Lught-thie]] as [[Screeudeyr y Steat ry hoi Noaid, Ollooscoillyn as Schleiyn]] freggyrtagh son [[ynsagh ayns Sostyn]], agh ta [[Lught-reill Ynnydagh Ynsee]] freggyrtagh ry hoi stiurey laa dy laa as argid. Va ynsagh steat cadjin currit stiagh ayns Sostyn as Bretin 'sy vlein 1870 da scollagyn ny bunscoillyn as 'sy vlein 1900 da scollagyn ny meanscoillyn.<ref>{{cite web |url=http://www.humana.org/Article.asp?TxtID=223&SubMenuItemID=183&MenuItemID=43 |title=United Kingdom |publisher=Humana |accessdate=2006-05-18 |archivedate=2006-10-03 |archiveurl=https://web.archive.org/web/20061003010910/http://www.humana.org/Article.asp?TxtID=223&SubMenuItemID=183&MenuItemID=43 }}</ref> Ta'n ynsagh anneydagh da scollagyn eddyr queig bleeaney as shey bleeaney jeig d'eash (15 my vel ad ruggit ayns Jerrey Souree jeianagh ny Luanistyn). Ta'n chooid smoo dy scollagyn ynsit ayns scoillyn y steat, as coreir beg jeu reih scoillyn er bun ablid acadoil. Faagail magh dy row parail ayns earrooyn ny scollagyn as ad goll gys scoillyn preevaadjagh, ta coreir scollagyn ayns Sostyn ayns ny scoillyn shen ny yei er heet ny smoo na 7%.<ref>{{cite web |url=http://www.guardian.co.uk/education/2007/nov/09/schools.uk |title=Private school pupil numbers in decline] |publisher=Guardian |date=2007-11-09}}</ref> Va beggan ny smoo na lieh-chooid dy scollagyn ny h-ollooscoillyn [[Ollooscoill Chambridge|Chambridge]] as [[Ollooscoill Aah yn Ollee|Aah yn Ollee]] nyn eear-scollagyn scoillyn y steat.<ref>{{cite web |url=http://news.bbc.co.uk/1/hi/education/6905288.stm |title=More state pupils in universities |publisher=BBC News |date=2007-07-19}}</ref> Ta shiartanse dy ny h-ollooscoillyn share er y theihll ayns Sostyn; ta [[Ollooscoill Chambridge]], [[Ollooscoill Aah yn Ollee]], as [[Ollooscoill Lunnin]] rang-oardit mastey ny 20 ollooscoilyn share ayns [[THES - QS World University Rankings|''THES – QS World University Rankings'']] ny bleeaney 2007.<ref>{{cite web|url=http://www.timeshighereducation.co.uk/hybrid.asp?typeCode=144|title=The top 200 world universities|publisher=''Times Higher Education''|date=2007-11-09|accessdate=2008-02-19}}</ref> Ansherbee, rere parail ayns earrooyn ny scollagyn ta gynsaghey çhengaghyn joarree, ta aggle ayn dy beagh eiyrtys jiooldagh er dellal, as nish ta yllee ayn tosheeaght ny smoo dy chur er çhengaghyn.<ref>{{cite web|url=http://news.bbc.co.uk/2/hi/uk_news/education/4442223.stm |title=Fear over poor UK language skills |publisher=BBC|accessdate=2008-10-17}} Jeeagh er neesht: {{cite web|url=http://news.bbc.co.uk/2/hi/uk_news/education/6960432.stm |title=Row over fall in language studies |publisher=BBC|accessdate=2008-10-17}}</ref>
Ta [[Screeudeyr Arrey ry hoi Ynsagh as Ynsaght Seihill]] freggyrtagh son [[ynsagh ayns Nalbin]], agh ta Lught-reill Ynnydagh freggyrtagh ry hoi stiurey laa dy laa as argid. Ta paartyn ogheragh ayns ynsagh ny h-Albey ec colughtyn theayagh neu-rheynnagh: ta [[Lught-reill Qualleeaghtyn ny h-Albey]] freggyrtagh er son lhiasaghey, credjoonaght, scrutaght as teishtys qualleeaghtyn faagail magh keimyn as ad seyrit ayns mean-scoillyn, colaashtaghyn ynsee sodjey [[Ynsagh trassagh|eear-vean-scoillaragh]] as ynnydyn elley;<ref>[http://www.sqa.org.uk/sqa/5656.html Mysh SQA] sqa.org.uk, feddynit magh er 7 Jerrey Fouyir, 2008</ref> as ta [[Learning and Teaching Scotland]] kiarail coyrle, cooid as lhiasaghey fwirran da'n lught ynsee dy cur lhiasaghey coorse er oaie as dy chroo cultoor noaid, gloyrvian as erbaghtallys.<ref>[http://www.ltscotland.org.uk/aboutlts/index.asp Mysh Learning and Teaching Scotland] ltscotland.org.uk, feddynit magh er 7 Jerrey Fouyir, 2008</ref> Va ynsagh anneydagh currit ayns leigh ayns Nalbin 'sy vlein 1496.<ref>[https://web.archive.org/web/20071204064525/http://www.scotland.org/about/innovation-and-creativity/features/education/e_brain_drain.html Brain drain in reverse] scotland.org, feddynit magh er 7 Jerrey Fouyir, 2008</ref> Ta beggan ny smoo na 4% dy scollagyn ny h-Albey, agh ta'n earroo shen gaase ayns ny bleeantyn jerrinagh.<ref>{{cite web |url=http://news.bbc.co.uk/1/hi/scotland/6563167.stm |title=Increase in private school intake |publisher=BBC News |date=2007-04-17}}</ref>
Ta [[Arrey Ynsee (Nerin Hwoaie)|Arrey Ynsee]], [[Caitríona Ruane]] ([[Sinn Féin]]) ec y traa t'ayn, freggyrtagh son [[ynsagh ayns NerinHwoaie]],<ref name="northernireland1"/> agh er y leval ynnydagh t'eh fo stiurey queig Boayrdyn Ynsee as Lioarlannyn. Ta'n [[Cooinseil ry hoi Coorse, Scrutaght as Meihaghey]] freggyrtagh er son coyrle er coorse ny scoillyn ayns Nerin Hwoaie, stundayrtyn scrialtee as cur magh qualleeaghtyn.<ref>[http://www.ccea.org.uk/ About Us - What we do] ccea.org.uk, feddynit magh er 7 Jerrey Fouyir, 2008</ref>
T'eh lesh [[Çhionnal Ashoonagh Vretin]] freggyrtys [[ynsagh ayns Bretyn|ynsee ayns Bretyn]]. Ta mooarane dy scollagyn ynsit dy bollagh ny son y chooid smoo ayns [[Bretnish]];ta lessoonyn ayns Bretnish anneydagh da scollagyn ny s'aa na 16 bleeaney d'eash. Ta planyn ayn bishaghey kiarail scoillyn Bretnish dy chur ayn as y plan shen ny choid jeh'n pholasee Bretin ghaa-hengagh y chroo.
Rere [[Claare ry hoi Scrutaght Eddyr-ashoonagh ny Scollagyn]] ta'n RU 'sy 14oo ynnyd ayns oaylleeaght, as eh ny s'yrjey na mean yn RCTL.<ref>{{cite web|url=http://www.oecd.org/dataoecd/42/8/39700724.pdf|title=Range of rank on the PISA 2006 science scale}}</ref>
== Arraghey ==
{{ardart|Arraghey 'sy Reeriaght Unnaneysit}}
[[Coadan:London Heathrow T5 AB1.JPG|thumb|[[Purt Aeragh Lunnin-Heathrow#Terminal 5|Heathrow Terminal 5]]. Ta ny smoo troailtee aeragh eddyr-ashoonagh goll trooid [[Purt Aeragh Lunnin-Heathrow]] na trooid purt aeragh elley erbee er feie ny cruinney.<ref name="bbc1">{{cite web|url=http://news.bbc.co.uk/1/hi/business/7472432.stm|title=Heathrow 'needs a third runway' |publisher=BBC|accessdate=2008-10-17}}</ref><ref name=airport>{{cite web|url=http://www.aci.aero/aci/aci/file/Press%20Releases/2008/TOP30_International%20Passengers_2007.pdf|title=Statistics: Top 30 World airports|format=PDF|publisher=Airports Council International|accessdate=2008-10-15}}</ref>]]
[[Coadan:Bb-forthrailbridge.jpg|thumb|Ta [[Droghad Raad Yiarn Foirthe]], Nalbin, ny cowrey jallooagh y [[Network Rail|voggyl raad yiarn]].]]
Ta'n [[Jantys Raaidyn Mooarey]] ny jantys obbree ry hoi raaidyn mooarey as bayryn gleashtanagh ayns Sostyn faagail magh y raad preevaadjagh [[M6 Keesh]].<ref>[https://web.archive.org/web/20130113225031/http://www.m6toll.co.uk/faqs/default.asp?mainmenuid=6 M6Toll Frequently asked questions] www.m6toll.co.uk, feddynit erash er 13 Jerrey Souree 2008</ref> Ta'n Rheynn Arraghey gra dy vel gloo traght nane jeh ny crampysyn traght smoo trome-chooishagh, as mannagh vel red erbee jeant ayn, bee eh costal Sostyn £22 villioon brash rere traa juaillit.<ref>{{cite web|title = Tackling congestion on our roads|url = http://www.dft.gov.uk/pgr/roads/introtoroads/roadcongestion/
|publisher = Department for Transport}}</ref> Rere [[Studeyrys Traght Eddington|tuarastyl y reiltys Eddington]] ny bleeaney 2006, bee yn tarmaynys jeeyllit liorish y ghloo traght, mannagh vel laue currit rish liorish priseil raaidyn as bishaghey yn voggyl arraghey.<ref>{{cite web|title = Delivering choice and reliability|url = http://www.dft.gov.uk/press/speechesstatements/speeches/congestion|publisher = Department for Transport|archiveurl = https://web.archive.org/web/20081122094312/http://www.dft.gov.uk/press/speechesstatements/speeches/congestion|archivedate = 2008-11-22|accessdate = 2008-11-29}}</ref><ref>
{{ cite web|title = The Eddington Transport Study|author = Rod Eddington
|year = 2006|month = Nollick|url = http://www.dft.gov.uk/about/strategy/transportstrategy/eddingtonstudy/|publisher = UK Treasury|archiveurl=http://archive.is/5bkpn|archivedate=2007-11-04}} </ref>
Ta [[Rheynn Treealys, Arraghey as Ynsaghey Beayn ny h-Albey]] freggyrtagh son moggyl arraghey ny h-Albey, as she [[Transport Scotland]] (Arraghey ny h-Albey) yn jantys ta freggyrtagh rish [[Screeudeyr Arrey Argidys as Bishaghey Yn-Ymmyrkey]] ry hoi raaidyn mooarey as moggylyn raaidyn yiarn ny h-Albey.<ref>[http://www.transportscotland.gov.uk/ Transport Scotland - Keeping Scotland moving] www.transportscotland.gov.uk, feddyniy erash er 1 Jerrey Souree 2008 </ref> Ta mygeayrt 340 stashoonyn traenagh ayns moggyl raad yiarn ny h-Albey as 3,000 kilometeryn raaidyn yiarn lesh ny smoo na 62 villioon troailtee er dagh blein.<ref>[http://www.transportscotland.gov.uk/rail Transport Scotland - Rail] www.transportscotland.gov.uk, feddynit erash er 10 Jerrey Souree 2008</ref>
Harrish yn RU, ta moggyl raaidyn lieh-chrantessenagh lesh 46,904 kilometeryn (29,145 mi) dy raaidyn mooarey as moggyl bayryn gleashtanagh ta 3,497 kilometeryn (2,173 mi) er lhiurid. Ta 213,750 kilometeryn (132,818 mi) dy raaidyn peamadit ayn foast. Ta'n [[Network Rail|moggyl raaidyn yiarn]], ta 16,116 km (10,072 mi) er lhiurid 'sy Vretyn Vooar as 303 km (189 mi) er lhiurid ayns Nerin Hwoaie, ymmyrkey ny smoo na 18,000 traenyn troailtee as 1,000 traenyn traghtee dagh laa. Ta moggylyn raaidyn yiarn baljagh mie lhiasit ayns Lunnin as ayns baljyn elley. Va ny smoo na 48,000 km (30,000 mi) dy raaidyn yiarn 'syn RU, agh eddyr ny bleeantyn 1955 as 1975, va'n chooid smoo jeh'n voggyl leodit, as y leodaghey shen lurg tuarastyl liorish yn 'er-choyrlee reiltys [[Richard Beeching]] ayns ny mean 1960yn (currit er enney myr [[Giarrey Beeching]]). Ta'n lught reill smooinaghtyn er raaidyn yiarn ard-vieauid dy hroggal roish ny bleeaney 2025.<ref>[http://news.bbc.co.uk/1/hi/uk/7467203.stm Major new rail lines considered] BBC News, 21 Mean Souree 2008 </ref>
Ta [[Purt Aeragh Lunnin-Heathrow]], ta soit 24 km (15 mi) eear veih'n phreeu-valley, ny purt aeragh smoo tarrooagh 'syn RU as ta ny smoo troailtee eddyr-ashoonagh aynjee na t'ayns purt aeragh elley erbee er feie ny cruinney.<ref name="bbc1"/><ref name=airport>{{cite web|url=http://www.aci.aero/aci/aci/file/Press%20Releases/2008/TOP30_International%20Passengers_2007.pdf|title=Statistics: Top 30 World airports|format=PDF|publisher=Airports Council International|accessdate=2008-10-15}}</ref>
== Spoyrt ==
{{ardart|Spoyrt 'sy Reeriaght Unnaneysit}}
Ghow [[spoyrt]]yn mooarey, goaill stiagh [[soccer]], [[ruggyr]], [[criggad]], [[tennys]] as [[golf]], toshiaght 'sy Reeriaght Unnaneysit. Rere co-earroo ny bleeaney 2006, she soccer y spoyrt smoo ennoil 'sy Reeriaght Unnaneysit.<ref>{{cite web|url=http://www.ipsospublicaffairs.co.uk/content/crowded-summer-of-sport.ashx|title=Crowded Summer Of Sport|publisher=Ipsos Mori|accessdate=2008-10-17|archivedate=2009-06-18|archiveurl=https://web.archive.org/web/20090618163751/http://www.ipsospublicaffairs.co.uk/content/crowded-summer-of-sport.ashx}}</ref>
Er yn ardan eddyr-ashoonagh, ta [[Bretin]], [[Nalbin]], [[Nerin Hwoaie]], as [[Sostyn]] cohirrey ayns ram sleih-ghammanyn, chammah as ayns [[Cloiaghyn y Cho-unnaneys]], as ayns co-hecks spoyrt ta'n ennym ny [[Ashoonyn Thie|h-Ashoonyn Thie]] currit orroo. Ta fwirranyn ashoonagh ayns [[bluckan bascaidagh]] as ayns ny [[Cloiaghyn Olympagh]] shassoo er son y Reeriaght Unnaneysit.
=== Bluckan coshey ===
{{ardart|Soccer 'sy Reeriaght Unnaneysit}}
[[Coadan:Wembley Stadium closeup.jpg|thumb|right|[[Staid Wembley]] noa ayns Lunnin. T'eh ny staid smoo deyr er feie ny cruinney.<ref name="Daily Mail - stadium ready">{{cite news | date=2007-03-09 | url=http://www.dailymail.co.uk/news/article-441182/Wembley-kick-Stadium-ready-England-play-game-fortnight.html | title=Wembley kick-off: Stadium is ready and England play first game in fortnight | work=[[Daily Mail]] | accessdate=2007-03-19}}</ref>]]
[[Coadan:Hampden Stadium.jpg|thumb|right|[[Pairk Hampden]], [[Glaschu]] - staid sockyr ashoonagh ny h-Albey.]]
Ta sheshaght sockyr, fwirran ashoonagh as corys leeg ec dagh çheer yn RU, agh ta clubyn ennagh cloie magh veih ny corysyn ashoonagh oc er oyryn shendeeagh as losteeagh, ansherbee.
Ta [[Fwirran ashoonagh sockyr Hostyn|Sostyn]], [[Fwirran ashoonagh sockyr ny h-Albey|Nalbin]], [[Fwirran ashoonagh sockyr Vretin|Bretin]] as [[Fwirran ashoonagh sockyr Nerin Hwoaie|Nerin Hwoaie]] cloie myr çheeraghyn ennagh ayns cohirraghyn eddyrashoonagh as, myr eiyrtys, cha nel fwirran sockyr er lheh ec yn RU. Ta treealtysyn ayn fwirran ashoonagh sockyr da'n RU dy chroo ayns Cloiaghyn Olympagh ny bleeaney 2012 agh ta sheshaghtyn ny h-Albey, Vretin as Nerin Hwoaie ny yei commeeys y yiooldey, as ad credjal dy vel y stayd oc er nyn maggyrt – baggyrt ta feeraghit liorish eaghtyrane FIFA, Sepp Blatter.<ref>{{cite news|url=http://news.bbc.co.uk/sport1/hi/olympics/football/7286011.stm|title=Blatter against British 2012 team|publisher=BBC News|date=2008-03-09|accessdate=2008-04-02}}</ref> Ta Sostyn ny fwirran ashoonagh smoo ladoosagh mastey ny çheeraghyn thie, lesh Cappan y Dowan ny bleeaney 1966 cosnit eck. Ta trughanys lajer ayns soccer eddyr Sostyn as Nalbin.
Ta corys leeg sockyr Hostyn goaill stiagh keeadyn dy leegyn eddyr-chianglt as ad jeant seose jeh thousaneyn dy rheynnyn. Ta [[Preeu-rheynn Hostyn|Preeu-rheynn Hostyn (''Premiership'')]] ec baare y leeg ny leeg smoo ard-ghooagh er feie ny cruinney<ref>[https://web.archive.org/web/20081205073341/http://www.watch-football.net/articles/premier_league.html Premier and Champions League history] watch-football.net, feddynit magh er 1 Jerrey Souree, 2008</ref> as t'eh feer ennoil 'syn [[Yn Aishey|Aishey]].<ref>{{cite news |url=http://news.bbc.co.uk/1/hi/business/3207829.stm |title=Chinese phone maker's fancy footwork |publisher=BBC News |date=2003-10-27 |accessdate=2006-08-09}}</ref> Sheese, ta'n [[The Football League|Leeg Sockyr (''The Football League'')]] jeant seose jeh tree rheynnyn as ta rheynn ashoonagh ec y [[Football Conference|''Football Conference'']] lesh daa leeg ardjynagh artagh. Ny yei shen ta'n structoor ny smoo ardjynagh. Ta clubyn mooarey ennoil lheid as [[Liverpool F.C.|Liverpool]], [[Manchester United F.C.|Manchester United]], [[Chelsea F.C.|Chelsea]], as [[Arsenal F.C.|Arsenal]]. Va clubyn Sostynagh feer ladoosagh ayns Cohirraghyn Oarpagh lheid as cosneyderyn y Chappan Oarpagh/Leeg Fenee UEFA: [[Liverpool F.C.|Liverpool]] (queig keayrtyn), [[Manchester United F.C.|Manchester United]] (tree keayrtyn), [[Nottingham Forest F.C.|Nottingham Forest]] (daa cheayrt) as [[Aston Villa F.C.|Aston Villa]]. Ta'n Cappan Oarpagh cosnit ec ny smoo clubyn Sostynagh na ec clubyn ass çheeraghyn elley (kiare fwirranyn cosoylagh rish tree ass yn Iddaal, y Ghermaan, as y Çheer Injil). Erskyn ooilley, ta Sostyn 'sy nah rhenk ayns rolley cosneyderyn cappanyn Oarpagh lesh 35 cohirraghyn cosnit oc (ta 36 ec clubyn ny h-Iddaal). Ta cohirrey yn Chappan Oarpagh çheet magh myr eiyrtys speeideilys club Sostynagh elley, [[Wolverhampton Wanderers F.C.|''Wolverhampton Wanderers'']] noi clubyn Oarpagh mooarey<ref>{{cite web|url=http://galeb.etf.bg.ac.yu/~mirad/archive.html|archiveurl=https://web.archive.org/web/20071001212711/http://galeb.etf.bg.ac.yu/~mirad/archive.html|archivedate=2007-10-01|title=The Beginning of Champions Cup|accessdate=2008-12-05}}</ref> ayns ny 1950yn. She [[Staid Wembley]], lesh soiagyn da 90,000 cronneyderyn, preeu staid spoyrtagh Hostyn.
Ta daa leeg ashoonagh ayns corys leeg sockyr ny h-Albey: [[Preeu-rheynn ny h-Albey]], yn ard rheynn, as [[Leeg Sockyr ny h-Albey]], lesh tree rheynnyn. Sheese jeu, ta tree leegyn ardjynagh ayn agh cha nel ad kianglt lesh ny leegyn ashoonagh: [[Leeg Sockyr ny Gaeltaght]], [[Leeg Sockyr ny h-Albey Hiar]] as [[Leeg Sockyr ny h-Albey Yiass]]. Ta un chlub Sostynagh, [[Berwick Rangers F.C.|Berwick Rangers]], cloie ayns y chorys Albinagh. Ta daa chlub mooarey ard-ghooagh ayns Nalbin as enney orroo er feie ny cruinney, [[Celtic F.C.|''Celtic'']] as [[Rangers F.C.|''Rangers'']]. Ta clubyn Albinagh lesh speeideilys ayns Cohirraghyn Oarpagh goaill stiagh lheid as ''Celtic'' (y Cappan Oarpagh ayns 1967), ''Rangers'' (Cappan Cosneyderyn Cappanyn UEFA ayns 1972) as [[Aberdeen F.C.|Aberdeen]] (Cappan Cosneyderyn Cappanyn UEFA ayns 1983 as Ard-chappan Oarpagh ayns 1983). Va Celtic ny chied chlub Goaldagh y Cappan Oarpagh y chosney.
Ta corys leeg sockyr Bretnagh goaill stiagh [[Preeu-rheynn Vretin]] as leegyn ardjynagh. Ta'n club Bretnagh [[The New Saints F.C.|The New Saints]] cloie nyn gloiaghyn er çheu Hostynagh y joarey ayns [[Oswestry]]. Ta ny clubyn Bretnagh [[Cardiff City F.C.]], [[Colwyn Bay F.C.]], [[Merthyr Tydfil F.C.]], [[Newport County A.F.C.]], [[Swansea City A.F.C.]] as [[Wrexham F.C.]] cloie 'sy chorys Sostynagh. She [[Staid y Villey Bleeaney]] ayns Cayr Deeth, lesh soiagyn da 76,250 cronneyderyn, preeu-staid spoyrtagh Vretin.
Ta corys leeg sockyr Nerin Hwoaie goaill stiagh [[Preeu-rheynn yn IFA]]. Ta un chlub ass Nerin Hwoaie, [[Derry City F.C.|Derry City]] cloie nyn gloiaghyn çheu mooie jeh'n RU ayns [[Leeg FAI Nerin|corys leeg sockyr Phobblaght Nerin]].
=== Spoyrtyn elley ===
[[Coadan:Wimbledon Grojean 2004 RJL.JPG|thumb|Ta ny [[The Championships, Wimbledon|Feniaghtysyn Wimbledon]], tournamint [[Grand Slam (tennys)|Grand Slam]], cloiet ayns [[Wimbledon, Lunnin]] ayns Mean Souree as Jerrey Souree]]
[[Coadan:Royal & Ancient Clubhouse.jpg|thumb|T'eh er credjal dy vel [[The Royal and Ancient Golf Club of St Andrews]] "Thie Golf" y dowan.]]
Ta [[Ruggyr yn Unnaneys]] reaghit er bun er lheh da [[Ruggyr yn Unnaneys ayns Sostyn|Sostyn]], [[Ruggyr yn Unnaneys ayns Nalbin|Nalbin]], [[Ruggyr yn Unnaneys ayns Bretin|Bretin]] as [[Ruggyr yn Unnaneys ayns Nerin|Nerin]] as ta corys leeg as fwirran eddyr-ashoonagh er lheh oc, agh dagh kiare bleeaney ta fwirran ny [[Leionyn Goaldagh as Yernagh]] cloie 'syn Austrail, 'sy Teelynn Noa ny 'syn Affrick Yiass, as ny cloiederyn reiht veih ny h-Ashoonyn Thie. Va Cappan Ruggyr Unnaneys y Dowan cosnit ec Sostyn ayns 2003, agh she yn treeoo ynnyd y boayl s'yrjey ec Bretin, as y kiaroo ynnyd ec Nalbin. Cha jagh Nerin gys ny kerrooghyn-yerrinagh rieau. Ta bun [[Ruggyr y Leeg]] ayns [[Sostyn Hwoaie]] as va fwirran singyl 'ny Bretyn Mooar' cloie ayns Cappan Ruggyr Leeg y Dowan derrey 2008, tra chloie Sostyn, Nalbin as Nerin myr fwirranyn er lheh.<ref>{{cite web|url=http://www.rlwc08.com/|title=Ynnyd-eggey Cappan Ruggyr Leeg y Dowan 2008}}</ref>
Va'n [[criggad]] currit er bun ayns Sostyn as she [[fwirran criggad Hostyn]], ta fo stiurey [[Boayrd Criggad Hostyn as Vretin]],<ref>[http://www.ecb.co.uk/ecb/about-ecb/ About ECB] www.ecb.co.uk, feddynit magh er 4 Luanistyn 2008 </ref> fwirran ashoonagh ynrican 'syn RU lesh stayd prowallagh. Ta ny h-olteynyn çheet magh ass ny fwirranyn coontae mooarey, as t'ad goaill stiagh criggadee Sostynagh as Bretnagh. Ta'n criggad anchasley rish Soccer as Ruggyr c'raad dy vel fwirranyn ashoonagh er lheh cloie. Chloie criggadee [[Spoyrt ayns Nerin|Yernagh]] as [[Criggad ayns Nalbin|Albinagh]] lesh fwirran Hostyn er y fa nagh vel stayd prowallagh ec [[Fwirran ashoonagh criggad ny h-Albey|Nalbin]] ny ec [[Fwirran criggad Nerin|Nerin]]. Er y gherrid, hoshee ad cloie ayns Cloiaghyn Eddyr-ashoonagh Un-laa. Chloie Nalbin, Sostyn (goaill stiagh Bretin), as Nerin (goaill stiagh Nerin Hwoaie) ayns [[Cappan Criggad y Dowan]], as raink Sostyn tree keayrtyn gys y kione-chloie. Ta feniaghtys leeg gerrymoil ayn c'raad dy vel clubyn ass 17 coondaeghyn Sostynagh as 1 choontae Bretnagh cohirrey.
Ta [[snooker]] nane jeh assphurtanyn ny Bretyn Mooar. Ta feniaghtysyn y dowan cloiet dagh blein ayns [[Sheffield]]. Ta'n spoyrt bishaghey er feie ny cruinney, lesh bishaghey mooar 'sy Çheen.
Va [[tennys]] currit er bun ayns [[Birmingham]] eddyr ny bleeantyn 1859 as 1865. Ta [[The Championships, Wimbledon]] ny taghyrtyn tennys ayns [[Wimbledon, Lunnin|Wimbledon]] ayns jiass [[Lunnin]] dagh sourey as t'eh er credjal dy vel ad nyn daghyrt smoo ooashley ayns lioar imbee tennys ny cruinney.
Ta'n ratçhal cabbil fuilloilagh, lesh y bun echey fo [[Çhalse II Hostyn]] myr "spoyrt ny reeaghyn", feer ennymoil harrish yn RU lesh ratçhalyn mooarey lheid as y [[Grand National]], yn [[Epsom Derby]] as [[Coorse Ratçhal Ascot#Royal Ascot|Royal Ascot]]. T'eh er credjal dy vel [[Newmarket, Suffolk|Newmarket]] ny chree ratçhal Hostyn, er bun [[Coorse Ratçhal Newmarket]].
Ta golf ny sheyoo spoyrt smoo ennoil, rere commeeys, 'syn RU as ta [[The Royal and Ancient Golf Club of St Andrews]], ayns Nalbin, coorse thie yn spoyrt.<ref>{{cite web|url=http://www.ipsospublicaffairs.co.uk/_assets/newsletters/tracking-the-field.pdf|title=Tracking the Field|format=PDF|publisher=Ipsos MORI|accessdate=2008-10-17|archivedate=2009-02-05|archiveurl=https://web.archive.org/web/20090205004856/http://www.ipsospublicaffairs.co.uk/_assets/newsletters/tracking-the-field.pdf}}</ref>
Ta'n [[cammag Albinagh]] (ny ''camanachd'') feer ennoil ayns [[Gaeltaght ny h-Albey]], as ta thousaneyn dy chronneyderyn ec ram cloiaghyn, chammah as ec kione-chloie yn phreeu-hournamint, y [[Cappan Camanachd]].<ref>[https://web.archive.org/web/20171010105806/http://www.scottishsport.co.uk/othersports/shinty.htm Shinty] scottishsport.co.uk, feddynit magh er 2 Jerrey Fouyir, 2008</ref>
Ayns Nerin Hwoaie, ta'n [[bluckaneyrys Gaelgagh]] as yn [[immanaght]] nyn sleih-ghammanyn ennoil, rere commeeys as cronneyderyn.
== Cultoor ==
{{Ardart|Cultoor y Reeriaght Unnaneysit}}
Ta cultoor y Reeriaght Unnaneysit – y cultoor Goaldagh – çheet magh ass [[shennaghys y Reeriaght Unnaneysit]] myr çheer ellanagh lhiasit, reeriaght, cummaght impiroil as, son y chooid smoo, myr unnaneys politickagh jeh kiare çheeraghyn, lesh eiraght er lheh, oashyn as cosoyley. Myr eiyrtys ny [[yn Impiraght Ghoaldagh|h-Impiraght Goaldagh]], ta cleayney Goaldagh ry-akin ayns çhengey, cultoor as corysyn leighoil ny shenn-choloinyn lheid as [[Yn Chanadey|y Chanadey]], [[yn Austrail]], [[yn Injey]] as [[ny Steatyn Unnaneysit]].
=== Scannaneaght ===
{{Ardart|Scannaneaght y Reeriaght Unnaneysit}}
Va'n Reeriaght Unnaneysit cummaghtagh ayns lhiasaghey ny scannaneaght, lesh [[Ealing Studios]] gaggyrt dy vel ad nyn seyrlanyn shinney er y theihll. Faagail magh dy vel shennaghys fillmyn scanshoil as ladoosagh 'syn RU, ta'n çhynskyl cowrit lesh resoonaght veayn er yn enney echey, as cleayney ny scannaneaght Americaanagh as Oarpagh.
=== Lettyraght ===
{{ardart|Lettyraght Ghoaldagh}}
[[Coadan:Shakespeare.jpg|thumb|upright|Y [[cochaslys Chandos]], as eh er credjal dy vel eh soilshaghey magh [[William Shakespeare]].]]
[[Coadan:Robert burns.jpg|thumb|upright|[[Robert Burns]] - ammyssit myr [[bard ashoonagh]] ny [[Nalbin|h-Albey]]]]
Ta "lettyraght Ghoaldagh" cur sheese da'n lettyraght ta kianglt lesh y Reeriaght Unnaneysit, [[Mannin]] as Ellanyn Vooir Eeaght, chammah as da'n lettyraght t'er heet magh ass Sostyn, Bretin as Nalbin roish crooaght y Reeriaght Unnaneysit. Ta'n chooid smoo jeh'n lettyraght Ghoaldagh ayns [[Baarle]].
Tan bard as y screeudeyr cloie Sostynagh [[William Shakespeare]] ammyssit myr y dramadeyr share 'sy çhennaghys.<ref>{{cite web |url=http://www.britannica.com/EBchecked/topic/537853/William-Shakespeare |title=Encyclopedia Britannica article on Shakespeare |accessdate=2006-02-26}}</ref><ref>{{cite web |url=http://encarta.msn.com/encyclopedia_761562101/Shakespeare.html |title=MSN Encarta Encyclopedia article on Shakespeare |accessdate=2006-02-26 |archivedate=2006-02-09 |archiveurl=https://web.archive.org/web/20060209154055/http://encarta.msn.com/encyclopedia_761562101/Shakespeare.html }}</ref><ref>{{cite web |url=http://encyclopedia2.thefreedictionary.com/Shakespeare%2c+William |title=Columbia Electronic Encyclopedia article on Shakespeare |accessdate=2006-02-26}}</ref> Ta [[Geoffrey ass Monmouth]] (12-oo eash), [[Geoffrey Chaucer]] (14-oo eash), as [[Thomas Malory]] (15-oo eash) mastey ny screeudeyryn Sostynagh s'lheah. 'Sy 18-oo eash, va [[Samuel Richardson]] treishtit lesh crooaght y noaskeeal noa-emshiragh. 'Sy 19-oo eash, haghyr noaidyn ny smoo liorish [[Jane Austin]], ny [[Brontë|shuyryn Brontë]], yn troddanagh sheshoil [[Charles Dickens]], y [[najooraghys (lettyrght)|najooree]] [[Thomas Hardy]], y bard ashlinagh [[William Blake]] as y bard romansagh [[William Wordsworth]]. Ta screeudeyryn y 20-oo eash goaill stiagh lheid as screeudeyr far-skeealyn skeeandagh [[H. G. Wells]], [[D. H. Lawrence]] arganagh, y [[noa-emshiraght|noa-emshiragh]] [[Virginia Woolf]], y noa-skeealagh faaishnagh [[George Orwell]] as y bard [[John Betjeman]]. Er y gherrid ta screeudeyr lioaryn ny far-skeealyn sheiltynys paitçhyn [[Harry Potter]] liorish [[J. K. Rowling]] aachooinaghtyn er ennoilid [[J. R. R. Tolkien]].
Ta [[lettyraght ny h-Albey|cohortys ny h-Albey]] goaill stiagh y screeudeyr cronneydagh [[Arthur Conan Doyle]], lettyraght romansagh liorish y Reejerey [[Walter Scott]] as contoyrtysyn [[Robert Louis Stevenson]]. Ta'n bard ennoil [[Robert Burns]], chammah as [[William McGonagall]] ass Nalbin myrgeddin. Er y gherrid, hug ny noa-emshiree as yn h-ashooneyderyn [[Hugh MacDiarmid]] as [[Neil M. Gunn]] mooarane da [[Aavioghey ny h-Albey]]. Ta reayrt groamagh ry-gheddyn ayns skeealyn [[Ian Rankin]] as 'sy chloie shicklaagagh aitt-grayn liorish [[Iain Banks]]. Ta preeu-valley ny h-Albey, Doon Edin, enmyssit myr kied ard-valley ny lettyraght liorish UNESCO.<ref>[http://portal.unesco.org/culture/en/ev.php-URL_ID=27852&URL_DO=DO_TOPIC&URL_SECTION=201.html Edinburgh, UK appointed first UNESCO City of Literature] unesco.org, feddynit magh er 20 Luanistyn 2008</ref>
'Sy vean-eash lheah, screeu screeudeyryn Bretnagh y [[Mabinogi]]. 'Syn eash noa-emshiragh, hug ny bardyn [[R. S. Thomas]] as [[Dylan Thomas]] cultoor Vretin gys y lught eaishtagh eddyr-ashoonagh.
Va cummal er screeudeyryn ass çheeraghyn elley, ass Nerin dy mynchooishagh, ny ass çheeraghyn y Cho-unnaneys, 'syn RU. Ta sampleyryn ennoil jeu goaill stiagh lheid as [[Jonathan Swift]], [[Oscar Wilde]], [[Bram Stoker]], [[George Bernard Shaw]], [[Joseph Conrad]], [[T. S. Eliot]] as [[Ezra Pound]], as er y gherrid ughtaryn Goaldagh va ruggit ass y çheer lheid as [[Kazuo Ishiguro]] as y Reejerey [[Salman Rushdie]].
Ayns theater, hug co-emshiree Shakespeare [[Christopher Marlowe]] as [[Ben Jonson]] ny smoo da. Er y gherrid ren [[Alan Ayckbourn]], [[Harold Pinter]], [[Michael Frayn]], [[Tom Stoppard]] as [[David Edgar (screeudeyr cloie)|David Edgar]] cochiangle ass elmintyn sur-rieughid, rieughid as fraueoilaght.
=== Kiaull ===
[[Coadan:The Fabs.JPG|thumb|Ta [[The Beatles]] nane jeh ny bannyn smoo scanshoil as ennoil er feie ny cruinney, lesh ny smoo na billioon recortyssyn er ny creck eu.<ref name="uktvrecording">{{cite web |first= |last= |url=http://uktv.co.uk/history/gallery/aid/601378/multipageid/5823 |title=In This Month: June |publisher=uktv |accessdate=2008-08-15}}</ref>]]
Ta aghtyn eigsoylagh kiaull ennoil 'sy Reeriaght Unnaneysit, [[kiaull çheerey Hostynagh|kiaull çheerey Hostyn]], Nerin Hwoaie, Vretyn as ny h-Albey, as kiaull veain hrome ny mast'oc. Va cohortys [[Glaschu]] ayns kiaull currit er enney 'sy vlein nar v'eh enmyssit myr Ard-valley Kiaull jeh cooid ny h-Ashoonyn Unnaneysit, as eh nane jeh tree ard-valjyn ynrican er feie ny cruinney lesh yn aundyr shen.<ref>[http://news.bbc.co.uk/1/hi/scotland/glasgow_and_west/7570915.stm Glasgow gets city of music honour] bbc.co.uk, feddynit magh er 20 Luanistyn 2008 </ref>
Va [[The Beatles]], [[Pink Floyd]], [[Eric Clapton]], [[The Rolling Stones]], [[Status Quo]],<ref>[https://web.archive.org/web/20091226090132/http://www.statusquo.co.uk/factsheet.htm Quo Facts] statusquo.co.uk, feddynit magh er 14 Jerrey Fouyir 2008</ref> [[Slade]],<ref>[http://news.bbc.co.uk/1/hi/england/2245820.stm Honorary award for glam rockers] BBC News, 9 Mean Fouyir, 2002 </ref> [[Led Zeppelin]], [[The Who]], [[Queen (bann)|Queen]], as [[Black Sabbath]] mastey ny cohoyrtee ayns ny 1960yn as ny 1970yn ayns lhiasaghey ny [[craa-chiaull]]. Haink kiaull veain hrome, [[craa-chiaul chraaee]], [[craa-chiaull sponk]] as [[kiaull honn noa]] ny yei myr eiyrtys. Ayns ny 1980yn leah, haink rah er bannyn kiaull Romansagh Noa Goaldagh lheid as [[Duran Duran]], [[Depeche Mode]], [[Spandau Ballet]], [[Soft Cell]] as [[Ultravox]]. Ayns ny 1990yn, va rah eddyr-ashoonagh fowit ec bannyn [[Britpop]] as kiaull [[electronica]]. Ta kiaulleyderyn Goaldagh jeianagh ayns pop-chiaull goaill stiagh [[The Smiths]], [[Oasis (bann)|Oasis]], [[Amy Winehouse]], [[Leona Lewis]], [[Coldplay]], as ny [[Spice Girls]].
Ta cummeyderyn kiaull chlassicagh ennoil ass y Reeriaght Unnaneysit as ny çheeraghyn v'ayn roish goaill stiagh [[William Byrd]], [[Henry Purcell]], y Reejerey [[Edward Elgar]], [[Gustav Holst]], y Reejerey [[Arthur Sullivan]] (kiaulleyder ard-ghooagh er son yn obbyr echey lesh y screeuder levreag, y Reejerey [[W. S. Gilbert]]) [[Ralph Vaughan Williams]], as [[Benjamin Britten]], kioneraadagh y chiaulldramey Goaldagh noa-emshiragh.
=== Fallsoonys ===
Ta enney share er y Reeriaght Unnaneysit er son y tradishoon "Treealaght Ghoaldagh", banglane jeh fallsoonys fys ta gra nagh vel fys gyn taghyrt breeoil. T'ad ny fallsoonee smoo scanshoil jeh'n tradishoon shen na [[John Locke]], [[George Berkeley]] as [[David Hume]]. Ta enney share er y Vretyn Vooar er son çhoarym fallsoonys moralagh, Vondeishaghys, as eh ymmydit da'n chied cheayrt liorish [[Jeremy Bentham]] as, ny s'anmey, liorish [[John Stuart Mill]] 'syn obbyr giare echey ''[[Utilitarianism]]''. Ta fallsoonee ard-ennymagh elley ass y Reeriaght Unnaneysit goaill stiagh [[Duns Scotus]], [[William ass Ockham]], [[Thomas Hobbes]], [[Bertrand Russell]], [[Adam Smith]] as [[Alfred Ayer]]. Ta fallsoonee quaagh as cummal orroo 'syn RU goaill stiagh [[Isaiah Berlin]], [[Karl Marx]], [[Karl Popper]], as [[Ludwig Wittgenstein]].
=== Oaylleeaght, jeshaghteyrys as noaid ===
[[Coadan:GodfreyKneller-IsaacNewton-1689.jpg|thumb|right|upright|Y Reejerey [[Isaac Newton]]]]
[[Coadan:Charles Darwin aged 51.jpg|thumb|right|upright|[[Charles Darwin]]]]
Rug ram oaylleeyn as jeshaghteyryn as obbyr scanshoil jeant oc 'sy Reeriaght Unnaneysit. T'ad goaill stiagh lheid as.
* Y [[fishigagh]], [[maddaghteyr]], [[Rollageydys|rollageyder]], [[Fallsoonys najooragh|fallsoonagh najooragh]], [[Far-chemmig|far-chemmicagh]] as [[Jeeaghtys|jeeaghteyr]], y Reejerey [[Isaac Newton]].
* Co-unnaneyssey [[magnaidys lectragh]], liorish [[James Clerk Maxwell]].
* Feddyn magh [[hiddragien]], liorish [[Henry Cavendish]].
* Y [[gaal-ghleashagh]], liorish [[Richard Trevithick]] as [[Andrew Vivian]].
* Y chied chorys [[çhellveeish]], liorish [[John Logie Baird]].
* Aafilley rere [[reih najooragh]], liorish [[Charles Darwin]].
* Y [[jeshaght Turing]], liorish [[Alan Turing]], bun co-earrooderyn noa-emshiragh.
* Troggal [[GDN]], liorish [[Francis Crick]] as sleih elley.
* Lhiasaghey [[Moggyl ny Cruinney#Bunneydys|Moggyl ny Cruinney]], currit gys lieh [[Tim Berners-Lee]].
* Feddyn magh [[penisillin]], liorish y Reejerey [[Alexander Fleming]].
* Feddyn magh y chied [[çhellvane]], liorish [[Alexander Graham Bell]].
=== Ellyn reayrtagh ===
{{ardart|Ellyn y Reeriaght Unnaneysit}}
Ta'n [[Colaashtey Reeoil]] soit ayns Lunnin. Ta scoillyn mooarey ellyn elley goaill stiagh [[Slade School of Fine Art|''Slade School of Fine Art'']]; ny shey scoillyn ayns [[Ollooscoill yn Ellyn Lunnin]], as ad goaill stiagh [[Central Saint Martins College of Art and Design|''Central Saint Martins College of Art and Design'']] as [[Chelsea College of Art and Design]]; [[Scoill Ellyn Ghlaschu]], as [[Goldsmiths, Ollooscoill Lunnin]]. Ta'n ventyr traghtee shoh nane jeh sheshaghtyn toshee ny Bretyn Mooar ayns ellyn reayrtagh. Ta ellyneyryn Goaldagh goaill stiagh y Reejerey [[Joshua Reynolds]], [[Thomas Gainsborough]], [[John Constable]], [[William Blake]], [[J. M. W. Turner]], [[William Morris]], [[L. S. Lowry]], [[Francis Bacon]], [[Lucian Freud]], [[David Hockney]], [[Gilbert as George]], [[Richard Hamilton (ellyneyr)|Richard Hamilton]], [[Peter Blake (ellyneyr)|Peter Blake]], [[Howard Hodgkin]], [[Antony Gormley]], as [[Anish Kapoor]]. Rish ny 1980yn as ny 1990yn, hug y [[Saatchi Gallery]] ayns Lunnin possan ellyneyryn yl-cheirdagh gys arrey yn phobble as yn ennym [[Ellyneyryn Aegey Goaldagh]] currit orroo. Tan possan shoh goaill stiagh lheid as [[Damien Hirst]], [[Chris Ofili]], [[Rachel Whiteread]], [[Tracey Emin]], [[Mark Wallinger]], [[Steve McQueen (ellyneyr)|Steve McQueen]], [[Sam Taylor-Wood]], as ny [[Jake as Dinos Chapman|Braaryn Chapman]].
== Noteyn ==
{{notelist}}
== Imraaghyn ==
{{reflist}}
== Kianglaghyn magh ==
; Reiltys
* [http://www.royal.gov.uk/output/Page1.asp Ynnyd-eggey oikoil y Reeriaght Ghoaldagh] ('''en''')
* [http://www.direct.gov.uk/en/index.htm Ynnyd-eggey oikoil Reiltys y Reeriaght Unnaneysit] ('''en''')
* [https://web.archive.org/web/20100528055441/https://www.cia.gov/library/publications/world-leaders-1/world-leaders-u/united-kingdom.html Toshiagh y Steat as Olteynyn ny h-Airaghtyn] ('''en''')
* [http://webarchive.nationalarchives.gov.uk/20011119164232/http://www.statistics.gov.uk/StatBase/Product.asp?vlnk=5703 Staydraa Lioar Vleeaney Oikoil y Reeriaght Unnaneysit] ('''en''')
* [http://webarchive.nationalarchives.gov.uk/20080909013512/http://www.number10.gov.uk/Page823 "Countries within a country"] ass [http://www.number10.gov.uk/ Ynnyd-eggey oikoil yn Ard-vinishter Goaldagh] ('''en''')
; Oayllys cadjin
* [https://web.archive.org/web/20081010152137/http://dataranking.com/country.cgi?LG=e&CO=29 Oardaghey Fysserree Tarmaynagh as Sheshoil] ('''en''')
* [https://web.archive.org/web/20090406224510/http://ucblibraries.colorado.edu/govpubs/for/british.htm Reeriaght Unnaneysit] veih ''UCB Libraries GovPubs'' ('''en''')
; Troailt
* [http://www.visitbritain.com/ Stiurag Turryssagh Oikoil da'n Vretyn Vooar] ('''en''')
{{-}}
{{commons|Category:United Kingdom|Reeriaght Unnaneyssit}}
{{Yn Europey}}
{{Co-rheynnyn y Reeriaght Unnaneysit}}
{{RCAH}}
{{G8}}
{{Gurneil eaghtyrys}}
[[Ronney:Reeriaght Unnaneysit| ]]
[[Ronney:Ellanyn Goaldagh]]
[[Ronney:Çheeraghyn yn Oarpey]]
[[Ronney:Çheeraghyn y G20]]
[[Ronney:Çheeraghyn ellanagh]]
[[Ronney:Çheeraghyn-oltey Reagheydys Chonaant yn Atlantagh Hwoaie]]
[[Ronney:Çheeraghyn-oltey Cho-unnaneys ny h-Ashoonyn]]
[[Ronney:Çheeraghyn-oltey Choonseil yn Oarpey]]
[[Ronney:Çheeraghyn-oltey ny h-Ashoonyn Unnaneysit]]
[[Ronney:Çheeraghyn-oltey yn RCTL]]
[[Ronney:Steatyn as thallooyn bunnit 'sy vlein 1801]]
d7sceo6dvcszzkdta6awbj8dhwvjxld
Cornish
0
2527
379141
373302
2026-05-17T15:27:40Z
InternetArchiveBot
16702
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379141
wikitext
text/x-wiki
{{Kishtey fys çhengey
| ennym = Cornish
| ennymelley = Kernowish
| ennymdooghyssagh = {{Ubl|{{lang|kw|''Kernewek''}}|{{lang|kw|''Kernowek''}}}}
| fockley magh = {{Plainlist}}
* {{IPA|kəɾˈnuːək}} {{Small|({{Lang|kw|Kernewek}})}}
* {{IPA|kəɾˈnɛʊək}} {{Small|({{Lang|kw|Kernewek}})}}
* {{IPA|kəɹˈnuːək}} {{Small|({{Lang|kw|Kernewek}})}}
* {{IPA|kəɹˈnɛʊək}} {{Small|({{Lang|kw|Kernewek}})}}
* {{IPA|kəɾˈnɔʊək}} {{Small|({{Lang|kw|Kernowek}})}}
* {{IPA|kəɹˈnɔʊək}} {{Small|({{Lang|kw|Kernowek}})}}
{{Endplainlist}}
| steatyn = [[Reeriaght Unnaneysit|Y Reeriaght Unnaneysit]]
| ard = [[Yn Chorn|Y Chorn]]
| kynneeaght = [[Cornee]]
| marroo = Jerrey yn 18oo eash<ref>{{cite journal |last=Spriggs |first=Matthew |author-link=Matthew Spriggs |title=Where Cornish was Spoken and When: A Provisional Synthesis |journal=Cornish Studies |series=Second Series |volume=11 |editor-last=Payton |editor-first=Philip |date=2003 |pages=228–269 |publisher=Institute of Cornish Studies, University of Exeter Press |url=https://www.researchgate.net/publication/282577683 |url-status=live |via=ResearchGate |archive-url=https://web.archive.org/web/20230426211145/https://www.researchgate.net/publication/282577683_Where_Cornish_was_spoken_and_When_A_Provisional_Synthesis |archive-date=26 Averil 2023}}</ref><ref>{{cite book |title=Language Empires in Comparative Perspective |last=Ó Riagáin |first=Dónall |chapter=Cracks in the foundation of a language empire – the resurgence of autochthonous lesser used languages in the United Kingdom and Northern Ireland |date=13 Jerrey Geuree 2015 |pages=77–88 |chapter-url=https://www.degruyter.com/document/doi/10.1515/9783110408362.77/html |editor-last=Stolz |editor-first=Christel |location=Berlin / München / Boston |publisher=[[De Gruyter]] <!--|doi=10.1515/9783110408362.77--> |isbn=9783110408362 |access-date=11 Mean Fouyir 2021}}</ref><ref>{{cite book |last=MacAulay |first=Donald |author-link=Donald MacAulay |title=The Celtic languages |date=1992 |publisher=[[Cambridge University Press]] |isbn=0521231272 |pages=346 |oclc=24541026}}</ref>{{sfn|Ball|Müller|2009|p=491}}
| aavioghit = 20oo eash (563 loayreyderyn rere Coontey-pobble, 2021:<ref>{{cite web |title=Main language (detailed) - Office for National Statistics |url=https://www.ons.gov.uk/datasets/TS024/editions/2021/versions/1 |website=ONS.gov.uk |publisher=[[Office for National Statistics]] |access-date=6 Jerrey Geuree 2023 |date=29 Mee Houney 2022}}</ref> 557 'sy vlein 2011)<ref name="ons_gov_uk">{{cite web |title=Number of Welsh, Gaelic, Irish and Cornish speakers from the 2011 Census |url=https://www.ons.gov.uk/aboutus/transparencyandgovernance/freedomofinformationfoi/numberofwelshgaelicirishandcornishspeakersfromthe2011census |website=ONS.gov.uk |publisher=[[Office for National Statistics]] |access-date=2 Mean Souree 2018 |date=9 Mean Souree 2017}}</ref>
| daah kynney = Ind-Oarpagh
| fam2 = [[Çhengaghyn Celtiagh|Celtiagh]]
| fam3 = [[Celtish ny h-Ellanyn|Ellanagh]]
| fam4 = [[Çhengaghyn Brythonagh|Brythonagh]]
| fam5 = [[Çhengaghyn Brythonagh Heear Yiass|Brythonagh Heear Yiass]]
| iso1 = kw
| iso2 = cor
| lc1 = cor
| ld1 = Cornish Noa-emshiragh
| lc2 = cnx
| ld2 = Cornish Veanagh
| lc3 = oco
| ld3 = Shenn Chornish
| linglist = cnx
| lingname = Cornish Veanagh
| linglist2 = oco
| lingname2 = Shenn Chornish
| lingua = 50-ABB-a
| glotto = corn1251
| glottorefname = Cornish
| script = [[Script Ladjynagh|Ladjynagh]]
| mynlagh = [[Sostyn]]
* [[Yn Chorn|Y Chorn]]
| jantys = {{nowrap|[[ Keskowethyans an Taves Kernewek]]}}
| stundayrtyn = [[Cummey Screeuit Stundayrtit]] (Oikoil)<br>[[Kernewek Kemmyn]]<br>[[Cornish Unnaneysit]]<br>[[Kernowek Stundayrtit]]<br>[[Cornish Noa-emshiragh]]
| fogrey = IPA
}}
[[Coadan:WIKITONGUES- Elizabeth speaking Cornish.webm|thumb|Cornisheyr 'sy vlein 2015 lesh Wikitongues|class=notpageimage]]
Ta '''Cornish''' ny '''Kernowish''' (Cornish: ''Kernewek''/''Kernowek'' ayns [[Cummey Screeudeyrys Bun-towshanit]]; ''Kernewek'' ayns [[Cornish cho-unnaneit|CC]] as [[Kernewek Kemmyn|KK]]; ''Kernowek'' ayns [[Cornish cho-unnaneit lhiasit|CCL]] as [[Kernowek bun-towshanit|KB]]; as ''Curnoack'' ayns [[Cornish Yeianagh Aavioghit|CYA]]) ny [[Çhengaghyn Celtiagh|çhengey Cheltiagh]] ta loayrit 'sy [[Yn Chorn|Chorn]]. Hannee yn çhengey myr çhengey yn phobble ayns rheynnyn ny Corn derrey jerrey yn [[18oo eash|18-oo eash]], agh veih toshiaght y [[20oo eash|20-oo eash]] ta deiney ennagh jannoo eiyrtysyn ee y aavioghey.
== Stayd roie ==
=== Çhengey aavioghit ===
Rere studeyrys liorish Kenneth McKinnon 'sy vlein 2000, va Cornish ghlane ec mygeayrt 300 dooinney. Agh rere speeideilys yn aavioghey t'eh oolit dy vel Cornish ghlane ec 2,000 dooinney 'sy vlein 2008, as va ram sleih fo jeih bleeaney as feed er nyn droggal ayns Cornish as [[Baarle]].
Ta'n çhengey ry-akin ayns enmyn ynnydyn er feie yn choontae, as ta tustey mie ny çhengey cur cooney da deiney as ad jannoo eiyrtys toiggaltys y chur orroo. Ta enmyn Cornish ymmydit myr enmyn paitçhyn, beiyn, thieyn, as baataghyn. Ta ram lettyraght ry-gheddyn ayns Cornish jiu, as she bardaght y ''genre'' smoo scanshoil.
== Rang-oardraghey ==
==Shennaghys==
Haink y Phrota-Chornish gys kione ny yei scarrey magh ny Brythonee ayns [[Somerset]], [[Dorset]], [[Devon]] as [[Yn Chorn|y Chorn]] veih ny Brythonee elley ayns [[Bretin]] liorish [[Cah Deorham]] 'sy vlein [[577]]. Rere mooadaghey [[Wessex]] harrish ny h-eashyn ny yei, va'n thalloo fo stiurey ny Brythonee Heear Yiass ny sloo as ny sloo. 'Sy vlein [[927]], hug [[Athelstan]] ny Celtiee heear yiass magh ass [[Exeter]] as ren eh joarey ass y [[Tamer (awin)|Tamer]] eddyr [[Exeter]] [[Anglo-Hostyn]]agh as [[Yn Chorn|y Chorn]] [[Ny Celtiee|Cheltiagh]]. Ny yei shen, hoshee yn çhengey gaase, as 'sy vlein 1300 va mygeayrt 38,000 loayreyderyn jeh'n çhengey. Rieau neayr's shen, huitt y mooad loayreyderyn ayns ny bleeantyn ny lurg:
{| class="wikitable"
|-
| '''''Blein'''''
| '''''E'''''
| '''''L'''''
| '''''Q'''''
| '''''Blein'''''
| '''''E'''''
| '''''L'''''
| '''''Q'''''
|-
| 1050
| 16,000
| 15,000
| 95%
| 1450
| 62,000
| 33,000
| 54%
|-
| 1110
| 21,000
| 20,000
| 94%
| 1500
| 69,000
| 33,000
| 48%
|-
| 1150
| 28,000
| 26,000
| 93%
| 1550
| 76,000
| 30,000
| 40%
|-
| 1200
| 35,000
| 30,000
| 86%
| 1600
| 84,000
| 22,000
| 26%
|-
| 1250
| 43,000
| 34,000
| 79%
| 1650
| 93,000
| 14,000
| 15%
|-
| 1300
| 52,000
| 38,000
| 73%
| 1700
| 106,000
| 5,000
| 5%
|-
| 1350
| 48,000
| 32,000
| 67%
| 1750
| 140,000
| beggan beg
| >0%
|-
| 1400
| 55,000
| 34,000
| 61%
| 1800
| 192,000
| neunhee
| 0%
|}
<small> '''Noteyn''': '''''E''''' = ooley yn phobble 'sy Chorn; '''''L''''' = ooley loayreyderyn ny Cornish; '''''Q''''' = Cornisheyryn 'sy cheead</small>
T'ad focklyn ayns laue-screeuyn [[Ladjyn]] yn obbyr ''[[De Consolatione Philosophiae]]'' liorish [[Boethius]] veih'n vlein 525 ny kied focklyn ayns Cornish, as eh jannoo ymmyd jeh ny focklyn ''ud rocashaas'', ny "v'eh (yn aigney) dwoaie da ny h-ynnydyn dorraghey".<ref>{{Cite web |title=Oxford scholars detect earliest record of Cornish |url=http://www.admin.ox.ac.uk/po/060615.shtml |accessdate=2008-09-21 |archivedate=2015-05-25 |archiveurl=https://web.archive.org/web/20150525120906/http://www.admin.ox.ac.uk/po/060615.shtml }}</ref><ref>Sims-Williams, P. 'A New Brittonic Gloss on Boethius: ud rocashaas', Cambrian Medieval Celtic Studies 50 (Geurey 2005), 77-86.</ref>
[[Coadan:kernow lb.png|right|thumbnail|250px|Scughey yn joarey çhengagh 'sy Chorn 1300-1750]]
== Sheeanaghtys as sheeanchoryssaghtys ==
Ta fockley magh ny Cornish tradishoonagh ny red far-vriwnyssagh, agh ta coardailys son y chooid smoo rish sheeanchoryssaghtys ny Cornish Aavioghit.
=== Corocklyn ===
Shoh taabyl ny Cornish Aavioghit myr ta moyllit son fockley magh chairscreeu ny Cornish Cho-unnaneyssit Lhiasit (CCL), as jannoo ymmyd jeh cowraghyn veih'n [[Cooney:ASE|Abbyrlhit Sheeanchoryssaghtys Eddyr-ashoonagh]] (ASE).
{|class="wikitable"
!
![[Corockle daa-veillagh|Daa-veillagh]]
![[Corockle meill-eeacklagh|Meill-eeacklagh]]
![[Corockle feeacklagh|Feeacklagh]]
![[Corockle cooyl-eeacklagh|Cooyl-eeacklagh]]
![[Corockle lurg-chooyleeacklagh|Lurg-chooyleeacklagh]]
![[Corockle cleaoil|Cleaoil]]
![[Corockle meill-choghooysagh|Meill-choghooysagh]]
![[Corockle coghooysagh|Coghooysagh]]
![[Corockle sluggidagh|Sluggidagh]]
|-
|'''[[Corockle bleaystagh|Bleaystagh]]'''
| style="text-align:center;"|{{ASE|p b}}
|
|
| style="text-align:center;" |{{ASE|t d}}
|
|
|
| style="text-align:center;"|{{ASE|k g}}
|
|-
|'''[[Corockle stronnagh|Stronnagh]]'''
| style="text-align:center;"|{{ASE|m}}
|
|
| style="text-align:center;" |{{ASE|n}}
|
|
|
| style="text-align:center;"|{{ASE|ŋ}}
|
|-
|'''[[Corockle screebagh|Screebagh]]'''
|
| style="text-align:center;"|{{ASE|f v}}
| style="text-align:center;"|{{ASE|θ ð}}
| style="text-align:center;"|{{ASE|s z}}
| style="text-align:center;"|{{ASE|ʃ ʒ}}
|
|
| style="text-align:center;"|{{ASE|x}}
| style="text-align:center;"|{{ASE|h}}
|-
|'''[[Corockle faggyssaght|Faggyssaght]]'''
|
|
|
| style="text-align:center;" |{{ASE|ɹ}}
|
| style="text-align:center;"|{{ASE|j}}
| style="text-align:center;"|{{ASE|ʍ w}}
|
|
|-
|'''[[Corockle lhiattagh|Faggyssaght<br />lhiattagh]]'''
|
|
|
| style="text-align:center;" |{{ASE|l}}
|
|
|
|
|
|}
=== Breeocklyn ===
Shoh taabylyn ny Cornish Aavioghit myr ta moyllit son fockley magh cairscreeu ny Cornish Cho-unnanaghit Lhiasit (CCL), as jannoo ymmyd jeh cowraghyn veih'n [[Cooney:ASE|Abbyrlhit Sheeanagh Eddyr-ashoonagh]] (ASE).
{|class="wikitable"
|+'''Breeocklyn giare'''
!
! [[Breeockle toshee|Toshee]]
! [[Breeockle meanagh|Meanagh]]
! [[Breeockle cooyl|Cooyl]]
|-
! [[Breeockle doont|Doont]]
| align=center | {{ASE|y}}
|
|
|-
! [[Breeockle lieh-ghoont|Lieh-ghoont]]
| align=center | {{ASE|ɪ}}
|
| align=center | {{ASE|ʊ}}
|-
! [[Breeockle eddyr|Eddyr]]
|
| align=center | {{ASE|ə}}
|
|-
! [[Breeockle eddyr-oshlit|Eddyr-oshlit]]
| align=center | {{ASE|ɛ}} {{ASE|œ}}
|
| align=center | {{ASE|ɔ}}
|-
! [[Breeockle lieh-oshlit|Lieh-oshlit]]
| align=center | {{ASE|æ}}
|
|
|-
! [[Breeockle foshlit|Foshlit]]
| align=center | {{ASE|a}}
|
| align=center | {{ASE|ɒ}}
|}
{|class="wikitable"
|+'''Breeocklyn foddey'''
!
! [[Breeockle toshee|Toshee]]
! [[Breeockle cooyl|Cooyl]]
|-
! [[Breeockle doont|Doont]]
| align=center | {{ASE|iː}} {{ASE|yː}}
| align=center | {{ASE|uː}}
|-
|-
! [[Breeockle eddyr-ghoont|Eddyr-ghoont]]
| align=center | {{ASE|eː}} {{ASE|øː}}
|
|-
|-
! [[Breeockle eddyr-oshlit|Eddyr-oshlit]]
|
| align=center | {{ASE|ɔː}}
|-
! [[Breeockle lieh-oshlit|Lieh-oshlit]]
| align=center | {{ASE|æː}}
|
|-
! [[Breeockle foshlit|Foshlit]]
|
| align=center | {{ASE|ɒː}}
|}
== Sambylyn ==
=== Taabyl cosoylaght ===
Ta'n taabyl shoh cosoylaghey focklyn Cornish ennagh (screeuit ayns cairscreeuyn CYA, Kernewek Kemmyn as CSB) lesh corrymyn rish ny çhengaghyn Celtiagh elley.
{| class="wikitable"
!Cornish (CYA) !! Cornish (KK) !! Cornish (CSB) !! [[Bretnish]] !! [[Britaanish]] !! [[Yernish]] !! [[Gaelg Albinagh]] !! [[Gaelg]]
|-
| Kernowek || Kernewek || Kernewek, Kernowek || Cernyweg|| Kerneveureg || Coirnis || Còrnais || Cornish
|-
| gwenenen || gwenenenn || gwenenen || gwenynen || gwenanenn || beach || seillean, beach || shellan
|-
| chayr, cadar || kador || kador {cador} || cadair || kador || cathaoir || cathair || caair
|-
| cues || keus || keus || caws || keuz || cáis || càise || caashey
|-
| mesporth || yn-mes || yn-mes || allanfa || er-maez || bealach amach || dol a-mach || dorrys magh
|-
| codha || koedha || kodha {codha} || codwm, disgyn, syrthio, cwympo, || kouezhañ || tit || tuiteam || tuittym
|-
| gavar || gaver || gaver || gafr || gavr || gabhair || gobhar || goayr
|-
| chy || chi || chi, chei || tŷ || ti || tigh/teach || taigh || thie
|-
| gwues || gweus || gweus || gwefus || gweuz || bruas || bile || meill
|-
| aber || aber || aber || aber || aber || inbhear || inbhir || inver
|-
| nyver || niver || niver || rhif, nifer || niver || uimhir || àireamh || earroo
|-
| peren || perenn || peren || gellygen, peren || perenn || piorra || peur || peear
|-
| scol || skol || skol {scol} || ysgol || skol || scoil || sgoil || scoill
|-
| megy || megi || megi {-y} || ysmygu || mogediñ || caith || smoc || toghtaney
|-
| steren || sterenn || steren || seren || steredenn || réalt || reul || rollage
|-
| hedhyw || hedhyw || hedhyw || heddiw || hiziv || inniu || an-diugh || jiu
|-
| whybana || hwibana || hwibana {whibana}|| chwibanu || c'hwibanat || feadaíl || feadan || feddan
|-
| whel || hwel || hwel {whel} || chwarel || arvez || cairéal || coireall || quarral
|}
=== Raaghyn cadjin ===
Ta lettyraght as fockley magh ny raaghyn shoh heese gollrish bun-towshanyn ''Chernewek Kemmyn'':
{|
!Cornish
![[Cooney:ASE|ASE]]
!Gaelg
|--
|'''Myttin da''' || {{ASE|[ˈmɪttɪn ˈdaː]}} || "moghrey mie"
|--
|'''Dydh da''' || {{ASE|[ˈdɪːð ˈdaː]}} || "laa mie"
|--
|'''Fatla genes?''' || {{ASE|[ˈfatla ˈgɛˑnɛs]}} || "kys t'ou?"
|--
|'''Yn poynt da, meur ras''' || {{ASE|[ɪn ˈpɔjnt ˈdaː mœːr ˈraːs]}} || "Dy mie, gura mie ayd"
|--
|'''Py eur yw hi?''' || {{ASE|[ˈpɪː ˈœːr ɪw hiː]}} || "Cre'n traa t'eh?"
|--
|'''Ple'ma Rysrudh, mar pleg?''' || {{ASE|[ˈplɛː maː ˈrɪˑzrɪð mar ˈplɛːg]}} || "C'raad ta Rysrudh, my sailliu?"
|--
|'''Yma Rysrudh ogas dhe Gambron, heb mar!''' || {{ASE|[ɪˈmaː ˈrɪˑzrɪð ˈɔˑgas ðɛ ˈgamːbrɔn hɛb ˈmaːr]}} || "Ta Rysrudh faggys da Kammbronn, myrchaagh!"
|--
|}
== Jeeagh er neesht ==
* [[Çhengaghyn 'sy Reeriaght Unnaneysit]]
* [[Aavioghey çhengey]]
* [[Cussel an Tavas Kernuak]]
* [[Kaart Oarpagh ry hoi Çhengaghyn Ardjynagh ny Mynlagh]]
* [[Dolly Pentreath]]
== Imraaghyn ==
{{reflist}}
== Noteyn ==
* [https://www.academia.edu/5323710/A_Brief_History_of_the_Cornish_Language_its_Revival_and_its_Current_Status Ferdinand, Siarl (2013). ''A Brief History of the Cornish language, its Revival and its Current Situation''. ''E-Keltoi'', Ym-l. 2, 2 Dec. dgn. 199-227]
* Berresford Ellis, P. ''The Story of the Cornish Language'', Truru: Tor Mark Press. 1990.
* Jackson, Kenneth. ''Language and History in Early Britain''. 1953.
* [[Craig Weatherhill|Weatherhill, C.]] ''Cornish Place names and Language''. 1995.
== Kianglaghyn çheumooie ==
{{EddyrWiki|coad=kw}}
* [http://www.gutenberg.org/files/26192/26192-h/26192-h.htm A Handbook of the Cornish Language, lorish Henry Jenner] eBook [[Project Gutenberg]]
* [https://web.archive.org/web/20170112235606/http://www.magakernow.org.uk/ Ynnyd-eggey Chopharteeys ny Cornish]
* [http://radyo.kernewegva.com Stashoon Radio Cornish Eddyr-voggylagh lesh pod-chreelaghyn shiaghtinagh ayns Cornish]
* [http://kernowek.net/mailman/listinfo/spellyans_kernowek.net Spellyans - Rolley resooney magh ry hoi Cummey Screeudeyrys Bun-towshanit]
* [http://www.kernowek.net Ynnyd-eggey UdnFormScrefys ry hoi yn cairscreeu yeearrit, Kernowek Standard]
* [https://web.archive.org/web/20080907225718/http://www.dasunys.net/ Ynnyd-eggey Bock as Bruch ry hoi yn cairscreeu yeearrit, Kernowek Dasunys]
* [https://web.archive.org/web/20080510012326/http://www.kdlcornish.freeserve.co.uk/ Kernewek dre Lyther - ''Cornish by Post''] - Coorse coreggyrtys er-lhieen ny Cornish
* [https://web.archive.org/web/20071009150849/http://www.cornishmusic.com/shop/index.php?cat_id=9&catname=%273.%20CORNISH%20LANGUAGE%20CD%20SALES%27 Kensa Kernewek - Fosley-raa gys y Chornish]
* [http://www.bbc.co.uk/cornwall/connected/stories/new_cornwall_language.shtml ''Blas Kernewek'' - Blass ny Cornish] - lessoonyn bunneydagh ny Cornish currit magh ec [[BBC Cornwall]]
* [http://www.cornish-language.org/ Coheshaghtys ny Cornish]
* [https://web.archive.org/web/20071219231753/http://www1.fa.knaw.nl/mercator/regionale_dossiers/regional_dossier_cornish_in_uk.htm Y Chornish ayns edjaghys 'sy Reeriaght Unnaneysit]
* [http://www.bbc.co.uk/voices/multilingual/cornish.shtml Cornish jiu] liorish Kenneth MacKinnon - veih'n [[BBC]]^
* [http://www.evertype.com/celtcong/ Cohionnal Celtiagh Eddyr-ashoonagh]
* [https://web.archive.org/web/20120310144628/http://valesne.homestead.com/untitled9.html Fockleyr giare Cornish - Baarle - Shapaanish] lesh fockley magh
* [https://web.archive.org/web/20070222020834/http://www.ox.ac.uk/blueprint/2005-06/2906/17.shtml Recortys ny Cornish s'lheah feddynit magh liorish scollagyn ayns Oxford]
* [https://web.archive.org/web/20150525120906/http://www.admin.ox.ac.uk/po/060615.shtml Recortys ny Cornish s'lheah feddynit magh liorish scollagyn ayns Oxford]
=== Stoo biblagh ===
* [https://web.archive.org/web/20080616135850/http://www.bibelkernewek.com/ Bibel Kernewek] Shalee ry hoi Çhyndaa ny Bible gys y Chornish
* [http://www.evertype.com/gram/tn.html Testament Noweth]—Yn Conaant Noa
=== Fockleyryn ===
* [http://www.evertype.com/gram/ecd.html Fockleyr Baarle-Cornish], ayns cairscreeu CYA, y nah chur magh
* [https://web.archive.org/web/20050405213950/http://www.websters-online-dictionary.org/definition/Cornish-english/ Fockleyr Cornish-Baarle]: ass [http://www.websters-online-dictionary.org Webster's Online Dictionary] Cur magh Rosetta.
* [http://www.archive.org/details/lexiconcornubrit00willuoft ''Lexicon Cornu-Britannicum: a Dictionary of the Ancient Celtic Language of Cornwall''] liorish Robert Williams, Llandovery, 1865.
{{Navboxes
| list =
{{Cornish}}
{{Yn Chorn}}
{{çhengaghyn Celtiagh}}
{{Celtee}}
{{Çhengaghyn y Reeriaght Unnaneysit}}
}}
{{gurneil eaghtyrys}}
[[Ronney:Cornish| ]]
[[Ronney:Çhengaghyn y Reeriaght Unnaneysit]]
[[Ronney:Çhengaghyn Hostyn]]
[[Ronney:Çhengaghyn ayns gaue trome-chooishagh]]
[[Ronney:Çhengaghyn gymmyrkey feanish veih'n 9oo eash]]
[[Ronney:Çhengaghyn hooar baase 'sy 18oo eash]]
[[Ronney:Çhengaghyn Brythonagh Heear Yiass]]
[[Ronney:Aavioghey yn Chornish]]
[[Ronney:Ashoonaghys Cornagh]]
[[Ronney:Çhengaghyn Celtiagh ayns gaue]]
[[Ronney:Çhengaghyn breear–kione–cass]]
[[Ronney:Aavioghey çhengey]]
toxx73q7b7rxluex7mgjxgcs2y61y5j
Ronney:Sheshaght
14
6962
379166
361276
2026-05-17T21:41:59Z
MacTire02
219
+ronney
379166
wikitext
text/x-wiki
{{Commonscat|Society|Sheshaght}}
{{catmore}}
[[Ronney:Deiney]]
[[Ronney:Bunneydagh]]
5b3yw3fyrx74y80z8synitvspjhdzw7
Eintracht Frankfurt
0
9550
379142
373360
2026-05-17T17:58:09Z
-Lemmy-
9197
379142
wikitext
text/x-wiki
{{Kishtey Fys Fwirran bluckan-coshey
| ennym = Eintracht Frankfurt
| caslys =
| mooadys_caslys = 100px
| ennym_lane = Eintracht Frankfurt
| farennym = ''SGE'', ''Die Adler''
| bunnit = [[1899]]
| ennym_staid = [[Deutsche Bank Park]]
| boayl_staid = [[Frankfurt|Frankfurt am Main]]
| mooadys = (mooadys: 59,500)
| caairliagh = {{brattagh|Germany}} [[Mathias Beck]]
| reireyder = {{brattagh|Spain}} [[Albert Riera]]
| rheynn = [[Bundesliga]]
| imbagh = 2025-26
| keim = [[Bundesliga]], 8oo
| gansee = [[Nike]]
| barrantee gansee = [[Indeed.com]]
|
| pattern_la1 = _frankfurt2526h
| pattern_b1 = _frankfurt2526h
| pattern_ra1 = _frankfurt2526h
| pattern_sh1 = _frankfurt2526h
| pattern_so1 = _frankfurt2526hl
| leftarm1 = 000000
| body1 = 000000
| rightarm1 = 000000
| shorts1 = 000000
| socks1 = 000000
| pattern_la2 = _frankfurt2526a
| pattern_b2 = _frankfurt2526a
| pattern_ra2 = _frankfurt2526a
| pattern_sh2 = _frankfurt2526a
| pattern_so2 = _adidasblack2l
| leftarm2 =
| body2 =
| rightarm2 =
| shorts2 =
| socks2 =
| pattern_la3 = _frankfurt2526t
| pattern_b3 = _frankfurt2526t
| pattern_ra3 = _frankfurt2526t
| pattern_sh3 = _frankfurt2526t
| pattern_so3 = _adidaswhitel
| leftarm3 = 7c85a4
| body3 = 7c85a4
| rightarm3 = 7c85a4
| shorts3 = 7c85a4
| socks3 = 7c85a4
*
| ynnydeggey = www.eintracht.de
| roie =
}}
Ta '''Eintracht Frankfurt''' ny chlub [[soccer]] [[Yn Ghermaan|Germaanagh]] ta cloie 'sy [[Bundesliga|Vundesliga]]. Va'n club bunnit 'sy vlein [[1899]] myr ''Frankfurter Fußball-Club Viktoria von 1899''. Ec y traa t'ayn, she [[Albert Riera]] y reireyder.
== Cloiederyn ==
{{Toshiaght FBc}}
{{Bluckaneyr FBc| ear= 2| ash=Germany| ynnyd=F| ennym=[[Elias Baum]]}}
{{Bluckaneyr FBc| ear= 3| ash=Belgium| ynnyd=F| ennym=[[Arthur Theate]]}}
{{Bluckaneyr FBc| ear= 4| ash=Germany| ynnyd=F| ennym=[[Robin Koch]]}}
{{Bluckaneyr FBc| ear= 5| ash=Switzerland| ynnyd=F| ennym=[[Aurèle Amenda]]}}
{{Bluckaneyr FBc| ear= 6| ash=Denmark| ynnyd=F| ennym=[[Oscar Højlund]]}}
{{Bluckaneyr FBc| ear= 7| ash=Germany| ynnyd=M| ennym=[[Ansgar Knauff]]}}
{{Bluckaneyr FBc| ear= 8| ash=Algeria| ynnyd=M| ennym=[[Farès Chaïbi]]}}
{{Bluckaneyr FBc| ear= 9| ash=Germany| ynnyd=B| ennym=[[Jonathan Burkardt]]}}
{{Bluckaneyr FBc| ear=11| ash=Germany| ynnyd=B| ennym=[[Younes Ebnoutalib]]}}
{{Bluckaneyr FBc| ear=13| ash=Denmark| ynnyd=F| ennym=[[Rasmus Kristensen]]}}
{{Bluckaneyr FBc| ear=15| ash=Tunisia| ynnyd=F| ennym=[[Ellyes Skhiri]]}}
{{Bluckaneyr FBc| ear=16| ash=Sweden| ynnyd=M| ennym=[[Hugo Larsson]]}}
{{Bluckaneyr FBc| ear=18| ash=Germany| ynnyd=M| ennym=[[Mahmoud Dahoud]]}}
{{Bluckaneyr FBc| ear=19| ash=France| ynnyd=M| ennym=[[Jean-Mattéo Bahoya]]}}
{{Bluckaneyr FBc| ear=20| ash=Japan| ynnyd=M| ennym=[[Ritsu Doan]]}}
{{Bluckaneyr FBc| ear=21| ash=Germany| ynnyd=F| ennym=[[Nathaniel Brown]]}}
{{Bluckaneyr FBc| ear=22| ash=USA| ynnyd=F| ennym=[[Timothy Chandler]]}}
{{Bluckaneyr FBc| ear=23| ash=Germany| ynnyd=D| ennym=[[Michael Zetterer]]}}
{{Mean FBc}}
{{Bluckaneyr FBc| ear=25| ash=France| ynnyd=B| ennym=[[Arnaud Kalimuendo]]}}
{{Bluckaneyr FBc| ear=26| ash=Japan| ynnyd=F| ennym=[[Keita Kosugi]]}}
{{Bluckaneyr FBc| ear=27| ash=Germany| ynnyd=M| ennym=[[Mario Götze]]}}
{{Bluckaneyr FBc| ear=29| ash=Morocco| ynnyd=B| ennym=[[Ayoube Amaimouni]]}}
{{Bluckaneyr FBc| ear=30| ash=Belgium| ynnyd=B| ennym=[[Michy Batshuayi]]}}
{{Bluckaneyr FBc| ear=31| ash=Sweden| ynnyd=M| ennym=[[Love Arrhov]]}}
{{Bluckaneyr FBc| ear=33| ash=Germany| ynnyd=D| ennym=[[Jens Grahl]]}}
{{Bluckaneyr FBc| ear=34| ash=Germany| ynnyd=F| ennym=[[Nnamdi Collins]]}}
{{Bluckaneyr FBc| ear=37| ash=Germany| ynnyd=M| ennym=[[Jeremiaha Maluze]]}}
{{Bluckaneyr FBc| ear=38| ash=Germany| ynnyd=M| ennym=[[Ebu Bekir Is]]}}
{{Bluckaneyr FBc| ear=39| ash=Germany| ynnyd=D| ennym=[[Amil Šiljević]]}}
{{Bluckaneyr FBc| ear=40| ash=Brazil| ynnyd=D| ennym=[[Kauã Santos]]}}
{{Bluckaneyr FBc| ear=41| ash=Mali| ynnyd=F| ennym=[[Fousseny Doumbia]]}}
{{Bluckaneyr FBc| ear=42| ash=Turkey| ynnyd=F| ennym=[[Can Uzun]]}}
{{Bluckaneyr FBc| ear=44| ash=Ecuador| ynnyd=F| ennym=[[Davis Bautista]]}}
{{Bluckaneyr FBc| ear=45| ash=USA| ynnyd=M| ennym=[[Marvin Dills]]}}
{{Bluckaneyr FBc| ear=48| ash=Spain| ynnyd=B| ennym=[[Junior Awusi]]}}
{{Bluckaneyr FBc| ear=49| ash=Spain| ynnyd=F| ennym=[[Derek Boakye Osei]]}}
{{Bluckaneyr FBc| ear=50| ash=Germany| ynnyd=B| ennym=[[Alessandro Gaul Souza]]}}
{{Bluckaneyr FBc| ear=53| ash=Germany| ynnyd=B| ennym=[[Alexander Staff]]}}
<!--
{{Bluckaneyr FBc| ear=| ash=France| ynnyd=M| ennym=[[Éric Junior Dina Ebimbe]]}}
{{Bluckaneyr FBc| ear=| ash=Hungary| ynnyd=M| ennym=[[Noah Fenyő]]}}
{{Bluckaneyr FBc| ear=| ash=Germany| ynnyd=F| ennym=[[Noel Futkeu]]}}
{{Bluckaneyr FBc| ear=| ash=Hungary| ynnyd=M| ennym=[[Krisztián Lisztes]]}}
{{Bluckaneyr FBc| ear=| ash=Germany| ynnyd=F| ennym=[[Jessic Ngankam]]}}
{{Bluckaneyr FBc| ear=| ash=France| ynnyd=F| ennym=[[Niels Nkounkou]]}}
{{Bluckaneyr FBc| ear=| ash=Albania| ynnyd=D| ennym=[[Simon Simoni]]}}
{{Bluckaneyr FBc| ear=| ash=Croatia| ynnyd=F| ennym=[[Hrvoje Smolčić]]}}
{{Bluckaneyr FBc| ear=| ash=France| ynnyd=B| ennym=[[Elye Wahi]]}}
Joining in / out on loan until July 2026
-->
{{Jerrey FBc}}
== Reireyderyn ==
<!--
{|
|-
| valign="top" |
| valign="top" |
-->
* [[Felix Magath]] (1999-2001)
* [[Rolf Dohmen]] (2001)
* [[Friedel Rausch]] (2001)
* [[Martin Andermatt]] (2001-2002)
* [[Armin Kraaz]] (2002)
* [[Willi Reimann]] (2002-2004)
* [[Friedhelm Funkel]] (2004-2009)
* [[Michael Skibbe]] (2009-2011)
* [[Christoph Daum]] (2011)
* [[Armin Veh]] (2011-2014)
* [[Thomas Schaaf]] (2014-2015)
* [[Armin Veh]] (2015-2016)
* [[Niko Kovač]] (2016-2018)
* [[Adi Hütter]] (2018-2021)
* [[Oliver Glasner]] (2021-2023)
* [[Dino Toppmöller]] (2023-2026)
* [[Dennis Schmitt]] (2026)
* [[Albert Riera]] (2026-jiu)
<!--
|-
|}
-->
==Kianglaghyn magh==
{{Commons category}}
* {{official website}}
* [https://www.bundesliga.com/de/bundesliga/clubs/eintracht-frankfurt Eintracht Frankfurt] ec Bundesliga
* [https://www.uefa.com/nationalassociations/teams/50072--frankfurt/ Eintracht Frankfurt] ec [[UEFA]]
* [http://www.commerzbank-arena.de/ Ynnyd-eggey oikoil y staid] {{de jalloo}}
* [http://www.eintrachtrugby.de/ Meer ruggyr] {{de jalloo}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Frankfurt, Eintracht}}
[[Ronney:Eintracht Frankfurt| ]]
[[Ronney:Clubyn soccer 'sy Ghermaan]]
[[Ronney:Spoyrt ayns Frankfurt]]
[[Ronney:Clubyn soccer bunnit 'sy vlein 1899]]
[[Ronney:Bunneeaghtyn 'sy Ghermaan 'sy vlein 1899]]
[[Ronney:Clubyn yl-spoyrtoil 'sy Ghermaan]]
[[Ronney:Clubyn roortaghys 'sy Ghermaan]]
[[Ronney:Cosneyderyn UEFA Europa League]]
[[Ronney:Clubyn Bundesliga]]
[[Ronney:Clubyn 2. Bundesliga]]
afwkqq3ag2t6dlhm3yi9cg0xkm3xdjd
Ronney:Mooadyn fishigagh
14
10089
379154
291394
2026-05-17T21:12:10Z
MacTire02
219
ronnaghyn elley
379154
wikitext
text/x-wiki
{{Commonscat|Physical quantity|Mooad fishigagh}}
{{cat main|Mooad fishigagh}}
{{cat see also|Mooadyn kemmigagh}}
[[Ronney:Smooinaghtyn 'syn ishig]]
[[Ronney:Mooad]]
[[Ronney:Towshanagh]]
{{CatAutoTOC}}
avrn0e4x7wrrrphm35jlvd9q8zdfaah
Ronney:20oo eash
14
10090
379254
349793
2026-05-18T02:29:39Z
MacTire02
219
+clowan
379254
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|20th century|20oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh yeianagh]]
1vhjbrvkq8cega3sbftvid7zwbc517n
Ronney:21d eash
14
10096
379253
349794
2026-05-18T02:29:20Z
MacTire02
219
+clowan
379253
wikitext
text/x-wiki
{{Commonscat|21st century|21d eash}}
{{category series navigation}}
{{catmore}}
{{CategoryTOC}}
[[Ronney:3oo milley bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh yeianagh]]
[[Ronney:Shennaghys co-emshiragh]]
ogt1qyt3ycmrzr8wz96tq3ujjwzv65m
Ronney:3oo milley bleeaney
14
10097
379236
341468
2026-05-18T02:12:42Z
MacTire02
219
+clowan
379236
wikitext
text/x-wiki
{{Commonscat|3rd millennium|3oo milley bleeaney}}
{{category series navigation}}
{{catmore}}
{{CategoryTOC}}
[[Ronney:Milley bleeantyn| 3]]
[[Ronney:Yn Holoseenagh]]
5nluyw93jmn3rwumfe8rgsvst2kkfk4
Ronney:14oo eash
14
10098
379260
349786
2026-05-18T02:30:45Z
MacTire02
219
+clowan
379260
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|14th century|14oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
n8dj8gyxs3kxsxt3hgd55vxc5414sqn
Ronney:19oo eash
14
10099
379255
349792
2026-05-18T02:29:50Z
MacTire02
219
+clowan
379255
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|19th century|19oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh yeianagh]]
csppw2u0r3iicpfk3h85hbshvfy43c4
Ronney:18oo eash
14
10101
379256
349790
2026-05-18T02:30:05Z
MacTire02
219
+clowan
379256
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|18th century|18oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh leah rere eash]]
1rwep8zlb59a5r4gio1nrj1topituv1
Ronney:12h eash
14
10125
379262
349743
2026-05-18T02:31:06Z
MacTire02
219
+clowan
379262
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|12th century|12oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
l4x9e7rozxkv8orljgsv4gaklxn1eid
Newarish
0
10323
379150
353799
2026-05-17T20:39:35Z
InternetArchiveBot
16702
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379150
wikitext
text/x-wiki
{{Kishtey fys çhengey
|ennym = Newarish
|ennymdooghyssagh = नेपाल भाषा <br />''Nepal Bhasa, Newah Bhaye''
|daah kynney = Sheenagh-Tibetagh
|çheeraghyn = [[Nepaal]], [[yn Injey]], [[yn Vutaan]]
|ard =
|loayreyderyn = 860,000
|fam1 = [[Çhengaghyn Sheenagh-Tibetagh|Sheenagh-Tibetagh]]
|fam2=[[Çhengaghyn Tibetagh-Burmagh|Tibetagh-Burmagh]]
|fam3 = [[çhengaghyn Himalayagh|Himalayagh]]
|fam4 = [[çhengaghyn Mahakiranti|Mahakiranti]]
|fam5 = [[çhengaghyn Newaragh|Newaragh]]
|iso1 =
|iso2 = new
|iso3 = new
|ashoon=
|jantys=
|screeu = [[screeuyn Devanagari|Devanagari]], [[screeuyn Ranjana|Ranjana]], [[screeuyn Prachalit|Prachalit]], [[screeuyn Brahmi|Brahmi]], [[screeuyn Gupta|Gupta]], [[screeuyn Bhujimol|Bhujimol]], [[screeuyn Gulom|Gulom]]
|caslys-çheer =
}}
She çhengey [[çhengaghyn Tibetagh-Burmagh|Tibetagh-Burmagh]] ee '''Newarish''' ('''Nepal Bhasa''', '''Newah Bhaye''').
=== Raaghyn Newarish ===
:{| class="wikitable" align=center
|-
! Gaelg
! Devanagari
! Abbyrlhit Romanagh
|-
|Hello
|ज्वजलपा
|Jwajalapa
|-
|Cre'n ennym t'ort?
|छिगु नां: छु खः ?
|Chhigu naa chhu kha?
|-
|Ta'n ennym orrym ___
|जिगु नां: ___ ख:
|Jigu naa___ kha
|-
|Blein vie noa
|न्हूदँया भिंतुना
|Nhugu dan yaa bhintunaa
|-
|Gura mie ayd
|शुभाय्
|Subhaaye
|-
|Failt ort
|लसकुस
|Lasakusa
|-
|Moir
|मां
|Maa
|-
|Ayr
|अबु
|Abu
|-
|Mwarree
|अजी
|Ajee
|-
|Shennayr
|अजा
|Ajaa
|-
|Carrey
|पासा
|Paasaa
|-
|Sheshaght
|गुथि
|Guthi
|-
|Thie
|छें
|Chhen
|-
|Deiney
|मनु
|Manu
|-
|Lheeys
|वास:
|Waasa
|-
|Naight
|बुखं
|Bukhan
|-
|Daunsey
|प्याखं
|Pyakhan
|-
|Apag
|माक
|Maaqah
|-
|Dooinnney
|मि:जं
|Mijan
|-
|Ben
|मि:शा
|Misahh
|-
|Fer aeg
|ल्याम:
|Lyam'a
|-
|Caillin
|ल्यासी
|Lyaa'c
|-
|Arrane
|म्ये
|Mey
|-
|Plaase
|लाय्कू
|Layaku
|-
|Oik
|ज्यास:
|Jyaasa
|-
|Shapp
|पस:
|Pasa/Pasal
|-
|Close
|चूक
|Chooka
|-
|Inçhyn
|न्ह्यपु
|Nhepu
|-
|Cree
|नुगः
|Nugah
|-
|Cha nel Nepal Bhasa aym
|जित: नेपाल भाषा मवः
|Jita Nepal Bhasa mawa
|}
<!-- ta focklyn elley er y duillag Baarle, agh cha nel ad caghlaait aym er y fa nagh vel mee shickyr cre'n keeall ta'n fockle Baarle çheet er, ny dy vel doillee elley ayn
|-
|Water
|लः / ना / वा
|Lah / Naa / Waa (Raining Water)
***cre'n fockle ta çheet er fliaghey? y tree jeu?***
|-
|Stage
|दबली / दबू:
|Dabalee / Daboo
***ardan? calloo? keim? laaragh? couçh?***
|-
|Yes
|खः
|Kha
|-
|No
|मखु
|Makhu
***cha nel çhyndaa baghtal gyn ny smoo fys***
-->
{{EddyrWiki|coad=new}}
== Imraaghyn ==
{{rolleyimraaghyn}}
== Kianglaghyn mooie ==
*[https://web.archive.org/web/20070515013505/http://www.nepalnews.com.np/sandyatimes.htm Sandhya Times, Pabyr-naight Nepal Bhasa]
*[https://web.archive.org/web/20120822144418/http://www2.pair.com/webart/mysqllex/ntr_sword.html Fockleyr Nepal Bhasa eddyrlhieen]
*[http://newawiki.no-ip.org Fockleyr wiki Nepal Bhasa eddyrlhieen]
*[http://www.explorenepal.com/fonts Screeuyn Nepal Bhasa (Newari)]
*[https://web.archive.org/web/20091219021811/http://newar.com.np/ Newar Community Network]
{{çhengaghyn Sheenagh-Tibetagh}}
{{bun}}
[[Ronney:Çhengaghyn Sheenagh-Tibetagh]]
[[Ronney:Çhengaghyn Tibetagh-Burmagh]]
[[Ronney:Çhengaghyn Nepaal]]
[[Ronney:Çhengaghyn yn Injey]]
[[Ronney:Çhengaghyn y Vutaan]]
6pjsndo8c8ugw60djqxmcyz6370a898
Ronney:10oo eash
14
13025
379264
349784
2026-05-18T02:31:29Z
MacTire02
219
+clowan
379264
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{Commonscat|10th century|10oo eash}}
{{CategoryTOC}}
[[Ronney:1d villey bleeaney| 10]]
[[Ronney:Eashyn]]
89ul39x6jwi5ubs5hoycp9jzvzbfnay
Ronney:11d eash
14
13029
379263
278389
2026-05-18T02:31:18Z
MacTire02
219
+clowan
379263
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|11th century|11d eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
kzzo3x6h1p8egq4g0nhmg3i7clupqqw
Ronney:13oo eash
14
13035
379261
281018
2026-05-18T02:30:56Z
MacTire02
219
+clowan
379261
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|13th century|13oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
8vzeq0orfn7trh6aiuge6syo00636h8
Ronney:15oo eash
14
13039
379259
349787
2026-05-18T02:30:35Z
MacTire02
219
+clowan
379259
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|15th century|15oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
nkqlpgx2r9szjzhf0te483pcorgo4n5
Ronney:16oo eash
14
13073
379258
349788
2026-05-18T02:30:25Z
MacTire02
219
+clowan
379258
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|16th century|16oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh leah rere eash]]
3jj1xtmvf0gu5k8f4djffye0rtzoed9
Ronney:17oo eash
14
13077
379257
349789
2026-05-18T02:30:15Z
MacTire02
219
+clowan
379257
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|17th century|17oo eash}}
[[Ronney:2h villey bleeaney]]
[[Ronney:Eashyn]]
[[Ronney:Earish noa-emshiragh leah rere eash]]
nlphtjq4e5w5v85o9jmno1ev133gr1l
Ronney:Towse-oaylleeaght anchaslyssagh
14
14126
379179
347554
2026-05-17T23:37:39Z
MacTire02
219
catsort
379179
wikitext
text/x-wiki
{{Commonscat|Differential geometry|Towse-oaylleeaght anchaslyssagh}}
{{catmore}}
== Ronnaghyn bentyn rish ==
* [[:Ronney:Topoaylleeaght anchaslyssagh|Topoaylleeaght anchaslyssagh]]
[[Ronney:Magheryn y towse-oaylleeaght|Anchaslyssagh]]
[[Ronney:Magheryn yn oltscarrey maddaghtoil]]
[[Ronney:Fishig vaddaghtoil]]
308lfwek1zlauydch3506s4qg4h75on
Aavioghey ny Gaelgey
0
14946
379139
376689
2026-05-17T12:39:07Z
InternetArchiveBot
16702
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379139
wikitext
text/x-wiki
Ta '''aavioghey ny Gaelgey''', ny '''aavioghey yn Ghaelg''', çheet er yn obbraghey dy [[aavioghey çhengey]] ta goll er shooyl ayns [[Mannin]] ‘sy [[Gaelg|Ghaelg]]. She [[çhengey Cheltiagh]] ‘sy [[Çhengaghyn Gaelgagh|chrouw Ghaelgagh]] ee yn Ghaelg, goll rish yn [[Yernish]] as y [[Gaelg Albinagh|Ghaelg Albinagh]] ta goll er loayrt ayns Mannin son y chooid smoo,<ref>{{cite web | url = http://www.manxheritage.org/language/manx/ | title=Y Ghaelg | publisher = [[Undinys Eiraght Vannin]] | accessdate = 7 Jerrey Geuree 2011}}</ref> as cosoylagh rish ny çhengaghyn shen, ta'n Ghaelg er ny gholl stiagh ayns paase d'aavioghey. Cha nee obbraghey çhengoaylleeagh ny lomarcan t’ayn ‘syn aavioghey, agh obbraghey ta goaill stiagh begnagh dagh ayrn jeh’n chultoor Gaelgagh lheid as [[kiaull Vannin|y chiaull Vanninagh hradishoonagh]], y daunse Manninagh, as ny skeealyn as y veeal-arrish Vanninagh.<ref>{{cite journal | last = Maddrell | first = Breesha | month = Jerrey Fouyir | year = 2002 | accessdate = 7 Jerrey Geuree 2011 | title = Speaking from the Shadows: Sophia Morrison and the Manx Cultural Revival | volume = 113 No. 2 | pages = dg. 215-236 | publisher = Taylor & Francis, Ltd | journal = Folklore | language = Baarle}}</ref> Ta coontyssyn ennagh gra dy ren toshiaghey yn aavioghey ‘sy 19oo eash yeianagh lesh cur er bun [[Yn Çheshaght Ghailckagh|y Çheshaght Ghailckagh]],<ref>{{cite journal | title = Manx Language Revitalization and Immersion Education | url = http://www4.uwm.edu/celtic/ekeltoi/volumes/vol2/2_5/clague_2_5.pdf | first = Marie | last = Clague | journal = Journal of Interdisciplinary Celtic Studies | volume = 2 | language = Baarle | publisher = e-Keltoi | pages = dg. 171 | date = 12 Mean Souree 2009 | access-date = 2011-01-07 | archive-date = 2011-06-24 | archive-url = https://web.archive.org/web/20110624081153/http://www4.uwm.edu/celtic/ekeltoi/volumes/vol2/2_5/clague_2_5.pdf | url-status = dead }}</ref><ref>{{cite book | title = The Celtic Languages| chapter = The Revived Languages: Revived Manx | last = Broderick | first = George | editor = Ball, Martin J. | publisher = Routlege | language = Baarle | accessdate = 7 Jerrey Geuree 2011 | isbn = 0-415-28080-X | year = 2000 | location = Lunnin as York Noa}}</ref> agh s’foddee dy ren toshiaghey yn aavioghey ‘sy 17oo eash yeianagh as 'sy 18oo eash leah lesh çheet magh ny chied teksyn Gaelg, y [[Yn Vible|Vible Chasherick]] as ''Coyrle Sodjey'', v’er nyn gur magh ec yn [[Aspickys Vannin|aspick Manninagh]] [[Thomas Wilson (aspick)|Thomas Wilson]] (1663 - 1755), ga nagh row aavioghey yn çhengey er laccal oc agh aght son dy skeayley fys y Chreestiaght harrish yn ellan.<ref>{{cite web | first = Peter | last = Elson | publisher = Liverpool Daily Post | date = 16 Toshiaght Arree 2009 | accesssdate = 7 Jerrey Geuree 2011 | language = Baarle | title = Breathing life into the Manx language | url = http://www.liverpooldailypost.co.uk/liverpool-life-features/liverpool-special-features/2009/02/16/breathing-life-into-the-manx-language-92534-22935950/ }}</ref><ref name="Hemsley">{{cite web | url = http://gphemsley.org/papers/uvm/200901_ANTH_028_Manx.pdf | title = The Manx Language: Dead or Alive? | date = 1 Boaldyn 2009 | accessdate = 7 Jerrey Geuree 2011 | language = Baarle | author = Hemsley, Gordon P. | format = PDF }}</ref>
Veih’n traa shen gys y 20oo eash yeianagh va ram obbraghyn screeuee currit magh ‘sy Ghaelg, as ad cur sheese er coorseyn crauee, coorseyn dy hennaghys, as coorseyn lettyragh, as ad ny mastey obbraghyn elley. Rere shen, va farraneyn jeh’n çhengey screeuee ayn son dy chooney lesh ny h-aaviogheyderyn cur y çhengey reesht er yn ardan, ga nagh row lettyraght ghooie ayndaue agh çhyndaaghyn crauee as carvallyn.<ref>{{cite web | url = http://www.coe.int/t/dg4/education/minlang/Report/PeriodicalReports/UKPR2AnnexM_en.pdf | title = The Future Development of the Manx Language | last = Stowell | first = Brian | authorlink = Brian Stowell | language = Baarle | date = 2005 | format = PDF | publisher = [[Rheynn Ynsee Ellan Vannin]] | pages = dg. 4}}</ref>
Jiu, ta staydys oikoil ec y çhengey, ga nagh vel ee coontit myr çhengey oikoil yn ellan,<ref>{{cite web | url = http://www.omniglot.com/pdfs/languagerevival.pdf | title = A study of language death and revival with a particular focus on Manx Gaelic | pages = dg. 28-29 | date = 2009 | language = Baarle | first = Simon | last = Ager | accessdate = 7 Jerrey Geuree 2011}}</ref> as t’ee goll er n’ynsaghey ayns bunscoillyn, meanscoillyn, as ollooscoillyn ennagh,<ref>{{cite web | url = http://www.gov.im/education/support/external/external_manx.xml | title = Manx Language in Schools - Yn Ghaelg Ayns Ny Scoillyn | language = Baarle | publisher = Rheynn Ynsee as Paitçhyn Ellan Vannin | accessdate = 7 Jerrey Geuree 2011|archiveurl=https://archive.is/qYTn|archivedate=2012-08-02}}</ref> as t’ee goll er ymmyd ec y reiltys as myr enmyssyn ec shiartanse dy lughtyn-reill ayns Mannin, lheid as [[Lught-Reill Lectraghys Manninagh]] as [[Undinys Eiraght Vannin]].
==Cooylrey==
=== Shennaghys y Ghaelg ===
[[Coadan:Thomas Wilson - Bishop of Sodor and Man.jpg|right|thumb|[[Thomas Wilson (aspick)|Thomas Wilson]] (1663–1755), [[Aspickys Vannin|Aspick Sodor as Vannin]] as cuirreyder magh y chied lioar phrentit, y ''Choyrle Sodjey'', 'sy Ghaelg.]]
Cosoylagh rish y Ghaelg Albinagh, dirree yn Ghaelg magh ass y [[Shenn Yernish|Çhenn Yernish]] va goll er loayrt ayns [[Nerin]], [[Nalbin]] as Mannin. Haink y çhengey shen gys yn ellan marish sushtallee as cummaltee veih Nerin as veih'n [[Yn Ghallioo|Ghallioo]] 'sy 4oo, 'sy 5oo as 'sy 6oo eashyn BNJ.<ref name="Omniglot"/><ref>{{cite book| title = Encyclopedia of World Geography | chapter = The British Isles | first = Haggett | last = Peter | pages = dg. 878 | isbn = 0761472894 | publisher = Mark Cavendish Corporation | year = 2001 | language = Baarle}}</ref><ref>{{cite book | title = Languages in Britain and Ireland | last = Price | first = Glanville | publisher = Wiley-Blackwell | isbn = 0631215816 | year = 2000 | chapter = Irish in Early Britain | language = Baarle | pages = dg. 42 }}</ref> Ec y traa shen ren y Yernish ymmyd jeh'n [[abbyrlhit Romanagh]] son dy screeu sheese y çhengey as ta ny screeuyn shen ry-akin ayns imraaghyn oirragh er çheughyn jeh laue-screeuyn Ladjyn. Ansherbee, cha nel sampleyryn jeh ny laue-screeuyn shen ry-gheddyn ayns Mannin.
Goaill toshiaght 'sy 9oo eash, ren ny Loghlynee soiaghey er yn ellan, as ny yei shen, ren ad cummal 'syn ellan as ghow ad laueyn y chummaght stiagh hucsyn. Ta cleayney ny Loghlynee ry-akin er ny h-undinyssyn politickagh as leighoil, as ta reiltys yn ellan, Tinvaal, bunnit er y whaiyl oc.<ref>{{cite web | url = http://www.gov.im/mnh/collections/archaeology/vikings/tynwald.xml | title = Tynwald | accessdate = 7 Jerrey Geuree 2011 | language = Baarle | publisher = [[Eiraght Ashoonagh Vannin]]|archiveurl=https://archive.is/7d4x|archivedate=2012-08-01}}</ref> Ansherbee, gyn y wooise da'n chummaght as y chleayney v'ayn ec ny Loghlynee, cha row cleayney mooar ec y Loghlynish er y Ghaelg. Da'n chooid smoo, ta cleayney yn Loghlynish ry-akin ayns boayl-enmyn ta goaill jerrey lesh y veer yerree ''-by'' ("balley") as ''-aa'' ("ellan"; ''-ey'' y Vaarle), lheid as [[Colby]], [[Delbee]], [[Sulby]], [[Rhumsaa]], as [[Laksaa]].<ref name="Stowell O Breaslain">{{cite book | author = Stowell, Brian as Ó Bréasláin, Diarmuid | year = 1996 | location = Beeal Feirshtey | publisher = An Clochán | title = A Short History of the Manx Language}}</ref> T'eh er credjal ec çhengoaylleeyn as screeudeyryn shennaghys dy row yn Ghaelg myr çhengey ny mayrey ec y vooar-chooid jeh cummaltee yn ellan 'sy lhing shen, as ee goll er loayrt ec ny deiney cadjin myr y chied çhengey, as ec yn lught ooasle Loghlynagh myr y nah hengey.<ref name="Stowell O Breaslain"/>
Hie yn ellan stiagh ayns laueyn ny Norlynee tra va [[Reeriaght Vannin as ny h-Ellanyn]] currit er bun 'sy vlein 1079, as hoshee lhing noa jeh neu-chrogheydys, seyr veih ny Gaeil elley, as seyr veih cummaghtyn joarree elley, fo reirey yn ree [[Gorree Crovan]]. 'Sy lhing shen va'n Ghaelg shickyr veih cleaynaghyn joarree as bree er y çhengey veih çhengaghyn elley. Agh haink jerrey lesh y çhickyrys shen tra hooar y ree [[Magnus III Vannin|Magnus III]] baase 'sy vlein 1265. Lurg y baase echey, hie yn reeriaght stiagh ayns laueyn [[Alistair III ny h-Albey]], as harrish y daa cheead-bleeaney shen ny lurg, hie yn ellan eddyr laueyn ny h-Albinee as ny Sostynee. 'Syn eash shen, dirree yn Ghaelg magh ass ny çhengaghyn Gaelgagh elley myr çhengey er lheh.<ref name="Broderick 99">{{cite book | title = Language Death in the Isle of Man | first = George | last = Broderick | publisher = Niemeyer | location = Tübingen | year = 1999 | language = Baarle | isbn = 3484303956 }}</ref>
Lurg y veereiltys shen hie shickyrys er ny lhiasaghey ayns staydys reiragh yn ellan. Veih'n vlein 1334 er y chooid sloo, hie yn ellan stiagh ayns laueyn ny Sostynee. Hug y ree [[Edard III Hostyn]] shellooderys yn ellan hug y [[William Montagu, 1d Eearley Salisbury|Chied Eearley Salisbury]]. Veih'n eash shen, va'n Ghaelg er ny scarrey magh ass ny çhengaghyn Gaelgagh elley ayns Nerin as Nalbin, as va'n ellan nish fo reirey ny Baarleyderyn. Va shellooderys yn ellan giootit gys y lught thie Stanlagh, Eearlaghyn Derby, veih'n vlein 1405 derrey yn vlein 1736. Er feie'n eash shen va'n chooid smoo jeh pobbyl yn ellan foast loayrt y Ghaelg, as va'n Vaarle ec y lught ooasle. Er-yn-oyr nagh row yn Ghaelg ec y lught ooasle, as nagh row ad cummal er yn ellan son y chooid smoo, cha row gialdyneryn-argid ayn son dy chooney lesh cur magh clouyn as lettyraght 'sy Ghaelg. Son dy chooney lesh skeayley yn Chreestiaght er feie'n ellan, va ''Lioar y Phadjer Chadjin'' çhyndaait gys y Ghaelg ayns 1610. Roish jerrey'n cheead-bleeaney shen va'n Vible Chasherick çhyndaait gys y Ghaelg, as reesht 'sy vlein 1707, va'n chied lioar phrentit 'sy Ghaelg currit magh - ''Coyrle Sodjey'' liorish yn Aspick Wilson. Fo laueyn yn eiyrtyssagh ec Wilson, [[Mark Hildesley]] (1695 - 1772), dirree staydys y Ghaelg. Va co-ennaghtyn ec Hildesley rish y Ghaelg, as ren eh shirrey stooghyn ynsee dy ve ry-gheddyn ayns ny scoillyn 'sy Ghaelg, as ren eh yeearree yn Ghaelg dy chur ayn myr aght ynsee ayns ny scoillyn. Va rah ayn 'sy pholasee shen as eh pohlldit ec Aspick York, as beggan er gherrid lurg shen va begnagh dagh scoill gynsaghey trooid y Ghaelg. Ansherbee, ga dy row mooadaghey ayns earroo ny h-obbraghyn va currit magh 'sy Ghaelg 'sy lhing shen, va ymmyd y Ghaelg tuittym.
=== Failleil y Ghaelg ===
{{Earroo Gaelgeyryn}}
Lurg baase Hildesley, haink er shassooyn dy ve ny smoo obballagh da'n çhengey, as ren [[Agglish Hostyn]] tayrn magh y pohlldey da'n ynsagh trooid y Ghaelg ayns ny scoillyn.<ref name="Stowell O Breaslain"/> 'Sy vlein 1782, cha row yn Ghaelg myr çhengey ynsee ayns dagh scoill faagail magh queig jeu.<ref>{{cite book | title = English and Celtic in Contact | pages = dg. 164 | author = Filppula, Markku; Klemola, Juhani; Paulasto, Heli | language = Baarle | year = 2008 | publisher = Routledge | isbn = 0415266025 | accessdate = 8 Jerrey Geuree 2011}}</ref> Va'n ynsagh 'sy Ghaelg currit stiagh reesht ayns ny [[scoill Doonee|scoillyn Doonee]] car ny 1820yn. Ayns 1825 ren yn [[George Murray (aspick Rochester)|Aspick Murray]] cur fys da'n Çheshaght ry hoi Cur er Oaie y Fys Creestiagh, y farrane son cur magh stooghyn crauee 'sy Ghaelg roish shen, nagh row feme ayn ny smoo er stooghyn 'sy çhengey.
Lurg y [[Isle of Man Purchase Act 1765|Çhialg Vooar]] ayns 1765, va ard-chioneys yn ellan astreeit veih Duic Athol gys y Chrooin Ghoaldagh.<ref>{{cite book|last=Hartley Booth|first=V. E.|last2=Sells|first2=Peter|title=British extradition law and procedure: including extradition between the United Kingdom and foreign states, the Commonwealth and dependent countries and the Republic of Ireland|publisher=Sijthoff & Noordhoff|location=[[Alphen aan den Rijn]]|year=1980|page=5|isbn=9789028600799|oclc=6890466|language=Baarle}}</ref> Rere coayl y çheet stiagh myr eiyrtys haghyr bishaghey ayns earroo ny deiney boghtey, as va ooashley as ymmyd y Vaarle yrjit ayns Mannin.<ref>{{cite web | url = http://www.omniglot.com/pdfs/languagerevival.pdf | title = A study of language death and revival with a particular focus on Manx Gaelic | pages = dg. 18 | language = Baarle | year = 2009 | publisher = Omniglot | first = Simon | last = Ager | accessdate = 8 Jerrey Geuree 2011}}</ref> Va stayd y Ghaelg towlit fo voalley liorish arraghey stiagh veih Nalbin as Sostyn as arraghey magh ny Manninee gys Sostyn, [[Ny Steatyn Unnaneysit|America]] as çheeraghyn elley. Haink er y Vaarle dy ve ny çhengey valjagh, as hie ee magh er feie'n ellan lesh troggal ny raaidyn noa. Agh by eh çheet stiagh yn turrysid y baggyrt smoo er y Ghaelg. Ayns ny 1830yn haink mysh 20,000 deiney gys yn ellan myr turrysee, agh ayns ny 1890yn haink ny smoo na 250,000 dy hurrysee. Ta shennockle Manninagh veih'n eash shen gra "''Tra haink ny skibbyltee boghtey stiagh, hie yn Ghaelg magh''". Haink er y Ghaelg dy ve kianglt rish y voghtinys, y vellid, as yn anoayllys, myr y cheilley ec ny Gaelgeyryn pene. Ren ny paraantyn loayrt rish nyn cloan ayns Baarle, ga dy row ad loayrt ayns Gaelg eddyr oc hene myr çhengey roonagh.
Cha nel staydraa oikoil ayn mychione earroo ny Gaelgeyryn ayns Mannin roish y choontey-pobble 'sy vlein 1871. Rere y choontey-pobble shen va 190 Galegeyryn un-hengagh, as 12,340 Gaelgeyryn daa-hengagh ass 54,042 cummaltee yn ellan, t'eh shen 22.8% jeh pobble yn ellan. Agh rere coontey-pobble 'sy vlein 1901 cha row agh 59 Gaelgeyryn un-hengagh as 4,598 Gaelgeyryn daa-hengagh, ny 8.5% jeh pobble yn ellan; 'sy vlein 1911 cha row yn Ghaelg agh ec 4.6% jeh pobble yn ellan.<ref name="Price staydraa">{{cite book | title = Languages in Britain and Ireland | last = Price | first = Glanville | publisher = Wiley-Blackwell | isbn = 0631215816 | year = 2000 | chapter = Irish in Early Britain | language = Baarle | pages = dg. 67 }}</ref> 'Sy vlein 1951 cha row agh 355 Gaelgeyryn ayn,<ref>{{cite book | title = Seeking a Role: The United Kingdom 1951-1970 | pages = dg. 62 | year = 2009 | location = [[Aah yn Ollee]] | publisher = Oxford University Press | last = Harrison | first = Brian | isbn = 0198204760 | language = Baarle}}</ref> as 'sy vlein 1974 hooar y Gaelgeyr jerrinagh [[Ned Maddrell]] baase.<ref>{{cite journal | url = http://www.gaelg.iofm.net/CARN/CN3/carn54.html | title = Aavioghey Chengaghyn | last = Stoyll | first = Brian y | journal = Carn | volume = 54 | publisher = Y Commeeys Celtiagh | accessdate = 8 Jerrey Geuree 2011 | archive-date = 2009-07-28 | archive-url = https://web.archive.org/web/20090728202429/http://www.gaelg.iofm.net/CARN/CN3/carn54.html | url-status = dead }}</ref><ref>{{cite journal | journal = Fockle ayns dty Chleaysh | title = Gaelg Vio | url = http://www.gaelg.iofm.net/FOCKLE/FC99/3.99-2.html | year = 1999 | last = Gawne | first = Phil | accessdate = 8 Jerrey Geuree 2011}}</ref><ref name="Price staydraa"/>
Ansherbee, dy mennick, tra ta'n loayreyder jerrinagh jeh çhengey erbee er ny gheddyn baase, t'eh er credjal dy vel y çhengey marroo. Cooish elley v'ayn 'sy Ghaelg, as y boayl shen goaill sorçh dy chowrey da aavioghey yn çhengey. Veih'n vlein shen ta ram sheshaghtyn, reagheydyssyn, scoillyn, brastylyn, a.r.e. er cur er bun, as rere coontey-pobble 'sy vlein 2001 va ny smoo na 1,500 loayreyderyn y çhengey ayns Mannin.
== Yn Aavioghey ==
===Yn 18oo eash===
Cha row gleashaght reaghit ayn ayns aavioghey yn Ghaelg 'sy 18oo eash, agh 'syn eash shen va'n Chreestiaght coontit myr tosheeaght ec y lught ooasle. Ec y traa v'ayn va'n chooid smoo jeh cummaltee yn ellan foast loayrt 'sy Ghaelg. Va ram lioaryn as clouyn currit magh 'sy cheead-bleeaney shen, y chooid smoo jeu currit magh liorish arrymee as shirveishee. B'eh Thomas Wilson yn aspick er yn ellan ec y traa shen, as, son dy chooney lesh ny shirveishee fockle Yee dy skeayley feie'n ellan, ren eh cur magh y lioar ''Principles and Duties of Christianity'' ny ''[https://web.archive.org/web/20101216231200/http://learnmanx.com/cms/Coyrle%20Sodjey___________________________________________________e314f479f35bdb86b39c294abe60f8d3________________________________.pdf Coyrle Sodjey]'' 'sy vlein 1707.<ref name="Hemsley"/>. 'Sy vlein 1748, liorish cooney veih ny h-ard-viggaryn Curghey as Walker tra v'ad er nyn bryssoonaghey ayns Cashtal Rosien 'sy vlein 1722, ren yn Aspick Williams çhyndaa ''yn Sushtal Scruit liorish yn Noo Mian'' va screeuit ec Ean Oliver.<ref>{{cite journal | url = http://www.isle-of-man.com/manxnotebook/iomnhas/lm1p110.htm | title = Manx Literature | last = Moore | first = A. W. | authorlink = Arthur William Moore | month = Boaldyn | year = 1887 | accessdate = 13 Jerrey Geuree 2011 | language = Baarle | journal = Yn Lioar Manninagh | volume = I | pages = dg. 110-115}}</ref>
'Sy vlein 1755 hooar Wilson baase as va Aspick noa, Mark Hildesley, reiht da Aspickys Sodor as Vannin,<ref>{{cite journal | url = http://www.isle-of-man.com/manxnotebook/fulltext/bu1799/p195.htm | title = A Memoir of the Church of Sodor and Mann | language = Baarle | last = Butler | first = Weeden | date = 1799 | accessdate = 13 Jerrey Geuree 2011 | location = Lunnin | publisher = J. Nichols | pages = dg. 195}}</ref> agh cha row jerrey currit er ny clouyn Gaelgagh. 'Sy vlein 1765 va çhyndaa jeh ''The Book of Common Prayer'', ny ''Lioar ny Padjeryn Cadjin'' currit magh, ga dy ren yn [[John Phillips (aspick)|Aspick John Phillips]] y chied çhyndaa er 'sy vlein 1610, çhyndaa nagh row currit er clou.<ref>{{cite book | title = The Book of Common Prayer in Manx Gaelic | url = http://www.archive.org/stream/cu31924093598203#page/n3/mode/2up | date = 1895 | accessdate = 13 Jerrey Geuree 2011 | publisher = Oxford University Press | location = Aah yn Ollee | editor = Moore, A. W. as Rhŷs, John}}</ref><ref>{{cite web | url = http://justus.anglican.org/resources/bcp/Manx/ | title = Padjer Fastyr | publisher = The Society of Archbishop Justus | accessdate = 13 Jerrey Geuree 2011 | language = Baarle}}</ref><ref>{{cite web | url = http://www.akerbeltz.org/beagangaidhlig/gramar/grammar_manx.htm | title = A Word on Manx Spelling | publisher = Akerbeltz.org - Gàidhlig air beul an t-sluaigh | language = Baarle | accessdate = 13 Jerrey Geuree 2011 | archivedate = 2010-11-22 | archiveurl = https://web.archive.org/web/20101122191718/http://www.akerbeltz.org/beagangaidhlig/gramar/grammar_manx.htm }}</ref><ref>{{cite book | url = http://www.isle-of-man.com/manxnotebook/manxsoc/msvol24/p030.htm | title = Bibliotheca Monensis | pages = dg. 30-51 | publisher = The Manx Society | last = Harrison | first = William | year = 1876 | language = Baarle | location = Doolish | access-date = 2011-01-13 | archive-date = 2008-08-18 | archive-url = https://web.archive.org/web/20080818115530/http://www.isle-of-man.com/manxnotebook/manxsoc/msvol24/p030.htm | url-status = dead }}</ref> 'Sy vlein 1763 va'n chied chooid jeh'n [[Yn Conaant Noa|Chonaant Noa]] currit magh ec y Society for the Propogation of Christian Knowledge fo cleaynaghey yn Aspick Hildesley, as va'n nah chooid currit magh kiare bleeantyn ny lurg. 'Sy vlein 1771 haink y chied ym-lioar jeh'n [[Yn Shenn Chonaant|Çhenn Chonaant]] magh as yn obbyr v'ayn 'sy çhyndaa shen er ny scarrey eddyr kiare çhyndaaderyn as feed. Haink y nah chooid jeh'n Çhenn Chonaant magh 'sy vlein 1773 as haink y lane Chonaant Noa magh 'sy vlein 1775.<ref>{{cite journal | url = http://www.isle-of-man.com/manxnotebook/mquart/mq10895.htm | title = Manx Language Literature | language = Baarle | last = Wood | first = G. W. | date = 1911 | journal = The Manx Quarterly | issue = 10 | accessdate = 13 Jerrey Geuree 2011}}</ref> Ansherbee, cha vaik Hildesley eiyrtyssyn yn obbyr echey v'er cur magh lurg y vlein 1772, blein vaaish Hildesley.<ref>{{cite web | title = Mark Hildesley - Bishop 1755-1772 | url = http://www.isle-of-man.com/manxnotebook/people/bishops/hild.htm | publisher = Manx Notebook | language = Baarle | accessdate = 13 Jerrey Geuree 2011 | archive-date = 2011-05-15 | archive-url = https://web.archive.org/web/20110515010528/http://www.isle-of-man.com/manxnotebook/people/bishops/hild.htm | url-status = dead }}</ref> 'Sy traa shen va'n Ghaelg failleil.
'Sy vlein 1766 cha row ayn agh un skeerey nagh row kiarail ynsagh trooid y Ghaelg. Agh 'sy vlein 1782 cha row agh 5 scoillyn feie'n ellan kiarail ynsagh trooid y Ghaelg, as y chooid elley nish kiarail yn ynsagh ayndaue trooid y Ghaelg, gyn y wooise da çhengey ghooie ny cummaltee.<ref name="Hemsley"/> Er y laue elley, va mooarane dy stooghyn er ny chur magh feie'n cheead-bleeaney, stooghyn scanshoil, goaill stiagh çhyndaa jeh ''Paradise Lost'' (''Pargys Caillit'') liorish [[John Milton]] 'sy vlein 1796,<ref name="Jenner">{{cite journal | title = Manx Language, Its Grammar, Literature, and Present State | url = http://www.isle-of-man.com/manxnotebook/history/manks/jenner.htm | publisher = Manx Notebook | last = Jenner | first = Henry | authorlink = Henry Jenner | month = Mean Souree | year = 1875 | language = Baarle | accessdate = 15 Jerrey Geuree 2011}}</ref> gyn leagh da aavioghey yn çhengey ayns ny keead-bleeantyn elley.
=== Yn 19oo eash ===
[[Coadan:Yn Çheshaght Ghailckagh.jpg|right|thumb|Logo [[yn Çheshaght Ghailckagh]], sheshaght va currit er bun 'sy vlein 1899 liorish [[Arthur William Moore|A. W. Moore]] son freayll as cur er oaie yn Ghaelg.]]
Ec toshiaght y 19oo eash cha row mooarane scansh currit er staydys y Ghaelg, as v'eh shen ry-akin da'n chooid smoo 'sy chorys ynsee as ayns ny kialteenyn er yn ellan. Cha row ynsagh 'sy Ghaelg ry-gheddyn agh ayns kuse veg dy scoillyn, agh va'n ynsagh 'sy Ghaelg currit stiagh reesht ayns scoillyn Doonee ayns ny 1820yn. Ansherbee, hie yn sorçh d'ynsagh shen er ny lhaggaghey mygeayrt y vlein 1872.<ref name = "Hemsley"/> Va'n staydys er ny vroojey liorish y Clattys Ynsee 1872 tra va corys dy ynsagh ashoonagh currit er bun. Ga nagh row feme er ny scoillyn jannoo ynsaghey trooid y Vaarle, cha ren ny scoillyn jannoo nyn ynsaghey trooid y Ghaelg, agh trooid y Vaarle.<ref>{{cite journal | url = http://www.isle-of-man.com/manxnotebook/fulltext/ew1926/hist.htm | title = History of Education in the Isle of Man | journal = Education Week | year = 1926 | last = Moore | first = R. B. | language = Baarle | publisher = S. K. Broadbent & Co., Ltd. }}</ref><ref>{{cite journal | title = Manx Language Revitalization and Immersion Education | url = http://www4.uwm.edu/celtic/ekeltoi/volumes/vol2/2_5/clague_2_5.pdf | first = Marie | last = Clague | journal = Journal of Interdisciplinary Celtic Studies | volume = 2 | language = Baarle | publisher = e-Keltoi | pages = dg. 169 | date = 15 Mean Souree 2009 | access-date = 2011-01-07 | archive-date = 2011-06-24 | archive-url = https://web.archive.org/web/20110624081153/http://www4.uwm.edu/celtic/ekeltoi/volumes/vol2/2_5/clague_2_5.pdf | url-status = dead }}</ref> Hie yn corys shen er ny niartaghey rere y Clattys Ynsee 1892.
Agh ga nagh row scansh currit er y Ghaelg ayns ny scoillyn as ny kialteenyn ny smoo, cha row lhiettalys currit er cur magh reddyn 'sy Ghaelg, as ad cur cooney da'n aavioghey ayns ny bleeantyn s'anmey. 'Sy vlein 1804 hie ''A Practical Grammar of the Antient Gael[i]c; or Language of the Isle of Mann, Usually Called Manks'' ("Lioar Grammeydys ny Gaelgey") er ny chur magh liorish yn Arrymagh [[John Kelly (scoillar)|John Kelly]]. Va shalee echey fockleyr tree-hengagh dy chur magh 'sy vlein 1805, agh va'n lioar scrysst ayns aile 'syn oik prental.<ref name="Koch">{{cite book | pages = dg. 590-591 | first = John T. | last = Koch | title = Celtic Culture: A Historical Encyclopedia | isbn = 1851094407 | language = Baarle | year = 2006 | accessdate = 15 Jerrey Geuree 2011 | publisher = ABC-CLIO, Ltd.}}</ref> 'Sy vlein 1822 hie ''Banglanyn y Chredjue Chreestee'' magh liorish y Prayer-book and Homily Society<ref name="Jenner"/> as ayns 1835 hie ''A Dictionary of the Manx Language'' er ny chur magh liorish [[Archibald Cregeen]] (1774 - 1841), fockleyr ta coontit dys y laa t'ayn myr nane jeh ny fockleyryn smoo scanshoil 'sy Ghaelg.<ref>{{cite book | url = http://www.isle-of-man.com/manxnotebook/fulltext/worthies/p101a.htm | title = Manx Worthies | publisher = S. K. Broadbent & Co., Ltd. | location = Doolish | year = 1901 | last = Moore | first = A. W. | authorlink = Arthur William Moore | accessdate = 15 Jerrey Geuree 2011 | chapter = V. Literature | language = Baarle}}</ref><ref name="Koch"/>
'Sy nah lieh jeh'n 19oo eash v'eh so-leayr ec pohllderyn y chultoor Manninagh dy row yn cultoor shen ayns gear-ghaue fo cleayney yn arraghey stiagh veih Sostyn, as ayns Toshiaght Arree 'sy vlein 1858 ren fir jeu cur er bun sheshaght ry hoi cur magh, ny aa-chur magh dagh red bentyn rish shennaghys as cultoor yn ellan fo'n ennym "The Manx Society for Publication of National Documents" ny "[[The Manx Society]]".<ref name="MNBVol24">{{cite journal | url = http://www.isle-of-man.com/manxnotebook/manxsoc/msvol24/p276.htm | title = The Manx Society | language = Baarle | journal = Bibliotheca Monensis | last = Harrison | first = William | year = 1876 | location = Doolish }}</ref><ref>{{cite journal | journal = The Journal of British Studies | volume = 39 | issue = 2 | month = Averil | year = 2000 | language = Baarle | title = The Little Manx Nation: Antiquarianism, Ethnic Identity, and Home Rule Politics in the Isle of Man, 1880-1918 | last = Belchem | first = John |pages = dg. 217-240}}</ref> Harrish ny 25 bleeantyn va'n çheshaght gobbraghey, ren ee cur magh 33 ym-lioaryn bentyn rish Mannin, as clouyn elley goaill stiagh ''[[Recortyssyn Reeaghyn Vannin as ny h-Ellanyn]]'' (1859-60),<ref name="MNBVol24"/> y ''Fockleyr Manninagh as Baarlagh'' liorish Juan y Kelly v'er ny reaghey ec yn Arrymagh William Gill (1866),<ref>{{cite web | title = An Outline of Manx Literature | last = Thomson | first = Robert L. | publisher = gaelg.iofm.net | accessdate = 15 Jerrey Geuree 2011 | language = Baarle | url = http://www.gaelg.iofm.net/INFO/oml/lit.html | archive-date = 2011-06-19 | archive-url = https://web.archive.org/web/20110619211149/http://www.gaelg.iofm.net/INFO/oml/lit.html | url-status = dead }}</ref> çhaglym jeh shennocklyn, raaghyn, bannagyn, a.r.e fo'n ennym ''[https://web.archive.org/web/20110228163828/http://www.isle-of-man.com/manxnotebook/manxsoc/msvol16/index.htm Mona Miscellany]'' (1869),<ref>{{cite web | url = http://www.isle-of-man.com/manxnotebook/manxsoc/publist.htm | title = List of Publications of Manx Society | publisher = Manx Notebook | year = 1999 | accessdate = 15 Jerrey Geuree 2011 | archive-date = 2011-04-07 | archive-url = https://web.archive.org/web/20110407090638/http://www.isle-of-man.com/manxnotebook/manxsoc/publist.htm | url-status = dead }}</ref> aa-chur magh ''A Practical Grammar of the Antient Gael[i]c'' liorish John Kelly (1870), as ''Coontey-Ghiare jeh Ellan Vannin, ayns Gailck'' v'er ny chur magh ec y Çheshaght 'sy vlein 1872, agh v'er ny screeu ec Joseph Bridson mygeayrt y vlein 1760.<ref>{{cite journal | url = http://www.isle-of-man.com/manxnotebook/manxsoc/msvol20/index.htm | title = Manx Miscellanies | volume = I | location = Doolish | publisher = Manx Society | year = 1872 | language = Baarle | accessdate = 15 Jerrey Geuree 2011}}</ref> Ansherbee, ayns ny bleeantyn jeianagh jeh'n çheshaght hie ee er ny sheebey, as 'sy vlein 1908 haink jerrey lesh y çheshaght. Va ny lioaryn, clouyn, docamadyn as nyn lheid astreeit gys y [[Thie Tashtee Vannin|Thie Tashtee Manninagh as Treishteilee ny Lhiaghtyn Shenndeeagh]].<ref>{{cite web | url = http://www.isle-of-man.com/manxnotebook/manxsoc/index.htm | title = Manx Society | language = Baarle | accessdate = 15 Jerrey Geuree 2011 | publisher = Manx Notebook | archive-date = 2010-11-25 | archive-url = https://web.archive.org/web/20101125010321/http://www.isle-of-man.com/manxnotebook/manxsoc/index.htm | url-status = dead }}</ref>
Agh gyn y wooise da obbyr y Manx Society, va earroo ny Gaelgeyryn foast tuittym, as v'eh shen ry-akin ayns ny staydraa: ny smoo na 12,300 Gaelgeyryn ayns ny 1870yn leah, agh ny sloo na 5,000 Gaelgeyryn ec toshiaght y 20oo eash. Dirree garrey son çheshaght Ghaelgagh car y lhing shen, as fo yerrey va'n [[Yn Çheshaght Ghailckagh|Çheshaght Ghailckagh]] currit er bun 'sy vlein 1899 ry hoi freayltys as ardjaghey yn Ghaelg.<ref>{{cite journal | journal = Fockle ayns dty Chleaysh | url = http://www.gaelg.iofm.net/FOCKLE/FC99/3.99-2.html | title = Yn Cheeadoo Vlein jeh'n Cheshaght Ghailckagh | issue = 2 | last = Stowell | first = Brian | authorlink = Brian Stowell | accessdate = 16 Jerrey Geuree 2011 | year = 1999}}</ref><ref>{{cite journal | journal = Carn | issue = 41 | last = Jerry | first = Colin | title = Gaelg Jiu | accessdate = 16 Jerrey Geuree 2011 | url = http://www.gaelg.iofm.net/CARN/CN2/carn41.html | archive-date = 2009-08-03 | archive-url = https://web.archive.org/web/20090803111251/http://www.gaelg.iofm.net/CARN/CN2/carn41.html | url-status = dead }}</ref>
=== Yn 20oo eash ===
S'foddee yn 20-oo eash dy vrishey sheese ayns daa rheynn 'sy ghleashaght aavioghey. Ren y chied rheynn 'sy ghleashaght shen sheeyney veih bunneeaght y Çheshaght Ghailckagh ayns 1899 gys ny 1920yn tra ren [[Mona Douglas]] cur [[Aeglagh Vannin]] er bun as tra va [[Caarjyn Vannin]] currit er bun.<ref>{{cite web | url = http://www.omniglot.com/pdfs/languagerevival.pdf | title = A study of language death and revival with a particular focus on Manx Gaelic | pages = dg. 24-25 | date = 2009 | language = Baarle | first = Simon | last = Ager | accessdate = 17 Jerrey Geuree 2011}}</ref> Ren y nah rheynn sheeyney veih ny 1970yn gys y laa t'ayn nish, lesh staydys oikoil ec y Ghaelg, bunscoillyn Gaelgagh, as nyn lheid. Va'n chied rheynn kianglt rish freayltys y Ghaelg myr çhengey ashoonagh as bio yn Ellan as, dy kinjagh, va Gaelgeyryn dooghyssagh ayn ayns ny bleeantyn shen rere ny coontaghyn-pobble. Ansherbee, va'n nah rheynn 'sy ghleashaght aavioghey kianglt rish pohlldal y Ghaelg as yn aalaanaghey eck.
'Sy chied lieh jeh'n 20oo eash va anaase mooar ec ram deiney ayns dagh red Gaelgagh, goaill stiagh y çhengey hene. Son dy chooney lesh yn aavioghey hie ''First Lessons in Manx'' liorish Edmund Goodwin er ny chur magh 'sy vlein 1901. 'Sy vlein shen va 59 Gaelgeyryn un-çhengagh foast ayn er yn Ellan, myrane lesh 4,419 Gaelgeyryn elley. Agh v'eh so-leayr ec graihderyn y Ghaelg dy row yn çhengey geddyn baase. Ny deiney nagh row jargal lhiettalys dy chur er eh shen, ren ad stiurey nyn eabyn oc ayns troaghyn Gaelgagh elley lheid as clubyn aegey, kiaull, a.r.e. Ayns 1921 haink y [[Yn Cohaglym Celtiagh|Cohaglym Celtiagh]] gys yn Ellan marish [[Douglas Hyde]], chied [[Eaghtyrane Nerin|Eaghtyrane]] [[Pobblaght Nerin|Nerin]]. 'Sy vlein 1924 va'n [[Yn Chruinnaght|Chruinnaght Vanninagh Ashoonagh]] currit er bun ec William Cubbon.<ref>{{cite web | title = Yn Chruinnaght | url = http://www.isleofman.com/heritage/ePedia/Arts/Ceremonies/ynChruinnaght.aspx | language = Baarle | accessdate = 17 Jerrey Geuree 2011 | archivedate = 2011-11-20 | archiveurl = https://web.archive.org/web/20111120185055/http://isleofman.com/heritage/ePedia/Arts/Ceremonies/ynChruinnaght.aspx }}</ref><ref>{{cite book | last = Broderick | first = George | url = http://www.gaelg.iofm.net/ARTICLE/Broderick/THREE.html | title = Under the 'Three-Legged Swastika' | publisher = Humboldt-Universität zu Berlin | year = 2007 | language = Baarle | accessdate = 17 Jerrey Geuree 2011 | archive-date = 2007-09-27 | archive-url = https://web.archive.org/web/20070927193618/http://www.gaelg.iofm.net/ARTICLE/Broderick/THREE.html | url-status = dead }}</ref> Ansherbee, gyn y wooise da ny h-eabyn v'ec ny deiney shen 'sy traa shen, cha row Gaelgeyryn un-hengagh da'n chied cheayrt er yn ellan rere y choontey-pobble ayns 1921, as cha row agh 529 Gaelgeyryn ayns 1931.<ref name="Ellis"/>
Eddyr yn obbyr shen ayns ny 1920yn as ny 1970yn cha daghyr monney ayns aavioghey yn çhengey. Va ny kied recortyssyn rheaymyssagh jeant jeh'n çhengey 'sy vlein 1933 liorish yn Olloo Carl J. S. Marstrander veih'n Rheynn Cheltiagh ayns [[Ollooscoill Oslo]],<ref name="Ellis"/> Ren [[Coimisiún Béaloideasa Éireann]] ("Commishoon Beeal-Arrish Nerin") (1948) as y Manx Museum Folklife Survey (1949-51) jannoo straih jeh recortyssyn jeh ny Gaelgeyryn jerrinagh.<ref>{{cite book | title = The Celtic Languages| chapter = The Revived Languages: Revived Manx | last = Broderick | first = George | editor = Ball, Martin J. | publisher = Routlege | language = Baarle | accessdate = 15 Jerrey Geuree 2011 | isbn = 0-415-28080-X | year = 2000 | location = Lunnin as York Noa | pages=658}}</ref> 'Sy vlein 1952 ren Douglas C. Fargher (1926 - 1987) guee er sleih Vannin 'sy phabyr-naight ''Mona's Herald'' raad screeu eh:
{{Aaraa|throw off apathy and disinterestedness and take part in another crusade which can harm no one, but which will strengthen us as individuals and as a nation. We refer to the crusade for maintaining and using the Manx Language. Join an Evening Class, Manxmen, and bring a friend with you.|Fargher as Woods (1952)|''Mona's Herald''}}
Ga dy dooar y Gaelgeyr jerrinagh, [[Ned Maddrell]], baase 'sy vlein 1974, va'n anaase 'sy Ghaelg er ny vleaystey veih toshiaght ny 1970yn,<ref>{{cite web | title = Manainn: ar leic an dorais ach i bhfad i gcéin | url = http://beo.ie/alt-manainn-ar-leic-an-dorais-ach-i-bhfad-i-gcein.aspx | last = Walsh | first = John | month = Jerrey Souree | year = 2008 | publisher = Beo! | language = Yernish| accessdate = 17 Jerrey Geuree 2011}}</ref> as 'sy vlein 1976 va Clubyn Gaelgagh currit er bun ayns scoillyn ennagh.<ref name="Hemsley"/> 'Sy vlein 1979 hie yn fockleyr Baarle-Gaelg liorish [[Douglas C. Fargher]] er ny chur magh, y chied fockleyr Gaelgagh jeh'n 20-oo eash. Myrane lesh y çhengey, va anaase mooar ry-akin ayns kuse vooar dy reddyn Gaelgagh, lheid as y chiaull Vanninagh, y daunse Manninagh as reddyn elley lheid as shen. 'Sy vlein 1977 va Feailley Vanninagh Rhumsaa reaghit ec [[Mona Douglas]], feailley v'er kelloorey dagh red bentyn rish y tradishoon Gaelgagh.<ref>{{cite book | title = Celtic Culture: A Historical Encyclopedia | chapter = Yn Chruinnaght | pages = dg. 435 | language = Baarle | accessdate = 22 Jerrey Geuree 2011 | first = Chloë | last = Woolley | editor = Koch, John T. | isbn = 1851094407 | publisher = ABC-CLIO Ltd. | month = Mayrnt | year = 2006 }}</ref><ref>{{cite web | url = http://www.isleofman.com/heritage/ePedia/Arts/Ceremonies/ynChruinnaght.aspx | title = Yn Chruinnaght | publisher = isleofman.com (ePedia) | accessdate = 22 Jerrey Geuree 2011 | language = Baarle | archivedate = 2011-11-20 | archiveurl = https://web.archive.org/web/20111120185055/http://isleofman.com/heritage/ePedia/Arts/Ceremonies/ynChruinnaght.aspx }}</ref> Va'n feailley aachummit blein ny lurg shen son dy 'reayll tradishoon y Chruinnaght Vanninagh Ashoonagh va currit er bun ayns ny 1920yn. Agh, 'sy chooish shoh, v'ee aachummit myr y Chruinnaght as ee ny feailley queig-laa as Eddyr-Cheltiagh nish.
Hie taghyrtyn bentyn rish y Ghaelg er oaie dy tappee ayns ny 1980yn as ny 1990yn. Va bunneydys yn ynsaghee as y staydys oikoil ec y Ghaelg currit sheese ayns ny 1980yn, as 'sy vlein 1982 va teisht y GCE O Level scruit da'n Ghaelg, ga dy row'n aarlagh jee er n'gheddyn ayns brastylyn fastyragh.<ref>{{cite book | title = An Introduction to Applied Linguistics | pages = dg. 160 | language = Baarle | isbn = 0748612580 | publisher = Edinburgh University Press | year = 1999 | first = Alan | last = Davies}}</ref> Va enney nish ec ny lughtyn-reill as va feme ec ny h-ynseyderyn sheshaght, bing ny corpane oikoil dy chur er bun da femeyn y voodeeys Gaelgagh, lheid as soilsheanyn, fockleyryn, termeeaght noa, a.r.e., dy chur er oaie as er bun. 'Sy vlein 1985 va [[Coonceil ny Gaelgey]], fo-ving jeh [[Undinys Eiraght Vannin]] as bing slattyssagh jeh'n Reiltys, currit er bun ry hoi kiarail enmyssyn da rheynnyn reiltyssagh, enmyn straidey, as crooaght focklyn as abbyrtyn noa.<ref>{{cite web | url = http://www.manxheritage.org/language/english/new_words.html | title = Coonceil ny Gaelgey | publisher = Undinys Eiraght Vannin | accessdate = 22 Jerrey Geuree 2011 | language = Baarle}}</ref>
Ayns ny 1990yn hie yn ghleashaght er troa noa, as ynsagh trooid y Ghaelg ayns aignaghyn ec ny paraantyn. Va'n Chied Chesmayd, possan cloie va currit er bun liorish paraantyn son dy chiarail çhymmyltaght raad dy row yn Ghaelg goll er loayrt mastey ny paitçhyn, currit er bun.<ref>{{cite book | title = Proceedings of the Harvard Celtic Colloquium | chapter = Cross-Linguistic Discourse Markers in Manx Gaelic and English | last = Clague | first = Marie | pages = dg. 195-196 | language = Baarle | isbn = 0674035283 | publisher = Harvard University Press | month = Sauin | year = 2009 | accessdate = 22 Jerrey Geuree 2011}}</ref> Son dy chur co-oardraghey 'syn ynnyd ynsee, ren y reiltys cur y chied [[Manx Language Officer]], ny Oaseir Gailckagh, er bun, oik noa fo currym y Rheynn Ynsee, as by eh [[Brian Stowell]] y chied oikagh. 'Sy vlein cheddin va'n Ghaelg currit stiagh ayns ny scoillyn da'n chied cheayrt, ga nagh row egin ayn, as 'sy vlein 1997 va'n Teisht Chadjin Ghaelgagh currit ayns ynnyd y GCE O Level (cochorrym rish y GCSE). As, ec jerrey yn villey-bleeaney, ayns 1998 va Phil Gawne, fer mooar ayns skeeal y Ghaelg, pointit myr [[Yn Greinneyder|y Greinneyder]], oik noa fo currym Undinys Eiraght Vannin as Eiraght Ashoonagh Vannin.
==Staydys yn aavioghey jiu==
Ta'n Ghaelg er jeet er turrys liauyr veih toshiaght y failleil eck gys y laa t'ain. Rere y choontey-pobble 'sy vlein 2001 va mysh 2.2% jeh pobble yn ellan jargal loayrt, lhaih ny screeu 'sy Ghaelg.<ref name="IOMCensus2001">{{cite web | title = Isle of Man Census Report 2001 Volume 2 | url = http://www.gov.im/lib/docs/treasury/economic/census/reportvolume2.pdf | author = Rheynn Cooishyn Tarmaynagh, Yn Tashtey | language = Baarle | format = PDF | pages = dg. 11 | accessdate = 25 Jerrey Geuree 2011 | year = 2002 | archivedate = 2008-11-18 | archiveurl = https://web.archive.org/web/20081118142000/http://www.gov.im/lib/docs/treasury/economic/census/reportvolume2.pdf }}</ref> 'Sy vlein 1990 cha row yn Ghaelg loayrit agh ec 0.9% y phobble ayns cosoylaght rish y 2% jeh'n phobble ayns 2001.<ref name="IOMCensus2001"/> Myrane lesh y vishaghey ayns earroo ny Gaelgeyryn, ta barel foayroil ayn nish rish y Ghaelg, as rere towse-barel Gallup ayns 1991 ren 36% jeh'n lught freggyrt cur fys dy row barel foayroil oc rish cur stiagh y Ghaelg myr vrastyl reihyssagh ayns ny scoillyn.<ref>{{cite web | last = McArdle | first = Fiona | publisher = Shirveish Ynsee Eiraght Ashoonagh Vannin | format = PDF | year = 2003 | accessdate = 25 Jerrey Geuree 2011 | language = Baarle | pages = dg. 4 | title = Chengey ny Mayrey | url = http://www.gov.im/lib/docs/mnh/education/factfiles/manxlang.pdf | archivedate = 2011-08-06 | archiveurl = https://web.archive.org/web/20110806123050/http://www.gov.im/lib/docs/mnh/education/factfiles/manxlang.pdf }}</ref> 'Sy vlein 2001 va'n chied vrastyl lane-Ghaelgagh currit er bun ayns commeeys marish [[Mooinjer Veggey]] as Sheshaght ny Paarantyn çheusthie jeh Bunscoill Valley Vac Ottar ayns [[Doolish]].<ref>{{cite web | url = http://www.minorityrights.org/5411/united-kingdom/manx.html | title = Manx | year = 2005 | accessdate = 25 Jerrey Geuree 2011 | language = Baarle | author = Minority Rights Group International }}</ref> Ayns 2003 ren y Vrastyl Ghaelgagh scughey gys thie noa ayns Balley Keeill Eoin fo ennym noa, y [[Bunscoill Ghaelgagh|Vunscoill Ghaelgagh]].<ref>{{cite web | url = http://www.sch.im/bunscoill/bgcummal.php | title = Shennaghys y Vunscoill Ghaelgagh | year = 2009 | accessdate = 25 Jerrey Geuree 2011 | author = Bunscoill Ghaelgagh | archivedate = 2010-03-09 | archiveurl = https://web.archive.org/web/20100309063416/http://www.sch.im/bunscoill/bgcummal.php }}</ref> Hoshiaght, cha row agh nuy paitçhyn recortyssit 'sy scoill, agh 'sy vlein 2009 va 65 paitçhyn 'sy scoill, myrane lesh 4 ynseyderyn.<ref>{{cite web | title = It's a good time to learn Manx Gaelic | url = http://www.learnirishgaelic.com/blog/learn-manx-gaelic/ | date = 2009 | accessdate = 25 Jerrey Geuree 2011 | language = Baarle | last = Ó Conchúir | first = Eoin | publisher = Learn Irish Gaelic}}</ref> Ec y traa t'ayn ta coorseyn ayns Gaelg as trooid y Ghaelg nish ry-gheddyn ayns ram bunscoillyn, meanscoillyn as ayns scoillyn as undinyssyn jeh'n trass cheim, lheid as y [[Laare-Studeyrys Manninagh]] ayns [[Lerphoyll]], [[Sostyn]].
'Sy vlein 2003 ren yn [[Reeriaght Unnaneysit]], er son Mannin, shickyraghey [[Yn Chaart Oarpagh son Çhengaghyn Ardjynagh as Mynçhengaghyn|y Chaart Oarpagh son Çhengaghyn Ardjynagh ny Mynçhengaghyn]]. Ta'n Ghaelg nish ry-akin er cowraghyn baayrey as straidey lesh çhyndaaghyn 'sy Vaarle as 'sy Ghaelg. Yn chooid smoo jeh baljyn as baljyn beggey, t'ad goaill shelloo er enmyn Gaelgagh as Baarlagh, as t'ad ry-akin er cowraghyn failt, er barooseyn, as er earrooyn traa baroose. Ta enmyn Gaelgagh ec rheynnyn y reiltys nish as ad ry-akin er cowraghyn, pabreydys as gleashtanyn.
==Jeeagh er neesht==
* [[Aavioghey çhengey]]
* [[Lettyraght ny Gaelgey]]
* [[Rolley çhengaghyn aavioghit]]
* [[Rolley lioaryn ny Gaelgey]]
==Kianglaghyn mooie==
* [https://web.archive.org/web/20101020055403/http://www.isle-of-man.com/manxnotebook/publshrs/yncg.htm "The Origin of the Manx Language Society"] - art er ny aa-chur magh 'sy Manx Notebook {{en jalloo}}
* [https://web.archive.org/web/20110321024812/http://www.isleofman.com/heritage/ePedia/SocialSciences/Linguistics/languages/manx.aspx A brief history of the Manx language] - art er ny ghreimmey ec isleofman.com {{en jalloo}}
* [http://beo.ie/alt-manainn-ar-leic-an-dorais-ach-i-bhfad-i-gcein.aspx Manainn: ar leic an dorais ach i bhfad i gcéin] - art mychione y Ghaelg {{ga jalloo}}
==Imraaghyn==
{{rolleyimraaghyn}}
{{Çhengoaylleeaght ny Gaelgey}}
[[Ronney:Gaelg]]
[[Ronney:Aavioghey çhengey|Gaelgey]]
[[Ronney:Aavioghey ny Gaelgey]]
67mdqr1ogz17zoju85raajsrh5yb48w
Ronney:Filmyn rere eash
14
15379
379195
338443
2026-05-18T00:24:49Z
MacTire02
219
ronnaghyn elley
379195
wikitext
text/x-wiki
{{moir-ronney}}
{{For|y çhynskyl scannaneaght rere eash|Ronney:Scannaneaght rere eash}}
{{Commons category|Films by century|Filmyn rere eash}}
[[Ronney:Filmyn rere date| 1]]
[[Ronney:Obbraghyn rere sorçh as eash]]
[[Ronney:Feeshanyn rere eash| Filmyn]]
[[Ronney:Troaryn rere eash ghreesaght]]
8fsz9zegdpa2cq13bu8wtes4ys381pn
Obbyr (fishig)
0
18366
379175
337370
2026-05-17T23:27:40Z
MacTire02
219
ronney elley
379175
wikitext
text/x-wiki
Ayns [[fishig]], ta '''obbyr''' çheet er y [[bree|vree]] ta arrit dys ny voish nhee trooid obbraghey forsey harrish scughey. 'Sy chummey s'oney, s'mennick t'eh er ny hoilshaghey myr troar [[forsey]] as [[scughey (vaghtoor)|vaghtoor]]. T'eh raait dy vel forsey jannoo obbyr yarrooagh my vel (tra t'eh currit rish) co-olt echey ayns troa scughee yn phoynt obbree. Ta forsey jannoo obbyr yiooldagh my vel co-olt echey noi troa scughee ec y phoynt obbree.<ref name=:1>{{cite web |url=https://www.ncert.nic.in/ncerts/l/keph106.pdf |title=Physics Book |author=[[National Council of Educational Research and Training|NCERT]] |date=2020 |website=ncert.nic.in |accessdate=24 Sauin 2021}}</ref>
Myr sampleyr, my vees bluckan freillt harrish yn eaghtyr as, ny yei, lhieggit, ta obbyr y forsey-stoo er y vluckan tra t'eh tuittym corrym rish trimmid y vluckan (forsey) er ny vishaghey liorish y foddeeaght dys yn eaghtyr (scughey). Tra ta'n forsey {{mvar|F}} shassooagh as tra ta'n uillin eddyr y forsey as y scughey {{mvar|s}} corrym rish {{math|θ}}, ta'n obbyr goll er taishbyney myr:
<math display="block" qid=Q42213> W = F s \cos{\theta}</math>
She [[scaillear (fishig)|mooad scaillagh]] ee yn obbyr, as, er-yn-oyr shen, ta mooadys eck agh t'ee gyn troa. Ta obbyr garraghey bree voish boayl dys boayl elley, ny voish cummey dys cummey elley. She [[joule]] (J) yn [[unnid SI]] t'ec obbyr, myr t'ec bree.
==Imraaghyn==
{{rolleyimraaghyn}}
{{Gurneil eaghtyrys}}
[[Ronney:Troyn bree]]
[[Ronney:Mooadyn fishigagh scaillear]]
[[Ronney:Jeshaghteyrys obbrinagh]]
[[Ronney:Mooadyn obbrinagh]]
[[Ronney:Forsey]]
[[Ronney:Lhiurid]]
3u0822h9qu11z1mdkrlp6bx9vycie6c
379176
379175
2026-05-17T23:28:09Z
MacTire02
219
ronney elley
379176
wikitext
text/x-wiki
Ayns [[fishig]], ta '''obbyr''' çheet er y [[bree|vree]] ta arrit dys ny voish nhee trooid obbraghey forsey harrish scughey. 'Sy chummey s'oney, s'mennick t'eh er ny hoilshaghey myr troar [[forsey]] as [[scughey (vaghtoor)|vaghtoor]]. T'eh raait dy vel forsey jannoo obbyr yarrooagh my vel (tra t'eh currit rish) co-olt echey ayns troa scughee yn phoynt obbree. Ta forsey jannoo obbyr yiooldagh my vel co-olt echey noi troa scughee ec y phoynt obbree.<ref name=:1>{{cite web |url=https://www.ncert.nic.in/ncerts/l/keph106.pdf |title=Physics Book |author=[[National Council of Educational Research and Training|NCERT]] |date=2020 |website=ncert.nic.in |accessdate=24 Sauin 2021}}</ref>
Myr sampleyr, my vees bluckan freillt harrish yn eaghtyr as, ny yei, lhieggit, ta obbyr y forsey-stoo er y vluckan tra t'eh tuittym corrym rish trimmid y vluckan (forsey) er ny vishaghey liorish y foddeeaght dys yn eaghtyr (scughey). Tra ta'n forsey {{mvar|F}} shassooagh as tra ta'n uillin eddyr y forsey as y scughey {{mvar|s}} corrym rish {{math|θ}}, ta'n obbyr goll er taishbyney myr:
<math display="block" qid=Q42213> W = F s \cos{\theta}</math>
She [[scaillear (fishig)|mooad scaillagh]] ee yn obbyr, as, er-yn-oyr shen, ta mooadys eck agh t'ee gyn troa. Ta obbyr garraghey bree voish boayl dys boayl elley, ny voish cummey dys cummey elley. She [[joule]] (J) yn [[unnid SI]] t'ec obbyr, myr t'ec bree.
==Imraaghyn==
{{rolleyimraaghyn}}
{{Gurneil eaghtyrys}}
[[Ronney:Troyn bree]]
[[Ronney:Mooadyn fishigagh scaillear]]
[[Ronney:Jeshaghteyrys obbrinagh]]
[[Ronney:Mooadyn obbrinagh]]
[[Ronney:Forse]]
[[Ronney:Lhiurid]]
su293cekg05eawfbim9e2oov3dw9uo8
Camphire
0
19136
379140
364540
2026-05-17T14:44:51Z
InternetArchiveBot
16702
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379140
wikitext
text/x-wiki
{{Kishtey fys baagh
| daah = #90EE90
| ennym = Camphire
| jalloo = Lawsonia inermis Ypey36.jpg
| fo-heidyl_jalloo = ''Lawsonia inermis''
| reeriaght = [[Plantae]]
| rheynn_neurheynnit = [[Angiospermae]]
| rang_neurheynnit = [[Eudicot]]yn
| oardagh_neurheynnit = [[Rosid]]yn
| oardagh = [[Myrtales]]
| kynney = [[Lythraceae]]
| genus = '''''Lawsonia'''''
| dooie = '''''L. inermis'''''
| daaennymagh = ''Lawsonia inermis''
| imraa_daaennymagh = [[Carolus Linnaeus|L.]]
<!--| rheamchaslys = HennaUsageMap.jpg
| fo-heidyl_rheamchaslys = Rheam ymmyd camphire CHA NEL EH ER Y CHADJINAGHT FOAST-->
}}
She lus ynrican 'sy ghenus '''''Lawsonia''''' ee '''camphire''' ('''''Lawsonia inermis'''''), as bun y daah '''henna'''. Ta shennaghys liauyr ec y daah er son daahghey crackan, folt as eaddagh.
==Jalloo-oaylleeaght==
She crouw vooar t'ayn, mysh 2-8m er yrjid. T'ee gyn clooie as yl-vanglaeagh. Ta jialgyn er king ny myn-vanglaneyn. Ta duillagyn [[cummey duillag#piyral|piyral]] eck, er cass feer yiare, as adsyn [[cummey duillag#eelipsagh|eelipsagh ny sleeanagh rouyr]].<ref name="AJB">{{enmysearishlioar
| ennym = The use of Lawsonia inermis linn. (henna) in the management of burn wound infections
| earishlioar = African Journal of Biotechnology
| ym-lioar = 4
| earroo = 9
| duillag = 934
| blein = 2005
| mee = Jerrey Fouyir
| kiangley = http://www.academicjournals.org/AJB/contents/2005cont/Sep.htm
| çhengey = Baarle
}}</ref> Ta birr [[cummey duillag#birragh|birragh ny meayl]] oc, as [[cummey duillag#rea|oirr rea]].<ref name="AJB"/> T'ad mysh 2-3cm er lhiurid as 1-2cm er lheead.<ref name="AJB"/> Ta blaaghyn beggey baney ny bane-jiarg eck, as ad soaral.<ref name="AJB"/> Ta kiare [[seepal]]yn oc as {{shallidagh|[[calyx (lus-oaylleeaght){{!}}calyx]]}} piobanagh. Ta [[petyl]]yn [[cummey duillag#jeiragh|jeiragh]] oc, as [[staimyn]]yn baney ny jiargey piyral rish oirr ny {{shallidagh|calyx}}. Ta [[oohrey]] kiare-hamyragh oc. Ta'n mess ny kishtag dhone beg, mysh 4-8mm er crantessen; ta mysh 30-50 'sy vess.<ref>{{enmyslioar
| screeudeyr=Kumar S., Singh Y. V., & Singh, M.
| blein=2005
| cabdil=Agro-History, Uses, Ecology and Distribution of Henna (Lawsonia inermis L. syn. Alba Lam)
| ennym=Henna: Cultivation, Improvement, and Trade
| duillagyn=11–12
| boayl=Jodhpur
| soilsheyder=[[Central Arid Zone Research Institute]]
|oclc=124036118}}
</ref>
==Troarey==
Ta'n lus dooghyssagh da ynnydyn çhirrym as grianchryssagh 'syn [[yn Affrick|Affrick]] hwoaie, [[yn Aishey]] yiass as heear, as [[yn Australasia]] hwoaie.<ref name=howstuffworks>{{enmyseddyrvoggyl
| ennym = Henna
| obbyr = HowStuffWorks
| datefeddyn = 2013-05-05
| kiangley = http://science.howstuffworks.com/life/botany/henna-info.htm
}}</ref><ref>{{enmyslioar
| cabdil = henna (plant)
| ennym = Encyclopedia Britannica
| datefeddyn = 2013-05-05
| kiangley = http://www.britannica.com/EBchecked/topic/261271/henna
}}</ref> T'ee cur magh smoo daah my t'ee gaase eddyr 35-45°C. <ref>{{enmyslioar
| soilsheyder = John Wiley & Sons
| isbn = 9780470744963
| sjerree = Bechtold
| kied = Thomas
| kied2 = Rita
| sjerree2= Mussak
| ennym = Handbook of Natural Colorants
| date = 2009-04-06
| duillag=155
}}</ref> Rish fliaghey, t'ee gaase dy tappee; ta ny duillagyn buighaghey as tuittym rish emshiyr çhirrym as feayr.
==Ymmyd==
===Ymmyd lhee===
Ta feanish jeh camphire myr lus lhee ayns screeuyr Hiar neayr's y 14oo eash, goaill stiagh obbraghyn [[Ibn Qayyim al-Jawziyya]] (14oo eash) as [[Pabyr Ebers]] (16oo eash).<ref name="nys">{{enmysearishlioar
| earishlioar = http://www.sciencepub.net/newyork/ny0312/17_3868ny0312_99_101.pdf
| ennym = Gas Chromatography – Mass Spectroscopic analysis of Lawsonia inermis Leaves
| blein = 2010
| ym-lioar = 3
| earroo = 12
| duillagyn = 99-101
| screeudeyr = R Hema
| coscreeudeyryn = S Kumaravel & S Gomathi
| issn = 1554-0200
}}</ref>
Ta niart noi-fungyssagh eck.<ref>{{Cite journal|author=Bosoglu A, Birdane F, Solmaz H |year=1998 |title=The effect of Henna (Folium lawsoniae) paste in ringworm in calves |journal=Indian Veterinary Journal |issn=0019-6479 |volume=75 |issue=1 |pages=83–84}}</ref> T'ee coadey liare as eaddagh myrgeddin, as lhiettal shey-chassee as millchay.
===Ymmyd jesheenagh===
Va ymmyd jeant jeh myr daah neayr's [[yn Eash Ooha]], er son daaghey crackan, folt, ingynyn as eaddagh.<ref name="nys"/> Va fys urree ec ny [[Shenn Romaanee]], 'syn [[yn Injey|Injey]] rish y 4oo eash, as 'syn [[yn Spaainey|Spaainey]] rish [[Convivencia]] ny 8oo-15oo eashyn.<ref name="nys"/>
Ta sleih ayns [[yn Impiraght Romaanagh]], [[yn Ibeir]], [[yn Çhenn Egypt]], [[yn Affrick Hwoaie]], [[yn Lieh-innys Arabagh]], [[y Niar Faggys]] as [[yn Aishey Yiass]] er nyannoo ymmyd jee myr cosmaid, chammah's mraane aegey 'syn [[yn Oarpey|Oarpey]] rish y 19oo eash.
Cha nel shickyrys ayn er c'raad ghow ad toshiaght jannoo ymmyd jee; eddyr 'syn Injey ny 'syn Affrick.<ref>{{enmyseddyrvoggyl
| kiangley = http://www.kew.org/plant-cultures/plants/henna_history.html
| ennym = Henna - history
| obbyr = Plant Cultures: Exploring plants & people
| soilsheyder = Kew Royal Botanic Gardens
| çhengey = Baarle
}}</ref>
Ta'n tradishoon shen aaviogheydagh kyndagh rish troarey share, obbraghey share, as arraghey sleih magh ass ardjyn ren ymmyd tradishoonagh jee.<ref>{{enmyslioar| screeudeyr=Roy, P. K., Singh, M., & Tewari, P. | blein=2005 | cabdil=Composition of Henna Powder, Quality Parameters and Changing Trends in its Usage | ennym=Henna: Cultivation, Improvement, and Trade | duillagyn=39–40 | boayl=Jodhpur | soilsheyder=[[Central Arid Zone Research Institute]] |oclc=124036118}}</ref>
==Imraaghyn==
{{rolleyimraaghyn}}
==Kianglaghyn magh==
{{Commonscat|Mehndi}}
{{Commonscat|Henna}}
{{Wiktionary|henna}}
* [https://web.archive.org/web/20201109031902/http://www.hennapage.com/ Ynnyd-eggey bentyn rish henna]
{{gurneil eaghtyrys}}
[[Ronney:Lossreeyn soilshit 'sy vlein 1753]]
[[Ronney:Tacsyn lus-oaylleeagh enmyssit lesh Carl Linnaeus]]
[[Ronney:Lythraceae]]
[[Ronney:Daaghyn lossreeyn]]
nlrafguqtshn35q8pkti3x91u4gczvt
Ronney:7oo eash
14
19279
379267
349782
2026-05-18T02:32:06Z
MacTire02
219
+clowan
379267
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|7th century|7oo eash}}
[[Ronney:1d villey bleeaney| 07]]
[[Ronney:Eashyn|07]]
nl6czz6cipzhbc9aqok5dl2ll303zhn
Ronney:Smooinaghtyn 'syn ishig
14
19369
379163
337051
2026-05-17T21:26:39Z
MacTire02
219
ronney elley
379163
wikitext
text/x-wiki
{{categoryTOC}}
{{Commonscat|Fundamental physics concepts|Sheiltynyssyn bunneydagh fishig}}
[[Ronney:Fishig]]
[[Ronney:Smooinaghtyn 'syn oaylleeaght rere magher|Ishig]]
tpomyb22649877b8ulmhdblmpqal9j3
Ymmydeyr:Llywelyn2000/List of Manx people
2
19947
379180
379000
2026-05-17T23:38:34Z
ListeriaBot
10339
Wikidata list updated [V2]
379180
wikitext
text/x-wiki
{{Wikidata list
|sparql=SELECT ?item ?yob ?yod WHERE {
?item wdt:P19 ?pob .
?pob wdt:P131* wd:Q9676 .
OPTIONAL { ?item wdt:P569 ?dob . BIND(YEAR(?dob) as ?yob) }
OPTIONAL { ?item wdt:P570 ?dod . BIND(YEAR(?dod) as ?yod) }
. }
|wdq=.
|sort=569
|section=31
|columns=number:#,P18:XXX Add 'Image' in Manx here please! XXX,label:XXX change to 'Name' in Manx! XXX,?yob:XXX dob XXX,?yod:XXX date of death XXX,P19:xxx Place of birth xxx
}}
== human ==
{| class='wikitable sortable'
! #
! XXX Add 'Image' in Manx here please! XXX
! XXX change to 'Name' in Manx! XXX
! XXX dob XXX
! XXX date of death XXX
! xxx Place of birth xxx
|-
| style='text-align:right'| 1
|
| ''[[:d:Q135256163|Michael Higgins]]''
| 1939
| 1988
| [[Mannin]]
|-
| style='text-align:right'| 2
|
| ''[[:d:Q136434024|Albert Hugh Teare]]''
| 1877
| 1932
| [[Rhumsaa]]
|-
| style='text-align:right'| 3
| [[Coadan:Frederick Agnew Gill LCCN2014714984 (cropped).jpg|center|128px]]
| [[Frederick Agnew Gill]]
| 1873
| 1938
| [[Balley Chashtal]]
|-
| style='text-align:right'| 4
|
| ''[[:d:Q75456632|Elizabeth Quayle]]''
|
|
| [[Skeerey Chreest ny h-Ayrey]]
|-
| style='text-align:right'| 5
| [[Coadan:RobinGibb.jpg|center|128px]]
| ''[[:d:Q188482|Robin Gibb]]''
| 1949
| 2012
| [[Doolish]]
|-
| style='text-align:right'| 6
| [[Coadan:Maurice Gibb (Bee Gees) - TopPop 1973 (cropped).png|center|128px]]
| ''[[:d:Q296876|Maurice Gibb]]''
| 1949
| 2003
| [[Doolish]]
|-
| style='text-align:right'| 7
|
| [[Randolph Quirk]]
| 1920
| 2017
| [[Maayl]]
|-
| style='text-align:right'| 8
|
| [[Ned Maddrell]]
| 1877
| 1974
| [[Creneash]]
|-
| style='text-align:right'| 9
| [[Coadan:Rhodri Mawr - Historiae Cambriae.png|center|128px]]
| ''[[:d:Q470862|Rhodri Mawr]]''
| 820
| 878
| [[Mannin]]
|-
| style='text-align:right'| 10
| [[Coadan:John Thomas Caine.jpg|center|128px]]
| ''[[:d:Q964884|John Thomas Caine]]''
| 1829
| 1911
| [[Mannin]]
|-
| style='text-align:right'| 11
|
| ''[[:d:Q1064177|Charles Duncan Cameron]]''
| 1825
| 1870
| [[Doolish]]
|-
| style='text-align:right'| 12
|
| [[Chris Killip]]
| 1946
| 2020
| [[Doolish]]
|-
| style='text-align:right'| 13
| [[Coadan:Edward Forbes.jpg|center|128px]]
| [[Edward Forbes]]
| 1815
| 1854
| [[Doolish]]
|-
| style='text-align:right'| 14
| [[Coadan:William Moulton Marston and Elizabeth Holloway Marston.png|center|128px]]
| [[Elizabeth Holloway Marston]]
| 1893
| 1993
| [[Mannin]]
|-
| style='text-align:right'| 15
| [[Coadan:Peter Heywood, by John Simpson.jpg|center|128px]]
| ''[[:d:Q1370965|Peter Heywood]]''
| 1772
| 1831
| [[Doolish]]
|-
| style='text-align:right'| 16
| [[Coadan:Eredoctoraten UvA nr. 21, 22 Charles B. Timmer , nr. 1 20 prof. J. Frank Kerm, Bestanddeelnr 934-1653.jpg|center|128px]]
| [[Frank Kermode]]
| 1919
| 2010
| [[Mannin]]
|-
| style='text-align:right'| 17
| [[Coadan:Hugh Binney.jpeg|center|128px]]
| ''[[:d:Q1634227|Hugh Binney]]''
| 1883
| 1953
| [[Doolish]]
|-
| style='text-align:right'| 18
|
| ''[[:d:Q2025044|Daniel Lowey]]''
| 1878
| 1951
| [[Rhumsaa]]
|-
| style='text-align:right'| 19
| [[Coadan:Gofraid Crobán (British Library Cotton MS Julius A VII, folio 50v).jpg|center|128px]]
| [[Gorree Crovan]]
| 1050
| 1095
| [[Mannin]]
|-
| style='text-align:right'| 20
| [[Coadan:MikeKerruish.jpg|center|128px]]
| [[Mike Kerruish]]
| 1948
| 2010
| [[Mannin]]
|-
| style='text-align:right'| 21
| [[Coadan:Brian Stowell - Gaisgeach na Gaelg.jpg|center|128px]]
| [[Brian Stowell]]
| 1936
| 2019
| [[Doolish]]
|-
| style='text-align:right'| 22
| [[Coadan:Archibald Knox.jpg|center|128px]]
| ''[[:d:Q2860090|Archibald Knox]]''
| 1864
| 1933
| [[Mannin]]
|-
| style='text-align:right'| 23
| [[Coadan:Goshen-Routh 10.jpg|center|128px]]
| [[Arthur Caley]]
| 1824
| 1889
| [[Skeerey Chreest ny h-Ayrey]]
|-
| style='text-align:right'| 24
|
| ''[[:d:Q2917082|Peter Buckley]]''
| 1944
| 1969
| [[Doolish]]
|-
| style='text-align:right'| 25
|
| ''[[:d:Q2960723|Charles de Viry]]''
| 1809
| 1888
| [[Doolish]]
|-
| style='text-align:right'| 26
|
| ''[[:d:Q2979086|Clifford Irving]]''
| 1914
| 2004
| [[Mannin]]
|-
| style='text-align:right'| 27
|
| ''[[:d:Q3048476|Edward Christian]]''
| 1600<br/>1590
| 1659<br/>1661
| [[Mannin]]
|-
| style='text-align:right'| 28
|
| ''[[:d:Q3082831|Frank Tipper]]''
| 1909
| 1963
| [[Doolish]]
|-
| style='text-align:right'| 29
|
| [[Hilary Pritchard]]
| 1942
| 1996
| [[Mannin]]
|-
| style='text-align:right'| 30
| [[Coadan:Illiam Dhone.JPG|center|128px]]
| [[Illiam Dhone]]
| 1608
| 1662<br/>1663
| [[Camys y Ree]]
|-
| style='text-align:right'| 31
| [[Coadan:Captain John Quilliam RN.jpg|center|128px]]
| ''[[:d:Q3182325|John Quilliam]]''
| 1771
| 1829
| [[Mannin]]
|-
| style='text-align:right'| 32
|
| ''[[:d:Q3184768|Joseph Clayton Clark]]''
| 1857<br/>1856
| 1937
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 33
|
| [[Joseph Davidson Qualtrough]]
| 1885
| 1960
| [[Mannin]]
|-
| style='text-align:right'| 34
|
| ''[[:d:Q3375184|Percy Cowley]]''
| 1886
| 1958
| [[Rhumsaa]]
|-
| style='text-align:right'| 35
|
| ''[[:d:Q3780140|Gwen Crellin]]''
| 1917
| 2007
| [[Mannin]]
|-
| style='text-align:right'| 36
|
| ''[[:d:Q4647267|A.P. Penketh]]''
| 1865
| 1932
| [[Mannin]]
|-
| style='text-align:right'| 37
| [[Coadan:AWM 099103 Arnold Potts.jpg|center|128px]]
| ''[[:d:Q4795209|Arnold Potts]]''
| 1896
| 1968
| [[Mannin]]
|-
| style='text-align:right'| 38
| [[Coadan:Arthur William Moore.png|center|128px]]
| [[Arthur William Moore]]
| 1853
| 1909
| [[Doolish]]
|-
| style='text-align:right'| 39
| [[Coadan:Baldwin Wake Walker.jpg|center|128px]]
| ''[[:d:Q4850612|Baldwin Wake Walker]]''
| 1802
| 1876
| ''[[:d:Q3398663|Port e Vullen]]''
|-
| style='text-align:right'| 40
| [[Coadan:Bertram Kelly, vicar.jpg|center|128px]]
| [[Bertram Kelly]]
| 1884
| 1976
| [[Doolish]]
|-
| style='text-align:right'| 41
|
| [[Bill Malarkey (politickeyr)|Bill Malarkey]]
| 1951
| 2020
| [[Mannin]]
|-
| style='text-align:right'| 42
|
| ''[[:d:Q4980208|Bryan Kneale]]''
| 1930
| 2025
| [[Doolish]]
|-
| style='text-align:right'| 43
|
| [[Charles Kerruish]]
| 1917
| 2003
| [[Mannin]]
|-
| style='text-align:right'| 44
| [[Coadan:TT Lightweight - Dan Kneen (8985019419).jpg|center|128px]]
| ''[[:d:Q5213818|Dan Kneen]]''
| 1987
| 2018
| [[Doolish]]
|-
| style='text-align:right'| 45
|
| ''[[:d:Q5232102|David Callister]]''
| 1935
| 2020
| [[Mannin]]
|-
| style='text-align:right'| 46
|
| ''[[:d:Q5233727|David Forbes]]''
| 1828
| 1876
| [[Doolish]]
|-
| style='text-align:right'| 47
|
| ''[[:d:Q5262311|Derek Robinson]]''
| 1941
| 2002
| [[Mannin]]
|-
| style='text-align:right'| 48
|
| [[Dursley McLinden]]
| 1965
| 1995
| [[Doolish]]
|-
| style='text-align:right'| 49
|
| ''[[:d:Q5339649|Edmund Lowey]]''
| 1938
| 2024
| [[Balley Sallagh]]
|-
| style='text-align:right'| 50
|
| ''[[:d:Q5442313|Felix Fordati Ready]]''
| 1872
| 1940
| [[Balley Sallagh]]
|-
| style='text-align:right'| 51
|
| ''[[:d:Q5534099|Geoff Corkish]]''
| 1953
| 2025
| [[Mannin]]
|-
| style='text-align:right'| 52
|
| ''[[:d:Q5585508|Gordon Manley]]''
| 1902
| 1980
| [[Doolish]]
|-
| style='text-align:right'| 53
|
| ''[[:d:Q5702651|Harry Dacre]]''
| 1860
| 1922
| [[Mannin]]
|-
| style='text-align:right'| 54
| [[Coadan:Hugh Stowell Brown.jpg|center|128px]]
| [[Hugh Stowell Brown]]
| 1823
| 1886
| [[Doolish]]
|-
| style='text-align:right'| 55
|
| [[Jack Nivison]]
| 1910
| 2003
| [[Skeerey Vraddan|Skeerey Braddan]]<br/>[[Kione Droghad]]
|-
| style='text-align:right'| 56
| [[Coadan:James Ashton.jpeg|center|128px]]
| ''[[:d:Q6128902|James Ashton]]''
| 1859
| 1935
| [[Mannin]]
|-
| style='text-align:right'| 57
| [[Coadan:James Kewley Ward 1890.jpg|center|128px]]
| ''[[:d:Q6137285|James Kewley Ward]]''
| 1819
| 1910
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 58
|
| ''[[:d:Q6218777|John Allen Mylrea]]''
| 1849
| 1911
| [[Doolish]]
|-
| style='text-align:right'| 59
|
| [[John Joseph Kneen]]
| 1873
| 1938
| [[Doolish]]
|-
| style='text-align:right'| 60
| [[Coadan:John McHutchin.jpg|center|128px]]
| ''[[:d:Q6247893|John McHutchin]]''
| 1788
| 1847
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 61
|
| ''[[:d:Q6387399|Ken Burns]]''
| 1923
| 2006
| [[Rhumsaa]]
|-
| style='text-align:right'| 62
| [[Coadan:Mark Cubbon b1775.jpg|center|128px]]
| ''[[:d:Q6767214|Mark Cubbon]]''
| 1775
| 1861
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 63
| [[Coadan:ColMarkWilks.jpg|center|128px]]
| ''[[:d:Q6770348|Mark Wilks]]''
| 1759
| 1831
| [[Mannin]]
|-
| style='text-align:right'| 64
|
| ''[[:d:Q6777668|Martyn Quayle]]''
| 1959
| 2016
| [[Mannin]]
|-
| style='text-align:right'| 65
|
| ''[[:d:Q7173434|Peter Craine]]''
| 2000
| 2003
| [[Doolish]]
|-
| style='text-align:right'| 66
|
| ''[[:d:Q7324916|Richard Costain]]''
| 1839
| 1902
| [[Mannin]]
|-
| style='text-align:right'| 67
|
| ''[[:d:Q7342026|Robert Benjamin Young]]''
| 1773
| 1846
| [[Doolish]]
|-
| style='text-align:right'| 68
|
| ''[[:d:Q7351285|Robert Wylie]]''
| 1839
| 1877
| [[Mannin]]
|-
| style='text-align:right'| 69
| [[Coadan:Sophia Morrison.jpg|center|128px]]
| [[Sophia Morrison]]
| 1859
| 1917
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 70
|
| ''[[:d:Q7627097|Stuart Slack]]''
| 1935
| 1998
| [[Doolish]]
|-
| style='text-align:right'| 71
| [[Coadan:T. E. Brown (young).jpg|center|128px]]
| ''[[:d:Q7789264|Thomas Edward Brown]]''
| 1830
| 1897
| [[Doolish]]
|-
| style='text-align:right'| 72
|
| ''[[:d:Q7790684|Thomas Hill Dixon]]''
| 1816
| 1880
| [[Mannin]]
|-
| style='text-align:right'| 73
|
| ''[[:d:Q7821311|Toni Onley]]''
| 1928
| 2004
| [[Doolish]]
|-
| style='text-align:right'| 74
|
| [[Walter y Chleree]]
| 1928
| 2007
| [[Rhumsaa]]
|-
| style='text-align:right'| 75
|
| ''[[:d:Q8010366|William H. Corlett]]''
| 1856
| 1937
| [[Mannin]]
|-
| style='text-align:right'| 76
|
| [[William Kennish]]
| 1799
| 1862
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 77
| [[Coadan:William Moore (1898).jpg|center|128px]]
| ''[[:d:Q8015768|William Moore]]''
| 1823
| 1914
| [[Mannin]]
|-
| style='text-align:right'| 78
| [[Coadan:Sir William Rowan.jpg|center|128px]]
| ''[[:d:Q8017805|William Rowan]]''
| 1789
| 1879
| [[Mannin]]
|-
| style='text-align:right'| 79
| [[Coadan:Rushen Abbey.jpg|center|128px]]
| ''[[:d:Q8017850|William Russell]]''
|
| 1374
| [[Mannin]]
|-
| style='text-align:right'| 80
|
| ''[[:d:Q9374876|William Russell]]''
| 1852
| 1940
| [[Doolish]]
|-
| style='text-align:right'| 81
|
| ''[[:d:Q10314191|Kenneth Creer]]''
| 1925
| 2020
| [[Doolish]]
|-
| style='text-align:right'| 82
|
| [[John Kelly (scoillar)|John Kelly]]
| 1750
| 1809
| [[Doolish]]
|-
| style='text-align:right'| 83
|
| [[Noel Cringle]]
| 1937
| 2021
| [[Mannin]]
|-
| style='text-align:right'| 84
| [[Coadan:Edward Faragher.jpeg|center|128px]]
| [[Edward Faragher]]
| 1831
| 1908
| [[Creneash]]
|-
| style='text-align:right'| 85
| [[Coadan:Josephine Kermode (Cushag).jpg|center|128px]]
| [[Josephine Kermode]]
| 1852
| 1937
| [[Rhumsaa]]
|-
| style='text-align:right'| 86
| [[Coadan:Mona Margaret McBURNEY.jpg|center|128px]]
| ''[[:d:Q15433239|Mona McBurney]]''
| 1862
| 1932
| [[Doolish]]
|-
| style='text-align:right'| 87
| [[Coadan:Philip Moore Callow Kermode.png|center|128px]]
| ''[[:d:Q15453822|P. M. C. Kermode]]''
| 1855
| 1932
| [[Rhumsaa]]
|-
| style='text-align:right'| 89
| [[Coadan:Hugo Flinn 1933.png|center|128px]]
| ''[[:d:Q15996075|Hugo Flinn]]''
| 1880
| 1943
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 90
| [[Coadan:Canon John Quine.jpg|center|128px]]
| ''[[:d:Q15997058|John Quine]]''
| 1857
| 1940
| [[Skeerey Charmane]]
|-
| style='text-align:right'| 91
| [[Coadan:W. Walter Gill.jpg|center|128px]]
| ''[[:d:Q16002989|W. Walter Gill]]''
| 1876
| 1963
| [[Mannin]]
|-
| style='text-align:right'| 92
|
| ''[[:d:Q16007058|Harry Korris]]''
| 1891
| 1971
| [[Kione Droghad]]
|-
| style='text-align:right'| 93
| [[Coadan:Christopher R. Shimmin.jpg|center|128px]]
| ''[[:d:Q16029252|Christopher R. Shimmin]]''
| 1870
| 1933
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 94
| [[Coadan:Actress Annie Yeamans, c. 1896.png|center|128px]]
| [[Annie Yeamans]]
| 1835
| 1912
| [[Mannin]]
|-
| style='text-align:right'| 95
| [[Coadan:Robert Q. Kermode.jpg|center|128px]]
| ''[[:d:Q16065654|Robert Kermode]]''
| 1812
| 1870
| [[Mannin]]
|-
| style='text-align:right'| 96
|
| ''[[:d:Q16169661|John Dongan]]''
| 1301
| 1413
| [[Mannin]]
|-
| style='text-align:right'| 97
|
| ''[[:d:Q16200333|Esther Nelson]]''
| 1810
| 1843
| [[Jorby]]
|-
| style='text-align:right'| 98
| [[Coadan:Kathleen Faragher.jpg|center|128px]]
| [[Kathleen Faragher]]
| 1904
| 1974
| [[Rhumsaa]]
|-
| style='text-align:right'| 99
|
| ''[[:d:Q16825531|Stewart Henbest Capper]]''
| 1859
| 1925
| [[Lunnin]]<br/>[[Doolish]]
|-
| style='text-align:right'| 100
|
| ''[[:d:Q17182825|William Garrett]]''
| 1842
| 1916
| [[Mannin]]
|-
| style='text-align:right'| 101
|
| ''[[:d:Q17309064|Charles Gibbon]]''
| 1843
| 1890
| [[Mannin]]
|-
| style='text-align:right'| 102
| [[Coadan:Plexus (1901) (14597471297).jpg|center|128px]]
| ''[[:d:Q18157096|William Edward Quine]]''
| 1847
| 1922
| [[Skeerey Stondane]]
|-
| style='text-align:right'| 103
| [[Coadan:Capt. William Gill, the first Captain of the line..jpg|center|128px]]
| [[William Gill (marrinagh)|William Gill]]
| 1795
| 1858
| [[Rhumsaa]]
|-
| style='text-align:right'| 104
| [[Coadan:William Cubbon.jpg|center|128px]]
| [[William Cubbon]]
| 1865
| 1955
| [[Colby]]
|-
| style='text-align:right'| 105
| [[Coadan:Sir Benjamin Alfred Dobson statue, Bolton (4).JPG|center|128px]]
| ''[[:d:Q18681459|Benjamin Dobson]]''
| 1847
| 1898
| [[Doolish]]
|-
| style='text-align:right'| 106
| [[Coadan:Sir James Gell.jpg|center|128px]]
| ''[[:d:Q18922358|James Gell]]''
| 1823
| 1905
| [[Mannin]]
|-
| style='text-align:right'| 107
| [[Coadan:Archibald Cregeen.png|center|128px]]
| [[Archibald Cregeen]]
| 1774
| 1841
| [[Colby]]
|-
| style='text-align:right'| 108
| [[Coadan:Rev thomas bacon.jpg|center|128px]]
| ''[[:d:Q19282324|Thomas Bacon]]''
| 1711
| 1768
| [[Mannin]]
|-
| style='text-align:right'| 109
|
| ''[[:d:Q20639142|Annie Warren Gill]]''
| 1862
| 1930
| [[Balley Chashtal]]
|-
| style='text-align:right'| 110
|
| ''[[:d:Q20683954|Charles Clague]]''
| 1890
| 1962
| [[Mannin]]
|-
| style='text-align:right'| 111
|
| ''[[:d:Q20711846|Frank Gill]]''
| 1866
| 1950
| [[Balley Chashtal]]
|-
| style='text-align:right'| 112
|
| ''[[:d:Q20747196|Arthur Lemon]]''
| 1850
| 1912
| [[Mannin]]
|-
| style='text-align:right'| 113
|
| ''[[:d:Q20756364|Patrick William Stuart-Menteath]]''
| 1845
| 1925
| [[Doolish]]
|-
| style='text-align:right'| 114
|
| ''[[:d:Q20763301|Richard Paget Murray]]''
| 1842
| 1908
| [[Mannin]]
|-
| style='text-align:right'| 115
| [[Coadan:Joseph Creer MLA.png|center|128px]]
| ''[[:d:Q20810712|Joseph Creer]]''
| 1832
| 1913
| [[Mannin]]
|-
| style='text-align:right'| 116
|
| ''[[:d:Q20877240|Edward Quayle]]''
| 1802
| 1862
| [[Mannin]]
|-
| style='text-align:right'| 117
|
| ''[[:d:Q20981819|Sidney Nowell Rostron]]''
| 1883
| 1948
| [[Doolish]]
|-
| style='text-align:right'| 118
|
| ''[[:d:Q21461346|Frederick Swynnerton]]''
| 1858
| 1918
| [[Doolish]]
|-
| style='text-align:right'| 119
|
| ''[[:d:Q21538837|Thomas O'Reilly]]''
| 1819
| 1881
| [[Doolish]]
|-
| style='text-align:right'| 120
| [[Coadan:Capt. James Teare of the RMS Ellan Vannin..JPG|center|128px]]
| ''[[:d:Q22018744|James Teare]]''
| 1872
| 1909
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 121
|
| ''[[:d:Q24034942|Amelia Jane Murray]]''
| 1800
| 1896
| [[Doolish]]
|-
| style='text-align:right'| 122
|
| ''[[:d:Q24205000|William Cain]]''
| 1831
| 1914
| [[Mannin]]
|-
| style='text-align:right'| 123
|
| ''[[:d:Q24264205|James F. Keggin]]''
| 1905
| 1993
| [[Mannin]]
|-
| style='text-align:right'| 124
|
| [[Doolish y Karagher]]
| 1926
| 1987
| [[Doolish]]
|-
| style='text-align:right'| 125
|
| ''[[:d:Q26330510|William Hutchison]]''
| 1904
| 1975
| [[Mannin]]
|-
| style='text-align:right'| 126
|
| ''[[:d:Q27178436|Robert H. Nesbitt]]''
| 1883
| 1966
| [[Mannin]]
|-
| style='text-align:right'| 127
| [[Coadan:David "Dawsey" Kewley.jpg|center|128px]]
| ''[[:d:Q27827705|David Kewley]]''
| 1850
| 1904
| [[Doolish]]
|-
| style='text-align:right'| 128
| [[Coadan:James Stowell Gell.jpg|center|128px]]
| ''[[:d:Q28179118|James Stowell Gell]]''
| 1855
| 1919
| [[Balley Chashtal]]
|-
| style='text-align:right'| 129
| [[Coadan:Samuel Harris.jpg|center|128px]]
| ''[[:d:Q28203030|Samuel Harris]]''
| 1815
| 1905
| [[Doolish]]
|-
| style='text-align:right'| 130
| [[Coadan:Paul Lebiedzinski.jpg|center|128px]]
| ''[[:d:Q28810393|Paul Lebiedzinski]]''
| 1951
| 1995
| [[Rhumsaa]]
|-
| style='text-align:right'| 131
| [[Coadan:John Moore Jeffcott.png|center|128px]]
| ''[[:d:Q31201248|John Moore Jeffcott]]''
| 1817
| 1892
| [[Balley Chashtal]]
|-
| style='text-align:right'| 132
| [[Coadan:Stewart Stevenson Moore.jpg|center|128px]]
| ''[[:d:Q37154286|Stewart Stevenson Moore]]''
| 1860
| 1951
| [[Mannin]]
|-
| style='text-align:right'| 133
|
| ''[[:d:Q39070085|John Kelly]]''
| 1793
| 1854
| [[Mannin]]
|-
| style='text-align:right'| 134
| [[Coadan:Snaefell Miners.jpg|center|128px]]
| ''[[:d:Q41757067|John Kewley]]''
| 1832
| 1905
| [[Mannin]]
|-
| style='text-align:right'| 135
| [[Coadan:Elizabeth S. Nutt, A.R.C.A. (I0007923).jpg|center|128px]]
| ''[[:d:Q43196426|Elizabeth Styring Nutt]]''
| 1870
| 1946
| [[Kione Droghad]]
|-
| style='text-align:right'| 136
|
| ''[[:d:Q43606976|Charles Swynnerton]]''
| 1843
| 1923
| [[Mannin]]
|-
| style='text-align:right'| 137
|
| ''[[:d:Q43779525|Mark Hildesley Quayle]]''
| 1804
| 1879
| [[Mannin]]
|-
| style='text-align:right'| 138
|
| ''[[:d:Q43945628|Mark Quayle]]''
| 1770
| 1804
| [[Mannin]]
|-
| style='text-align:right'| 139
|
| ''[[:d:Q44049933|John Quayle]]''
| 1693
| 1755
| [[Mannin]]
|-
| style='text-align:right'| 140
|
| ''[[:d:Q44746168|Mark Quayle]]''
| 1841
| 1928
| [[Mannin]]
|-
| style='text-align:right'| 141
|
| ''[[:d:Q48110870|Joseph Swynnerton]]''
| 1848
| 1910
| [[Doolish]]
|-
| style='text-align:right'| 142
|
| ''[[:d:Q52148110|Jim Caine]]''
| 1926
| 2018
| [[Doolish]]
|-
| style='text-align:right'| 143
|
| ''[[:d:Q53196681|Wilfred Kissack]]''
| 1873
| 1942
| [[Mannin]]
|-
| style='text-align:right'| 144
|
| ''[[:d:Q54553548|Millie Robinson]]''
| 1924
| 1994
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 145
| [[Coadan:Nellie Brennan.jpg|center|128px]]
| ''[[:d:Q55418295|Nelly Brennan]]''
| 1792
| 1859
| [[Doolish]]
|-
| style='text-align:right'| 146
|
| ''[[:d:Q56254209|Thomas Stowell]]''
| 1764
| 1821
| [[Mannin]]
|-
| style='text-align:right'| 147
|
| ''[[:d:Q56452187|Derek Ennett]]''
| 1931
| 1956
| [[Balley Chashtal]]
|-
| style='text-align:right'| 148
|
| ''[[:d:Q56528264|Thomas Tobin]]''
| 1775
| 1863
| [[Doolish]]
|-
| style='text-align:right'| 149
| [[Coadan:John D. LaMothe.jpg|center|128px]]
| ''[[:d:Q56665493|John Dominique LaMothe]]''
| 1868
| 1928
| [[Rhumsaa]]
|-
| style='text-align:right'| 150
|
| ''[[:d:Q56887925|Nina Morrison]]''
| 1915
| 2011
| [[Doolish]]
|-
| style='text-align:right'| 151
|
| [[Dorothy Pantin]]
| 1896
| 1985
| [[Doolish]]
|-
| style='text-align:right'| 152
| [[Coadan:John Quayle (1725 - 1797).png|center|128px]]
| ''[[:d:Q60754040|John Quayle]]''
| 1725
| 1797
| [[Mannin]]
|-
| style='text-align:right'| 153
|
| ''[[:d:Q64685433|Francis Claudius Armstrong]]''
| 1802
| 1872
| [[Mannin]]
|-
| style='text-align:right'| 154
|
| ''[[:d:Q64685645|Hugh Coleman Davidson]]''
| 1852
| 1934
| [[Balley Chashtal]]
|-
| style='text-align:right'| 155
|
| ''[[:d:Q65767130|Pilcher George Ralfe]]''
| 1861
| 1936
| [[Skeerey Chreest ny h-Ayrey]]
|-
| style='text-align:right'| 156
|
| ''[[:d:Q65768017|Frank Stanley Graves]]''
| 1863
| 1935
| [[Skeerey Charmane]]
|-
| style='text-align:right'| 157
|
| ''[[:d:Q66606883|John Joseph Heywood]]''
| 1789
| 1855
| [[Mannin]]
|-
| style='text-align:right'| 158
|
| ''[[:d:Q70743693|Mona Hirst]]''
| 1903
| 1988
| [[Mannin]]
|-
| style='text-align:right'| 159
|
| [[Ewan Christian (briw)|Ewan Christian]]
| 1579
| 1655
| [[Skeerey Chreest ny h-Ayrey]]
|-
| style='text-align:right'| 160
| [[Coadan:Portrait of Esther Taubman, née Christian (by George Romney).jpg|center|128px]]
| ''[[:d:Q75456778|Esther Christian]]''
| 1711
| 1802
| [[Rhumsaa]]
|-
| style='text-align:right'| 161
|
| ''[[:d:Q75458718|George Horsley Wood]]''
|
| 1874
| [[Doolish]]
|-
| style='text-align:right'| 162
|
| ''[[:d:Q75460583|Robert Christian]]''
| 1625
| 1668
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 163
|
| ''[[:d:Q75463324|Margaret Moore]]''
| 1733<br/>1730
| 1782<br/>1807
| [[Doolish]]
|-
| style='text-align:right'| 164
|
| ''[[:d:Q75463414|Margaret Moore]]''
| 1736
| 1828
| [[Skeerey Vraddan|Skeerey Braddan]]
|-
| style='text-align:right'| 165
|
| ''[[:d:Q75463447|Margaret Moore]]''
| 1769
| 1804
| [[Skeerey Vraddan|Skeerey Braddan]]
|-
| style='text-align:right'| 166
|
| ''[[:d:Q75946963|Anna Cleather]]''
| 1811
| 1887
| [[Mannin]]
|-
| style='text-align:right'| 167
|
| ''[[:d:Q76142859|Fanny Edith Walters]]''
| 1887
| 1949
| [[Balley Chashtal]]
|-
| style='text-align:right'| 168
|
| ''[[:d:Q78901420|Edward Ashton Cannell]]''
| 1927
| 1994
| [[Purt Çhiarn]]
|-
| style='text-align:right'| 169
|
| [[Tommy Leece]]
| 1859
| 1956
| [[Skeerey Chairbre]]
|-
| style='text-align:right'| 170
|
| ''[[:d:Q94373906|John Kaighn]]''
| 1660
| 1724
| [[Mannin]]
|-
| style='text-align:right'| 171
| [[Coadan:Leonard McCombe, 1954, NY, Photograh taken by Jun Miki.jpg|center|128px]]
| ''[[:d:Q97066829|Leonard McCombe]]''
| 1923
| 2005
| [[Mannin]]
|-
| style='text-align:right'| 172
|
| [[Edmund Goodwin]]
| 1845
| 1925
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 173
|
| ''[[:d:Q97497011|Lewis Crellin]]''
| 1901
| 1990
| [[Forsdal]]
|-
| style='text-align:right'| 174
|
| ''[[:d:Q97597263|Leslie Quirk]]''
| 1914
| 2004
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 175
|
| ''[[:d:Q98763296|Norman Sayle]]''
| 1926
| 2007
| [[Doolish]]
|-
| style='text-align:right'| 176
|
| ''[[:d:Q101068189|John Quayle-Dickson]]''
| 1860
| 1945
| [[Balley Chashtal]]
|-
| style='text-align:right'| 177
|
| ''[[:d:Q102175647|David W. Lewis]]''
| 1944
| 2021
| [[Doolish]]
|-
| style='text-align:right'| 178
|
| ''[[:d:Q104286259|Ernest Feltus Adams]]''
| 1865
| 1957
| [[Mannin]]
|-
| style='text-align:right'| 179
| [[Coadan:Thomas Leigh-Goldie.jpg|center|128px]]
| ''[[:d:Q109559333|Thomas Leigh Goldie]]''
| 1807
| 1854
| [[Doolish]]
|-
| style='text-align:right'| 180
|
| ''[[:d:Q110806864|John Newlands Thomson]]''
| 1870
| 1948
| [[Purt le Moirrey]]
|-
| style='text-align:right'| 181
|
| ''[[:d:Q112394413|John David Williams]]''
| 1931
| 2005
| [[Doolish]]
|-
| style='text-align:right'| 182
|
| ''[[:d:Q112954595|Letitia Hannah Damer Sandys]]''
| 1840<br/>1833
| 1911
| [[Mannin]]
|-
| style='text-align:right'| 183
|
| ''[[:d:Q114578445|John Wordsworth]]''
| 1845
| 1920
| [[Rhumsaa]]
|-
| style='text-align:right'| 184
|
| ''[[:d:Q120900628|R. S. McCombe]]''
| 1902
| 1985
| [[Doolish]]
|-
| style='text-align:right'| 185
| [[Coadan:Robert Swan Stephen.png|center|128px]]
| ''[[:d:Q121875076|Robert Swan Stephen]]''
| 1843
| 1903
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 186
|
| [[John Quane]]
| 1757
| 1838
| [[Mannin]]
|-
| style='text-align:right'| 187
|
| [[Robert E. Christian]]
| 1817
| 1891
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 188
|
| ''[[:d:Q122381207|Voirrey Irving]]''
| 1918
| 2005
| [[Mannin]]
|-
| style='text-align:right'| 189
| [[Coadan:Charles Lionel Carson (1847–1901).png|center|128px]]
| ''[[:d:Q123558946|Charles Lionel Carson]]''
| 1847
| 1901
| [[Mannin]]
|-
| style='text-align:right'| 190
| [[Coadan:Margaret Jennifer Kewley Draskau in the video 'Lady Derby – The Great Whore of Babylon'.png|center|128px]]
| ''[[:d:Q130730092|Jennifer Kewley Draskau]]''
|
| 2024
| [[Mannin]]
|-
| style='text-align:right'| 191
|
| ''[[:d:Q134487555|Chris Garrett]]''
| 1984
| 2025
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 192
|
| ''[[:d:Q106808901|Julie Edge]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 193
| [[Coadan:Max Walker - 2023 UCI Road World Championships (Men's under-23 road race).jpg|center|128px]]
| ''[[:d:Q107036155|Max Walker]]''
| 2001
|
| [[Doolish]]
|-
| style='text-align:right'| 194
|
| ''[[:d:Q108257419|Nola York]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 195
| [[Coadan:Becky Storrie - Présentation TCFIA 2025.jpg|center|128px]]
| ''[[:d:Q108878510|Becky Storrie]]''
| 1998
|
| [[Balley Sallagh]]
|-
| style='text-align:right'| 196
|
| ''[[:d:Q111254683|Jason Evans]]''
| 1991
|
| [[Doolish]]
|-
| style='text-align:right'| 197
| [[Coadan:Yasmin Ingham at the Badminton Horse Trials 2025 - 20250510 135552(0).jpg|center|128px]]
| [[Yasmin Ingham]]
| 1997
|
| [[Mannin]]
|-
| style='text-align:right'| 198
|
| ''[[:d:Q114785217|William Henry Cooper]]''
| 1870
|
| [[Balley Chashtal]]
|-
| style='text-align:right'| 199
|
| ''[[:d:Q115910223|Michael Bott]]''
| 1954
|
| [[Doolish]]
|-
| style='text-align:right'| 200
|
| ''[[:d:Q117309494|Anna Branford]]''
| 1975
|
| [[Mannin]]
|-
| style='text-align:right'| 201
|
| ''[[:d:Q124685800|Tyler Hannay]]''
| 2003
|
| [[Mannin]]
|-
| style='text-align:right'| 202
|
| ''[[:d:Q130198574|Brian Christian]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 203
|
| ''[[:d:Q134973228|Catherine Perry]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 204
|
| ''[[:d:Q134973249|Rebecca Webster]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 205
|
| ''[[:d:Q134973255|Daniellle Murphy]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 206
|
| ''[[:d:Q134973282|Alanya Thorpe]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 207
|
| ''[[:d:Q134973285|Andrea Littlejohns]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 208
|
| ''[[:d:Q134973288|Caitlin Henery]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 209
|
| ''[[:d:Q134973298|Clare Crowe]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 210
|
| ''[[:d:Q134980247|Bliss Murtagh]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 211
|
| ''[[:d:Q134980251|Emma Miller]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 212
|
| ''[[:d:Q134980254|Rachel Overman]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 213
|
| ''[[:d:Q134980258|Sam Hassall]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 214
|
| ''[[:d:Q134980259|Finnola Martin]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 215
|
| ''[[:d:Q135898155|James Franklin]]''
| 1980
|
| ''[[:d:Q26715141|Glen Mona]]''
|-
| style='text-align:right'| 216
|
| ''[[:d:Q135898269|Simon Maddrell]]''
| 1965
|
| [[Doolish]]
|-
| style='text-align:right'| 217
|
| ''[[:d:Q138535546|Alexander Foster]]''
| 1999
|
| [[Doolish]]
|-
| style='text-align:right'| 218
| [[Coadan:Jersey Town Criterium 2012 Greg Mansell.jpg|center|128px]]
| ''[[:d:Q126242|Greg Mansell]]''
| 1987
|
| [[Doolish]]
|-
| style='text-align:right'| 219
| [[Coadan:Mark Cavendish TDF2012 (cropped).jpg|center|128px]]
| [[Mark Cavendish]]
| 1985
|
| [[Doolish]]
|-
| style='text-align:right'| 220
| [[Coadan:Barry Gibb in 2017-Glasto17-197 (34744934874).jpg|center|128px]]
| ''[[:d:Q296872|Barry Gibb]]''
| 1946
|
| [[Doolish]]
|-
| style='text-align:right'| 221
|
| ''[[:d:Q373700|Richard Corkill]]''
| 1951
|
| [[Doolish]]
|-
| style='text-align:right'| 222
| [[Coadan:Leo Mansell 2010.jpg|center|128px]]
| ''[[:d:Q427791|Leo Mansell]]''
| 1985
|
| [[Mannin]]
|-
| style='text-align:right'| 223
| [[Coadan:Samantha Barks - Fendi.jpg|center|128px]]
| [[Samantha Barks]]
| 1990
|
| [[Laksaa]]
|-
| style='text-align:right'| 224
| [[Coadan:Andrew Roche - 2014 Commonwealth Games (Men's road time trial).jpg|center|128px]]
| ''[[:d:Q506928|Andrew Roche]]''
| 1971
|
| [[Mannin]]
|-
| style='text-align:right'| 225
| [[Coadan:Peter Kennaugh - Tour de Romandie 2010, Stage 3.jpg|center|128px]]
| ''[[:d:Q561361|Peter Kennaugh]]''
| 1989
|
| [[Doolish]]
|-
| style='text-align:right'| 226
| [[Coadan:Ss7 higgins.jpg|center|128px]]
| ''[[:d:Q570357|Mark Higgins]]''
| 1971
|
| [[Mannin]]
|-
| style='text-align:right'| 227
| [[Coadan:Saint-Ghislain - Grand Prix Pino Cerami, 22 juillet 2015, départ (B016).JPG|center|128px]]
| ''[[:d:Q594947|Mark Christian]]''
| 1990
|
| [[Doolish]]
|-
| style='text-align:right'| 228
|
| ''[[:d:Q935074|Donald Gelling]]''
| 1938
|
| [[Skeerey Stondane]]
|-
| style='text-align:right'| 229
| [[Coadan:Alan Bell 2007.jpg|center|128px]]
| [[Allan Bell]]
| 1947
|
| [[Mannin]]
|-
| style='text-align:right'| 230
|
| ''[[:d:Q1378254|James Anthony Brown]]''
| 1950
|
| [[Balley Chashtal]]
|-
| style='text-align:right'| 231
| [[Coadan:Jonathan Bellis.jpg|center|128px]]
| ''[[:d:Q1381074|Jonathan Bellis]]''
| 1988
|
| [[Doolish]]
|-
| style='text-align:right'| 232
| [[Coadan:Amy Jackson headshot (cropped).jpg|center|128px]]
| [[Amy Jackson]]
| 1992
|
| [[Doolish]]
|-
| style='text-align:right'| 233
| [[Coadan:David Knight WEC 2010.jpg|center|128px]]
| ''[[:d:Q2309170|David Knight]]''
| 1978
|
| [[Balley ny Loghey]]
|-
| style='text-align:right'| 234
| [[Coadan:Prof eva rieger.jpg|center|128px]]
| ''[[:d:Q2693484|Eva Rieger]]''
| 1940
|
| [[Mannin]]
|-
| style='text-align:right'| 235
|
| ''[[:d:Q2898341|Bernard Moffatt]]''
| 1946
|
| [[Mannin]]
|-
| style='text-align:right'| 236
|
| [[Clare Christian]]
| 1945
|
| [[Mannin]]
|-
| style='text-align:right'| 237
| [[Coadan:Harry Manx at Bluesfest 2008.jpg|center|128px]]
| ''[[:d:Q3127867|Harry Manx]]''
| 1955
|
| [[Mannin]]
|-
| style='text-align:right'| 238
| [[Coadan:Jamie Blackley.jpg|center|128px]]
| [[Jamie Blackley]]
| 1991
|
| [[Doolish]]
|-
| style='text-align:right'| 239
|
| ''[[:d:Q3314091|Miles Walker]]''
| 1940
|
| [[Mannin]]
|-
| style='text-align:right'| 240
|
| ''[[:d:Q3337801|Neil Bennett]]''
| 1951
|
| [[Rhumsaa]]
|-
| style='text-align:right'| 241
| [[Coadan:Conor Cummins portrait.JPG|center|128px]]
| ''[[:d:Q3687112|Conor Cummins]]''
| 1986
|
| [[Doolish]]
|-
| style='text-align:right'| 242
|
| ''[[:d:Q3973323|Steve Colley]]''
| 1972
|
| [[Kione Droghad]]
|-
| style='text-align:right'| 243
|
| ''[[:d:Q4684998|Adrian Earnshaw]]''
| 1950
|
| [[Mannin]]
|-
| style='text-align:right'| 244
|
| [[Alan Corkish]]
|
|
| [[Mannin]]
|-
| style='text-align:right'| 245
|
| ''[[:d:Q4706451|Alan Crowe]]''
| 1940
|
| [[Mannin]]
|-
| style='text-align:right'| 246
| [[Coadan:AndyT Mugshot.jpg|center|128px]]
| ''[[:d:Q4761421|Andy Tudor]]''
| 1977
|
| [[Doolish]]
|-
| style='text-align:right'| 247
| [[Coadan:Prof Angela Little.jpg|center|128px]]
| ''[[:d:Q4762488|Angela Little]]''
| 1949
|
| [[Doolish]]
|-
| style='text-align:right'| 248
|
| [[Anne Craine]]
| 1954
|
| [[Doolish]]
|-
| style='text-align:right'| 249
| [[Coadan:Christine Collister.jpg|center|128px]]
| [[Christine Collister]]
| 1961
|
| [[Mannin]]
|-
| style='text-align:right'| 250
| [[Coadan:Sidecar Thurs Practice IMG 00257.jpg|center|128px]]
| ''[[:d:Q5229405|Dave Molyneux]]''
| 1963
|
| [[Doolish]]
|-
| style='text-align:right'| 251
|
| ''[[:d:Q5229413|Dave Moore]]''
| 1966
|
| [[Doolish]]
|-
| style='text-align:right'| 252
|
| ''[[:d:Q5230767|David Anderson]]''
| 1954
|
| [[Mannin]]
|-
| style='text-align:right'| 253
|
| ''[[:d:Q5232661|David Cretney]]''
| 1954
|
| [[Mannin]]
|-
| style='text-align:right'| 254
|
| ''[[:d:Q5236864|David Lyon]]''
| 1943
|
| [[Doolish]]
|-
| style='text-align:right'| 255
| [[Coadan:Davy-knowles.jpg|center|128px]]
| ''[[:d:Q5242207|Davy Knowles]]''
| 1987
|
| [[Purt le Moirrey]]
|-
| style='text-align:right'| 256
|
| ''[[:d:Q5336528|Eddie Teare]]''
| 1948
|
| [[Mannin]]
|-
| style='text-align:right'| 257
|
| ''[[:d:Q5337428|Edgar Quine]]''
| 1934
|
| [[Andreas, Mannin|Andreas]]
|-
| style='text-align:right'| 258
|
| ''[[:d:Q5522814|Gareth Davies]]''
| 1965
|
| [[Doolish]]
|-
| style='text-align:right'| 259
|
| ''[[:d:Q5687920|Hazel Hannan]]''
| 2000
|
| [[Purt Soderick]]
|-
| style='text-align:right'| 260
| [[Coadan:Roskams jane.jpg|center|128px]]
| ''[[:d:Q6152688|Jane Roskams]]''
|
|
| [[Doolish]]
|-
| style='text-align:right'| 261
|
| ''[[:d:Q6239980|John Houghton]]''
| 2000
|
| [[Doolish]]
|-
| style='text-align:right'| 262
|
| [[Juan Turner]]
| 1974
|
| [[Mannin]]
|-
| style='text-align:right'| 263
| [[Coadan:2021-Watterson-Juan-portrait.jpg|center|128px]]
| ''[[:d:Q6301157|Juan Watterson]]''
| 1980
|
| [[Mannin]]
|-
| style='text-align:right'| 264
|
| ''[[:d:Q6397791|Kevin Woodford]]''
| 1950
|
| [[Doolish]]
|-
| style='text-align:right'| 265
| [[Coadan:Martin Bridson2.jpg|center|128px]]
| ''[[:d:Q6775057|Martin Bridson]]''
| 1964
|
| [[Doolish]]
|-
| style='text-align:right'| 266
|
| ''[[:d:Q7175096|Peter Karran]]''
| 1960
|
| [[Mannin]]
|-
| style='text-align:right'| 267
| [[Coadan:Phil Gawne (cropped).jpg|center|128px]]
| [[Phil Gawne]]
| 1965
|
| [[Doolish]]
|-
| style='text-align:right'| 268
|
| ''[[:d:Q7612099|Steve Burke]]''
| 1974
|
| [[Mannin]]
|-
| style='text-align:right'| 269
|
| [[Tim Kennaugh]]
| 1991
|
| [[Doolish]]
|-
| style='text-align:right'| 270
| [[Coadan:Stoneham Maltais Anthonioz.jpg|center|128px]]
| [[Zoe Gillings]]
| 1985
|
| [[Mannin]]
|-
| style='text-align:right'| 271
|
| [[Cristen Marritt]]
| 1989
|
| [[Doolish]]
|-
| style='text-align:right'| 272
|
| [[Kimberley Clague]]
| 1988
|
| [[Doolish]]
|-
| style='text-align:right'| 273
| [[Coadan:Robert Corteen Carswell.jpg|center|128px]]
| [[Bob Carswell]]
| 1950
|
| [[Mannin]]
|-
| style='text-align:right'| 274
|
| ''[[:d:Q16206261|Nick Crowe]]''
| 1971
|
| [[Mannin]]
|-
| style='text-align:right'| 275
|
| ''[[:d:Q16213489|Araminta de Clermont]]''
| 1971
|
| [[Mannin]]
|-
| style='text-align:right'| 276
|
| ''[[:d:Q16855481|Arthur Caley]]''
| 1824
|
| [[Mannin]]
|-
| style='text-align:right'| 277
| [[Coadan:Anna Christian - 2019 Women's Tour of Scotland (stage 3).jpg|center|128px]]
| [[Anna Christian]]
| 1995
|
| [[Doolish]]
|-
| style='text-align:right'| 278
| [[Coadan:FIL 2014 - Femmes Gaéliques - Ruth Keggin quartet - 1377.jpg|center|128px]]
| ''[[:d:Q19874790|Ruth Keggin]]''
| 1989
|
| [[Purt Çhiarn]]
|-
| style='text-align:right'| 279
| [[Coadan:Kieran Tierney (26938128442) (cropped).jpg|center|128px]]
| ''[[:d:Q19888012|Kieran Tierney]]''
| 1997
|
| [[Doolish]]
|-
| style='text-align:right'| 280
|
| ''[[:d:Q19956065|Kate Beecroft]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 281
|
| ''[[:d:Q21289363|Kevin Atherton]]''
| 1950
|
| [[Doolish]]
|-
| style='text-align:right'| 282
|
| ''[[:d:Q21642675|Tim Kneale]]''
| 1982
|
| [[Doolish]]
|-
| style='text-align:right'| 283
| [[Coadan:Lillers - Grand Prix de Lillers-Souvenir Bruno Comini, 6 mars 2016 (B052).JPG|center|128px]]
| [[Jake Kelly (daawheeylleyder)|Jake Kelly]]
| 1995
|
| [[Doolish]]
|-
| style='text-align:right'| 284
| [[Coadan:Liam Doyle.JPG|center|128px]]
| ''[[:d:Q24005468|Liam Doyle]]''
| 1992
|
| [[Mannin]]
|-
| style='text-align:right'| 285
| [[Coadan:2021-Skelly-Laurence-portrait.jpg|center|128px]]
| [[Laurence Skelly]]
| 1961
|
| [[Doolish]]
|-
| style='text-align:right'| 286
|
| [[Isla Callister]]
|
|
| [[Mannin]]
|-
| style='text-align:right'| 287
|
| [[Paayl Rogers]]
|
|
| [[Mannin]]
|-
| style='text-align:right'| 288
|
| [[Daniel Quayle]]
|
|
| [[Mannin]]
|-
| style='text-align:right'| 289
| [[Coadan:Howard Quayle.jpg|center|128px]]
| [[Howard Quayle]]
| 1967
|
| [[Mannin]]
|-
| style='text-align:right'| 290
| [[Coadan:Laura Wasley - 2014 Commonwealth Games (Women's road time trial).jpg|center|128px]]
| ''[[:d:Q26845558|Laura Wasley]]''
| 1984
|
| [[Doolish]]
|-
| style='text-align:right'| 291
| [[Coadan:Matt Bostock - 2019 Tour Series, Aberdeen (Men's race - team win).jpg|center|128px]]
| [[Matthew Bostock]]
| 1997
|
| [[Mannin]]
|-
| style='text-align:right'| 292
| [[Coadan:Brianne West.jpg|center|128px]]
| ''[[:d:Q28033898|Brianne West]]''
| 1985
|
| [[Purt Çhiarn]]
|-
| style='text-align:right'| 293
| [[Coadan:2024 Tour de France Femmes - 2e etappe Lizzie Holden 1.jpg|center|128px]]
| [[Lizzie Holden]]
| 1997
|
| [[Doolish]]
|-
| style='text-align:right'| 294
|
| ''[[:d:Q28378513|Hugh Davidson]]''
| 1935
|
| [[Mannin]]
|-
| style='text-align:right'| 295
|
| ''[[:d:Q28792438|Nathan Draper]]''
| 1997
|
| [[Doolish]]
|-
| style='text-align:right'| 296
| [[Coadan:Sam Brand, 2019 Milan-Sanremo.jpg|center|128px]]
| ''[[:d:Q36286044|Sam Brand]]''
| 1991
|
| [[Purt ny h-Inshey]]
|-
| style='text-align:right'| 297
|
| [[Adam Long (bluckaneyr)|Adam Long]]
| 2000
|
| [[Doolish]]
|-
| style='text-align:right'| 298
|
| ''[[:d:Q44821053|Alfred Walter Adams]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 299
| [[Coadan:Dr Eleanor Scott.jpg|center|128px]]
| ''[[:d:Q46997927|Eleanor Scott]]''
| 1960
|
| [[Mannin]]
|-
| style='text-align:right'| 300
|
| [[Jessica Li]]
| 1998
|
| [[Doolish]]
|-
| style='text-align:right'| 301
| [[Coadan:Sophia Goulden anon died 1910.jpg|center|128px]]
| ''[[:d:Q50387964|Sophia Goulden]]''
| 1833
|
| [[Skeerey Lonan]]
|-
| style='text-align:right'| 302
|
| ''[[:d:Q50676544|Kerry Sharpe]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 303
|
| [[Daryl Callister]]
| 1989
|
| [[Mannin]]
|-
| style='text-align:right'| 304
|
| ''[[:d:Q55409232|Leon Mazzone]]''
| 1996
|
| [[Rhumsaa]]
|-
| style='text-align:right'| 305
|
| ''[[:d:Q55900439|Gérard MacQuillan]]''
| 1949
|
| [[Doolish]]
|-
| style='text-align:right'| 306
|
| ''[[:d:Q59242725|Clare Faulds]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 307
|
| ''[[:d:Q63344804|Colin Callow]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 308
|
| ''[[:d:Q64006025|Gary R. Lewin]]''
| 1965
|
| [[Mannin]]
|-
| style='text-align:right'| 309
|
| ''[[:d:Q75401195|Margaret Rosamund Moore]]''
| 1871
|
| [[Skeerey Vraddan|Skeerey Braddan]]
|-
| style='text-align:right'| 310
|
| ''[[:d:Q75463040|Margaret Moore]]''
| 1735
|
| [[Skeerey Maghal]]
|-
| style='text-align:right'| 311
|
| ''[[:d:Q75463064|George Quaile]]''
| 1801
|
| [[Mannin]]
|-
| style='text-align:right'| 312
|
| ''[[:d:Q75463140|Margaret Moore]]''
|
|
| [[Skeerey Malew]]
|-
| style='text-align:right'| 313
|
| ''[[:d:Q75467601|Margaret Moore]]''
|
|
| [[Mannin]]
|-
| style='text-align:right'| 314
|
| ''[[:d:Q87063021|Tom Mazzone]]''
| 1993
|
| [[Doolish]]
|-
| style='text-align:right'| 315
| [[Coadan:Paul Quine.jpg|center|128px]]
| ''[[:d:Q98755074|Paul Quine]]''
| 1969
|
| [[Doolish]]
|-
| style='text-align:right'| 316
|
| ''[[:d:Q100740733|Jane Callister]]''
| 1963
|
| [[Doolish]]
|-
| style='text-align:right'| 317
| [[Coadan:Joe Locke en 2022.jpg|center|128px]]
| [[Joe Locke (aghteyr)|Joe Locke]]
| 2003
|
| [[Doolish]]
|}
== Misc ==
{| class='wikitable sortable'
! #
! XXX Add 'Image' in Manx here please! XXX
! XXX change to 'Name' in Manx! XXX
! XXX dob XXX
! XXX date of death XXX
! xxx Place of birth xxx
|-
| style='text-align:right'| 88
|
| ''[[:d:Q15840011|Peta]]''
| 1963
| 1980
| [[Mannin]]
|}
{{Wikidata list end}}
n08vw921oyv5q1jg79mhulh6w8qcjb5
Rolley Bretnee
0
19954
379278
379039
2026-05-18T04:21:44Z
ListeriaBot
10339
Wikidata list updated [V2]
379278
wikitext
text/x-wiki
Shoh '''rolley Bretnee'''; possan kynneeagh as ashoon ta kianglt rish [[Bretyn]].
{{Wikidata list
|sparql=SELECT ?item ?yob ?yod WHERE {
?item wdt:P19 ?pob .
?pob wdt:P131* wd:Q25 .
OPTIONAL { ?item wdt:P569 ?dob . BIND(YEAR(?dob) as ?yob) }
OPTIONAL { ?item wdt:P570 ?dod . BIND(YEAR(?dod) as ?yod) }
. }
|wdq=.
|sort=569
|section=31
|links=
|columns=number:#,label:Ennym,P18,Blein ruggyree,Blein vaaish
}}
== fictional human ==
{| class='wikitable sortable'
! #
! Ennym
! caslys
! Blein ruggyree
! Blein vaaish
|-
| style='text-align:right'| 8200
| ''[[:d:Q1283396|Myrddin Wyllt]]''
|
|
|
|-
| style='text-align:right'| 8686
| ''[[:d:Q4006190|Larry Talbot]]''
| [[Coadan:TheWolfManLobbyCardCropped.png|center|128px]]
|
|
|-
| style='text-align:right'| 9611
| ''[[:d:Q6742717|Malcolm Wynn-Jones]]''
|
|
|
|-
| style='text-align:right'| 12613
| ''[[:d:Q137161507|Iwen Słonina]]''
|
|
|
|}
== folklore character ==
{| class='wikitable sortable'
! #
! Ennym
! caslys
! Blein ruggyree
! Blein vaaish
|-
| style='text-align:right'| 11882
| ''[[:d:Q72699024|Canthrig Bwt]]''
|
|
|
|-
| style='text-align:right'| 11883
| ''[[:d:Q72823385|Beti'r Bont]]''
|
|
|
|-
| style='text-align:right'| 11884
| ''[[:d:Q72824249|Gwen Davies]]''
|
|
|
|-
| style='text-align:right'| 11885
| ''[[:d:Q72826181|Peggy Abercamles]]''
|
|
|
|-
| style='text-align:right'| 11886
| ''[[:d:Q72828361|Sali Minffordd]]''
|
|
|
|}
== human ==
{| class='wikitable sortable'
! #
! Ennym
! caslys
! Blein ruggyree
! Blein vaaish
|-
| style='text-align:right'| 1
| ''[[:d:Q268875|Herbert Bowden, Baron Aylestone]]''
|
|
|
|-
| style='text-align:right'| 2
| ''[[:d:Q272539|Lucy Walter]]''
| [[Coadan:Peter Lely (1618-1680) (attributed to) - Lucy Walter (c.1630–1658) - SCO.FA.Op.188 - Scolton Manor Museum.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3
| ''[[:d:Q272575|Ethel Lina White]]''
|
|
|
|-
| style='text-align:right'| 4
| ''[[:d:Q274339|Gwen John]]''
| [[Coadan:Gwen John - Self-portrait (1900).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5
| ''[[:d:Q278125|Thomas Mathews]]''
| [[Coadan:Admiral Thomas Mathews.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6
| ''[[:d:Q278385|Evan Roberts]]''
| [[Coadan:Evan John Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7
| ''[[:d:Q282493|Edmund Mortimer, 3rd Earl of March]]''
|
|
|
|-
| style='text-align:right'| 8
| ''[[:d:Q285249|Ann Clwyd]]''
| [[Coadan:Official portrait of Ann Clwyd crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9
| ''[[:d:Q287791|Gary Owen]]''
|
|
|
|-
| style='text-align:right'| 10
| ''[[:d:Q289332|George Travers]]''
| [[Coadan:George Twyber Travers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11
| ''[[:d:Q289342|Sylvia Sleigh]]''
|
|
|
|-
| style='text-align:right'| 12
| ''[[:d:Q290367|John Owen]]''
| [[Coadan:Bp John Owen NPG.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 13
| ''[[:d:Q291322|Hester Thrale]]''
| [[Coadan:Hester Thrale (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 14
| ''[[:d:Q310934|Hugh Griffith]]''
| [[Coadan:Hugh griffith publicity photo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 15
| ''[[:d:Q312404|John Charles]]''
| [[Coadan:John Charles, Wales versus Scotland, Ninian Park, 1954.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 16
| ''[[:d:Q312575|Clive Granger]]''
| [[Coadan:Clive Granger by Olaf Storbeck.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 17
| ''[[:d:Q313430|Bartholomew Roberts]]''
| [[Coadan:Bartholomew Roberts.png|center|128px]]
|
|
|-
| style='text-align:right'| 18
| ''[[:d:Q314929|Dick Francis]]''
|
|
|
|-
| style='text-align:right'| 19
| ''[[:d:Q317279|Owain Glyndŵr]]''
| [[Coadan:Owain Glyndŵr at Cardiff City Hall.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 20
| ''[[:d:Q317887|George Herbert]]''
| [[Coadan:George Herbert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 21
| ''[[:d:Q318192|Robert Recorde]]''
| [[Coadan:Robert Recorde (uncropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 22
| ''[[:d:Q321465|Thomas Barker]]''
| [[Coadan:Thomas Barker, Barker of Bath - Self Portrait.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 23
| ''[[:d:Q322303|Kim Simmonds]]''
| [[Coadan:Kim Simmonds 2002 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 24
| ''[[:d:Q323488|Roy Jenkins]]''
| [[Coadan:Roy Jenkins 1977 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 25
| ''[[:d:Q325403|Aneurin Bevan]]''
| [[Coadan:Aneurin Bevan (1943).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 26
| ''[[:d:Q325417|Gareth Williams, Baron Williams of Mostyn]]''
|
|
|
|-
| style='text-align:right'| 27
| ''[[:d:Q325437|Vernon Watkins]]''
|
|
|
|-
| style='text-align:right'| 28
| ''[[:d:Q325881|Hugh Llewellyn Glyn Hughes]]''
| [[Coadan:Hugh Llewellyn Glyn Hughes 1945.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 29
| ''[[:d:Q327410|John Graham Chambers]]''
|
|
|
|-
| style='text-align:right'| 30
| ''[[:d:Q328225|John Hughes]]''
| [[Coadan:1894. Portrait of John Hughes, founder of Hughesovka (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 31
| ''[[:d:Q328421|Ricky Valance]]''
|
|
|
|-
| style='text-align:right'| 32
| ''[[:d:Q329017|Richard Roberts]]''
| [[Coadan:Richard Roberts portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 33
| ''[[:d:Q331697|Saint David]]''
| [[Coadan:Saint Non's Chapel - Fenster 5 St.David top.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 34
| ''[[:d:Q332323|Geoffrey Howe]]''
| [[Coadan:Geoffrey Howe (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 35
| ''[[:d:Q332393|John Prescott]]''
| [[Coadan:John Prescott official portrait (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 36
| ''[[:d:Q332759|Francis Pym]]''
| [[Coadan:Francis Pym (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 37
| ''[[:d:Q332851|Elwyn Jones, Baron Elwyn-Jones]]''
| [[Coadan:Elwyn Jones in Romania (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 38
| ''[[:d:Q333132|Gwynfor Evans]]''
| [[Coadan:Urdd National Eisteddfod, Lampeter 1959 (1467023) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 39
| ''[[:d:Q333141|Rhodri Morgan]]''
| [[Coadan:Cropped image of Rhodri Morgan at The Celebration of the Mace 5840623762 b47ba98d73 o.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 40
| ''[[:d:Q333309|Ivor Richard, Baron Richard]]''
|
|
|
|-
| style='text-align:right'| 41
| ''[[:d:Q333437|Gordon Macdonald, 1st Baron Macdonald of Gwaenysgor]]''
| [[Coadan:Lord Macdonald.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 42
| ''[[:d:Q333616|Peter Thomas, Baron Thomas of Gwydir]]''
| [[Coadan:Peter Thomas MP, Secretary of State for Wales, opening Bryn y Neuadd Hospital, Llanfairfechan (1588098) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 43
| ''[[:d:Q333639|Emlyn Hooson, Baron Hooson]]''
| [[Coadan:Eisteddfod Genedlaethol Cymru 1979, Caernarfon (1555539).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 44
| ''[[:d:Q333652|Cledwyn Hughes, Baron Cledwyn of Penrhos]]''
| [[Coadan:Cledwyn Hughes MP the Anglesey NFU (1532816) Crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 45
| ''[[:d:Q333823|Gwilym Lloyd George, 1st Viscount Tenby]]''
| [[Coadan:Gwilym Lloyd George cropped.png|center|128px]]
|
|
|-
| style='text-align:right'| 46
| ''[[:d:Q333834|Jim Griffiths]]''
|
|
|
|-
| style='text-align:right'| 47
| ''[[:d:Q333841|Dafydd Elis-Thomas]]''
| [[Coadan:Official portrait of Lord Elis-Thomas crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 48
| ''[[:d:Q333852|Cheryl Gillan]]''
| [[Coadan:Official portrait of Rt Hon Dame Cheryl Gillan MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 49
| ''[[:d:Q333863|David Alfred Thomas, 1st Viscount Rhondda]]''
| [[Coadan:Portrait of Mr. D. A. Thomas (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 50
| ''[[:d:Q333876|Leo Abse]]''
|
|
|
|-
| style='text-align:right'| 51
| ''[[:d:Q333882|Richard Livsey, Baron Livsey of Talgarth]]''
| [[Coadan:Richard Livsey.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 52
| ''[[:d:Q333919|George Thomas, 1st Viscount Tonypandy]]''
| [[Coadan:George Thomas (Lord Tonypandy) and his mother (1460789).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 53
| ''[[:d:Q333924|Elystan Morgan, Baron Elystan-Morgan]]''
|
|
|
|-
| style='text-align:right'| 54
| ''[[:d:Q333932|John Morris, Baron Morris of Aberavon]]''
| [[Coadan:Official portrait of Lord Morris of Aberavon crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 55
| ''[[:d:Q73647|Daisy, Princess of Pless]]''
| [[Coadan:Daisy von Pless.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 56
| ''[[:d:Q74338|Charles Warren]]''
| [[Coadan:Charles Warren carbon print portrait by Herbert Rose Barraud of London.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 57
| ''[[:d:Q74563|Erasmus Gower]]''
| [[Coadan:Admiral Sir Erasmus Gower.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 58
| ''[[:d:Q74605|William F. Grimes]]''
|
|
|
|-
| style='text-align:right'| 59
| ''[[:d:Q75658|John Hefin]]''
|
|
|
|-
| style='text-align:right'| 60
| ''[[:d:Q116496|Michael Bogdanov]]''
| [[Coadan:Michael Bogdanov Portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 61
| ''[[:d:Q121734|Sir Thomas Picton]]''
| [[Coadan:Sir Thomas Picton by Sir Martin Archer Shee.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 62
| ''[[:d:Q131581|Henry V of England]]''
| [[Coadan:Henry V Miniature.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 63
| ''[[:d:Q132259|David Crighton]]''
|
|
|
|-
| style='text-align:right'| 64
| ''[[:d:Q151973|Richard Burton]]''
| [[Coadan:Richard Burton - The Robe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 65
| ''[[:d:Q152720|David Griffith]]''
| [[Coadan:David Griffith (Clwydfardd, 1800-94) NLW3364606 retouched (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 66
| ''[[:d:Q160627|Alfred Russel Wallace]]''
| [[Coadan:Alfred-Russel-Wallace-c1895.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 67
| ''[[:d:Q166159|Terry Jones]]''
| [[Coadan:Terry Jones Monty Python O2 Arena (cropped) (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 68
| ''[[:d:Q168235|Tristan Garel-Jones]]''
| [[Coadan:Presidente Abugattás recibió a Parlamentario Británico (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 69
| ''[[:d:Q170596|T. E. Lawrence]]''
| [[Coadan:Te lawrence.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 70
| ''[[:d:Q171421|Henry Morton Stanley]]''
| [[Coadan:Henry Morton Stanley 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 71
| ''[[:d:Q172273|Alan Rees]]''
|
|
|
|-
| style='text-align:right'| 72
| ''[[:d:Q172835|Tom Pryce]]''
| [[Coadan:Tom Pryce 1975 Watkins Glen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 73
| ''[[:d:Q173689|Shane Summers]]''
|
|
|
|-
| style='text-align:right'| 74
| ''[[:d:Q175294|Charles Robert Harington]]''
|
|
|
|-
| style='text-align:right'| 75
| ''[[:d:Q176596|Clive Rowlands]]''
| [[Coadan:Clive Rowlands.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 76
| ''[[:d:Q179374|Robert Owen]]''
| [[Coadan:Robert Owen by William Henry Brooke.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 77
| ''[[:d:Q181774|Ray Milland]]''
| [[Coadan:Ray Milland by A. L. Whitey Schafer, 1947.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 78
| ''[[:d:Q185188|John Conroy]]''
| [[Coadan:Sir John Conroy, 1st Bt by Henry William Pickersgill.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 79
| ''[[:d:Q188344|Geoffrey of Monmouth]]''
| [[Coadan:Cotton Claudius B VII f.224 Merlin Vortigern.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 80
| ''[[:d:Q191023|Dylan Thomas]]''
| [[Coadan:Dylan Thomas icon Blashford 1937.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 81
| ''[[:d:Q194621|Edith Austin]]''
|
|
|
|-
| style='text-align:right'| 82
| ''[[:d:Q202153|Gary Speed]]''
| [[Coadan:Gary Speed 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 83
| ''[[:d:Q215502|Henry Morgan]]''
| [[Coadan:Morgan,Henry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 84
| ''[[:d:Q219700|Andy Whitfield]]''
| [[Coadan:Andy Whitfield in 2010 by Gage Skidmore 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 85
| ''[[:d:Q221870|Ernest Jones]]''
| [[Coadan:Ernest Jones 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 86
| ''[[:d:Q223235|Francis Lewis]]''
| [[Coadan:Francis Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 87
| ''[[:d:Q225604|Henry of Grosmont, 1st Duke of Lancaster]]''
| [[Coadan:Portrait of Henry, Duke of Lancaster - William Bruges's Garter Book (c.1440-1450), f.8 - BL Stowe MS 594 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 88
| ''[[:d:Q234171|Princess Lilian, Duchess of Halland]]''
| [[Coadan:Lilian of Sweden 1940s as Mrs. Craig.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 89
| ''[[:d:Q234746|Sarah Siddons]]''
| [[Coadan:Thomas Gainsborough 015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 90
| ''[[:d:Q251038|Peter George]]''
|
|
|
|-
| style='text-align:right'| 91
| ''[[:d:Q253813|Victor Spinetti]]''
| [[Coadan:6702 Victor Spinetti.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 92
| ''[[:d:Q254781|Margaret Price]]''
|
|
|
|-
| style='text-align:right'| 93
| ''[[:d:Q254828|Rachel Roberts]]''
| [[Coadan:Rachel Roberts.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 94
| ''[[:d:Q257113|Barry Flanagan]]''
| [[Coadan:NeudeBunny.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 95
| ''[[:d:Q258600|Barbara Margaret Trimble]]''
|
|
|
|-
| style='text-align:right'| 96
| ''[[:d:Q259185|Peg Entwistle]]''
| [[Coadan:23Zeruk Green-from sitebuilder 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 97
| ''[[:d:Q259988|John Disley]]''
|
|
|
|-
| style='text-align:right'| 98
| ''[[:d:Q260670|Dion Fortune]]''
| [[Coadan:Violet Mary Firthova (1890 1946).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 99
| ''[[:d:Q262827|Thomas Lewis]]''
| [[Coadan:Thomas Lewis (cardiologist).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 100
| ''[[:d:Q264107|Isaac Daniel Hooson]]''
| [[Coadan:I. D. Hooson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 101
| ''[[:d:Q436648|Richey Edwards]]''
| [[Coadan:Richey Edwards (7227817420).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 102
| ''[[:d:Q436693|Ivor Novello]]''
| [[Coadan:Novello LCCN2014715473.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 103
| ''[[:d:Q441467|Peggy Cummins]]''
| [[Coadan:Peggy Cummins. Promotion 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 104
| ''[[:d:Q442086|David William Davis]]''
| [[Coadan:DWDavis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 105
| ''[[:d:Q444611|Billy Meredith]]''
| [[Coadan:Billy meredith city.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 106
| ''[[:d:Q447945|Alun Hoddinott]]''
|
|
|
|-
| style='text-align:right'| 107
| ''[[:d:Q447951|Alun Owen]]''
|
|
|
|-
| style='text-align:right'| 108
| ''[[:d:Q447948|Alun Morgan]]''
|
|
|
|-
| style='text-align:right'| 109
| ''[[:d:Q448515|David Nash]]''
|
|
|
|-
| style='text-align:right'| 110
| ''[[:d:Q449028|Bernice Rubens]]''
|
|
|
|-
| style='text-align:right'| 111
| ''[[:d:Q449054|Nina Hamnett]]''
| [[Coadan:Nina Hamnett by Roger Fry 1917.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 112
| ''[[:d:Q449114|Laura Ashley]]''
|
|
|
|-
| style='text-align:right'| 113
| ''[[:d:Q449136|Rhoda Broughton]]''
| [[Coadan:Notable women authors of the day - Rhoda Broughton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 114
| ''[[:d:Q449142|Gwladus Ddu]]''
|
|
|
|-
| style='text-align:right'| 115
| ''[[:d:Q449734|Elaine Morgan]]''
| [[Coadan:Elaine Morgan in 1998.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 116
| ''[[:d:Q449884|Isabel Marshal]]''
| [[Coadan:IsabelaMarshall.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 117
| ''[[:d:Q449926|Alwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 118
| ''[[:d:Q450826|Gwenllian ferch Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 119
| ''[[:d:Q452696|Glen Kidston]]''
| [[Coadan:Glen Kidston, vainqueurs des 24 Heures du Mans 1930 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 120
| ''[[:d:Q456519|Henry Somerset, 1st Duke of Beaufort]]''
| [[Coadan:Henry Somerset (1629–1699), 1st Duke of Beaufort, KG, PC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 121
| ''[[:d:Q456905|William Davies Evans]]''
| [[Coadan:Evans W.png|center|128px]]
|
|
|-
| style='text-align:right'| 122
| ''[[:d:Q459155|Edward Youde]]''
|
|
|
|-
| style='text-align:right'| 123
| ''[[:d:Q459764|Jessie Penn-Lewis]]''
| [[Coadan:Penn Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 124
| ''[[:d:Q460654|Duster Bennett]]''
| [[Coadan:Duster Bennett 1970.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 125
| ''[[:d:Q465029|Sandy Griffiths]]''
| [[Coadan:Sandy Griffiths, Estadio, 1951-05-19 (418) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 126
| ''[[:d:Q466171|Harold Lowe]]''
| [[Coadan:Harold Lowe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 127
| ''[[:d:Q466632|Terry Hennessey]]''
|
|
|
|-
| style='text-align:right'| 128
| [[Llywelyn Fawr]]
| [[Coadan:Pen Llywelyn ab Iorwerth, Castell Criccieth.png|center|128px]]
|
|
|-
| style='text-align:right'| 129
| ''[[:d:Q467755|Ruth Ellis]]''
|
|
|
|-
| style='text-align:right'| 130
| ''[[:d:Q468004|Margaret John]]''
|
|
|
|-
| style='text-align:right'| 131
| ''[[:d:Q468060|Helen Watts]]''
|
|
|
|-
| style='text-align:right'| 132
| ''[[:d:Q468195|Malo]]''
| [[Coadan:Saint Malo (engraving).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 133
| ''[[:d:Q469952|Gwenllian of Wales]]''
|
|
|
|-
| style='text-align:right'| 134
| ''[[:d:Q471387|Richard Wilson]]''
| [[Coadan:Mengs - Richard Wilson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 135
| ''[[:d:Q471402|Richard Marquand]]''
|
|
|
|-
| style='text-align:right'| 136
| ''[[:d:Q472382|Sam Edwards]]''
| [[Coadan:SamEdwardsBetter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 137
| ''[[:d:Q472691|Cyril Radcliffe, 1st Viscount Radcliffe]]''
| [[Coadan:Cyril-John-Radcliffe-1st-Viscount-Radcliffe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 138
| ''[[:d:Q490072|Roger Livesey]]''
| [[Coadan:Roger-Livesey-Storm-Over-Patsy-Stage-1937.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 139
| ''[[:d:Q498915|Edgeworth David]]''
| [[Coadan:Sir Tannatt William Edgeworth David (1858-1934).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 140
| ''[[:d:Q503493|John Bevan]]''
|
|
|
|-
| style='text-align:right'| 141
| ''[[:d:Q504761|George Nares]]''
| [[Coadan:George Strong Nares. Photograph. Wellcome V0026912.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 142
| ''[[:d:Q512413|J. J. Williams]]''
| [[Coadan:John James Williams 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 143
| ''[[:d:Q513201|Ken Jones]]''
| [[Coadan:Kenneth Jeffrey Jones 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 144
| ''[[:d:Q514935|John Meurig Thomas]]''
| [[Coadan:Sir-john-meurig-thomas rare-book-room.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 145
| ''[[:d:Q517287|Dafydd ap Gwilym]]''
| [[Coadan:Dafydd ap Gwilym at Cardiff City Hall.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 146
| ''[[:d:Q518175|Doris Hare]]''
|
|
|
|-
| style='text-align:right'| 147
| ''[[:d:Q520341|Hugh Evan-Thomas]]''
| [[Coadan:Rear-admiral Sir Hugh Evan-thomas Kcb Mvo- 1917 Art.IWMART1734.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 148
| ''[[:d:Q525803|David Owen]]''
| [[Coadan:Dewi Wyn o Eifion.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 149
| ''[[:d:Q528311|Owain Cyfeiliog]]''
|
|
|
|-
| style='text-align:right'| 150
| ''[[:d:Q530524|Eva Marshal]]''
| [[Coadan:Eve de Braose.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 151
| ''[[:d:Q530921|Naunton Wayne]]''
|
|
|
|-
| style='text-align:right'| 152
| ''[[:d:Q533591|Hugh of Rhuddlan]]''
|
|
|
|-
| style='text-align:right'| 153
| ''[[:d:Q534049|Saint Petroc]]''
| [[Coadan:Petroc-vit.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 154
| ''[[:d:Q539515|Gwendoline Davies]]''
| [[Coadan:Gwendoline Davies Amgueddfa Genedlaethol Cymru - National Museum of Wales (cropped).png|center|128px]]
|
|
|-
| style='text-align:right'| 155
| ''[[:d:Q539596|Tessie O'Shea]]''
|
|
|
|-
| style='text-align:right'| 156
| ''[[:d:Q540166|Arthur Machen]]''
| [[Coadan:Arthur Machen - ImgID14891187.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 157
| ''[[:d:Q540181|Margaret Davies]]''
|
|
|
|-
| style='text-align:right'| 158
| ''[[:d:Q541502|Glyn Simon]]''
|
|
|
|-
| style='text-align:right'| 159
| ''[[:d:Q541594|John Prichard]]''
| [[Coadan:John Prichard, Welsh architect.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 160
| ''[[:d:Q543665|Anne de Beauchamp, 15th Countess of Warwick]]''
| [[Coadan:AnneWarwick1483.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 161
| ''[[:d:Q544397|Angus Charles Graham]]''
|
|
|
|-
| style='text-align:right'| 162
| ''[[:d:Q544524|Brynle Williams]]''
| [[Coadan:Brynle Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 163
| ''[[:d:Q334627|Wyn Roberts, Baron Roberts of Conwy]]''
|
|
|
|-
| style='text-align:right'| 164
| ''[[:d:Q335550|Henry Bruce, 1st Baron Aberdare]]''
| [[Coadan:1stLordAberdare.png|center|128px]]
|
|
|-
| style='text-align:right'| 165
| ''[[:d:Q335773|Francis Grenfell, 1st Baron Grenfell]]''
| [[Coadan:Francis Wallace Grenfell c.1900 ver 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 166
| ''[[:d:Q336459|Geoffrey Lawrence, 1st Baron Oaksey]]''
| [[Coadan:Lord-justice-lawrence-at-nuremberg-72-867.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 167
| ''[[:d:Q336534|Merlyn Rees]]''
| [[Coadan:Merlyn Rees appearing on "After Dark", 16 July 1988.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 168
| ''[[:d:Q336556|George Jeffreys, 1st Baron Jeffreys]]''
| [[Coadan:George, 1st Baron Jeffreys of Wem, by John Riley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 169
| ''[[:d:Q336837|Alun Gwynne Jones, Baron Chalfont]]''
| [[Coadan:Bundesarchiv B 145 Bild-F021984-0013, Auswärtiges Amt, Staatsminister Großbritannien.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 170
| ''[[:d:Q337590|Alan Williams]]''
|
|
|
|-
| style='text-align:right'| 171
| ''[[:d:Q337822|Vernon Hartshorn]]''
| [[Coadan:Vernon Hartshorn MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 172
| ''[[:d:Q338044|Denzil Davies]]''
|
|
|
|-
| style='text-align:right'| 173
| ''[[:d:Q338294|James Henry Thomas]]''
| [[Coadan:James Henry Thomas (1874-1949) portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 174
| ''[[:d:Q346518|Bernard Warburton-Lee]]''
| [[Coadan:VCBernardArmitageWarburtonWarburton-Lee.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 175
| ''[[:d:Q348948|John Evans]]''
| [[Coadan:Map of Missouri River and Vicinity.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 176
| ''[[:d:Q351606|Walley Barnes]]''
|
|
|
|-
| style='text-align:right'| 177
| ''[[:d:Q351615|Dan Lewis]]''
|
|
|
|-
| style='text-align:right'| 178
| ''[[:d:Q357824|Gerald of Wales]]''
| [[Coadan:St.David's Cathedral - Dreieinigkeitskapelle 5 Giraldus Cambrensis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 179
| ''[[:d:Q357835|Taliesin]]''
| [[Coadan:Finding of Taliesin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 180
| ''[[:d:Q360522|Johnny Owen]]''
| [[Coadan:Johnny Owen Merthyr Boxer by Aberdare Blog.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 181
| [[Owain y Tiudaragh]]
|
|
|
|-
| style='text-align:right'| 182
| ''[[:d:Q363711|John Penry]]''
|
|
|
|-
| style='text-align:right'| 183
| ''[[:d:Q366078|David Edward Hughes]]''
| [[Coadan:David Edward Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 184
| ''[[:d:Q366807|Phil Campbell]]''
| [[Coadan:Motorhead-johngullo-photograph-sofajockey-com.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 185
| ''[[:d:Q367554|John Gwilliam]]''
|
|
|
|-
| style='text-align:right'| 186
| ''[[:d:Q369985|Valentine Baker]]''
| [[Coadan:Valentine Henry Baker.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 187
| ''[[:d:Q371877|William Jones]]''
| [[Coadan:William Jones, the Mathematician.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 188
| ''[[:d:Q377361|Fanny Parkes]]''
|
|
|
|-
| style='text-align:right'| 189
| ''[[:d:Q377872|Ivor Powell]]''
|
|
|
|-
| style='text-align:right'| 190
| ''[[:d:Q380860|Derek Tapscott]]''
|
|
|
|-
| style='text-align:right'| 191
| ''[[:d:Q380912|Neil Aspinall]]''
|
|
|
|-
| style='text-align:right'| 192
| ''[[:d:Q385839|Clive Sullivan]]''
| [[Coadan:Cardiff Bay Rugby Codebreakers (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 193
| ''[[:d:Q386316|David Williams]]''
| [[Coadan:David Williams historian Screenshot 2024-03-05-14-51-53-91 965bbf4d18d205f782c6b8409c5773a4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 194
| ''[[:d:Q387265|Vic Crowe]]''
|
|
|
|-
| style='text-align:right'| 195
| ''[[:d:Q390611|Paul Flynn]]''
|
|
|
|-
| style='text-align:right'| 196
| ''[[:d:Q390825|Hywel Francis]]''
|
|
|
|-
| style='text-align:right'| 197
| ''[[:d:Q393069|Dai Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 198
| ''[[:d:Q394628|Raymond Williams]]''
| [[Coadan:Raymond Williams At Saffron Walden.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 199
| ''[[:d:Q428905|Asser]]''
|
|
|
|-
| style='text-align:right'| 200
| ''[[:d:Q430968|Elwyn Hartley Edwards]]''
|
|
|
|-
| style='text-align:right'| 201
| ''[[:d:Q433736|Martha Hughes Cannon]]''
| [[Coadan:Martha M Hughes Cannon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 202
| ''[[:d:Q436394|Paula Yates]]''
|
|
|
|-
| style='text-align:right'| 203
| ''[[:d:Q545109|Huw Ceredig]]''
|
|
|
|-
| style='text-align:right'| 204
| ''[[:d:Q545123|Thomas Pennant]]''
| [[Coadan:Thomas Pennant.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 205
| ''[[:d:Q545289|Ray Reardon]]''
| [[Coadan:Ray Reardon 1949.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 206
| ''[[:d:Q545363|Henry Vaughan]]''
|
|
|
|-
| style='text-align:right'| 207
| ''[[:d:Q545471|Philip Madoc]]''
|
|
|
|-
| style='text-align:right'| 208
| ''[[:d:Q547154|Richard Meade]]''
| [[Coadan:Richard Meade 1973.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 209
| ''[[:d:Q547716|Iolo Morganwg]]''
| [[Coadan:Portrait of Edward Williams, bardd braint a defod (4672175).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 210
| ''[[:d:Q548671|Johnny Williams]]''
|
|
|
|-
| style='text-align:right'| 211
| ''[[:d:Q551257|Paul Radmilovic]]''
| [[Coadan:Paul Radmilovic 1909.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 212
| ''[[:d:Q556552|E. E. Clive]]''
| [[Coadan:E.E. Clive in The Little Princess.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 213
| ''[[:d:Q561101|Richard Price]]''
| [[Coadan:Dr Richard Price, DD, FRS - Benjamin West.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 214
| ''[[:d:Q561117|William Robert Grove]]''
| [[Coadan:William Robert Grove 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 215
| ''[[:d:Q561168|Roy Clarke]]''
|
|
|
|-
| style='text-align:right'| 216
| ''[[:d:Q561383|Brian Hibbard]]''
|
|
|
|-
| style='text-align:right'| 217
| ''[[:d:Q562540|Augustus John]]''
| [[Coadan:Augustus John by George Charles Beresford (1902) (NPG x13487).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 218
| ''[[:d:Q564059|Annabel Schofield]]''
|
|
|
|-
| style='text-align:right'| 219
| ''[[:d:Q564905|Anthony Barnes Atkinson]]''
| [[Coadan:Tony Atkinson - Festival Economia 2015.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 220
| ''[[:d:Q565725|Anne Rasa]]''
| [[Coadan:Prof. Anne Rasa, Kalahari Trails, Red Dune Route, Northern Cape, South Africa.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 221
| ''[[:d:Q567826|John Edward Jones]]''
| [[Coadan:John Edward Jones, governor of Nevada.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 222
| ''[[:d:Q573284|Anthony George Lyster]]''
| [[Coadan:Anthony George Lyster, dock engineer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 223
| ''[[:d:Q574920|Emrys Hughes]]''
| [[Coadan:Emrys Hughes (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 224
| ''[[:d:Q581084|Robert d'Escourt Atkinson]]''
|
|
|
|-
| style='text-align:right'| 225
| ''[[:d:Q581262|Emlyn Williams]]''
| [[Coadan:Emlyn Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 226
| ''[[:d:Q584317|Mervyn Davies]]''
|
|
|
|-
| style='text-align:right'| 227
| ''[[:d:Q585747|Jack Williams]]''
| [[Coadan:Jack Williams 1905.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 228
| ''[[:d:Q589424|Abraham Matthews]]''
| [[Coadan:Abraham Matthews (ca.1870).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 229
| ''[[:d:Q592561|Dafydd ap Gruffudd]]''
|
|
|
|-
| style='text-align:right'| 230
| ''[[:d:Q595372|Bob John]]''
|
|
|
|-
| style='text-align:right'| 231
| ''[[:d:Q599469|Perce Blackborow]]''
| [[Coadan:Mrschippy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 232
| ''[[:d:Q602404|Teddy Morgan]]''
| [[Coadan:Teddy Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 233
| ''[[:d:Q607265|Stapleton Cotton, 1st Viscount Combermere]]''
| [[Coadan:Stapleton Cotton, 1st Viscount Combermere by Mary Martha Pearson (née Dutton).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 234
| ''[[:d:Q608262|George Vaughan Maddox]]''
|
|
|
|-
| style='text-align:right'| 235
| ''[[:d:Q611441|Edward Wingfield Humphreys]]''
| [[Coadan:Edward Wingfield Humphreys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 236
| ''[[:d:Q612027|Tommy Cooper]]''
| [[Coadan:Tommy Cooper.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 237
| ''[[:d:Q612390|Beuno]]''
| [[Coadan:Saint Beuno Window.png|center|128px]]
|
|
|-
| style='text-align:right'| 238
| ''[[:d:Q613119|Dai Rees]]''
| [[Coadan:Dai Rees in 1936.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 239
| ''[[:d:Q614845|Gary Hocking]]''
| [[Coadan:Gary Hocking (1961).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 240
| ''[[:d:Q614928|Cliff Morgan]]''
|
|
|
|-
| style='text-align:right'| 241
| ''[[:d:Q626445|Llewelyn Davies]]''
|
|
|
|-
| style='text-align:right'| 242
| ''[[:d:Q626472|Ernest Norton]]''
| [[Coadan:Ernest Norton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 243
| ''[[:d:Q627588|Mary Glynne]]''
| [[Coadan:Film actress Mary Glynne (SAYRE 2893).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 244
| ''[[:d:Q628479|Terry Nation]]''
|
|
|
|-
| style='text-align:right'| 245
| ''[[:d:Q632606|Francis Kitto]]''
|
|
|
|-
| style='text-align:right'| 246
| ''[[:d:Q633039|Richard Amerike]]''
|
|
|
|-
| style='text-align:right'| 247
| ''[[:d:Q634238|Ewart Jones]]''
|
|
|
|-
| style='text-align:right'| 248
| ''[[:d:Q634405|Paul Aurelian]]''
| [[Coadan:Saint-Pol-de-Léon - Chapelle Notre-Dame du Kreisker - Sept saints fondateurs bretons - St Pol.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 249
| ''[[:d:Q634827|Caradoc of Llancarfan]]''
|
|
|
|-
| style='text-align:right'| 250
| ''[[:d:Q642090|Charles Somerset, 4th Duke of Beaufort]]''
| [[Coadan:Charles Somerset, 4th Duke of Beaufort.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 251
| ''[[:d:Q642630|Harry Payne]]''
|
|
|
|-
| style='text-align:right'| 252
| ''[[:d:Q646592|Harold Day]]''
| [[Coadan:Harold Day.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 253
| ''[[:d:Q646614|Phil Woosnam]]''
| [[Coadan:Phil Woosnam, NASL 1975 media guide page 4.png|center|128px]]
|
|
|-
| style='text-align:right'| 254
| ''[[:d:Q655506|Mervyn Stockwood]]''
|
|
|
|-
| style='text-align:right'| 255
| ''[[:d:Q657148|Max Kennedy Horton]]''
| [[Coadan:Max Horton 1943 IWM A 20789.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 256
| ''[[:d:Q661947|John Davies]]''
| [[Coadan:Statue of John Davies, Translators' Memorial, St Asaph 12.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 257
| ''[[:d:Q663216|Matthew Henry]]''
| [[Coadan:MatthewHenry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 258
| ''[[:d:Q675493|Henry VII of England]]''
| [[Coadan:Enrique VII de Inglaterra, por un artista anónimo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 259
| ''[[:d:Q676629|Kenneth Griffith]]''
|
|
|
|-
| style='text-align:right'| 260
| ''[[:d:Q680538|Teilo]]''
| [[Coadan:Llandaf, yr eglwys gadeiriol Llandaf Cathedral De Cymru South Wales 96.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 261
| ''[[:d:Q686947|John Frost]]''
| [[Coadan:JohnForstChartist.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 262
| ''[[:d:Q690597|David Jacobs]]''
| [[Coadan:David Jacobs 1913.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 263
| ''[[:d:Q707734|Bernard Fox]]''
| [[Coadan:Bernard Fox Werner Klemperer Hogan's Heroes 1968.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 264
| ''[[:d:Q709999|Arthur Herbert]]''
|
|
|
|-
| style='text-align:right'| 265
| ''[[:d:Q710220|Donald Swann]]''
| [[Coadan:Donald Swann (1966 publicity photo).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 266
| ''[[:d:Q710460|Arthur Loveridge]]''
|
|
|
|-
| style='text-align:right'| 267
| ''[[:d:Q711666|Arthur Symons]]''
| [[Coadan:Arthur Symons.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 268
| ''[[:d:Q713009|Terry Griffiths]]''
| [[Coadan:Terry Griffith 1991 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 269
| ''[[:d:Q713440|Glyn Daniel]]''
| [[Coadan:Glyn Daniel at Tinkinswood.png|center|128px]]
|
|
|-
| style='text-align:right'| 270
| ''[[:d:Q713489|David Kelly]]''
|
|
|
|-
| style='text-align:right'| 271
| ''[[:d:Q714480|Henry Stafford, 2nd Duke of Buckingham]]''
| [[Coadan:Henry Stafford.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 272
| ''[[:d:Q714976|Leon Pownall]]''
|
|
|
|-
| style='text-align:right'| 273
| ''[[:d:Q717007|Cecil Griffiths]]''
| [[Coadan:CecilGriffiths.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 274
| ''[[:d:Q4215697|Tom Carpenter]]''
| [[Coadan:Tom Carpenter headshot.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 275
| ''[[:d:Q4020043|William Henry Gladstone]]''
| [[Coadan:William Henry Gladstone, Vanity Fair, 1882-02-11.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 276
| ''[[:d:Q4020156|William Squire]]''
|
|
|
|-
| style='text-align:right'| 277
| ''[[:d:Q4068173|Charles James Apperley]]''
| [[Coadan:Portrait of Nimrod (4671244).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 278
| ''[[:d:Q4087034|Frederick Birks]]''
| [[Coadan:Frederick Birks VC AWM P02939.023.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 279
| ''[[:d:Q4101408|Tommy Bamford]]''
|
|
|
|-
| style='text-align:right'| 280
| ''[[:d:Q4111556|Greville Wynne]]''
|
|
|
|-
| style='text-align:right'| 281
| ''[[:d:Q4134498|Gwilym Ddu o Arfon]]''
|
|
|
|-
| style='text-align:right'| 282
| ''[[:d:Q4201328|Joseph Murray Ince]]''
|
|
|
|-
| style='text-align:right'| 283
| ''[[:d:Q4212534|Maud Cunnington]]''
|
|
|
|-
| style='text-align:right'| 284
| ''[[:d:Q4220725|Wiliam Cynwal]]''
|
|
|
|-
| style='text-align:right'| 285
| ''[[:d:Q4249810|John Richards]]''
|
|
|
|-
| style='text-align:right'| 286
| ''[[:d:Q4252416|Elizabeth Howard, Duchess of Norfolk]]''
|
|
|
|-
| style='text-align:right'| 287
| ''[[:d:Q4304585|Francis Mostyn]]''
| [[Coadan:The Most Reverend Francis Mostyn (5292133).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 288
| ''[[:d:Q4347281|Jack Powell]]''
| [[Coadan:Newton Heath - Jack Powell - First Incarnation.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 289
| ''[[:d:Q4354797|Aubrey Powell]]''
|
|
|
|-
| style='text-align:right'| 290
| ''[[:d:Q4355198|Irene Steer]]''
| [[Coadan:Belle Moore, Jennie Fletcher, Annie Speirs, Irene Steer 1912.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 291
| ''[[:d:Q4360990|Edmund Davies, Baron Edmund-Davies]]''
| [[Coadan:Lord Edmund Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 292
| ''[[:d:Q4376401|David Price]]''
| [[Coadan:David Powell Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 293
| ''[[:d:Q4470042|Cliff Wilson]]''
|
|
|
|-
| style='text-align:right'| 294
| ''[[:d:Q4476244|Walter Watkins]]''
|
|
|
|-
| style='text-align:right'| 295
| ''[[:d:Q4502691|William John Hewlett]]''
|
|
|
|-
| style='text-align:right'| 296
| ''[[:d:Q4505352|Arthen ap Seisyll]]''
|
|
|
|-
| style='text-align:right'| 297
| ''[[:d:Q4529658|Clive Everton]]''
|
|
|
|-
| style='text-align:right'| 298
| ''[[:d:Q4569597|Griffith John]]''
| [[Coadan:Griffith-John-China.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 299
| ''[[:d:Q4647963|A. J. R. Russell-Wood]]''
|
|
|
|-
| style='text-align:right'| 300
| ''[[:d:Q4666174|Abdulrahim Abby Farah]]''
|
|
|
|-
| style='text-align:right'| 301
| ''[[:d:Q4666550|Abel Davies]]''
| [[Coadan:Abel Christmas Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 302
| ''[[:d:Q4666582|Abel J. Jones]]''
|
|
|
|-
| style='text-align:right'| 303
| ''[[:d:Q4668868|Abraham Garrod Thomas]]''
| [[Coadan:Abraham Garrod Thomas2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 304
| ''[[:d:Q4684982|Adrian Dingle]]''
| [[Coadan:Adrian and Pat Dingle Wedding 1941-12-15.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 305
| ''[[:d:Q4685382|Adrian Street]]''
| [[Coadan:Adrian Street.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 306
| ''[[:d:Q4706576|Alan Edwards]]''
|
|
|
|-
| style='text-align:right'| 307
| ''[[:d:Q4706594|Alan Evans]]''
|
|
|
|-
| style='text-align:right'| 308
| ''[[:d:Q4706644|Alan Fox]]''
|
|
|
|-
| style='text-align:right'| 309
| ''[[:d:Q4706822|Alan Harrington]]''
|
|
|
|-
| style='text-align:right'| 310
| ''[[:d:Q4706994|Alan Jones]]''
|
|
|
|-
| style='text-align:right'| 311
| ''[[:d:Q4707362|Alan Morgan]]''
|
|
|
|-
| style='text-align:right'| 312
| ''[[:d:Q4707517|Alan Petherbridge]]''
|
|
|
|-
| style='text-align:right'| 313
| ''[[:d:Q4707597|Alan Rees]]''
|
|
|
|-
| style='text-align:right'| 314
| ''[[:d:Q4707674|Alan Rowlands]]''
|
|
|
|-
| style='text-align:right'| 315
| ''[[:d:Q4707682|Alan Rudkin]]''
| [[Coadan:AlanRudkin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 316
| ''[[:d:Q4799273|Arthur John Williams]]''
| [[Coadan:Arthur John Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 317
| ''[[:d:Q4799341|Arthur Kelton]]''
|
|
|
|-
| style='text-align:right'| 318
| ''[[:d:Q4799469|Arthur Lea]]''
|
|
|
|-
| style='text-align:right'| 319
| ''[[:d:Q4799486|Arthur Lemon]]''
|
|
|
|-
| style='text-align:right'| 320
| ''[[:d:Q4799506|Arthur Lever]]''
|
|
|
|-
| style='text-align:right'| 321
| ''[[:d:Q4799542|Arthur Lloyd]]''
|
|
|
|-
| style='text-align:right'| 322
| ''[[:d:Q4800100|Arthur Rees]]''
|
|
|
|-
| style='text-align:right'| 323
| ''[[:d:Q4800175|Arthur Rosser]]''
| [[Coadan:Arthur Rosser.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 324
| ''[[:d:Q4800443|Arthur Thomas]]''
|
|
|
|-
| style='text-align:right'| 325
| ''[[:d:Q4800445|Arthur Thomas]]''
|
|
|
|-
| style='text-align:right'| 326
| ''[[:d:Q4800586|Arthur Wade-Evans]]''
|
|
|
|-
| style='text-align:right'| 327
| ''[[:d:Q4800617|Arthur Waters]]''
|
|
|
|-
| style='text-align:right'| 328
| ''[[:d:Q4800631|Arthur Weare]]''
|
|
|
|-
| style='text-align:right'| 329
| ''[[:d:Q4800988|Artie Moore]]''
| [[Coadan:Artie Moore plaque - close up - geograph.org.uk - 7660451.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 330
| ''[[:d:Q4812804|Atarah Ben-Tovim]]''
|
|
|
|-
| style='text-align:right'| 331
| ''[[:d:Q4815657|Atholl Oakeley]]''
|
|
|
|-
| style='text-align:right'| 332
| ''[[:d:Q4819086|Aubrey Casewell]]''
|
|
|
|-
| style='text-align:right'| 333
| ''[[:d:Q4819096|Aubrey Davies]]''
|
|
|
|-
| style='text-align:right'| 334
| ''[[:d:Q4819135|Aubrey Jones]]''
|
|
|
|-
| style='text-align:right'| 335
| ''[[:d:Q4819183|Aubrey Richards]]''
|
|
|
|-
| style='text-align:right'| 336
| ''[[:d:Q4821153|Augustine Baker]]''
|
|
|
|-
| style='text-align:right'| 337
| ''[[:d:Q4821369|Augustus Anson]]''
| [[Coadan:Augustus Anson VC IWM Q 80462.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 338
| ''[[:d:Q4840761|Baden Powell]]''
|
|
|
|-
| style='text-align:right'| 339
| ''[[:d:Q4846432|Frederick Bowley]]''
|
|
|
|-
| style='text-align:right'| 340
| ''[[:d:Q4848345|Bailey Davies]]''
| [[Coadan:David Bailey Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 341
| ''[[:d:Q4850963|Henry Brinley Richards]]''
| [[Coadan:Portrait of Brinley Richards, composer (4670494).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 342
| ''[[:d:Q4858774|Barbara Brooke, Baroness Brooke of Ystradfellte]]''
|
|
|
|-
| style='text-align:right'| 343
| ''[[:d:Q4861635|Barnett Janner]]''
| [[Coadan:Barnett Janner.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 344
| ''[[:d:Q4863526|Barrie Hole]]''
| [[Coadan:Barrie Hole.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 345
| ''[[:d:Q4863573|Barrie Williams]]''
|
|
|
|-
| style='text-align:right'| 346
| ''[[:d:Q4864430|Barry Livesey]]''
|
|
|
|-
| style='text-align:right'| 347
| ''[[:d:Q4864433|Barry Lloyd]]''
|
|
|
|-
| style='text-align:right'| 348
| ''[[:d:Q4864878|Barry Watkins]]''
|
|
|
|-
| style='text-align:right'| 349
| ''[[:d:Q4877002|Beata Brookes]]''
| [[Coadan:Rhyl National Eisteddfod, 1985 (1512958) (Beata Brooks).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 350
| ''[[:d:Q4879027|Beddoe Rees]]''
| [[Coadan:William Beddoe Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 351
| ''[[:d:Q4885297|Ben Beynon]]''
| [[Coadan:Ben Beynon rugby player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 352
| ''[[:d:Q4885324|Ben Bowen Thomas]]''
| [[Coadan:Leadership, Paris - UNESCO - PHOTO0000003811 0001.tiff|center|128px]]
|
|
|-
| style='text-align:right'| 353
| ''[[:d:Q4885512|Ben Davies]]''
| [[Coadan:Ben Davies (1873-1930).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 354
| ''[[:d:Q4885596|Ben Ellis]]''
|
|
|
|-
| style='text-align:right'| 355
| ''[[:d:Q4886365|Ben Roberts]]''
|
|
|
|-
| style='text-align:right'| 356
| ''[[:d:Q4886643|Ben Watts-Jones]]''
|
|
|
|-
| style='text-align:right'| 357
| ''[[:d:Q4886702|Ben Williams]]''
|
|
|
|-
| style='text-align:right'| 358
| ''[[:d:Q4886701|Ben Williams]]''
|
|
|
|-
| style='text-align:right'| 359
| ''[[:d:Q4887284|Benedict James]]''
|
|
|
|-
| style='text-align:right'| 360
| ''[[:d:Q4888246|Benjamin Barker]]''
| [[Coadan:Benjamin Barker II, by Benjamin Barker II.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 361
| ''[[:d:Q4888470|Benjamin Davies]]''
| [[Coadan:Ben Davies as Geoffrey Wilder (Dorothy).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 362
| ''[[:d:Q4888734|Benjamin Gronow]]''
| [[Coadan:Benjamin Gronow.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 363
| ''[[:d:Q4888758|Benjamin Hall]]''
| [[Coadan:Portrait of Benjamin Hall, Esqr. M.P (4670824) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 364
| ''[[:d:Q4889295|Benjamin Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 365
| ''[[:d:Q4889329|Benjamin Vaughan]]''
|
|
|
|-
| style='text-align:right'| 366
| ''[[:d:Q4891798|Beriah Moore]]''
|
|
|
|-
| style='text-align:right'| 367
| ''[[:d:Q4893182|Bernard Gould]]''
|
|
|
|-
| style='text-align:right'| 368
| ''[[:d:Q4893213|Bernard Hedges]]''
|
|
|
|-
| style='text-align:right'| 369
| ''[[:d:Q4893711|Bernard Turnbull]]''
|
|
|
|-
| style='text-align:right'| 370
| ''[[:d:Q4895054|Bert Evans]]''
|
|
|
|-
| style='text-align:right'| 371
| ''[[:d:Q4895128|Bert Hodgkinson]]''
|
|
|
|-
| style='text-align:right'| 372
| ''[[:d:Q4895132|Bert Hollingdale]]''
|
|
|
|-
| style='text-align:right'| 373
| ''[[:d:Q4895151|Bert Jenkins]]''
|
|
|
|-
| style='text-align:right'| 374
| ''[[:d:Q4895159|Bert Jones]]''
|
|
|
|-
| style='text-align:right'| 375
| ''[[:d:Q4895337|Bert Thomas]]''
| [[Coadan:Herbert Samuel ('Bert') Thomas from NPG.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 376
| ''[[:d:Q4895348|Bert Turner]]''
| [[Coadan:Bert Turner, Estadio, 1955-01-22 (610).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 377
| ''[[:d:Q4895662|Bertie Perkins]]''
|
|
|
|-
| style='text-align:right'| 378
| ''[[:d:Q4895661|Bertie Williams]]''
|
|
|
|-
| style='text-align:right'| 379
| ''[[:d:Q4897594|Beth Morris]]''
|
|
|
|-
| style='text-align:right'| 380
| ''[[:d:Q4898236|Betsi Cadwaladr]]''
| [[Coadan:Betsi Cadwaladr.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 381
| ''[[:d:Q4908703|Bill Davies]]''
|
|
|
|-
| style='text-align:right'| 382
| ''[[:d:Q4908899|Bill Emery]]''
|
|
|
|-
| style='text-align:right'| 383
| ''[[:d:Q3404928|Glyndwr Michael]]''
| [[Coadan:Glyndwr Michael.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 384
| ''[[:d:Q3405552|W. J. Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 385
| ''[[:d:Q3405562|Pepsi Tate]]''
| [[Coadan:Pepsitate GoM 2007.png|center|128px]]
|
|
|-
| style='text-align:right'| 386
| ''[[:d:Q3406018|Mary Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 387
| ''[[:d:Q3406160|Emyr Humphreys]]''
|
|
|
|-
| style='text-align:right'| 388
| ''[[:d:Q3406223|Arthur Owens]]''
|
|
|
|-
| style='text-align:right'| 389
| ''[[:d:Q3420485|Ray Cale]]''
|
|
|
|-
| style='text-align:right'| 390
| ''[[:d:Q3423032|Rees Stephens]]''
| [[Coadan:Rees Stephens 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 391
| ''[[:d:Q3423320|Reg Skrimshire]]''
|
|
|
|-
| style='text-align:right'| 392
| ''[[:d:Q3423421|Reggie Gibbs]]''
| [[Coadan:Reggie Gibbs.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 393
| ''[[:d:Q3428841|Rex Willis]]''
| [[Coadan:Rex Willis 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 394
| ''[[:d:Q4798124|Arthur Buckler]]''
|
|
|
|-
| style='text-align:right'| 395
| ''[[:d:Q4798130|Arthur Bulkeley]]''
|
|
|
|-
| style='text-align:right'| 396
| ''[[:d:Q4798338|Arthur Cornish]]''
|
|
|
|-
| style='text-align:right'| 397
| ''[[:d:Q4798355|Arthur Creber]]''
|
|
|
|-
| style='text-align:right'| 398
| ''[[:d:Q4798409|Arthur Daniels]]''
|
|
|
|-
| style='text-align:right'| 399
| ''[[:d:Q4798571|Arthur Edward Hardinge]]''
| [[Coadan:Arthur Edward Hardinge - retouched.png|center|128px]]
|
|
|-
| style='text-align:right'| 400
| ''[[:d:Q4798875|Arthur Granville]]''
|
|
|
|-
| style='text-align:right'| 401
| ''[[:d:Q4798898|Arthur Griffith-Boscawen]]''
| [[Coadan:Portrait of Sir Arthur Griffith Boscawen Wellcome M0003100.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 402
| ''[[:d:Q4798904|Arthur Griffiths]]''
|
|
|
|-
| style='text-align:right'| 403
| ''[[:d:Q4799042|Arthur Henry Williams]]''
|
|
|
|-
| style='text-align:right'| 404
| ''[[:d:Q4799063|Arthur Hickman]]''
|
|
|
|-
| style='text-align:right'| 405
| ''[[:d:Q4799128|Arthur Horner]]''
|
|
|
|-
| style='text-align:right'| 406
| ''[[:d:Q4799230|Arthur James Mason]]''
| [[Coadan:Arthur James Mason by George Henry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 407
| ''[[:d:Q4799229|Arthur James Herbert]]''
| [[Coadan:General Sir Arthur Herbert KCB (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 408
| ''[[:d:Q4799265|Arthur John Ensor]]''
|
|
|
|-
| style='text-align:right'| 409
| ''[[:d:Q1088014|Tewdrig]]''
| [[Coadan:Tewdrig Sant.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 410
| ''[[:d:Q3398347|Lewis Morris]]''
| [[Coadan:Lewis Morris 1701-1765.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 411
| ''[[:d:Q3398381|Richard Hughes Williams]]''
| [[Coadan:Dic Tryfan (Cymeriadau TGJ).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 412
| ''[[:d:Q3398425|D. J. Williams]]''
| [[Coadan:D. J. Williams conversing at a CND rally at Aberystwyth (6773943208) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 413
| ''[[:d:Q3398434|Lewis Valentine]]''
| [[Coadan:Parch Lewis Valentine yn ifanc.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 414
| ''[[:d:Q3398467|John Dyfnallt Owen]]''
| [[Coadan:Dyfnallt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 415
| ''[[:d:Q3398669|Jon Lee]]''
|
|
|
|-
| style='text-align:right'| 416
| ''[[:d:Q3398798|Richard I. Aaron]]''
|
|
|
|-
| style='text-align:right'| 417
| ''[[:d:Q3398931|Euros Bowen]]''
| [[Coadan:National Eisteddfod of Wales 1950, Caerphilly (1449776).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 418
| ''[[:d:Q3398951|Urien Wiliam]]''
| [[Coadan:Eisteddfod Rhuthun, 1973, at Rhuthun (1580971).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 419
| ''[[:d:Q3399070|Llywarch y Nam]]''
|
|
|
|-
| style='text-align:right'| 420
| ''[[:d:Q3399200|April Jones]]''
|
|
|
|-
| style='text-align:right'| 421
| ''[[:d:Q3399253|Christmas Evans]]''
| [[Coadan:William Roos - Christmas Evans (1835).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 422
| ''[[:d:Q3399280|Rhys Gryg]]''
| [[Coadan:Rice Grug.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 423
| ''[[:d:Q3399335|D. Gwenallt Jones]]''
|
|
|
|-
| style='text-align:right'| 424
| ''[[:d:Q3399340|Cybi]]''
| [[Coadan:Eglwys Sant Beuno, St Beuno's Church, Penmorfa, Eifionydd, Gwynedd, Cymru Wales 46.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 425
| ''[[:d:Q3399352|John Parry]]''
| [[Coadan:John Parry (Bardd Alaw) The Welsh Harper (1848) 02.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 426
| ''[[:d:Q3399383|Eliseus Williams]]''
| [[Coadan:Eifion Wyn 01(dg).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 427
| ''[[:d:Q3399427|Ifan ab Owen Edwards]]''
| [[Coadan:Statue of Ifan ab Owen Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 428
| ''[[:d:Q3399552|John Roberts]]''
| [[Coadan:John Roberts (martyr).webp|center|128px]]
|
|
|-
| style='text-align:right'| 429
| ''[[:d:Q3399695|Rowland Williams]]''
| [[Coadan:Portrait of Rowland Williams (4671222) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 430
| ''[[:d:Q3399737|Wilf Wooller]]''
|
|
|
|-
| style='text-align:right'| 431
| ''[[:d:Q3399746|Rhys H. Williams]]''
|
|
|
|-
| style='text-align:right'| 432
| ''[[:d:Q3399836|Thomas Gee]]''
| [[Coadan:Portrait of Thomas Gee (4672372).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 433
| ''[[:d:Q3399847|Alun Lewis]]''
| [[Coadan:Alun Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 434
| ''[[:d:Q3399895|Dafydd ab Edmwnd]]''
|
|
|
|-
| style='text-align:right'| 435
| ''[[:d:Q3400194|William Evans]]''
|
|
|
|-
| style='text-align:right'| 436
| ''[[:d:Q3400203|John Roberts]]''
| [[Coadan:Revd John Roberts (Ieuan Gwyllt) - cropped, retouched.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 437
| ''[[:d:Q3400343|Eluned Phillips]]''
|
|
|
|-
| style='text-align:right'| 438
| ''[[:d:Q3400408|Morgan Llwyd]]''
|
|
|
|-
| style='text-align:right'| 439
| ''[[:d:Q3400435|Keidrych Rhys]]''
|
|
|
|-
| style='text-align:right'| 440
| ''[[:d:Q3400440|Daniel Rowland]]''
| [[Coadan:Portrait of Parch. Daniel Rowland, Llangeitho (4674724).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 441
| ''[[:d:Q3400456|John Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 442
| ''[[:d:Q3400520|Vavasor Powell]]''
|
|
|
|-
| style='text-align:right'| 443
| ''[[:d:Q3400599|Owen Edwards]]''
| [[Coadan:Owen Edwards yn olynu ei dad yn yr Urdd (1493150).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 444
| ''[[:d:Q3400605|Idris Davies]]''
|
|
|
|-
| style='text-align:right'| 445
| ''[[:d:Q3400624|Sir Harry Llewellyn, 3rd Baronet]]''
| [[Coadan:1952OG-Llewellyn-Foxhunter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 446
| ''[[:d:Q3400660|Rhygyfarch]]''
|
|
|
|-
| style='text-align:right'| 447
| ''[[:d:Q3400718|Thomas Stephens]]''
| [[Coadan:Thomas Stephens (1821–1875) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 448
| ''[[:d:Q3400896|Elystan Glodrydd]]''
| [[Coadan:Escutcheon of Elystan Glodrydd.svg|center|128px]]
|
|
|-
| style='text-align:right'| 449
| ''[[:d:Q3401013|Powys Thomas]]''
|
|
|
|-
| style='text-align:right'| 450
| ''[[:d:Q3401048|Lewis Jones]]''
| [[Coadan:Lewis Jones (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 451
| ''[[:d:Q3401261|John Jones]]''
| [[Coadan:John-jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 452
| ''[[:d:Q3401313|Howard Winstone]]''
| [[Coadan:Howard-Winstone-boxer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 453
| ''[[:d:Q3401348|Arwel Hughes]]''
|
|
|
|-
| style='text-align:right'| 454
| ''[[:d:Q3401357|Rhys Gabe]]''
| [[Coadan:Rhys Gabe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 455
| ''[[:d:Q3401572|Robert ap Huw]]''
|
|
|
|-
| style='text-align:right'| 456
| ''[[:d:Q3401615|Islwyn Ffowc Elis]]''
| [[Coadan:Islwyn Ffowc Elis (1451056) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 457
| ''[[:d:Q3401655|Waldo Williams]]''
| [[Coadan:Waldo Williams dim dyddiad gwella contrast crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 458
| ''[[:d:Q3401662|Pennar Davies]]''
|
|
|
|-
| style='text-align:right'| 459
| ''[[:d:Q3401718|John Prise]]''
|
|
|
|-
| style='text-align:right'| 460
| ''[[:d:Q3401736|Emrys ap Iwan]]''
| [[Coadan:Emrys ap Iwan (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 461
| ''[[:d:Q3401751|Irma Chilton]]''
|
|
|
|-
| style='text-align:right'| 462
| ''[[:d:Q3402075|Dic Penderyn]]''
|
|
|
|-
| style='text-align:right'| 463
| ''[[:d:Q3402110|John Jones]]''
| [[Coadan:John Jones (Jac Glanygors).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 464
| ''[[:d:Q3402172|Iorwerth Peate]]''
| [[Coadan:Iorwerth C Peate gyda'i greadigaeth, Amgueddfa Werin Cymru yn Sain Ffagan (1465876).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 465
| ''[[:d:Q3402227|Twm Siôn Cati]]''
| [[Coadan:Twm Sion Cati - geograph.org.uk - 6025919 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 466
| ''[[:d:Q3402307|Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 467
| ''[[:d:Q3402447|Kate Roberts]]''
| [[Coadan:Kate Roberts 1923.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 468
| ''[[:d:Q3402507|Gwynn ap Gwilym]]''
|
|
|
|-
| style='text-align:right'| 469
| ''[[:d:Q3402530|Rhys Davies]]''
| [[Coadan:Rhys Davies 1921.png|center|128px]]
|
|
|-
| style='text-align:right'| 470
| ''[[:d:Q3402590|Charles Ashton]]''
| [[Coadan:Charles Ashton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 471
| ''[[:d:Q3402767|Sir Love Jones-Parry, 1st Baronet]]''
| [[Coadan:Love Jones Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 472
| ''[[:d:Q3402902|Vulcana]]''
| [[Coadan:Vulcana1900.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 473
| ''[[:d:Q3403081|Allan Watkins]]''
|
|
|
|-
| style='text-align:right'| 474
| ''[[:d:Q3403131|Theophilus Evans]]''
|
|
|
|-
| style='text-align:right'| 475
| ''[[:d:Q3403145|William Abraham]]''
| [[Coadan:William Abraham - Mabon.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 476
| ''[[:d:Q3403159|Leslie Thomas]]''
| [[Coadan:Leslie Thomas, John Kirkham, Henry Buckton 50796451733) (Thomas cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 477
| ''[[:d:Q3403496|Ann Griffiths]]''
| [[Coadan:Portrait of Ann Griffiths (1776-1805).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 478
| ''[[:d:Q3403511|Llew Smith]]''
|
|
|
|-
| style='text-align:right'| 479
| ''[[:d:Q3403520|Tom Ellis]]''
|
|
|
|-
| style='text-align:right'| 480
| ''[[:d:Q3403524|Eurig Wyn]]''
|
|
|
|-
| style='text-align:right'| 481
| ''[[:d:Q3403530|Jack Jones]]''
|
|
|
|-
| style='text-align:right'| 482
| ''[[:d:Q3403537|Griffith J. Griffith]]''
| [[Coadan:Griffith Jenkins Griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 483
| ''[[:d:Q3403542|John Dillwyn Llewelyn]]''
| [[Coadan:Johndillwyn thoughful.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 484
| ''[[:d:Q3403561|John Thomas]]''
| [[Coadan:John Thomas (Photographer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 485
| ''[[:d:Q3403756|John Blackwell]]''
| [[Coadan:John Blackwell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 486
| ''[[:d:Q3404038|Elizabeth Phillips Hughes]]''
| [[Coadan:Elizabeth Phillips Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 487
| ''[[:d:Q3404191|James Dickson Innes]]''
| [[Coadan:James Dickson Innes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 488
| ''[[:d:Q3404290|Michael D. Jones]]''
| [[Coadan:Michael Daniel Jones (1822-1898).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 489
| ''[[:d:Q3404390|David Davies, 1st Baron Davies]]''
| [[Coadan:David Davies, Esquire (5294050).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 490
| ''[[:d:Q3404451|George Fisher]]''
|
|
|
|-
| style='text-align:right'| 491
| ''[[:d:Q3404543|Canna]]''
| [[Coadan:Canna (santez) Santes Canna Llangan disc-headed cross slab (cropped).PNG|center|128px]]
|
|
|-
| style='text-align:right'| 492
| ''[[:d:Q3404550|Elis Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 493
| ''[[:d:Q3404614|Dilys Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 494
| ''[[:d:Q3404816|Tudur Aled]]''
|
|
|
|-
| style='text-align:right'| 495
| ''[[:d:Q3404909|Ray Gravell]]''
|
|
|
|-
| style='text-align:right'| 496
| ''[[:d:Q4798110|Arthur Brown]]''
| [[Coadan:Arthur Brown Port Vale footballer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 497
| ''[[:d:Q4707899|Alan Thompson]]''
|
|
|
|-
| style='text-align:right'| 498
| ''[[:d:Q4708093|Alan Wood]]''
|
|
|
|-
| style='text-align:right'| 499
| ''[[:d:Q4708724|Alastair Hetherington]]''
|
|
|
|-
| style='text-align:right'| 500
| ''[[:d:Q4709005|Alban Hill]]''
|
|
|
|-
| style='text-align:right'| 501
| ''[[:d:Q4709696|Albert Barnes]]''
|
|
|
|-
| style='text-align:right'| 502
| ''[[:d:Q4709825|Albert Bruntnell]]''
| [[Coadan:Albert Bruntnell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 503
| ''[[:d:Q4709940|Clifford Williams]]''
|
|
|
|-
| style='text-align:right'| 504
| ''[[:d:Q4710162|Albert Evans-Jones]]''
| [[Coadan:Cynan 1956 Aberdar.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 505
| ''[[:d:Q4710188|Albert Fear]]''
|
|
|
|-
| style='text-align:right'| 506
| ''[[:d:Q4710243|Albert Freethy]]''
|
|
|
|-
| style='text-align:right'| 507
| ''[[:d:Q4710365|Albert Groves]]''
|
|
|
|-
| style='text-align:right'| 508
| ''[[:d:Q4710369|Albert Gubay]]''
|
|
|
|-
| style='text-align:right'| 509
| ''[[:d:Q4710405|Albert Hall]]''
|
|
|
|-
| style='text-align:right'| 510
| ''[[:d:Q4710519|Albert Hybart]]''
|
|
|
|-
| style='text-align:right'| 511
| ''[[:d:Q4710573|Albert Jenkins]]''
| [[Coadan:Albertjenkinsrugby.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 512
| ''[[:d:Q4710747|Albert Love]]''
|
|
|
|-
| style='text-align:right'| 513
| ''[[:d:Q4711030|Albert Powell]]''
|
|
|
|-
| style='text-align:right'| 514
| ''[[:d:Q4711276|Albert Stitfall]]''
|
|
|
|-
| style='text-align:right'| 515
| ''[[:d:Q4711277|Albert Stock]]''
|
|
|
|-
| style='text-align:right'| 516
| ''[[:d:Q4711320|Albert Thomas]]''
|
|
|
|-
| style='text-align:right'| 517
| ''[[:d:Q4711432|Albert Wardell]]''
|
|
|
|-
| style='text-align:right'| 518
| ''[[:d:Q4711486|Albert Willis]]''
|
|
|
|-
| style='text-align:right'| 519
| ''[[:d:Q4711516|Albert Young]]''
|
|
|
|-
| style='text-align:right'| 520
| ''[[:d:Q4714175|Alec James]]''
|
|
|
|-
| style='text-align:right'| 521
| ''[[:d:Q4714181|Alec Jones]]''
|
|
|
|-
| style='text-align:right'| 522
| ''[[:d:Q4714268|Alec Templeton]]''
| [[Coadan:AlecTempleton.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 523
| ''[[:d:Q4714338|Aled Owen]]''
|
|
|
|-
| style='text-align:right'| 524
| ''[[:d:Q4714343|Aled Williams]]''
|
|
|
|-
| style='text-align:right'| 525
| ''[[:d:Q4717057|Alex Givvons]]''
|
|
|
|-
| style='text-align:right'| 526
| ''[[:d:Q4717296|Alex Kersey-Brown]]''
|
|
|
|-
| style='text-align:right'| 527
| ''[[:d:Q4718381|Alexander Bland]]''
|
|
|
|-
| style='text-align:right'| 528
| ''[[:d:Q4719014|Alexander Griffith]]''
|
|
|
|-
| style='text-align:right'| 529
| ''[[:d:Q4719968|Alexander Rolls]]''
|
|
|
|-
| style='text-align:right'| 530
| ''[[:d:Q4721654|Alf Day]]''
|
|
|
|-
| style='text-align:right'| 531
| ''[[:d:Q4721725|Alf Morgans]]''
| [[Coadan:Alf Morgans (1850-1933).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 532
| ''[[:d:Q4721734|Alf Pugh]]''
|
|
|
|-
| style='text-align:right'| 533
| ''[[:d:Q4721754|Alf Sherwood]]''
|
|
|
|-
| style='text-align:right'| 534
| ''[[:d:Q4721752|Alf Shea]]''
|
|
|
|-
| style='text-align:right'| 535
| ''[[:d:Q4722523|Alfred Davies]]''
|
|
|
|-
| style='text-align:right'| 536
| ''[[:d:Q4722542|Alfred Dillon]]''
| [[Coadan:Alfred Dillon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 537
| ''[[:d:Q4722541|Alfred Dickinson]]''
|
|
|
|-
| style='text-align:right'| 538
| ''[[:d:Q4722679|Alfred Francis]]''
|
|
|
|-
| style='text-align:right'| 539
| ''[[:d:Q4722738|Alfred Gooding]]''
|
|
|
|-
| style='text-align:right'| 540
| ''[[:d:Q4722846|Alfred Higgs]]''
|
|
|
|-
| style='text-align:right'| 541
| ''[[:d:Q4722948|Alfred Janes]]''
|
|
|
|-
| style='text-align:right'| 542
| ''[[:d:Q4723069|Alfred Lewis Jones]]''
| [[Coadan:Portrait of Sir Alfred Lewis Jones. Wellcome L0050182.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 543
| ''[[:d:Q4723134|Alfred Mathews]]''
| [[Coadan:Albert Agustus Mathews.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 544
| ''[[:d:Q4723318|Alfred Pullin]]''
|
|
|
|-
| style='text-align:right'| 545
| ''[[:d:Q4723516|Alfred Thomas, 1st Baron Pontypridd]]''
| [[Coadan:1906 Sir Alfred Thomas MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 546
| ''[[:d:Q4724154|Algernon Islay de Courcy Lyons]]''
|
|
|
|-
| style='text-align:right'| 547
| ''[[:d:Q4730737|Allan Jones]]''
|
|
|
|-
| style='text-align:right'| 548
| ''[[:d:Q4730947|Allan Rogers]]''
| [[Coadan:British Labour MEP Allan R. Rogers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 549
| ''[[:d:Q4731649|Allen Forward]]''
|
|
|
|-
| style='text-align:right'| 550
| ''[[:d:Q4731836|Allen Raine]]''
| [[Coadan:Allen Raine (1836–1908).png|center|128px]]
|
|
|-
| style='text-align:right'| 551
| ''[[:d:Q4737495|Alun Evans]]''
| [[Coadan:Alun Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 552
| ''[[:d:Q4737508|Alun Richards]]''
|
|
|
|-
| style='text-align:right'| 553
| ''[[:d:Q4737514|Alun Williams]]''
| [[Coadan:Eisteddfod Genedlaethol Cymru 1979, Caernarfon (1555513).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 554
| ''[[:d:Q4737513|Alun Talfan Davies]]''
|
|
|
|-
| style='text-align:right'| 555
| ''[[:d:Q4737658|Alvan Williams]]''
|
|
|
|-
| style='text-align:right'| 556
| ''[[:d:Q4738519|Alwyn Harris]]''
|
|
|
|-
| style='text-align:right'| 557
| ''[[:d:Q4738533|Alwyn Rice Jones]]''
|
|
|
|-
| style='text-align:right'| 558
| ''[[:d:Q4738536|Alwyn Sheppard Fidler]]''
| [[Coadan:Alwyn Sheppard Fidler in 1952.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 559
| ''[[:d:Q4741760|Ambrose Baker]]''
|
|
|
|-
| style='text-align:right'| 560
| ''[[:d:Q4746125|Amice de Clare]]''
|
|
|
|-
| style='text-align:right'| 561
| ''[[:d:Q4749165|Amy Dillwyn]]''
| [[Coadan:Harry and Amy Dillwyn (children of Lewis Llewelyn Dillwyn) by M. D. 1853 (3947813464).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 562
| ''[[:d:Q4749176|Amy Evans]]''
| [[Coadan:AmyEvans1911.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 563
| ''[[:d:Q4757162|Andrew Gray]]''
|
|
|
|-
| style='text-align:right'| 564
| ''[[:d:Q4757535|Andrew Jones]]''
|
|
|
|-
| style='text-align:right'| 565
| ''[[:d:Q4757840|Andrew MacLachlan]]''
|
|
|
|-
| style='text-align:right'| 566
| ''[[:d:Q4758389|Andrew Richmond]]''
| [[Coadan:Andrew Richmond (Tyree, cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 567
| ''[[:d:Q4758799|Andrew Vicari]]''
| [[Coadan:Andrew Vicari at the Celtic Manor (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 568
| ''[[:d:Q4761606|Aneirin Talfan Davies]]''
|
|
|
|-
| style='text-align:right'| 569
| ''[[:d:Q4761764|Aneurin Rees]]''
|
|
|
|-
| style='text-align:right'| 570
| ''[[:d:Q4761765|Aneurin Williams]]''
|
|
|
|-
| style='text-align:right'| 571
| ''[[:d:Q4763159|Angharad James]]''
|
|
|
|-
| style='text-align:right'| 572
| ''[[:d:Q4763157|Angharad Llwyd]]''
| [[Coadan:Portrait of Angharad Llwyd (4670528) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 573
| ''[[:d:Q4766441|Ann Harriet Hughes]]''
| [[Coadan:Gwyneth Vaughan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 574
| ''[[:d:Q4766531|Ann Maddocks]]''
| [[Coadan:Portrait of Ann Thomas (4674199) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 575
| ''[[:d:Q4767193|Anna Laetitia Waring]]''
|
|
|
|-
| style='text-align:right'| 576
| ''[[:d:Q4767676|Annabel Giles]]''
|
|
|
|-
| style='text-align:right'| 577
| ''[[:d:Q4768405|Anne Griffith-Jones]]''
| [[Coadan:Anne Griffith-Jones01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 578
| ''[[:d:Q4768477|Anne Johnston]]''
| [[Coadan:Anne Johnston, Salute to Seniors Event 2003 (S2311 fl1573 it0019) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 579
| ''[[:d:Q4769415|Annie Powell]]''
|
|
|
|-
| style='text-align:right'| 580
| ''[[:d:Q4772713|Anthony Hicks]]''
|
|
|
|-
| style='text-align:right'| 581
| ''[[:d:Q4772751|Anthony Howells]]''
| [[Coadan:Anthony Howells.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 582
| ''[[:d:Q4772758|Anthony Hulme]]''
|
|
|
|-
| style='text-align:right'| 583
| ''[[:d:Q4772937|Anthony Leonard Harris]]''
|
|
|
|-
| style='text-align:right'| 584
| ''[[:d:Q4772944|Anthony Ling]]''
|
|
|
|-
| style='text-align:right'| 585
| ''[[:d:Q4773224|Anthony Oliver]]''
|
|
|
|-
| style='text-align:right'| 586
| ''[[:d:Q4773726|Anthony Windham Jones]]''
|
|
|
|-
| style='text-align:right'| 587
| ''[[:d:Q4782136|Richard Booth]]''
| [[Coadan:Richard George William Pitt Booth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 588
| ''[[:d:Q4783330|Arabella Elizabeth Roupell]]''
| [[Coadan:Arabella Elizabeth Roupell13.png|center|128px]]
|
|
|-
| style='text-align:right'| 589
| ''[[:d:Q4786506|Archibald Rowlands]]''
|
|
|
|-
| style='text-align:right'| 590
| ''[[:d:Q4790887|Arise Evans]]''
| [[Coadan:Portrait of One Evins a Welch man was lately comited to New Gate for saying hee was Christ (4670716) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 591
| ''[[:d:Q4793810|Frances Hoggan]]''
|
|
|
|-
| style='text-align:right'| 592
| ''[[:d:Q4795190|F. Gwendolen Rees]]''
|
|
|
|-
| style='text-align:right'| 593
| ''[[:d:Q4795256|Arnold Silverstone, Baron Ashdown]]''
|
|
|
|-
| style='text-align:right'| 594
| ''[[:d:Q4797913|Arthur Banks]]''
|
|
|
|-
| style='text-align:right'| 595
| ''[[:d:Q4797944|Arthur Bassett]]''
|
|
|
|-
| style='text-align:right'| 596
| ''[[:d:Q1131742|Iorwerth Jones]]''
|
|
|
|-
| style='text-align:right'| 597
| ''[[:d:Q1148624|Cyril Frank Colebrook]]''
|
|
|
|-
| style='text-align:right'| 598
| ''[[:d:Q717787|Beau Nash]]''
| [[Coadan:Beau-Nash.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 599
| ''[[:d:Q718439|Thomas Coke]]''
| [[Coadan:BpThomasCoke.png|center|128px]]
|
|
|-
| style='text-align:right'| 600
| ''[[:d:Q719792|Walter Devereux, 1st Earl of Essex]]''
| [[Coadan:Walter Devereux, 1st Earl of Essex from NPG.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 601
| ''[[:d:Q725054|Walter Clopton Wingfield]]''
| [[Coadan:Wingfield.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 602
| ''[[:d:Q725104|Charles Kemble]]''
| [[Coadan:Charles Kemble (1775–1854) Henry Wyatt (1794–1840) Royal Shakespeare Theatre.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 603
| ''[[:d:Q725555|J. P. R. Williams]]''
| [[Coadan:J. P. R. Williams 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 604
| ''[[:d:Q725556|Roy Vernon]]''
|
|
|
|-
| style='text-align:right'| 605
| ''[[:d:Q725570|Byron Stevenson]]''
|
|
|
|-
| style='text-align:right'| 606
| ''[[:d:Q725745|R. S. Thomas]]''
| [[Coadan:Reverend R S Thomas being interviewed for 'Y Cymro' (1468612).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 607
| ''[[:d:Q726243|Edward Stafford, 3rd Duke of Buckingham]]''
| [[Coadan:Edward Stafford 3rd Duke of Buckingham 1520.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 608
| ''[[:d:Q727897|Gruffudd ap Llywelyn]]''
| [[Coadan:GruffuddapLlywelyn historieofcambria.png|center|128px]]
|
|
|-
| style='text-align:right'| 609
| ''[[:d:Q730668|Lewys Glyn Cothi]]''
|
|
|
|-
| style='text-align:right'| 610
| ''[[:d:Q730721|Iolo Goch]]''
|
|
|
|-
| style='text-align:right'| 611
| ''[[:d:Q735062|Jimmy Murphy]]''
| [[Coadan:Jimmy Murphy statue.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 612
| ''[[:d:Q737268|Armel]]''
| [[Coadan:Notre-Dame des Fleurs Plouharnel Saint-Armel Droit.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 613
| ''[[:d:Q740632|William Mathias]]''
|
|
|
|-
| style='text-align:right'| 614
| ''[[:d:Q741120|Gareth Jones]]''
| [[Coadan:Gareth-jones (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 615
| ''[[:d:Q741130|Michael Baxandall]]''
|
|
|
|-
| style='text-align:right'| 616
| ''[[:d:Q741437|Alfred Edwards]]''
| [[Coadan:Alfred George Edwards by Solomon J Solomon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 617
| ''[[:d:Q746920|Owen Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 618
| ''[[:d:Q747068|David Rees]]''
|
|
|
|-
| style='text-align:right'| 619
| ''[[:d:Q762958|Harry Secombe]]''
|
|
|
|-
| style='text-align:right'| 620
| ''[[:d:Q763721|Haydn Tanner]]''
|
|
|
|-
| style='text-align:right'| 621
| ''[[:d:Q767764|Mellonius]]''
| [[Coadan:Saint Mellon.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 622
| ''[[:d:Q770633|Padarn]]''
| [[Coadan:Vannes - cathédrale, vitrail des saints Patern et Mériadec Detail Padarn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 623
| ''[[:d:Q772966|Anna Williams]]''
| [[Coadan:Anna Williams by Frances Reynolds.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 624
| ''[[:d:Q775742|Barry John]]''
| [[Coadan:Barry John.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 625
| ''[[:d:Q776095|Joseph Pugsley]]''
|
|
|
|-
| style='text-align:right'| 626
| ''[[:d:Q780557|Sid Bevan]]''
| [[Coadan:Sid Bevan rugby player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 627
| ''[[:d:Q829262|Berwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 628
| ''[[:d:Q837541|Timothy Richard]]''
| [[Coadan:Timothy-Richard-at-34.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 629
| ''[[:d:Q839022|Donald Houston]]''
|
|
|
|-
| style='text-align:right'| 630
| ''[[:d:Q847735|Stuart Burrows]]''
| [[Coadan:Ffefrynnau Cymraeg A Saesneg Stuart Burrows- Stuart Burrows Sings Welsh And English Favourites, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 631
| ''[[:d:Q849718|Brinley Newton-John]]''
|
|
|
|-
| style='text-align:right'| 632
| ''[[:d:Q862305|Bill Meilen]]''
|
|
|
|-
| style='text-align:right'| 633
| ''[[:d:Q869503|Ted Vizard]]''
|
|
|
|-
| style='text-align:right'| 634
| ''[[:d:Q869553|Billy Jennings]]''
|
|
|
|-
| style='text-align:right'| 635
| ''[[:d:Q883404|Bleddyn Williams]]''
| [[Coadan:Bleddyn Williams 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 636
| ''[[:d:Q888051|Brochfael ab Elisedd]]''
|
|
|
|-
| style='text-align:right'| 637
| ''[[:d:Q896857|Leighton Durham Reynolds]]''
|
|
|
|-
| style='text-align:right'| 638
| ''[[:d:Q908116|William Hallowes Miller]]''
| [[Coadan:William Hallowes Miller.png|center|128px]]
|
|
|-
| style='text-align:right'| 639
| ''[[:d:Q910728|Dudley Lloyd-Evans]]''
|
|
|
|-
| style='text-align:right'| 640
| ''[[:d:Q912228|Brian Godding]]''
|
|
|
|-
| style='text-align:right'| 641
| ''[[:d:Q912373|Brian Huggett]]''
|
|
|
|-
| style='text-align:right'| 642
| ''[[:d:Q913050|Brian Savegar]]''
|
|
|
|-
| style='text-align:right'| 643
| ''[[:d:Q919835|Eric Linklater]]''
|
|
|
|-
| style='text-align:right'| 644
| ''[[:d:Q922838|Abraham Rees]]''
| [[Coadan:Abraham Rees by James Lonsdale.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 645
| ''[[:d:Q924074|Angus McBean]]''
|
|
|
|-
| style='text-align:right'| 646
| ''[[:d:Q925761|Eric Griffiths]]''
|
|
|
|-
| style='text-align:right'| 647
| ''[[:d:Q927275|Christopher Jones]]''
| [[Coadan:Christopher Jones with Wales logo - England Olympic polo team 1920 Antwerp (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 648
| ''[[:d:Q928575|Derrick Sullivan]]''
|
|
|
|-
| style='text-align:right'| 649
| ''[[:d:Q929046|Reginald Brooks-King]]''
| [[Coadan:Reginald Brooks-King.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 650
| ''[[:d:Q929691|Rupert Charles Barneby]]''
|
|
|
|-
| style='text-align:right'| 651
| ''[[:d:Q934428|Isaac Roberts]]''
| [[Coadan:Isaac Roberts.png|center|128px]]
|
|
|-
| style='text-align:right'| 652
| ''[[:d:Q935055|Jimmy Michael]]''
| [[Coadan:Jimmy Michael.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 653
| ''[[:d:Q939952|Maud de Braose, Baroness Wigmore]]''
|
|
|
|-
| style='text-align:right'| 654
| ''[[:d:Q942249|Freddie Welsh]]''
| [[Coadan:Fred Welsh LCCN2014697376 (3x4a).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 655
| ''[[:d:Q942385|Jack Kelsey]]''
|
|
|
|-
| style='text-align:right'| 656
| ''[[:d:Q944231|Ivor Allchurch]]''
| [[Coadan:Swansea Town Football Club (20740154461).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 657
| ''[[:d:Q944974|William Parry]]''
| [[Coadan:Histoire des Jésuites II p130 Complot de William Parry par T Fragonard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 658
| ''[[:d:Q950220|Henry Bartle Frere]]''
| [[Coadan:BartleFrere.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 659
| ''[[:d:Q950806|Hugh Hamshaw Thomas]]''
| [[Coadan:Hugh Hamshaw Thomas British Mycological Society 1913 a.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 660
| ''[[:d:Q953078|Roger Mortimer, 4th Earl of March]]''
|
|
|
|-
| style='text-align:right'| 661
| ''[[:d:Q958919|Conway Rees]]''
| [[Coadan:J Conway Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 662
| ''[[:d:Q967593|Jimmy Sangster]]''
|
|
|
|-
| style='text-align:right'| 663
| ''[[:d:Q968698|Thomas Tomkins]]''
|
|
|
|-
| style='text-align:right'| 664
| ''[[:d:Q970171|Peter Carpenter]]''
| [[Coadan:Peter Carpenter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 665
| ''[[:d:Q970206|James Ira Thomas Jones]]''
| [[Coadan:James Ira Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 666
| ''[[:d:Q975285|Percy Mansell Jones]]''
|
|
|
|-
| style='text-align:right'| 667
| ''[[:d:Q977667|Noel Kinsey]]''
|
|
|
|-
| style='text-align:right'| 668
| ''[[:d:Q979098|Craig Thomas]]''
|
|
|
|-
| style='text-align:right'| 669
| ''[[:d:Q979163|Carwyn James]]''
|
|
|
|-
| style='text-align:right'| 670
| ''[[:d:Q979301|John Dawes]]''
| [[Coadan:John Dawes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 671
| ''[[:d:Q979325|Edgar Evans]]''
| [[Coadan:Edgar Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 672
| ''[[:d:Q979372|Henry Jones]]''
| [[Coadan:Sir Henry Jones (1852-1922) NLW3364587.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 673
| ''[[:d:Q981494|John of Wales]]''
|
|
|
|-
| style='text-align:right'| 674
| ''[[:d:Q984430|Ranulf de Blondeville, 6th Earl of Chester]]''
| [[Coadan:Ranulf de Blondeville.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 675
| ''[[:d:Q985138|W. H. Davies]]''
| [[Coadan:William Henry Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 676
| ''[[:d:Q986620|Anthony Llewellyn]]''
| [[Coadan:AnthonyLlewellyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 677
| ''[[:d:Q1025409|Caerwyn Roderick]]''
|
|
|
|-
| style='text-align:right'| 678
| ''[[:d:Q1025420|Caesar Jenkyns]]''
| [[Coadan:CaesarJenkyns.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 679
| ''[[:d:Q1035345|Caradoc Freichfras]]''
|
|
|
|-
| style='text-align:right'| 680
| ''[[:d:Q1063375|Madog ap Llywelyn]]''
|
|
|
|-
| style='text-align:right'| 681
| ''[[:d:Q1063535|Charles Green]]''
| [[Coadan:Bp Charles Green NPG.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 682
| ''[[:d:Q1064759|C. H. Dodd]]''
|
|
|
|-
| style='text-align:right'| 683
| ''[[:d:Q1065207|Tom Richards]]''
| [[Coadan:Thomas Richards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 684
| ''[[:d:Q1088032|Llywelyn Bren]]''
|
|
|
|-
| style='text-align:right'| 685
| ''[[:d:Q1101282|John Gow]]''
|
|
|
|-
| style='text-align:right'| 686
| ''[[:d:Q1102013|C. W. Nicol]]''
| [[Coadan:C.W. Nicol - Headshot in Afan Woodland.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 687
| ''[[:d:Q1103370|Stuart Robbins]]''
|
|
|
|-
| style='text-align:right'| 688
| ''[[:d:Q1103503|Terry Yorath]]''
| [[Coadan:Terry Yorath, Wales Team, 1988.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 689
| ''[[:d:Q1118055|Sydenham Edwards]]''
| [[Coadan:Sydenham Edwards1592.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 690
| ''[[:d:Q1125037|John Elsworthy]]''
|
|
|
|-
| style='text-align:right'| 691
| ''[[:d:Q1129178|Leo Callaghan]]''
|
|
|
|-
| style='text-align:right'| 692
| ''[[:d:Q1130154|Gwilym Jenkins]]''
|
|
|
|-
| style='text-align:right'| 693
| ''[[:d:Q1130431|Grace Williams]]''
|
|
|
|-
| style='text-align:right'| 694
| ''[[:d:Q5536664|George Ballsom]]''
|
|
|
|-
| style='text-align:right'| 695
| ''[[:d:Q5536893|George Bennet]]''
|
|
|
|-
| style='text-align:right'| 696
| ''[[:d:Q5536905|George Benson]]''
|
|
|
|-
| style='text-align:right'| 697
| ''[[:d:Q5537937|George Clark Williams]]''
|
|
|
|-
| style='text-align:right'| 698
| ''[[:d:Q5538123|George Cording]]''
|
|
|
|-
| style='text-align:right'| 699
| ''[[:d:Q5538555|George Dobson]]''
| [[Coadan:George Dobson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 700
| ''[[:d:Q5538902|George Edwards]]''
|
|
|
|-
| style='text-align:right'| 701
| ''[[:d:Q5539049|George Evans]]''
|
|
|
|-
| style='text-align:right'| 702
| ''[[:d:Q5539058|George Ewart Evans]]''
| [[Coadan:George Ewart Evans, Stowmarket.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 703
| ''[[:d:Q5539858|George Grant Francis]]''
|
|
|
|-
| style='text-align:right'| 704
| ''[[:d:Q5539921|George Griffith]]''
| [[Coadan:George Griffith DD, Bp of St Asaph.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 705
| ''[[:d:Q5540341|George Hay Morgan]]''
| [[Coadan:1906 George Hay Morgan MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 706
| ''[[:d:Q5540434|George Henry Challenger]]''
|
|
|
|-
| style='text-align:right'| 707
| ''[[:d:Q5540460|George Henry Hall, 1st Viscount Hall]]''
| [[Coadan:George Henry Hall 1945.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 708
| ''[[:d:Q5540799|George Howells]]''
|
|
|
|-
| style='text-align:right'| 709
| ''[[:d:Q5541549|George Latham]]''
| [[Coadan:George Latham.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 710
| ''[[:d:Q5541703|George Lewis]]''
|
|
|
|-
| style='text-align:right'| 711
| ''[[:d:Q5541706|George Lewis]]''
|
|
|
|-
| style='text-align:right'| 712
| ''[[:d:Q5541768|George Littlewood Hirst]]''
|
|
|
|-
| style='text-align:right'| 713
| ''[[:d:Q5541776|George Lloyd]]''
| [[Coadan:Bishop Lloyd.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 714
| ''[[:d:Q5541799|George Lockwood Morris]]''
| [[Coadan:George Lockwood Morris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 715
| ''[[:d:Q5541851|George Lowrie]]''
|
|
|
|-
| style='text-align:right'| 716
| ''[[:d:Q5542118|George Manning]]''
| [[Coadan:George Manning, 1938.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 717
| ''[[:d:Q5542707|George Murphy]]''
|
|
|
|-
| style='text-align:right'| 718
| ''[[:d:Q5543029|George Oliver]]''
|
|
|
|-
| style='text-align:right'| 719
| ''[[:d:Q5543080|George Owens]]''
|
|
|
|-
| style='text-align:right'| 720
| ''[[:d:Q5543081|George Owen]]''
|
|
|
|-
| style='text-align:right'| 721
| ''[[:d:Q5543567|George Prowse]]''
| [[Coadan:George Prowse VC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 722
| ''[[:d:Q5543769|George Reed]]''
|
|
|
|-
| style='text-align:right'| 723
| ''[[:d:Q5543939|George Robert Wythen Baxter]]''
| [[Coadan:George Robert Wythen Baxter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 724
| ''[[:d:Q5544086|George Rowles]]''
|
|
|
|-
| style='text-align:right'| 725
| ''[[:d:Q5544096|George Ruddick]]''
|
|
|
|-
| style='text-align:right'| 726
| ''[[:d:Q5544476|George Shaw]]''
|
|
|
|-
| style='text-align:right'| 727
| ''[[:d:Q5544970|George Sutton]]''
|
|
|
|-
| style='text-align:right'| 728
| ''[[:d:Q5545143|George Thomas]]''
|
|
|
|-
| style='text-align:right'| 729
| ''[[:d:Q5545141|George Thomas]]''
|
|
|
|-
| style='text-align:right'| 730
| ''[[:d:Q5545144|George Thomas]]''
|
|
|
|-
| style='text-align:right'| 731
| ''[[:d:Q5545309|George Trefgarne, 1st Baron Trefgarne]]''
| [[Coadan:George-Morgan-Trefgarne-n-Garro-Jones-1st-Baron-Trefgarne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 732
| ''[[:d:Q5545378|George Tuxford]]''
|
|
|
|-
| style='text-align:right'| 733
| ''[[:d:Q5546209|George Whitcombe]]''
| [[Coadan:George Whitcombe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 734
| ''[[:d:Q5546252|George Wightwick]]''
|
|
|
|-
| style='text-align:right'| 735
| ''[[:d:Q5546680|George de Cantilupe]]''
|
|
|
|-
| style='text-align:right'| 736
| ''[[:d:Q5548806|Geraint Goodwin]]''
|
|
|
|-
| style='text-align:right'| 737
| ''[[:d:Q5548821|Geraint Morris]]''
|
|
|
|-
| style='text-align:right'| 738
| ''[[:d:Q5549181|Gerald Gladstone]]''
|
|
|
|-
| style='text-align:right'| 739
| ''[[:d:Q5549216|Gerald Hamer]]''
|
|
|
|-
| style='text-align:right'| 740
| ''[[:d:Q5549841|Gerallt Lloyd Owen]]''
| [[Coadan:Chaired bard and crowned bard at Eisteddfod Criccieth, 1975 (1517631).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 741
| ''[[:d:Q5554440|Gethin ap Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 742
| ''[[:d:Q5561126|Gilbert Morgan]]''
|
|
|
|-
| style='text-align:right'| 743
| ''[[:d:Q5563045|Ginger Jones]]''
|
|
|
|-
| style='text-align:right'| 744
| ''[[:d:Q5563602|Giotto Griffiths]]''
|
|
|
|-
| style='text-align:right'| 745
| ''[[:d:Q5564080|Gipsy Daniels]]''
| [[Coadan:(Le boxeur) Gibsy (i.e. Gipsy) Daniels - btv1b531593974.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 746
| ''[[:d:Q5566441|Gladys Morgan]]''
|
|
|
|-
| style='text-align:right'| 747
| ''[[:d:Q5566655|Glanville Williams]]''
|
|
|
|-
| style='text-align:right'| 748
| ''[[:d:Q5567906|Glen Moody]]''
|
|
|
|-
| style='text-align:right'| 749
| ''[[:d:Q5572834|Glyn Davidge]]''
|
|
|
|-
| style='text-align:right'| 750
| ''[[:d:Q5572832|Glyn Berry]]''
|
|
|
|-
| style='text-align:right'| 751
| ''[[:d:Q5572857|Glyn Jones]]''
|
|
|
|-
| style='text-align:right'| 752
| ''[[:d:Q5572883|Glyn Samuel]]''
|
|
|
|-
| style='text-align:right'| 753
| ''[[:d:Q5572880|Glyn Prosser]]''
|
|
|
|-
| style='text-align:right'| 754
| ''[[:d:Q5572885|Glyn Shaw]]''
|
|
|
|-
| style='text-align:right'| 755
| ''[[:d:Q5572889|Glyn Stephens]]''
|
|
|
|-
| style='text-align:right'| 756
| ''[[:d:Q5572900|Glyn Williams]]''
|
|
|
|-
| style='text-align:right'| 757
| ''[[:d:Q5576447|Godfrey Goodman]]''
|
|
|
|-
| style='text-align:right'| 758
| ''[[:d:Q5576507|Godfrey Morgan, 1st Viscount Tredegar]]''
| [[Coadan:The Viscount Tredegar.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 759
| ''[[:d:Q5581158|Gomer Gunn]]''
|
|
|
|-
| style='text-align:right'| 760
| ''[[:d:Q5581165|Gomer Hughes]]''
|
|
|
|-
| style='text-align:right'| 761
| ''[[:d:Q5582130|Roy Booth]]''
|
|
|
|-
| style='text-align:right'| 762
| ''[[:d:Q4908928|Bill Evans]]''
|
|
|
|-
| style='text-align:right'| 763
| ''[[:d:Q4908933|Bill Everson]]''
|
|
|
|-
| style='text-align:right'| 764
| ''[[:d:Q4909319|Bill Harris]]''
|
|
|
|-
| style='text-align:right'| 765
| ''[[:d:Q4909481|Bill Hopkin]]''
|
|
|
|-
| style='text-align:right'| 766
| ''[[:d:Q4910257|Bill Morris]]''
|
|
|
|-
| style='text-align:right'| 767
| ''[[:d:Q4910477|Bill Perry]]''
|
|
|
|-
| style='text-align:right'| 768
| ''[[:d:Q4910545|Bill Price]]''
|
|
|
|-
| style='text-align:right'| 769
| ''[[:d:Q4910664|Bill Roberts]]''
|
|
|
|-
| style='text-align:right'| 770
| ''[[:d:Q4910867|Bill Shortt]]''
|
|
|
|-
| style='text-align:right'| 771
| ''[[:d:Q4911257|Bill Waite]]''
|
|
|
|-
| style='text-align:right'| 772
| ''[[:d:Q4911295|Bill Watkins]]''
|
|
|
|-
| style='text-align:right'| 773
| ''[[:d:Q4912140|Billy Baker]]''
|
|
|
|-
| style='text-align:right'| 774
| ''[[:d:Q4912156|Billy Bassett]]''
|
|
|
|-
| style='text-align:right'| 775
| ''[[:d:Q4912241|Billy Bowen]]''
|
|
|
|-
| style='text-align:right'| 776
| ''[[:d:Q4912428|Billy Davies]]''
| [[Coadan:W.C.Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 777
| ''[[:d:Q4912429|Billy Davies]]''
| [[Coadan:Billy Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 778
| ''[[:d:Q4912481|Billy Douglas]]''
|
|
|
|-
| style='text-align:right'| 779
| ''[[:d:Q4912558|Billy Foulkes]]''
|
|
|
|-
| style='text-align:right'| 780
| ''[[:d:Q4912588|Billy Geen]]''
| [[Coadan:Billy Geen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 781
| ''[[:d:Q4912622|Billy Gore]]''
|
|
|
|-
| style='text-align:right'| 782
| ''[[:d:Q4912742|Billy Hughes]]''
|
|
|
|-
| style='text-align:right'| 783
| ''[[:d:Q4912750|Billy Hullin]]''
|
|
|
|-
| style='text-align:right'| 784
| ''[[:d:Q4912896|Billy Lewis]]''
|
|
|
|-
| style='text-align:right'| 785
| ''[[:d:Q4912914|Billy Lucas]]''
|
|
|
|-
| style='text-align:right'| 786
| ''[[:d:Q4912940|Billy Mainwaring]]''
|
|
|
|-
| style='text-align:right'| 787
| ''[[:d:Q4913055|Billy Moore]]''
|
|
|
|-
| style='text-align:right'| 788
| ''[[:d:Q4913065|Billy Morris]]''
|
|
|
|-
| style='text-align:right'| 789
| ''[[:d:Q4913219|Billy Reed]]''
|
|
|
|-
| style='text-align:right'| 790
| ''[[:d:Q4913221|Billy Rees]]''
|
|
|
|-
| style='text-align:right'| 791
| ''[[:d:Q4913299|Billy Shergold]]''
| [[Coadan:Billy Shergold - Newport County FC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 792
| ''[[:d:Q4913312|Billy Slade]]''
|
|
|
|-
| style='text-align:right'| 793
| ''[[:d:Q4913355|Billy Tabram]]''
|
|
|
|-
| style='text-align:right'| 794
| ''[[:d:Q4913424|Billy Waith]]''
|
|
|
|-
| style='text-align:right'| 795
| ''[[:d:Q4913438|Billy Watkins]]''
|
|
|
|-
| style='text-align:right'| 796
| ''[[:d:Q4913472|Billy Williams]]''
|
|
|
|-
| style='text-align:right'| 797
| ''[[:d:Q4924461|Blake Pelly]]''
| [[Coadan:Blake Pelly in 1941.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 798
| ''[[:d:Q4925840|Bleddyn Jones]]''
|
|
|
|-
| style='text-align:right'| 799
| ''[[:d:Q4932383|Bob Evans]]''
|
|
|
|-
| style='text-align:right'| 800
| ''[[:d:Q4932881|Bob Humphrys]]''
|
|
|
|-
| style='text-align:right'| 801
| ''[[:d:Q4932960|Bob Jones]]''
|
|
|
|-
| style='text-align:right'| 802
| ''[[:d:Q4933800|Bob Roberts]]''
|
|
|
|-
| style='text-align:right'| 803
| ''[[:d:Q4934724|Bobby Atherton]]''
|
|
|
|-
| style='text-align:right'| 804
| ''[[:d:Q4934923|Bobby Delahay]]''
|
|
|
|-
| style='text-align:right'| 805
| ''[[:d:Q4935708|Bobby Weale]]''
|
|
|
|-
| style='text-align:right'| 806
| ''[[:d:Q4935805|Bobi Jones]]''
|
|
|
|-
| style='text-align:right'| 807
| ''[[:d:Q4958557|Brayley Reynolds]]''
|
|
|
|-
| style='text-align:right'| 808
| ''[[:d:Q4960646|Brenda Chamberlain]]''
| [[Coadan:Brendachamberlain.png|center|128px]]
|
|
|-
| style='text-align:right'| 809
| ''[[:d:Q4963078|Brian Bedford]]''
|
|
|
|-
| style='text-align:right'| 810
| ''[[:d:Q4963131|Brian Blears]]''
|
|
|
|-
| style='text-align:right'| 811
| ''[[:d:Q4963253|Brian Cairns]]''
|
|
|
|-
| style='text-align:right'| 812
| ''[[:d:Q4963491|Brian Curvis]]''
|
|
|
|-
| style='text-align:right'| 813
| ''[[:d:Q4963649|Brian Earnshaw]]''
|
|
|
|-
| style='text-align:right'| 814
| ''[[:d:Q4963686|Brian Evans]]''
|
|
|
|-
| style='text-align:right'| 815
| ''[[:d:Q4963687|Brian Evans]]''
|
|
|
|-
| style='text-align:right'| 816
| ''[[:d:Q4964112|Brian Hughes]]''
|
|
|
|-
| style='text-align:right'| 817
| ''[[:d:Q4964204|Brian Jenkins]]''
|
|
|
|-
| style='text-align:right'| 818
| ''[[:d:Q4964251|Brian Jones]]''
|
|
|
|-
| style='text-align:right'| 819
| ''[[:d:Q4964714|Brian McGuinness]]''
|
|
|
|-
| style='text-align:right'| 820
| ''[[:d:Q4964811|Brian Morris, Baron Morris of Castle Morris]]''
|
|
|
|-
| style='text-align:right'| 821
| ''[[:d:Q4964875|Brian Nicholas]]''
|
|
|
|-
| style='text-align:right'| 822
| ''[[:d:Q4965053|Brian Plummer]]''
|
|
|
|-
| style='text-align:right'| 823
| ''[[:d:Q4965080|Brian Purcell]]''
|
|
|
|-
| style='text-align:right'| 824
| ''[[:d:Q4965353|Brian Sparks]]''
|
|
|
|-
| style='text-align:right'| 825
| ''[[:d:Q4965445|Ruth Manning-Sanders]]''
|
|
|
|-
| style='text-align:right'| 826
| ''[[:d:Q4965619|Brian Whitcombe]]''
|
|
|
|-
| style='text-align:right'| 827
| ''[[:d:Q4966702|Bridget Bevan]]''
| [[Coadan:Madam Bevan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 828
| ''[[:d:Q4968450|Brinley Williams]]''
|
|
|
|-
| style='text-align:right'| 829
| ''[[:d:Q4968451|Brinley Richards]]''
|
|
|
|-
| style='text-align:right'| 830
| ''[[:d:Q4977546|Bruce George]]''
| [[Coadan:BruceGeorge 21 Jan 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 831
| ''[[:d:Q4980282|Bryan Orritt]]''
|
|
|
|-
| style='text-align:right'| 832
| ''[[:d:Q4980848|Bryn Day]]''
|
|
|
|-
| style='text-align:right'| 833
| ''[[:d:Q4980857|Bryn Evans]]''
|
|
|
|-
| style='text-align:right'| 834
| ''[[:d:Q4980860|Bryn Goldswain]]''
|
|
|
|-
| style='text-align:right'| 835
| ''[[:d:Q4980875|Bryn Howells]]''
|
|
|
|-
| style='text-align:right'| 836
| ''[[:d:Q4980876|Bryn Jones]]''
|
|
|
|-
| style='text-align:right'| 837
| ''[[:d:Q4980877|Bryn Jones]]''
|
|
|
|-
| style='text-align:right'| 838
| ''[[:d:Q4980880|Bryn Jones]]''
|
|
|
|-
| style='text-align:right'| 839
| ''[[:d:Q4980884|Bryn Lewis]]''
|
|
|
|-
| style='text-align:right'| 840
| ''[[:d:Q4980907|Bryn Merrick]]''
|
|
|
|-
| style='text-align:right'| 841
| ''[[:d:Q4980910|Bryn Phillips]]''
|
|
|
|-
| style='text-align:right'| 842
| ''[[:d:Q4981007|Brynley F. Roberts]]''
|
|
|
|-
| style='text-align:right'| 843
| ''[[:d:Q4983367|Buckley Roderick]]''
| [[Coadan:Lt-Col-W-Buckley-Roderick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 844
| ''[[:d:Q4984762|Buddug Williams]]''
|
|
|
|-
| style='text-align:right'| 845
| ''[[:d:Q5006278|C. Anne Wilson]]''
|
|
|
|-
| style='text-align:right'| 846
| ''[[:d:Q5006423|C. E. Wynn-Williams]]''
| [[Coadan:C E Wynn Williams 1927.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 847
| ''[[:d:Q5006871|C. Stewart Sheppard]]''
|
|
|
|-
| style='text-align:right'| 848
| ''[[:d:Q5016641|Cadwaladr Bryner Jones]]''
|
|
|
|-
| style='text-align:right'| 849
| ''[[:d:Q5016647|Cadwgan of Llandyfai]]''
|
|
|
|-
| style='text-align:right'| 850
| ''[[:d:Q5016650|Cadwgan ap Meurig]]''
|
|
|
|-
| style='text-align:right'| 851
| ''[[:d:Q5024269|Calvert Jones]]''
| [[Coadan:David brewster group.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 852
| ''[[:d:Q5026420|Cameron Wright]]''
|
|
|
|-
| style='text-align:right'| 853
| ''[[:d:Q5032084|Candy Evans]]''
|
|
|
|-
| style='text-align:right'| 854
| ''[[:d:Q5036445|John Treasure Jones]]''
| [[Coadan:Capt J Treasure Jones, Queen Mary 1966.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 855
| ''[[:d:Q5037598|David Caradoc Evans]]''
| [[Coadan:Caradoc Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 856
| ''[[:d:Q5037600|Caradog Roberts]]''
| [[Coadan:Caradog Roberts as Young Man.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 857
| ''[[:d:Q5039201|Carey Morris]]''
| [[Coadan:Carey-Morris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 858
| ''[[:d:Q5040766|Carl Sargeant]]''
| [[Coadan:Carl Sargeant.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 859
| ''[[:d:Q5040764|Carl Sargent]]''
|
|
|
|-
| style='text-align:right'| 860
| ''[[:d:Q3431329|Richard Garnons Williams]]''
| [[Coadan:Richard Garnons Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 861
| ''[[:d:Q3433248|Margaretta Williams]]''
| [[Coadan:Rita Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 862
| ''[[:d:Q3436446|Ray Bennion]]''
|
|
|
|-
| style='text-align:right'| 863
| ''[[:d:Q3437797|Bertrand Turnbull]]''
|
|
|
|-
| style='text-align:right'| 864
| ''[[:d:Q3438077|Robert Lyne]]''
|
|
|
|-
| style='text-align:right'| 865
| ''[[:d:Q3439676|Graham Dadds]]''
|
|
|
|-
| style='text-align:right'| 866
| ''[[:d:Q3439724|William Griffiths]]''
|
|
|
|-
| style='text-align:right'| 867
| ''[[:d:Q3441369|Ron Burgess]]''
|
|
|
|-
| style='text-align:right'| 868
| ''[[:d:Q3445568|Rowe Harding]]''
| [[Coadan:Rowe Harding (football) (joueur de rugby gallois), CNews - btv1b53156639n.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 869
| ''[[:d:Q3445577|Rowland Griffiths]]''
|
|
|
|-
| style='text-align:right'| 870
| ''[[:d:Q3445664|Rowley Thomas]]''
|
|
|
|-
| style='text-align:right'| 871
| ''[[:d:Q3445745|Roy Bish]]''
| [[Coadan:Rugby Roy Bish stadio Flaminio.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 872
| ''[[:d:Q3445756|Roy Burnett]]''
|
|
|
|-
| style='text-align:right'| 873
| ''[[:d:Q3445784|Roy John]]''
| [[Coadan:Ernest Raymond John 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 874
| ''[[:d:Q3445807|Roy Paul]]''
|
|
|
|-
| style='text-align:right'| 875
| ''[[:d:Q3449512|Tom Parry Jones]]''
| [[Coadan:Tom -gt.jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 876
| ''[[:d:Q3462680|Gareth Miles]]''
| [[Coadan:Gareth Miles.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 877
| ''[[:d:Q3463717|Saint Congar]]''
| [[Coadan:Sculpture of St Congar of Congresbury at the Museum of Somerset 4.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 878
| ''[[:d:Q3463964|Magloire]]''
| [[Coadan:San-Maglorio di Dol.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 879
| ''[[:d:Q3464537|Ninnoc]]''
| [[Coadan:Ninnoc.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 880
| ''[[:d:Q3471137|Samuel Griffith]]''
| [[Coadan:Sir Samuel Walker Griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 881
| ''[[:d:Q3478230|Selwyn Biggs]]''
| [[Coadan:Selwyn Biggs.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 882
| ''[[:d:Q3497115|Paul Chapman]]''
| [[Coadan:Paul Chapman playing a gig with Dave Currey and Blake Foster.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 883
| ''[[:d:Q3498839|Steve Aizlewood]]''
|
|
|
|-
| style='text-align:right'| 884
| ''[[:d:Q3499185|Steve Blackmore]]''
|
|
|
|-
| style='text-align:right'| 885
| ''[[:d:Q3499351|Steve Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 886
| ''[[:d:Q3501939|Wilfred Abse]]''
|
|
|
|-
| style='text-align:right'| 887
| ''[[:d:Q3512144|John Plumbe]]''
| [[Coadan:1846 SelfPortrait detail byJohnPlumbe.png|center|128px]]
|
|
|-
| style='text-align:right'| 888
| ''[[:d:Q3518922|Terry Price]]''
| [[Coadan:Terence Graham Price 1966.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 889
| ''[[:d:Q3524912|Thomas Bevan]]''
|
|
|
|-
| style='text-align:right'| 890
| ''[[:d:Q3525120|Thomas Foley]]''
| [[Coadan:Thomas Foley2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 891
| ''[[:d:Q3525188|Sir Thomas Hanmer]]''
| [[Coadan:Sir Thomas Hanmer by Godfrey Kneller.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 892
| ''[[:d:Q3525255|Thomas Pryce-Jenkins]]''
| [[Coadan:Dr T J Pryce-Jenkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 893
| ''[[:d:Q3526537|Gilbert Parkhouse]]''
|
|
|
|-
| style='text-align:right'| 894
| ''[[:d:Q3526728|Hugh Morris]]''
|
|
|
|-
| style='text-align:right'| 895
| ''[[:d:Q3526811|Cyril Walters]]''
| [[Coadan:Cyril Walters 1933.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 896
| ''[[:d:Q3526860|Maurice Turnbull]]''
|
|
|
|-
| style='text-align:right'| 897
| ''[[:d:Q3529077|Timothy Richards Lewis]]''
| [[Coadan:Timothy Richards Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 898
| ''[[:d:Q3530718|Tom Evans]]''
|
|
|
|-
| style='text-align:right'| 899
| ''[[:d:Q3530807|Tom Morgan]]''
|
|
|
|-
| style='text-align:right'| 900
| ''[[:d:Q3530926|Tom Williams]]''
| [[Coadan:Tom Williams WRU.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 901
| ''[[:d:Q3538565|Trevor Brewer]]''
|
|
|
|-
| style='text-align:right'| 902
| ''[[:d:Q3555997|Vernon R. Young]]''
| [[Coadan:Young vr portrait 3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 903
| ''[[:d:Q3561558|Vivian Jenkins]]''
|
|
|
|-
| style='text-align:right'| 904
| ''[[:d:Q3568294|Will Joseph]]''
| [[Coadan:Will Joseph (WRU).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 905
| ''[[:d:Q3568414|Billy Bancroft]]''
| [[Coadan:Billy Bancroft.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 906
| ''[[:d:Q3568451|William Bowen]]''
| [[Coadan:William Bowen (Rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 907
| ''[[:d:Q3568566|William Dowell]]''
| [[Coadan:William Dowell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 908
| ''[[:d:Q3568591|William Edward de Winton]]''
|
|
|
|-
| style='text-align:right'| 909
| ''[[:d:Q3568860|William Ouseley]]''
| [[Coadan:William Ouseley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 910
| ''[[:d:Q3569004|Billy Trew]]''
| [[Coadan:Billy Trew 1905.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 911
| ''[[:d:Q3569085|Willie Llewellyn]]''
| [[Coadan:Willie Llewellyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 912
| ''[[:d:Q3570190|Wyatt Gould]]''
|
|
|
|-
| style='text-align:right'| 913
| ''[[:d:Q3611713|Alice de Lacy, 3rd Countess of Lincoln]]''
|
|
|
|-
| style='text-align:right'| 914
| ''[[:d:Q3624264|Arthur E. Powell]]''
| [[Coadan:Arthur E. Powell.png|center|128px]]
|
|
|-
| style='text-align:right'| 915
| ''[[:d:Q3634630|Barbara Sidney, Countess of Leicester]]''
|
|
|
|-
| style='text-align:right'| 916
| ''[[:d:Q3638260|Benjamin Piercy]]''
| [[Coadan:Benjamin Piercy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 917
| ''[[:d:Q3646166|Brynley Allen]]''
|
|
|
|-
| style='text-align:right'| 918
| ''[[:d:Q3656278|John Petherick]]''
| [[Coadan:John Petherick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 919
| ''[[:d:Q3681914|Ruth Dunning]]''
|
|
|
|-
| style='text-align:right'| 920
| ''[[:d:Q3682628|Colin Baker]]''
|
|
|
|-
| style='text-align:right'| 921
| ''[[:d:Q3687588|Constance Lewis]]''
| [[Coadan:Constance Edwina, Duchess of Westminster.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 922
| ''[[:d:Q3701618|Daniel Gooch]]''
|
|
|
|-
| style='text-align:right'| 923
| ''[[:d:Q3718921|Eddie Butler]]''
| [[Coadan:Eddie Butler and Iqwal.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 924
| ''[[:d:Q3740753|Penelope Mortimer]]''
|
|
|
|-
| style='text-align:right'| 925
| ''[[:d:Q3743241|William Simons]]''
|
|
|
|-
| style='text-align:right'| 926
| ''[[:d:Q3751249|Henry Habberley Price]]''
|
|
|
|-
| style='text-align:right'| 927
| ''[[:d:Q3751833|Frank Hauser]]''
|
|
|
|-
| style='text-align:right'| 928
| ''[[:d:Q3771885|Glan Letheren]]''
|
|
|
|-
| style='text-align:right'| 929
| ''[[:d:Q3773585|Goronwy Owen]]''
|
|
|
|-
| style='text-align:right'| 930
| ''[[:d:Q3774223|Graham Vearncombe]]''
|
|
|
|-
| style='text-align:right'| 931
| ''[[:d:Q3784998|Henry Somerset, 2nd Duke of Beaufort]]''
| [[Coadan:Michael Dahl (1656-1659-1743) - Henry Somerset (1684–1714), 2nd Duke of Beaufort, KG, in Ducal Robes - 1180909 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 932
| ''[[:d:Q3787233|Howard Passadoro]]''
| [[Coadan:Genoa 1893.png|center|128px]]
|
|
|-
| style='text-align:right'| 933
| ''[[:d:Q3791526|Russell Lloyd]]''
|
|
|
|-
| style='text-align:right'| 934
| ''[[:d:Q3806461|James Berkeley, 1st Baron Berkeley]]''
|
|
|
|-
| style='text-align:right'| 935
| ''[[:d:Q3814488|Ken Leek]]''
|
|
|
|-
| style='text-align:right'| 936
| ''[[:d:Q3814797|Kevin Bowring]]''
|
|
|
|-
| style='text-align:right'| 937
| ''[[:d:Q3830019|Leigh Richmond Roose]]''
| [[Coadan:Leigh Richmond Roose.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 938
| ''[[:d:Q3852373|Maud Chaworth]]''
|
|
|
|-
| style='text-align:right'| 939
| ''[[:d:Q3896362|Dafydd Jones]]''
| [[Coadan:Portrait of D. Jones, Dolau Bach (4670288) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 940
| ''[[:d:Q3897540|Pat Glover]]''
|
|
|
|-
| style='text-align:right'| 941
| ''[[:d:Q3951052|Innes Lloyd]]''
|
|
|
|-
| style='text-align:right'| 942
| ''[[:d:Q3960034|Sibyl de Neufmarché]]''
|
|
|
|-
| style='text-align:right'| 943
| ''[[:d:Q3990627|George Baker]]''
|
|
|
|-
| style='text-align:right'| 944
| ''[[:d:Q3992473|Tom Griffiths]]''
|
|
|
|-
| style='text-align:right'| 945
| ''[[:d:Q3998498|Trevor Edwards]]''
|
|
|
|-
| style='text-align:right'| 946
| ''[[:d:Q4010127|Vernon Pugh]]''
|
|
|
|-
| style='text-align:right'| 947
| ''[[:d:Q4020019|William George Trice]]''
|
|
|
|-
| style='text-align:right'| 948
| ''[[:d:Q5726649|Henry Paget, 1st Earl of Uxbridge]]''
| [[Coadan:Henry Paget, 1st Earl of Uxbridge Romney.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 949
| ''[[:d:Q5726737|Henry Parry]]''
| [[Coadan:Portrait of Revd. Henry Parry (4671746) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 950
| ''[[:d:Q5584853|Gordon Bastian]]''
|
|
|
|-
| style='text-align:right'| 951
| ''[[:d:Q5585440|Gordon Lang]]''
|
|
|
|-
| style='text-align:right'| 952
| ''[[:d:Q5585653|Gordon Parry, Baron Parry]]''
|
|
|
|-
| style='text-align:right'| 953
| ''[[:d:Q5585662|Gordon Pembery]]''
|
|
|
|-
| style='text-align:right'| 954
| ''[[:d:Q5585685|Gordon Pritchard]]''
|
|
|
|-
| style='text-align:right'| 955
| ''[[:d:Q5585732|Gordon Richards]]''
|
|
|
|-
| style='text-align:right'| 956
| ''[[:d:Q5586826|Goronwy Roberts, Baron Goronwy-Roberts]]''
| [[Coadan:Goronwy Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 957
| ''[[:d:Q5592776|Graham Dixon-Lewis]]''
|
|
|
|-
| style='text-align:right'| 958
| ''[[:d:Q5593084|Graham Moore]]''
|
|
|
|-
| style='text-align:right'| 959
| ''[[:d:Q5593167|Graham Rathbone]]''
|
|
|
|-
| style='text-align:right'| 960
| ''[[:d:Q5593171|Graham Rees]]''
|
|
|
|-
| style='text-align:right'| 961
| ''[[:d:Q5593294|Graham Sutton]]''
|
|
|
|-
| style='text-align:right'| 962
| ''[[:d:Q5593359|Graham Williams]]''
|
|
|
|-
| style='text-align:right'| 963
| ''[[:d:Q5593419|Grahame Hodgson]]''
|
|
|
|-
| style='text-align:right'| 964
| ''[[:d:Q5596915|Granville James]]''
|
|
|
|-
| style='text-align:right'| 965
| ''[[:d:Q5596946|Granville Smith]]''
|
|
|
|-
| style='text-align:right'| 966
| ''[[:d:Q5607529|Grenville Millington]]''
|
|
|
|-
| style='text-align:right'| 967
| ''[[:d:Q5608863|Griffith Arthur Jones]]''
|
|
|
|-
| style='text-align:right'| 968
| ''[[:d:Q5608882|Griffith Davies]]''
| [[Coadan:Portrait of Griffith Davies, F.R.S. 1788-1855 (4671504) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 969
| ''[[:d:Q5608888|Griffith Hartwell Jones]]''
| [[Coadan:Griffith Hartwell Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 970
| ''[[:d:Q5608910|Griffith Powell]]''
|
|
|
|-
| style='text-align:right'| 971
| ''[[:d:Q5608920|Griffith Rhys Jones]]''
| [[Coadan:GriffithRhysJonesCaradogAberdare.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 972
| ''[[:d:Q5611974|Gruffudd Gryg]]''
|
|
|
|-
| style='text-align:right'| 973
| ''[[:d:Q5611979|Gruffudd ab Owain Glyndŵr]]''
|
|
|
|-
| style='text-align:right'| 974
| ''[[:d:Q5611977|Gruffudd Hiraethog]]''
|
|
|
|-
| style='text-align:right'| 975
| ''[[:d:Q5616240|Ormonde Maddock Dalton]]''
|
|
|
|-
| style='text-align:right'| 976
| ''[[:d:Q5617820|Thomas Witton Davies]]''
| [[Coadan:T Witton Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 977
| ''[[:d:Q5620625|Gus Broughton]]''
|
|
|
|-
| style='text-align:right'| 978
| ''[[:d:Q5620755|Gus Risman]]''
| [[Coadan:Cardiff Bay Rugby Codebreakers (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 979
| ''[[:d:Q5621832|Guto'r Glyn]]''
|
|
|
|-
| style='text-align:right'| 980
| ''[[:d:Q5622295|Guy Griffiths]]''
|
|
|
|-
| style='text-align:right'| 981
| ''[[:d:Q5622477|Guy Morgan]]''
|
|
|
|-
| style='text-align:right'| 982
| ''[[:d:Q5623526|Gwenlyn Parry]]''
| [[Coadan:Gwenlyn Parry at Caernarfon (1537229).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 983
| ''[[:d:Q5623555|Gwerful Mechain]]''
|
|
|
|-
| style='text-align:right'| 984
| ''[[:d:Q5623556|Gwerful Fychan]]''
|
|
|
|-
| style='text-align:right'| 985
| ''[[:d:Q5623621|Gwilym Edwards]]''
| [[Coadan:Parchedig Gwilym Arthur Edwards, MA, DD, Athro yng Ngholeg y Bala (1929–1939), Prifathro yng Ngholeg Diwinyddol Aberystwyth (1939–1949) (gcf10121).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 986
| ''[[:d:Q5623630|Gwilym Puw]]''
|
|
|
|-
| style='text-align:right'| 987
| ''[[:d:Q5623632|Gwilym R. Jones]]''
|
|
|
|-
| style='text-align:right'| 988
| ''[[:d:Q5623638|Gwilym Tilsley]]''
| [[Coadan:National Eisteddfod of Wales 1950, Caerphilly (1449778).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 989
| ''[[:d:Q5623636|Gwilym Tew]]''
|
|
|
|-
| style='text-align:right'| 990
| ''[[:d:Q5623767|Gwyn A. Williams]]''
|
|
|
|-
| style='text-align:right'| 991
| ''[[:d:Q5623765|Gwyn Davies]]''
|
|
|
|-
| style='text-align:right'| 992
| ''[[:d:Q5623771|Gwyn Francis]]''
|
|
|
|-
| style='text-align:right'| 993
| ''[[:d:Q5623777|Gwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 994
| ''[[:d:Q5623786|Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 995
| ''[[:d:Q5623785|Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 996
| ''[[:d:Q5623788|Gwyn Manning]]''
|
|
|
|-
| style='text-align:right'| 997
| ''[[:d:Q5623794|Gwyn Richards]]''
|
|
|
|-
| style='text-align:right'| 998
| ''[[:d:Q5623795|Gwyn Richards]]''
|
|
|
|-
| style='text-align:right'| 999
| ''[[:d:Q5623807|Gwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1000
| ''[[:d:Q5623808|Gwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1001
| ''[[:d:Q5623809|Gwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1002
| ''[[:d:Q5623859|Gwynfor Davies]]''
|
|
|
|-
| style='text-align:right'| 1003
| ''[[:d:Q5623872|Gwynn Evans]]''
|
|
|
|-
| style='text-align:right'| 1004
| ''[[:d:Q5623877|Gwynn Parry Jones]]''
|
|
|
|-
| style='text-align:right'| 1005
| ''[[:d:Q5638528|Hagan Evans]]''
|
|
|
|-
| style='text-align:right'| 1006
| ''[[:d:Q5660102|Harold Bird-Wilson]]''
| [[Coadan:Harold Bird-Wilson by Cuthbert Orde.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1007
| ''[[:d:Q5660294|Harold Charles]]''
|
|
|
|-
| style='text-align:right'| 1008
| ''[[:d:Q5660453|Harold Davies]]''
|
|
|
|-
| style='text-align:right'| 1009
| ''[[:d:Q5660490|Harold Dickinson]]''
|
|
|
|-
| style='text-align:right'| 1010
| ''[[:d:Q5660587|Harold Edwards]]''
|
|
|
|-
| style='text-align:right'| 1011
| ''[[:d:Q5661301|Harold Jones]]''
|
|
|
|-
| style='text-align:right'| 1012
| ''[[:d:Q5661519|Harold Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1013
| ''[[:d:Q5662786|Harold Williams]]''
|
|
|
|-
| style='text-align:right'| 1014
| ''[[:d:Q5667442|Harry Bowcott]]''
| [[Coadan:Harry Bowcott 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1015
| ''[[:d:Q5669252|Harry Greene]]''
|
|
|
|-
| style='text-align:right'| 1016
| ''[[:d:Q5669304|Harry Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1017
| ''[[:d:Q5669329|Harry Guest]]''
| [[Coadan:Harry 3 001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1018
| ''[[:d:Q5669515|Harry Harris]]''
|
|
|
|-
| style='text-align:right'| 1019
| ''[[:d:Q5669781|Harry Holt]]''
|
|
|
|-
| style='text-align:right'| 1020
| ''[[:d:Q5670114|Harry Jones]]''
|
|
|
|-
| style='text-align:right'| 1021
| ''[[:d:Q5670133|Harry Judge]]''
|
|
|
|-
| style='text-align:right'| 1022
| ''[[:d:Q5670978|Harry McDaniel]]''
|
|
|
|-
| style='text-align:right'| 1023
| ''[[:d:Q5671113|Harry Mills]]''
| [[Coadan:Last Ministers UFO 1955.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1024
| ''[[:d:Q5671513|Harry Peacock]]''
|
|
|
|-
| style='text-align:right'| 1025
| ''[[:d:Q5671568|Harry Phillips]]''
|
|
|
|-
| style='text-align:right'| 1026
| ''[[:d:Q5671750|Harry Pugh]]''
|
|
|
|-
| style='text-align:right'| 1027
| ''[[:d:Q5672058|Harry Royal]]''
|
|
|
|-
| style='text-align:right'| 1028
| ''[[:d:Q5686436|Haydn Dackins]]''
|
|
|
|-
| style='text-align:right'| 1029
| ''[[:d:Q5686444|Haydn Davies]]''
|
|
|
|-
| style='text-align:right'| 1030
| ''[[:d:Q5686464|Haydn Llewellyn Davies]]''
| [[Coadan:Algoma Blue - Haydn Llewellyn Davies 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1031
| ''[[:d:Q5686472|Haydn Price]]''
|
|
|
|-
| style='text-align:right'| 1032
| ''[[:d:Q5703235|Helen Sutermeister]]''
|
|
|
|-
| style='text-align:right'| 1033
| ''[[:d:Q5717896|Henry Bayly]]''
|
|
|
|-
| style='text-align:right'| 1034
| ''[[:d:Q5718742|Henry Bruce, 2nd Baron Aberdare]]''
| [[Coadan:Oswald Hornby Joseph Birley (1880–1952) - Henry Campbell Bruce (1851–1929), 2nd Baron Aberdare - NMW A 1705 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1035
| ''[[:d:Q5720203|Henry Davies]]''
|
|
|
|-
| style='text-align:right'| 1036
| ''[[:d:Q5720773|Henry Edwards]]''
| [[Coadan:Henry Thomas Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1037
| ''[[:d:Q5720858|Henry English Fulford]]''
|
|
|
|-
| style='text-align:right'| 1038
| ''[[:d:Q5722774|Henry Haydn Jones]]''
| [[Coadan:Henry-Haydn-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1039
| ''[[:d:Q5722978|Henry Hicks]]''
| [[Coadan:Henry Hicks (geologist).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1040
| ''[[:d:Q5724046|Henry Jones]]''
|
|
|
|-
| style='text-align:right'| 1041
| ''[[:d:Q5724643|Henry Lannigan]]''
|
|
|
|-
| style='text-align:right'| 1042
| ''[[:d:Q5724892|Henry Lewis]]''
|
|
|
|-
| style='text-align:right'| 1043
| ''[[:d:Q5724898|Henry Lewis Guy]]''
|
|
|
|-
| style='text-align:right'| 1044
| ''[[:d:Q5725614|Henry Maurice]]''
|
|
|
|-
| style='text-align:right'| 1045
| ''[[:d:Q5726020|Henry Morgan]]''
|
|
|
|-
| style='text-align:right'| 1046
| ''[[:d:Q5726568|Henry Owen]]''
| [[Coadan:Portrait of Rev. Henry Owen, M.D (4671718) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1047
| ''[[:d:Q5208379|Dafydd Ddu o Hiraddug]]''
| [[Coadan:Eglwys Corpus Christi, Tremeirchion Sir Ddinbych Church Denbighshire, North Wales 35.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1048
| ''[[:d:Q5208382|Dafydd Gorlech]]''
|
|
|
|-
| style='text-align:right'| 1049
| ''[[:d:Q5208385|Dafydd Nanmor]]''
|
|
|
|-
| style='text-align:right'| 1050
| ''[[:d:Q5208983|Dai Davies]]''
|
|
|
|-
| style='text-align:right'| 1051
| ''[[:d:Q5208986|Dai Davies]]''
|
|
|
|-
| style='text-align:right'| 1052
| ''[[:d:Q5208985|Dai Davies]]''
|
|
|
|-
| style='text-align:right'| 1053
| ''[[:d:Q6759465|Margaret Grey, Lady Bonville]]''
|
|
|
|-
| style='text-align:right'| 1054
| ''[[:d:Q1586858|Harry Thomas]]''
|
|
|
|-
| style='text-align:right'| 1055
| ''[[:d:Q5044318|Carol Evans]]''
|
|
|
|-
| style='text-align:right'| 1056
| ''[[:d:Q5044730|Carole Seymour-Jones]]''
|
|
|
|-
| style='text-align:right'| 1057
| ''[[:d:Q5052698|Catherine Gladstone]]''
| [[Coadan:Portrait of Mrs. Gladstone (4670770).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1058
| ''[[:d:Q5055956|Cecil Biggs]]''
|
|
|
|-
| style='text-align:right'| 1059
| ''[[:d:Q5056292|Cecil Raleigh]]''
| [[Coadan:Cecil Raleigh (1856–1914).png|center|128px]]
|
|
|-
| style='text-align:right'| 1060
| ''[[:d:Q5056310|Cecil Smith]]''
|
|
|
|-
| style='text-align:right'| 1061
| ''[[:d:Q5056313|Cecil Spiller]]''
|
|
|
|-
| style='text-align:right'| 1062
| ''[[:d:Q5056381|Cecil Woodham-Smith]]''
|
|
|
|-
| style='text-align:right'| 1063
| ''[[:d:Q5057131|Cedric Morris]]''
| [[Coadan:Cedric Morris, circa 1920.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1064
| ''[[:d:Q5058868|Cennydd Traherne]]''
|
|
|
|-
| style='text-align:right'| 1065
| ''[[:d:Q5064236|Ceri Peach]]''
|
|
|
|-
| style='text-align:right'| 1066
| ''[[:d:Q5064237|Ceri Morgan]]''
|
|
|
|-
| style='text-align:right'| 1067
| ''[[:d:Q5064241|Ceri Richards]]''
|
|
|
|-
| style='text-align:right'| 1068
| ''[[:d:Q5075044|Charles Alexander Harris]]''
| [[Coadan:Sir Charles Alexander Harris (1855-1947).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1069
| ''[[:d:Q5075082|Charles Allen Duval]]''
| [[Coadan:C A Duval.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1070
| ''[[:d:Q5075534|Charles Benjamin Redrup]]''
| [[Coadan:US1047839-Figure 1.png|center|128px]]
|
|
|-
| style='text-align:right'| 1071
| ''[[:d:Q5076594|Charles Curran]]''
|
|
|
|-
| style='text-align:right'| 1072
| ''[[:d:Q5076911|Charles Dolman]]''
|
|
|
|-
| style='text-align:right'| 1073
| ''[[:d:Q5077255|Charles Edward Breese]]''
|
|
|
|-
| style='text-align:right'| 1074
| ''[[:d:Q5077316|Charles Edwards]]''
| [[Coadan:Sir Charles Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1075
| ''[[:d:Q5077323|Charles Edwards]]''
|
|
|
|-
| style='text-align:right'| 1076
| ''[[:d:Q5078021|Charles Gibbs]]''
| [[Coadan:Charles Lionel Gibbs.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1077
| ''[[:d:Q5078428|Charles Gresford Edmondes]]''
| [[Coadan:Charles Gresford Edmondes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1078
| ''[[:d:Q5079440|Charles James Jackson]]''
|
|
|
|-
| style='text-align:right'| 1079
| ''[[:d:Q5079461|Watkin Williams]]''
| [[Coadan:CJWatkinWilliamsAS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1080
| ''[[:d:Q5081077|Charles Morgan]]''
|
|
|
|-
| style='text-align:right'| 1081
| ''[[:d:Q5081341|Octavius Morgan]]''
| [[Coadan:Octavius Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1082
| ''[[:d:Q5081561|Charles Peart]]''
|
|
|
|-
| style='text-align:right'| 1083
| ''[[:d:Q5081757|Charles Prestwood Lucas]]''
|
|
|
|-
| style='text-align:right'| 1084
| ''[[:d:Q5082587|Charles Spencer]]''
|
|
|
|-
| style='text-align:right'| 1085
| ''[[:d:Q5082610|Charles St John David]]''
|
|
|
|-
| style='text-align:right'| 1086
| ''[[:d:Q5082639|Charles Stanton]]''
| [[Coadan:Charles-Butt-Stanton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1087
| ''[[:d:Q5082797|Charles Symmons]]''
| [[Coadan:Reverend Dr Charles Symmons, by William Beechey (1753-1839).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1088
| ''[[:d:Q5083599|Charles Williams]]''
|
|
|
|-
| style='text-align:right'| 1089
| ''[[:d:Q5083602|Charles Williams]]''
|
|
|
|-
| style='text-align:right'| 1090
| ''[[:d:Q5084581|Charli Britton]]''
|
|
|
|-
| style='text-align:right'| 1091
| ''[[:d:Q5085086|Charlie Jones]]''
|
|
|
|-
| style='text-align:right'| 1092
| ''[[:d:Q5085196|Charlie Martin]]''
|
|
|
|-
| style='text-align:right'| 1093
| ''[[:d:Q5085359|Charlie Parry]]''
| [[Coadan:Parry 180395.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1094
| ''[[:d:Q5085395|Charlie Phillips]]''
|
|
|
|-
| style='text-align:right'| 1095
| ''[[:d:Q5085414|Charlie Pugh]]''
|
|
|
|-
| style='text-align:right'| 1096
| ''[[:d:Q5085603|Charlie Thomas]]''
|
|
|
|-
| style='text-align:right'| 1097
| ''[[:d:Q5085718|Charlie Winslade]]''
|
|
|
|-
| style='text-align:right'| 1098
| ''[[:d:Q5085957|Charlotte Godley]]''
| [[Coadan:Charlotte Godley sketch, 1877.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1099
| ''[[:d:Q5086967|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 1100
| ''[[:d:Q5096125|Chick Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1101
| ''[[:d:Q5105819|Chris Barnard]]''
|
|
|
|-
| style='text-align:right'| 1102
| ''[[:d:Q5107359|Chris Marustik]]''
|
|
|
|-
| style='text-align:right'| 1103
| ''[[:d:Q5107567|Chris Needs]]''
|
|
|
|-
| style='text-align:right'| 1104
| ''[[:d:Q5111419|Christmas Samuel]]''
|
|
|
|-
| style='text-align:right'| 1105
| ''[[:d:Q5111917|Christopher Bassett]]''
|
|
|
|-
| style='text-align:right'| 1106
| ''[[:d:Q5112292|Christopher Evans]]''
|
|
|
|-
| style='text-align:right'| 1107
| ''[[:d:Q5112621|Christopher J. Yorath]]''
| [[Coadan:Christopher J. Yorath.png|center|128px]]
|
|
|-
| style='text-align:right'| 1108
| ''[[:d:Q5113133|Christopher Rice Mansel Talbot]]''
| [[Coadan:Christopher Rice Mansel Talbot by Alfred Count D'Orsay in 1834.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1109
| ''[[:d:Q5113432|Christopher Williams]]''
| [[Coadan:Self Portrait (gcf02743).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1110
| ''[[:d:Q5126032|Clara Novello Davies]]''
| [[Coadan:ClaraNovelloDavies.tiff|center|128px]]
|
|
|-
| style='text-align:right'| 1111
| ''[[:d:Q5129068|Claude Warner]]''
|
|
|
|-
| style='text-align:right'| 1112
| ''[[:d:Q5131184|Clem Lewis]]''
|
|
|
|-
| style='text-align:right'| 1113
| ''[[:d:Q5131308|Clement Davies]]''
| [[Coadan:Clement Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1114
| ''[[:d:Q5131317|Clement Edwards]]''
| [[Coadan:Clem-Edwards-AS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1115
| ''[[:d:Q5132540|Cliff Birch]]''
|
|
|
|-
| style='text-align:right'| 1116
| ''[[:d:Q5132577|Cliff Curvis]]''
|
|
|
|-
| style='text-align:right'| 1117
| ''[[:d:Q5132650|Cliff Jones]]''
|
|
|
|-
| style='text-align:right'| 1118
| ''[[:d:Q5132743|Cliff Richards]]''
|
|
|
|-
| style='text-align:right'| 1119
| ''[[:d:Q5132760|Cliff Sear]]''
|
|
|
|-
| style='text-align:right'| 1120
| ''[[:d:Q5132796|Cliff Williams]]''
|
|
|
|-
| style='text-align:right'| 1121
| ''[[:d:Q5132853|Clifford Allen, 1st Baron Allen of Hurtwood]]''
|
|
|
|-
| style='text-align:right'| 1122
| ''[[:d:Q5132938|Clifford Evans]]''
| [[Coadan:Clifford Evans.png|center|128px]]
|
|
|-
| style='text-align:right'| 1123
| ''[[:d:Q5132939|Clifford Evans]]''
|
|
|
|-
| style='text-align:right'| 1124
| ''[[:d:Q5133076|Clifford Williams]]''
|
|
|
|-
| style='text-align:right'| 1125
| ''[[:d:Q5133077|Clifford Williams]]''
|
|
|
|-
| style='text-align:right'| 1126
| ''[[:d:Q5133081|Clifford Wright]]''
|
|
|
|-
| style='text-align:right'| 1127
| ''[[:d:Q5134124|Clinton Greyn]]''
|
|
|
|-
| style='text-align:right'| 1128
| ''[[:d:Q5134498|Clive Best]]''
|
|
|
|-
| style='text-align:right'| 1129
| ''[[:d:Q5134585|Clive Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1130
| ''[[:d:Q5134608|Clive Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1131
| ''[[:d:Q5134670|Clive Shell]]''
|
|
|
|-
| style='text-align:right'| 1132
| ''[[:d:Q5145044|Colin Dixon]]''
|
|
|
|-
| style='text-align:right'| 1133
| ''[[:d:Q5145075|Colin Evans]]''
|
|
|
|-
| style='text-align:right'| 1134
| ''[[:d:Q5145089|Colin Fletcher]]''
|
|
|
|-
| style='text-align:right'| 1135
| ''[[:d:Q5145124|Colin Gale]]''
|
|
|
|-
| style='text-align:right'| 1136
| ''[[:d:Q5145170|Colin H. Williams]]''
|
|
|
|-
| style='text-align:right'| 1137
| ''[[:d:Q5145200|Colin Hillman]]''
|
|
|
|-
| style='text-align:right'| 1138
| ''[[:d:Q5145355|Colin McCormack]]''
|
|
|
|-
| style='text-align:right'| 1139
| ''[[:d:Q5145479|Colin Phipps]]''
|
|
|
|-
| style='text-align:right'| 1140
| ''[[:d:Q5157987|Con Murphy]]''
|
|
|
|-
| style='text-align:right'| 1141
| ''[[:d:Q5167027|Cooke Davies]]''
|
|
|
|-
| style='text-align:right'| 1142
| ''[[:d:Q5196810|Cuthbert Taylor]]''
|
|
|
|-
| style='text-align:right'| 1143
| ''[[:d:Q5200745|Cyril Gwynn]]''
|
|
|
|-
| style='text-align:right'| 1144
| ''[[:d:Q5200787|Cyril Lakin]]''
| [[Coadan:Cyril Lakin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1145
| ''[[:d:Q5200865|Cyril Rowland]]''
|
|
|
|-
| style='text-align:right'| 1146
| ''[[:d:Q5200900|Cyril Trailor]]''
|
|
|
|-
| style='text-align:right'| 1147
| ''[[:d:Q5208339|Daffyd Dyvyr]]''
|
|
|
|-
| style='text-align:right'| 1148
| ''[[:d:Q6662097|Llewelyn David Bevan]]''
| [[Coadan:Llewelyn David Bevan.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 1149
| ''[[:d:Q6662102|Llewelyn Davies]]''
|
|
|
|-
| style='text-align:right'| 1150
| ''[[:d:Q6662110|Llewelyn Kenrick]]''
| [[Coadan:Llewelyn kenrick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1151
| ''[[:d:Q6662111|Llewelyn Traherne]]''
|
|
|
|-
| style='text-align:right'| 1152
| ''[[:d:Q6662119|Llewelyn Wyn Griffith]]''
|
|
|
|-
| style='text-align:right'| 1153
| ''[[:d:Q6662381|Lloyd Davies]]''
|
|
|
|-
| style='text-align:right'| 1154
| ''[[:d:Q6662529|Lloyd Jones]]''
| [[Coadan:Lloyd Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1155
| ''[[:d:Q6662537|Lloyd Kenyon, 1st Baron Kenyon]]''
| [[Coadan:Lloyd Kenyon, 1st Baron Kenyon by William Davison.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1156
| ''[[:d:Q6662819|Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 1157
| ''[[:d:Q6662817|Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 1158
| ''[[:d:Q6662995|Llywelyn Siôn]]''
|
|
|
|-
| style='text-align:right'| 1159
| ''[[:d:Q6674884|Lonza Bowdler]]''
|
|
|
|-
| style='text-align:right'| 1160
| ''[[:d:Q6687073|Louis Dyke]]''
| [[Coadan:Louis Dyke.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1161
| ''[[:d:Q6688546|Louisa Nott-Bower]]''
|
|
|
|-
| style='text-align:right'| 1162
| ''[[:d:Q6708323|Lyn Harding]]''
| [[Coadan:Mr. Lyn Harding LCCN2014692774 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1163
| ''[[:d:Q6708330|Lyn James]]''
|
|
|
|-
| style='text-align:right'| 1164
| ''[[:d:Q6708817|Lynette Davies]]''
|
|
|
|-
| style='text-align:right'| 1165
| ''[[:d:Q6709269|Lynn Ungoed-Thomas]]''
|
|
|
|-
| style='text-align:right'| 1166
| ''[[:d:Q6709334|Lynne Carol]]''
|
|
|
|-
| style='text-align:right'| 1167
| ''[[:d:Q6728347|Madoline Thomas]]''
|
|
|
|-
| style='text-align:right'| 1168
| ''[[:d:Q6735137|Mai Jones]]''
|
|
|
|-
| style='text-align:right'| 1169
| ''[[:d:Q6740608|Mal Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1170
| ''[[:d:Q6742252|Malcolm Collins]]''
|
|
|
|-
| style='text-align:right'| 1171
| ''[[:d:Q6742267|Malcolm Davies]]''
|
|
|
|-
| style='text-align:right'| 1172
| ''[[:d:Q6742531|Malcolm Nash]]''
|
|
|
|-
| style='text-align:right'| 1173
| ''[[:d:Q6742570|Malcolm Price]]''
|
|
|
|-
| style='text-align:right'| 1174
| ''[[:d:Q6742678|Malcolm Uphill]]''
|
|
|
|-
| style='text-align:right'| 1175
| ''[[:d:Q6742681|Malcolm Vaughan]]''
|
|
|
|-
| style='text-align:right'| 1176
| ''[[:d:Q6742895|Maldwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 1177
| ''[[:d:Q6742896|Maldwyn James]]''
|
|
|
|-
| style='text-align:right'| 1178
| ''[[:d:Q6746179|Stephen Halden Beattie]]''
| [[Coadan:Stephen Halden Beattie.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1179
| ''[[:d:Q6751586|Mansel Thomas]]''
|
|
|
|-
| style='text-align:right'| 1180
| ''[[:d:Q6759490|Margaret Hanmer]]''
|
|
|
|-
| style='text-align:right'| 1181
| ''[[:d:Q6759606|Margaret Lacey]]''
|
|
|
|-
| style='text-align:right'| 1182
| ''[[:d:Q6759645|Margaret Lindsay Williams]]''
| [[Coadan:Margaret Lindsay Williams & painting of Warren G. Harding.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1183
| ''[[:d:Q6762973|Marie Novello]]''
| [[Coadan:Marie Novello.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1184
| ''[[:d:Q6768286|Mark Jones]]''
|
|
|
|-
| style='text-align:right'| 1185
| ''[[:d:Q6768592|Mark Lewis]]''
|
|
|
|-
| style='text-align:right'| 1186
| ''[[:d:Q6774469|Martha Llwyd]]''
|
|
|
|-
| style='text-align:right'| 1187
| ''[[:d:Q6779642|Mary Gladstone]]''
| [[Coadan:Edward Burne-Jones The Golden Stairs.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1188
| ''[[:d:Q6779667|Mary Grant Price]]''
|
|
|
|-
| style='text-align:right'| 1189
| ''[[:d:Q6779879|Mary Jane Innes]]''
|
|
|
|-
| style='text-align:right'| 1190
| ''[[:d:Q6780105|Mary Lloyd]]''
| [[Coadan:Mary Charlotte Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1191
| ''[[:d:Q6780377|Mary Morgan]]''
|
|
|
|-
| style='text-align:right'| 1192
| ''[[:d:Q6780744|Mary Sophia Allen]]''
| [[Coadan:Mary Sophia Allen (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1193
| ''[[:d:Q6780951|Mary White]]''
|
|
|
|-
| style='text-align:right'| 1194
| ''[[:d:Q6790774|Matthew Keating]]''
|
|
|
|-
| style='text-align:right'| 1195
| ''[[:d:Q6791359|Matthew Vaughan-Davies, 1st Baron Ystwyth]]''
| [[Coadan:Mr. Vaughan Davies, M.P. for Cardiganshire (5236475).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1196
| ''[[:d:Q6792322|Maudie Edwards]]''
|
|
|
|-
| style='text-align:right'| 1197
| ''[[:d:Q6793046|Maurice Edelman]]''
| [[Coadan:Maurice Edelman in 1947.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1198
| ''[[:d:Q6793161|Maurice Griffith]]''
|
|
|
|-
| style='text-align:right'| 1199
| ''[[:d:Q6793398|Maurice Orbach]]''
|
|
|
|-
| style='text-align:right'| 1200
| ''[[:d:Q6794260|Mavis Nicholson]]''
|
|
|
|-
| style='text-align:right'| 1201
| ''[[:d:Q6804706|Mechell]]''
| [[Coadan:The capped tower of Eglwys Mechell Sant.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1202
| ''[[:d:Q6808694|Megan Lloyd George]]''
| [[Coadan:Meganlloydgeorge (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1203
| ''[[:d:Q6809955|Meic Povey]]''
| [[Coadan:Michael Povey (1486562).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1204
| ''[[:d:Q6809953|Meic Stephens]]''
|
|
|
|-
| style='text-align:right'| 1205
| ''[[:d:Q6810308|Meirion Pennar]]''
|
|
|
|-
| style='text-align:right'| 1206
| ''[[:d:Q6810741|Mel James]]''
|
|
|
|-
| style='text-align:right'| 1207
| ''[[:d:Q6810830|Mel Rosser]]''
|
|
|
|-
| style='text-align:right'| 1208
| ''[[:d:Q6811900|Melbourne Thomas]]''
|
|
|
|-
| style='text-align:right'| 1209
| ''[[:d:Q6811901|Melbourne Tierney]]''
|
|
|
|-
| style='text-align:right'| 1210
| ''[[:d:Q6813870|Melville De Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1211
| ''[[:d:Q6814128|Melvyn Ford]]''
|
|
|
|-
| style='text-align:right'| 1212
| ''[[:d:Q6814138|Melvyn Meek]]''
|
|
|
|-
| style='text-align:right'| 1213
| ''[[:d:Q6817169|Menna Gallie]]''
|
|
|
|-
| style='text-align:right'| 1214
| ''[[:d:Q6818922|Meredith Edwards]]''
| [[Coadan:Meredith Edwards in One Step Beyond (Justice).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1215
| ''[[:d:Q6819009|Meredydd Evans]]''
|
|
|
|-
| style='text-align:right'| 1216
| ''[[:d:Q6819086|Merfyn Jones]]''
|
|
|
|-
| style='text-align:right'| 1217
| ''[[:d:Q6820496|Merryl Wyn Davies]]''
|
|
|
|-
| style='text-align:right'| 1218
| ''[[:d:Q6820867|Mervyn Bennett]]''
|
|
|
|-
| style='text-align:right'| 1219
| ''[[:d:Q6820875|Mervyn Burtch]]''
|
|
|
|-
| style='text-align:right'| 1220
| ''[[:d:Q6820908|Mervyn Hill]]''
|
|
|
|-
| style='text-align:right'| 1221
| ''[[:d:Q6820925|Mervyn Levy]]''
|
|
|
|-
| style='text-align:right'| 1222
| ''[[:d:Q6821110|Mesac Thomas]]''
|
|
|
|-
| style='text-align:right'| 1223
| ''[[:d:Q6829403|Michael Condon]]''
|
|
|
|-
| style='text-align:right'| 1224
| ''[[:d:Q6831441|Michael J. Leahy]]''
|
|
|
|-
| style='text-align:right'| 1225
| ''[[:d:Q6831686|Michael Johnson]]''
|
|
|
|-
| style='text-align:right'| 1226
| ''[[:d:Q6832322|Michael Lort]]''
|
|
|
|-
| style='text-align:right'| 1227
| ''[[:d:Q6833756|Michael Raven]]''
|
|
|
|-
| style='text-align:right'| 1228
| ''[[:d:Q6833909|Michael Roberts]]''
|
|
|
|-
| style='text-align:right'| 1229
| ''[[:d:Q6838640|Mickey Gee]]''
|
|
|
|-
| style='text-align:right'| 1230
| ''[[:d:Q6849220|Mike Watkins]]''
|
|
|
|-
| style='text-align:right'| 1231
| ''[[:d:Q6851487|Miles Morgan]]''
| [[Coadan:Miles Morgan by J. S. Hartley - Springfield, MA - DSC03231.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1232
| ''[[:d:Q6851560|Miles Thomas]]''
|
|
|
|-
| style='text-align:right'| 1233
| ''[[:d:Q6860747|Milsom Rees]]''
| [[Coadan:Milsom Rees 1931.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1234
| ''[[:d:Q6860753|Milson Hunt]]''
|
|
|
|-
| style='text-align:right'| 1235
| ''[[:d:Q6890179|Moelwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 1236
| ''[[:d:Q6890185|Elizabeth Mary Jones]]''
| [[Coadan:Moelona1917.png|center|128px]]
|
|
|-
| style='text-align:right'| 1237
| ''[[:d:Q6890208|Moelwyn Merchant]]''
|
|
|
|-
| style='text-align:right'| 1238
| ''[[:d:Q6896659|Molly Parkin]]''
| [[Coadan:Molly Parkin (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1239
| ''[[:d:Q6906709|Monty Lewis]]''
| [[Coadan:Archives of American Art - Monty Lewis - 2587.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1240
| ''[[:d:Q6909612|Mordecai Jones]]''
|
|
|
|-
| style='text-align:right'| 1241
| ''[[:d:Q6911506|Morfydd Llwyn Owen]]''
|
|
|
|-
| style='text-align:right'| 1242
| ''[[:d:Q6911580|Morgan B. Williams]]''
| [[Coadan:Morgan B. Williams (Pennsylvania Congressman).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1243
| ''[[:d:Q6911650|Morgan Edwards]]''
|
|
|
|-
| style='text-align:right'| 1244
| ''[[:d:Q1631915|Howard Spring]]''
|
|
|
|-
| style='text-align:right'| 1245
| ''[[:d:Q1634494|Hugh Owen Thomas]]''
| [[Coadan:Hugh Owen Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1246
| ''[[:d:Q1650964|Ron Stitfall]]''
|
|
|
|-
| style='text-align:right'| 1247
| ''[[:d:Q1670013|Raymond FitzGerald]]''
| [[Coadan:National Library of Ireland MS 700 f77v Raymond de Gros.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1248
| ''[[:d:Q1680613|James J. Davis]]''
| [[Coadan:DAVIS, JAMES. HONORABLE LCCN2016860969.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1249
| ''[[:d:Q6911703|Morgan Hunt]]''
|
|
|
|-
| style='text-align:right'| 1250
| ''[[:d:Q6911720|Morgan John Rhys]]''
|
|
|
|-
| style='text-align:right'| 1251
| ''[[:d:Q1157152|Dafydd Llywelyn]]''
|
|
|
|-
| style='text-align:right'| 1252
| ''[[:d:Q1157156|Dafydd ap Llywelyn]]''
| [[Coadan:Llywelyn the Great (Dafydd).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1253
| ''[[:d:Q1160939|Daniel Granville West, Baron Granville-West]]''
|
|
|
|-
| style='text-align:right'| 1254
| ''[[:d:Q1161262|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 1255
| ''[[:d:Q1164478|Dannie Abse]]''
| [[Coadan:Dannie Abse (2014).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1256
| ''[[:d:Q1173794|David Bowen]]''
|
|
|
|-
| style='text-align:right'| 1257
| ''[[:d:Q1175222|David Lewis]]''
| [[Coadan:Saint David Lewis, engraving 1683.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1258
| ''[[:d:Q1176710|David Stanley Evans]]''
| [[Coadan:Stanley Evans (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1259
| ''[[:d:Q1176748|David Stoddart, Baron Stoddart of Swindon]]''
| [[Coadan:Lord Stoddart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1260
| ''[[:d:Q1179945|Frederick Green]]''
| [[Coadan:Oxford univ afc 1874.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1261
| ''[[:d:Q1183310|Deiniol]]''
| [[Coadan:Deiniol Sant Cadeirlan Bangor Cathedral St Deiniol - geograph.org.uk - 593071.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1262
| ''[[:d:Q1193243|John Houghton]]''
| [[Coadan:John Houghton High Wycombe 20050226.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1263
| ''[[:d:Q1195620|Aled Eames]]''
| [[Coadan:Aled Eames in an exhibition to publicise his book, Ships and Seamen of Anglesey (1551928).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1264
| ''[[:d:Q1209771|Dick Richardson]]''
|
|
|
|-
| style='text-align:right'| 1265
| ''[[:d:Q1225513|Dill Jones]]''
|
|
|
|-
| style='text-align:right'| 1266
| ''[[:d:Q1230607|John Owen]]''
|
|
|
|-
| style='text-align:right'| 1267
| ''[[:d:Q1237175|William Cadogan]]''
| [[Coadan:William Cadogan (physician).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1268
| ''[[:d:Q1240231|Donald Peers]]''
|
|
|
|-
| style='text-align:right'| 1269
| ''[[:d:Q1240482|Donald Davies]]''
|
|
|
|-
| style='text-align:right'| 1270
| ''[[:d:Q1249040|Richard Maybery]]''
| [[Coadan:Richard Maybery aviator.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1271
| ''[[:d:Q1251830|Doug Mountjoy]]''
|
|
|
|-
| style='text-align:right'| 1272
| ''[[:d:Q1255546|Samuel Parry]]''
|
|
|
|-
| style='text-align:right'| 1273
| ''[[:d:Q1258743|Gwen of Talgarth]]''
|
|
|
|-
| style='text-align:right'| 1274
| ''[[:d:Q1269091|Samson of Dol]]''
| [[Coadan:Chapelle-saint-clair 4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1275
| ''[[:d:Q1273470|E. Brian Davies]]''
| [[Coadan:EbdAlone14012016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1276
| ''[[:d:Q1281133|Tudwal]]''
| [[Coadan:Saint Tugdual.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1277
| ''[[:d:Q1292893|Edward Lord]]''
|
|
|
|-
| style='text-align:right'| 1278
| ''[[:d:Q1293017|Tysilio]]''
| [[Coadan:Buste reliquaire de saint Suliac, Sizun, France.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1279
| ''[[:d:Q1293238|George Noakes]]''
|
|
|
|-
| style='text-align:right'| 1280
| ''[[:d:Q1293950|Edward V. Robertson]]''
| [[Coadan:Edward V Robertson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1281
| ''[[:d:Q1302516|Karl Wallinger]]''
| [[Coadan:Karl Wallinger.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1282
| ''[[:d:Q1306352|Stanley Baker]]''
| [[Coadan:Stanley Baker visit Israel 1967.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1283
| ''[[:d:Q1320386|Thomas Olivers]]''
| [[Coadan:Thomas Olivers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1284
| ''[[:d:Q1320398|Thomas Reynolds]]''
|
|
|
|-
| style='text-align:right'| 1285
| ''[[:d:Q1331217|Elizabeth Griffith]]''
| [[Coadan:Elizabeth griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1286
| ''[[:d:Q1337615|Emily Pfeiffer]]''
| [[Coadan:Emily Pfeiffer.png|center|128px]]
|
|
|-
| style='text-align:right'| 1287
| ''[[:d:Q1338420|Thomas Button]]''
| [[Coadan:Thomas Button.png|center|128px]]
|
|
|-
| style='text-align:right'| 1288
| ''[[:d:Q1351086|Eric Barnes]]''
|
|
|
|-
| style='text-align:right'| 1289
| ''[[:d:Q1356371|Ernest Howard Griffiths]]''
| [[Coadan:Ernest Howard Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1290
| ''[[:d:Q1360094|Terry Medwin]]''
|
|
|
|-
| style='text-align:right'| 1291
| ''[[:d:Q1369409|Thomas James]]''
| [[Coadan:The Strange and Dangerous Voyage (Thomas James, 1633) - 3 foldout map The Platt of Sayling - 2 The True Portraict.png|center|128px]]
|
|
|-
| style='text-align:right'| 1292
| ''[[:d:Q1379647|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 1293
| ''[[:d:Q1379655|Evan James Williams]]''
|
|
|
|-
| style='text-align:right'| 1294
| ''[[:d:Q1380989|Jimmy Wilde]]''
| [[Coadan:Jimmy Wilde.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1295
| ''[[:d:Q1381003|Rhys ap Tewdwr]]''
|
|
|
|-
| style='text-align:right'| 1296
| ''[[:d:Q1381032|Phil Bennett]]''
| [[Coadan:Phil Bennett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1297
| ''[[:d:Q1388537|Hedd Wyn]]''
| [[Coadan:Hedd Wyn 01(a-dg).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1298
| ''[[:d:Q1397946|Lewis Bayly]]''
|
|
|
|-
| style='text-align:right'| 1299
| [[Gruffudd ap Llywelyn Fawr]]
| [[Coadan:Llywelyn the Great (Gruffudd).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1300
| ''[[:d:Q1403116|Arthur Gould]]''
| [[Coadan:Arthur 'Monkey' Gould portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1301
| ''[[:d:Q1403137|Dewi Bebb]]''
|
|
|
|-
| style='text-align:right'| 1302
| ''[[:d:Q1407412|Watcyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1303
| ''[[:d:Q1410416|Jim Sullivan]]''
|
|
|
|-
| style='text-align:right'| 1304
| ''[[:d:Q1418483|Geraint Howells]]''
| [[Coadan:Geraint Howells cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1305
| ''[[:d:Q1422009|Valerie Davies]]''
|
|
|
|-
| style='text-align:right'| 1306
| ''[[:d:Q1432739|Roy Evans]]''
|
|
|
|-
| style='text-align:right'| 1307
| ''[[:d:Q1438867|T. G. Jones]]''
|
|
|
|-
| style='text-align:right'| 1308
| ''[[:d:Q1451848|Brian Godfrey]]''
|
|
|
|-
| style='text-align:right'| 1309
| ''[[:d:Q1463642|Wallace Alexander Smart]]''
|
|
|
|-
| style='text-align:right'| 1310
| ''[[:d:Q1465068|George Cornwallis-West]]''
| [[Coadan:Georgecornwalliswest.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1311
| ''[[:d:Q1492803|Nick Whitehead]]''
|
|
|
|-
| style='text-align:right'| 1312
| ''[[:d:Q1493339|Pete Ham]]''
| [[Coadan:Pete ham.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1313
| ''[[:d:Q1502967|Geoffrey Eglinton]]''
|
|
|
|-
| style='text-align:right'| 1314
| ''[[:d:Q1507985|George Nevill, 5th Baron Bergavenny]]''
| [[Coadan:Portrait George Nevill, 5th Baron Bergavenny – Hans Holbein the Younger.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1315
| ''[[:d:Q1517534|John Rees]]''
|
|
|
|-
| style='text-align:right'| 1316
| ''[[:d:Q1523841|Gil Reece]]''
|
|
|
|-
| style='text-align:right'| 1317
| ''[[:d:Q1528561|Ivor Bulmer-Thomas]]''
|
|
|
|-
| style='text-align:right'| 1318
| ''[[:d:Q1529691|Tom Burke]]''
|
|
|
|-
| style='text-align:right'| 1319
| ''[[:d:Q1530769|Glen Garfield Williams]]''
|
|
|
|-
| style='text-align:right'| 1320
| ''[[:d:Q1536332|Robert Jenkins]]''
| [[Coadan:Captain Jenkins shows his ear to Robert Walpole cartoon, 1738 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1321
| ''[[:d:Q1536928|Richard Bell]]''
| [[Coadan:Richard Bell.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1322
| ''[[:d:Q1538550|Howard Saint]]''
| [[Coadan:Howard Saint.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1323
| ''[[:d:Q1538588|Hubert Jones]]''
| [[Coadan:Hubert Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1324
| ''[[:d:Q1541902|Graham Bool]]''
|
|
|
|-
| style='text-align:right'| 1325
| ''[[:d:Q1543275|Granville Beynon]]''
|
|
|
|-
| style='text-align:right'| 1326
| ''[[:d:Q1545710|Grenville Morris]]''
|
|
|
|-
| style='text-align:right'| 1327
| ''[[:d:Q1546121|Greville Janner, Baron Janner of Braunstone]]''
| [[Coadan:Lord janner.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1328
| ''[[:d:Q1549580|Michael Williams]]''
| [[Coadan:Lordwilliams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1329
| ''[[:d:Q1557879|Gwilym Prys Prys-Davies, Baron Prys-Davies]]''
|
|
|
|-
| style='text-align:right'| 1330
| ''[[:d:Q1565118|Gerald Battrick]]''
| [[Coadan:Internationale tenniskampioenschappen te Hilversum, G Battrick met beker, Bestanddeelnr 924-7801.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1331
| ''[[:d:Q1565612|George Henry Powell]]''
|
|
|
|-
| style='text-align:right'| 1332
| ''[[:d:Q1585304|Sir Harford Jones-Brydges, 1st Baronet]]''
| [[Coadan:Portrait of Sir Harford Jones Brydges by Sir Thomas Lawrence.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1333
| ''[[:d:Q1585788|Harold Carter]]''
|
|
|
|-
| style='text-align:right'| 1334
| ''[[:d:Q1586685|Harry Parry]]''
|
|
|
|-
| style='text-align:right'| 1335
| ''[[:d:Q1587265|Tom Jones]]''
|
|
|
|-
| style='text-align:right'| 1336
| ''[[:d:Q1592323|Ronald Noel Walpole]]''
|
|
|
|-
| style='text-align:right'| 1337
| ''[[:d:Q1606988|Henry Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1338
| ''[[:d:Q1618119|Hilary Marquand]]''
| [[Coadan:Hilary Marquand.png|center|128px]]
|
|
|-
| style='text-align:right'| 1339
| ''[[:d:Q1620977|Jeff Young]]''
|
|
|
|-
| style='text-align:right'| 1340
| ''[[:d:Q1631875|Howard Marks]]''
| [[Coadan:Dennis Howard Marks (2000).PNG|center|128px]]
|
|
|-
| style='text-align:right'| 1341
| ''[[:d:Q5727523|Henry Richard]]''
| [[Coadan:Henry Richard Esq MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1342
| ''[[:d:Q5727766|Henry Rowlands]]''
|
|
|
|-
| style='text-align:right'| 1343
| ''[[:d:Q5729799|Henry Walter]]''
|
|
|
|-
| style='text-align:right'| 1344
| ''[[:d:Q5729939|Henry Weale]]''
| [[Coadan:Henry Weale (1897–1959).png|center|128px]]
|
|
|-
| style='text-align:right'| 1345
| ''[[:d:Q5734947|Herbert Lewis]]''
| [[Coadan:Mr. J Herbert Lewis Y.H.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1346
| ''[[:d:Q5735196|Isambard Owen]]''
| [[Coadan:Isambard Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1347
| ''[[:d:Q5735948|Herbert Wilson]]''
|
|
|
|-
| style='text-align:right'| 1348
| ''[[:d:Q5736088|Herbie Evans]]''
| [[Coadan:Evans, Herbie.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1349
| ''[[:d:Q5761498|Hilda Vaughan]]''
|
|
|
|-
| style='text-align:right'| 1350
| ''[[:d:Q5800336|David Rowland]]''
|
|
|
|-
| style='text-align:right'| 1351
| ''[[:d:Q5901548|Horace Blew]]''
|
|
|
|-
| style='text-align:right'| 1352
| ''[[:d:Q5901653|Horace Cumner]]''
|
|
|
|-
| style='text-align:right'| 1353
| ''[[:d:Q5901709|Horace Evans, 1st Baron Evans]]''
|
|
|
|-
| style='text-align:right'| 1354
| ''[[:d:Q5902209|Horace Viner]]''
|
|
|
|-
| style='text-align:right'| 1355
| ''[[:d:Q5907734|Ian Michael]]''
|
|
|
|-
| style='text-align:right'| 1356
| ''[[:d:Q5919459|Howard Davies]]''
|
|
|
|-
| style='text-align:right'| 1357
| ''[[:d:Q5920440|Howard Morgan]]''
|
|
|
|-
| style='text-align:right'| 1358
| ''[[:d:Q5920501|Howard Nicholls]]''
|
|
|
|-
| style='text-align:right'| 1359
| ''[[:d:Q5920514|Howard Norris]]''
|
|
|
|-
| style='text-align:right'| 1360
| ''[[:d:Q5920696|Howard Radford]]''
|
|
|
|-
| style='text-align:right'| 1361
| ''[[:d:Q5921646|Syr Hywel y Fwyall]]''
| [[Coadan:Arfbais Syr Hywel y Fwyall.png|center|128px]]
|
|
|-
| style='text-align:right'| 1362
| ''[[:d:Q5921673|Howell Arthur Gwynne]]''
| [[Coadan:Howell Arthur Gwynne (1865–1950).png|center|128px]]
|
|
|-
| style='text-align:right'| 1363
| ''[[:d:Q5921699|Howell Davies]]''
|
|
|
|-
| style='text-align:right'| 1364
| ''[[:d:Q5921707|Howell Evans]]''
|
|
|
|-
| style='text-align:right'| 1365
| ''[[:d:Q5921714|Howell Elvet Lewis]]''
| [[Coadan:Rev H Elvet Lewis (5185309).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1366
| ''[[:d:Q5921716|Howell Glynne]]''
|
|
|
|-
| style='text-align:right'| 1367
| ''[[:d:Q5921747|Howell Jones]]''
| [[Coadan:Howel-Jones-NeathRFC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1368
| ''[[:d:Q5921750|Howell Lewis]]''
|
|
|
|-
| style='text-align:right'| 1369
| ''[[:d:Q5925776|James Iliff]]''
|
|
|
|-
| style='text-align:right'| 1370
| ''[[:d:Q5927246|Hubert Day]]''
|
|
|
|-
| style='text-align:right'| 1371
| ''[[:d:Q5927578|Hubert Rees]]''
|
|
|
|-
| style='text-align:right'| 1372
| ''[[:d:Q5927583|Hubert Rhys]]''
|
|
|
|-
| style='text-align:right'| 1373
| ''[[:d:Q5927683|Hubert William Lewis]]''
| [[Coadan:Guggs.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1374
| ''[[:d:Q5927692|Hubert Winthrop Young]]''
|
|
|
|-
| style='text-align:right'| 1375
| ''[[:d:Q5930459|Hugh Cudlipp]]''
|
|
|
|-
| style='text-align:right'| 1376
| ''[[:d:Q5930505|Hugh David]]''
|
|
|
|-
| style='text-align:right'| 1377
| ''[[:d:Q5930657|John Hugh Edwards]]''
| [[Coadan:J-Hugh-Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1378
| ''[[:d:Q5930689|Hugh Evans]]''
|
|
|
|-
| style='text-align:right'| 1379
| ''[[:d:Q5931218|Hugh Ingledew]]''
|
|
|
|-
| style='text-align:right'| 1380
| ''[[:d:Q5931495|Hugh Lloyd-Davies]]''
|
|
|
|-
| style='text-align:right'| 1381
| ''[[:d:Q5932035|Hugh Morris]]''
|
|
|
|-
| style='text-align:right'| 1382
| ''[[:d:Q5932086|Hugh Myddelton]]''
| [[Coadan:Sir Hugh Myddelton, 1st Bt by Cornelius Johnson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1383
| ''[[:d:Q5932209|Hugh Owen]]''
| [[Coadan:Portrait of Sir Hugh Owen (4671720) Exposure.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1384
| ''[[:d:Q5932383|Hugh Price]]''
| [[Coadan:Hugh Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1385
| ''[[:d:Q5932551|Hugh Rowlands]]''
| [[Coadan:Hugh Rowlands (1828–1909).png|center|128px]]
|
|
|-
| style='text-align:right'| 1386
| ''[[:d:Q5932957|Hugh Vincent]]''
|
|
|
|-
| style='text-align:right'| 1387
| ''[[:d:Q5932997|John Traherne Moggridge]]''
|
|
|
|-
| style='text-align:right'| 1388
| ''[[:d:Q5941416|Humphrey Foulkes]]''
|
|
|
|-
| style='text-align:right'| 1389
| ''[[:d:Q5941466|Humphrey Humphreys]]''
| [[Coadan:Bp Humphrey Humphreys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1390
| ''[[:d:Q5941475|Humphrey Jones]]''
|
|
|
|-
| style='text-align:right'| 1391
| ''[[:d:Q5941507|Humphrey Llwyd]]''
| [[Coadan:Humphrey.Llwyd.png|center|128px]]
|
|
|-
| style='text-align:right'| 1392
| ''[[:d:Q5941550|Humphrey Owen]]''
|
|
|
|-
| style='text-align:right'| 1393
| ''[[:d:Q5951270|Huw Morus]]''
|
|
|
|-
| style='text-align:right'| 1394
| ''[[:d:Q5951279|Huw Menai]]''
|
|
|
|-
| style='text-align:right'| 1395
| ''[[:d:Q5951303|Huw T. Edwards]]''
|
|
|
|-
| style='text-align:right'| 1396
| ''[[:d:Q5962726|Hywel Bennett]]''
|
|
|
|-
| style='text-align:right'| 1397
| ''[[:d:Q5962743|Hywel Coetmor]]''
|
|
|
|-
| style='text-align:right'| 1398
| ''[[:d:Q5962754|Hywel David Lewis]]''
|
|
|
|-
| style='text-align:right'| 1399
| ''[[:d:Q5967953|John Evans]]''
| [[Coadan:Revd John Evans (I D Ffraid or Adda Jones, 1814-75) NLW3364082.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1400
| ''[[:d:Q5974169|Lewis Owen]]''
|
|
|
|-
| style='text-align:right'| 1401
| ''[[:d:Q5978031|John Godfrey Parry-Thomas]]''
| [[Coadan:Parry Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1402
| ''[[:d:Q5978168|William Frost]]''
|
|
|
|-
| style='text-align:right'| 1403
| ''[[:d:Q5981455|Ian Easton]]''
|
|
|
|-
| style='text-align:right'| 1404
| ''[[:d:Q5981894|Ian Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1405
| ''[[:d:Q5983385|Ianto Davies]]''
|
|
|
|-
| style='text-align:right'| 1406
| ''[[:d:Q5989198|Idloes Owen]]''
|
|
|
|-
| style='text-align:right'| 1407
| ''[[:d:Q5989587|Idris Cox]]''
|
|
|
|-
| style='text-align:right'| 1408
| ''[[:d:Q5989612|Idris Hopkins]]''
|
|
|
|-
| style='text-align:right'| 1409
| ''[[:d:Q5989657|Idris Jones]]''
|
|
|
|-
| style='text-align:right'| 1410
| ''[[:d:Q5989707|Idris Towill]]''
|
|
|
|-
| style='text-align:right'| 1411
| ''[[:d:Q5989861|Idwal Davies]]''
|
|
|
|-
| style='text-align:right'| 1412
| ''[[:d:Q5989871|Idwal Fisher]]''
|
|
|
|-
| style='text-align:right'| 1413
| ''[[:d:Q5989872|Idwal Jones]]''
|
|
|
|-
| style='text-align:right'| 1414
| ''[[:d:Q5989881|Idwal Pugh]]''
|
|
|
|-
| style='text-align:right'| 1415
| ''[[:d:Q5989892|Idwal Jones]]''
|
|
|
|-
| style='text-align:right'| 1416
| ''[[:d:Q5990126|Ieuan Ddu ap Dafydd ab Owain]]''
|
|
|
|-
| style='text-align:right'| 1417
| ''[[:d:Q5990154|Ieuan Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 1418
| ''[[:d:Q5991239|Ifor Owen]]''
|
|
|
|-
| style='text-align:right'| 1419
| ''[[:d:Q5991237|Ifor Davies]]''
|
|
|
|-
| style='text-align:right'| 1420
| ''[[:d:Q5991242|Ifor Leslie Evans]]''
|
|
|
|-
| style='text-align:right'| 1421
| ''[[:d:Q5995606|Ike Fowler]]''
|
|
|
|-
| style='text-align:right'| 1422
| ''[[:d:Q5995656|Ike Owens]]''
|
|
|
|-
| style='text-align:right'| 1423
| ''[[:d:Q6000246|Illtyd Buller Pole-Evans]]''
|
|
|
|-
| style='text-align:right'| 1424
| ''[[:d:Q6061783|Ioan Evans]]''
|
|
|
|-
| style='text-align:right'| 1425
| ''[[:d:Q6061870|John Jones]]''
|
|
|
|-
| style='text-align:right'| 1426
| ''[[:d:Q6063933|Iorrie Isaacs]]''
|
|
|
|-
| style='text-align:right'| 1427
| ''[[:d:Q6063946|Iorwerth Evans]]''
|
|
|
|-
| style='text-align:right'| 1428
| ''[[:d:Q6063954|Iorwerth Jones]]''
|
|
|
|-
| style='text-align:right'| 1429
| ''[[:d:Q6063957|Iorwerth Thomas]]''
| [[Coadan:Iorwerth Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1430
| ''[[:d:Q6073462|Peter Penry-Jones]]''
|
|
|
|-
| style='text-align:right'| 1431
| ''[[:d:Q6076157|Isaac Cohen]]''
|
|
|
|-
| style='text-align:right'| 1432
| ''[[:d:Q6076220|Isaac Davis]]''
|
|
|
|-
| style='text-align:right'| 1433
| ''[[:d:Q6076478|Isaac Hayward]]''
|
|
|
|-
| style='text-align:right'| 1434
| ''[[:d:Q6084453|Islwyn Davies]]''
|
|
|
|-
| style='text-align:right'| 1435
| ''[[:d:Q6084457|Islwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 1436
| ''[[:d:Q6084469|Islwyn Morris]]''
|
|
|
|-
| style='text-align:right'| 1437
| ''[[:d:Q6099316|Ivor Atkins]]''
| [[Coadan:Sir Ivor Atkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1438
| ''[[:d:Q5237142|David Marquand]]''
|
|
|
|-
| style='text-align:right'| 1439
| ''[[:d:Q5237240|David Maurice]]''
|
|
|
|-
| style='text-align:right'| 1440
| ''[[:d:Q5237447|David McNaught]]''
| [[Coadan:David McNaught.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1441
| ''[[:d:Q5237715|David Morgan]]''
| [[Coadan:David Morgan, Welsh rugby.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1442
| ''[[:d:Q5237721|David Morgan Evans]]''
|
|
|
|-
| style='text-align:right'| 1443
| ''[[:d:Q5237724|David Morgan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1444
| ''[[:d:Q5237764|David Moses]]''
|
|
|
|-
| style='text-align:right'| 1445
| ''[[:d:Q5238012|David Nicholl]]''
| [[Coadan:David Nicholl (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1446
| ''[[:d:Q6099383|Ivor Emmanuel]]''
|
|
|
|-
| style='text-align:right'| 1447
| ''[[:d:Q5208987|Dai Davies]]''
| [[Coadan:David Maldwyn Davies 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1448
| ''[[:d:Q5208990|Dai Edwards]]''
|
|
|
|-
| style='text-align:right'| 1449
| ''[[:d:Q5208994|Dai Evans]]''
|
|
|
|-
| style='text-align:right'| 1450
| ''[[:d:Q5208992|Dai Dower]]''
| [[Coadan:Cymro front page, 2-10-55, showing a picture of Dai Dower, Abercynon, and his fiancé, Evelyn Trapp (1469059) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1451
| ''[[:d:Q5208993|Dai Evans]]''
|
|
|
|-
| style='text-align:right'| 1452
| ''[[:d:Q5209000|Dai Francis]]''
|
|
|
|-
| style='text-align:right'| 1453
| ''[[:d:Q5209004|Dai Hiddlestone]]''
|
|
|
|-
| style='text-align:right'| 1454
| ''[[:d:Q5209014|Dai Lawrence]]''
|
|
|
|-
| style='text-align:right'| 1455
| ''[[:d:Q5209015|Dai Lewis]]''
| [[Coadan:Dai Lewis (Rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1456
| ''[[:d:Q5209023|Dai Nicholas]]''
|
|
|
|-
| style='text-align:right'| 1457
| ''[[:d:Q5209027|Dai Prosser]]''
|
|
|
|-
| style='text-align:right'| 1458
| ''[[:d:Q5209025|Dai Parker]]''
| [[Coadan:Dai Parker 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1459
| ''[[:d:Q5209035|Dai Royston Bevan]]''
|
|
|
|-
| style='text-align:right'| 1460
| ''[[:d:Q5209032|Dai Richards]]''
|
|
|
|-
| style='text-align:right'| 1461
| ''[[:d:Q5209039|Dai Thomas]]''
|
|
|
|-
| style='text-align:right'| 1462
| ''[[:d:Q5209043|Dai Ward]]''
|
|
|
|-
| style='text-align:right'| 1463
| ''[[:d:Q5209044|Dai Westacott]]''
|
|
|
|-
| style='text-align:right'| 1464
| ''[[:d:Q5213131|Dan Beddoe]]''
| [[Coadan:Dan Beddoe facing left in 1918 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1465
| ''[[:d:Q5213612|Dan Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1466
| ''[[:d:Q5217090|Daniel Evans]]''
| [[Coadan:Daniel Ddu.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1467
| ''[[:d:Q5217091|Daniel Evans]]''
|
|
|
|-
| style='text-align:right'| 1468
| ''[[:d:Q5217665|Daniel James]]''
|
|
|
|-
| style='text-align:right'| 1469
| ''[[:d:Q5217713|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 1470
| ''[[:d:Q5218391|Daniel Pascoe]]''
|
|
|
|-
| style='text-align:right'| 1471
| ''[[:d:Q5218493|Daniel Protheroe]]''
| [[Coadan:Daniel Protheroe.png|center|128px]]
|
|
|-
| style='text-align:right'| 1472
| ''[[:d:Q5218767|Daniel Silvan Evans]]''
| [[Coadan:Portrait of Daniel Silvan Evans (4674117).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1473
| ''[[:d:Q5219099|Daniel Williams]]''
| [[Coadan:Daniel Williams (1643-1716).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1474
| ''[[:d:Q5220206|Danny Canning]]''
|
|
|
|-
| style='text-align:right'| 1475
| ''[[:d:Q5220344|Danny Ferguson]]''
|
|
|
|-
| style='text-align:right'| 1476
| ''[[:d:Q5220457|Danny Hurcombe]]''
|
|
|
|-
| style='text-align:right'| 1477
| ''[[:d:Q5220672|Danny Newall]]''
|
|
|
|-
| style='text-align:right'| 1478
| ''[[:d:Q5228567|Dave Colclough]]''
| [[Coadan:Dave Colclough.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1479
| ''[[:d:Q5229055|Dave Jones]]''
|
|
|
|-
| style='text-align:right'| 1480
| ''[[:d:Q5230110|Dave Williams]]''
|
|
|
|-
| style='text-align:right'| 1481
| ''[[:d:Q5230426|David Davies]]''
|
|
|
|-
| style='text-align:right'| 1482
| ''[[:d:Q5231862|David Brynmor Jones]]''
| [[Coadan:1906 Sir David Brynmor Jones MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1483
| ''[[:d:Q5232309|David Charles]]''
| [[Coadan:Portrait of David Charles (4674418).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1484
| ''[[:d:Q5232316|David Charles Davies]]''
| [[Coadan:Revd David Charles Davies (1826-91) (1864) NLW3362033.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1485
| ''[[:d:Q5232811|David Daniel]]''
| [[Coadan:David Daniel (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1486
| ''[[:d:Q5232812|David Daniel Davis]]''
|
|
|
|-
| style='text-align:right'| 1487
| ''[[:d:Q5232850|David Davies]]''
|
|
|
|-
| style='text-align:right'| 1488
| ''[[:d:Q5232851|David Davies]]''
|
|
|
|-
| style='text-align:right'| 1489
| ''[[:d:Q5232848|David Davies]]''
| [[Coadan:Trydedd gân David Davies, (Dai'r Cantwr) - yn gosod allan ei alar dwys a'i hiraeth am ei wlad enedigol, yn nghyd â rhybuddion i bawb ochelyd pechod - a dderbyniwyd mewn llythyr at gyfaill (IA wg35-2-181).pdf|center|128px]]
|
|
|-
| style='text-align:right'| 1490
| ''[[:d:Q5232854|David Davies]]''
|
|
|
|-
| style='text-align:right'| 1491
| ''[[:d:Q5232858|David Davies]]''
|
|
|
|-
| style='text-align:right'| 1492
| ''[[:d:Q5232857|David Davies]]''
| [[Coadan:David Davies industrialist.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1493
| ''[[:d:Q5232862|David Davis]]''
| [[Coadan:Portrait of Revd. David Davis (4673253) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1494
| ''[[:d:Q5233299|David R Edwards]]''
| [[Coadan:David R Edwards, Datblygu (3890950400).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1495
| ''[[:d:Q5233354|David Ellis]]''
|
|
|
|-
| style='text-align:right'| 1496
| ''[[:d:Q5233447|David Evans]]''
|
|
|
|-
| style='text-align:right'| 1497
| ''[[:d:Q5233450|David Evans]]''
|
|
|
|-
| style='text-align:right'| 1498
| ''[[:d:Q5233461|David Evans]]''
|
|
|
|-
| style='text-align:right'| 1499
| ''[[:d:Q5233851|David Freeman]]''
|
|
|
|-
| style='text-align:right'| 1500
| ''[[:d:Q5233893|David Fulker]]''
| [[Coadan:David Fulker, geneticist headshot.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1501
| ''[[:d:Q5233969|David Gadsby]]''
|
|
|
|-
| style='text-align:right'| 1502
| ''[[:d:Q5233996|David Galloway]]''
| [[Coadan:David Galloway2.1.png|center|128px]]
|
|
|-
| style='text-align:right'| 1503
| ''[[:d:Q5234177|David Glyndwr Tudor Williams]]''
|
|
|
|-
| style='text-align:right'| 1504
| ''[[:d:Q5234352|David Green]]''
|
|
|
|-
| style='text-align:right'| 1505
| ''[[:d:Q5234398|David Grenfell]]''
| [[Coadan:David Grenfell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1506
| ''[[:d:Q5234415|David Griffiths]]''
| [[Coadan:David Griffiths.png|center|128px]]
|
|
|-
| style='text-align:right'| 1507
| ''[[:d:Q5234490|Gwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 1508
| ''[[:d:Q5234488|David Gwilym Morris Roberts]]''
|
|
|
|-
| style='text-align:right'| 1509
| ''[[:d:Q5234492|David Gwynn]]''
|
|
|
|-
| style='text-align:right'| 1510
| ''[[:d:Q5234493|David Gwynne]]''
|
|
|
|-
| style='text-align:right'| 1511
| ''[[:d:Q5234669|David Hamer]]''
|
|
|
|-
| style='text-align:right'| 1512
| ''[[:d:Q5234750|David Harris Davies]]''
|
|
|
|-
| style='text-align:right'| 1513
| ''[[:d:Q5234749|David Harris]]''
|
|
|
|-
| style='text-align:right'| 1514
| ''[[:d:Q5235221|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 1515
| ''[[:d:Q5235233|David Hughes Parry]]''
|
|
|
|-
| style='text-align:right'| 1516
| ''[[:d:Q5235562|David James]]''
|
|
|
|-
| style='text-align:right'| 1517
| ''[[:d:Q5235561|David James]]''
| [[Coadan:David James, rugby player.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1518
| ''[[:d:Q5235566|David James Davies]]''
|
|
|
|-
| style='text-align:right'| 1519
| ''[[:d:Q5235575|David James Jones]]''
|
|
|
|-
| style='text-align:right'| 1520
| ''[[:d:Q5235615|David Jenkins]]''
| [[Coadan:Professor David Jenkins (1848–1915) (gcf02646).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1521
| ''[[:d:Q5235613|David Jenkins]]''
| [[Coadan:JudgeDavidJenkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1522
| ''[[:d:Q5235616|David Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1523
| ''[[:d:Q5235622|David Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1524
| ''[[:d:Q5235621|David Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1525
| ''[[:d:Q5235657|David John Bowen]]''
| [[Coadan:Dai Bowen 2013-10-04 23-18.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1526
| ''[[:d:Q5235664|David John Hayward]]''
|
|
|
|-
| style='text-align:right'| 1527
| ''[[:d:Q5235681|David John Thomas]]''
|
|
|
|-
| style='text-align:right'| 1528
| ''[[:d:Q5235729|David Jones]]''
|
|
|
|-
| style='text-align:right'| 1529
| ''[[:d:Q5235732|David Jones]]''
|
|
|
|-
| style='text-align:right'| 1530
| ''[[:d:Q5235741|David Jones]]''
| [[Coadan:David Jones (1793-1873).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1531
| ''[[:d:Q5236556|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 1532
| ''[[:d:Q5236563|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 1533
| ''[[:d:Q5236567|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 1534
| ''[[:d:Q5236568|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 1535
| ''[[:d:Q5236686|David Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 1536
| ''[[:d:Q5236703|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1537
| ''[[:d:Q5236710|David Lloyd]]''
| [[Coadan:Y Caneuon Cynnar (1940-41), album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1538
| ''[[:d:Q7364322|Ron Roberts]]''
|
|
|
|-
| style='text-align:right'| 1539
| ''[[:d:Q6114479|Jack Owen]]''
|
|
|
|-
| style='text-align:right'| 1540
| ''[[:d:Q7325110|Richard Davies]]''
| [[Coadan:Richard Davies Esgob Llanelwy a Thyddewi Bishp of St Davids, Wales (d. 1581) 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1541
| ''[[:d:Q7325108|Richard Davies]]''
| [[Coadan:Richard Davies, Llanbryn-mair (Mynyddog, 1833-77) NLW3364536.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1542
| ''[[:d:Q7325109|Richard Davies]]''
|
|
|
|-
| style='text-align:right'| 1543
| ''[[:d:Q7325458|Richard Edwards]]''
| [[Coadan:Richard Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1544
| ''[[:d:Q7325487|Richard Ellis]]''
| [[Coadan:Richard Ellis (Cymeriadau TGJ).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1545
| ''[[:d:Q7325626|Richard Farrington]]''
|
|
|
|-
| style='text-align:right'| 1546
| ''[[:d:Q7325647|Richard Fenton]]''
| [[Coadan:Samuel Woodforde (1763-1817) - Richard Fenton (1746–1821) - 732230 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1547
| ''[[:d:Q7325950|Richard Glynn Vivian]]''
| [[Coadan:Pfeninger, R. E.; R. Glynn Vivian.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1548
| ''[[:d:Q7326090|Richard Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1549
| ''[[:d:Q7326420|Richard Herbert]]''
|
|
|
|-
| style='text-align:right'| 1550
| ''[[:d:Q7326925|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 1551
| ''[[:d:Q7326929|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 1552
| ''[[:d:Q7327422|Richard Llwyd]]''
| [[Coadan:Richard Llwyd.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 1553
| ''[[:d:Q7327487|Richard Lucas]]''
|
|
|
|-
| style='text-align:right'| 1554
| ''[[:d:Q7327908|Richard Morris]]''
|
|
|
|-
| style='text-align:right'| 1555
| ''[[:d:Q7327948|Richard Mullock]]''
| [[Coadan:Richard Mullock.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1556
| ''[[:d:Q7328001|Richard Nanney]]''
|
|
|
|-
| style='text-align:right'| 1557
| ''[[:d:Q7328216|Richard Owen]]''
| [[Coadan:Portrait of Y Parch. Richard Owen, (y diwygiwr enwog) (4671728) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1558
| ''[[:d:Q7328276|Richard Parkhouse]]''
|
|
|
|-
| style='text-align:right'| 1559
| ''[[:d:Q7328285|Richard Parry-Jones]]''
| [[Coadan:Professor Richard Parry-Jones CBE.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1560
| ''[[:d:Q7328358|Richard Pennant, 1st Baron Penrhyn]]''
| [[Coadan:Richard Pennant Thomson 1790s.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1561
| ''[[:d:Q7328379|Richard Perryn]]''
| [[Coadan:Richard Perryn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1562
| ''[[:d:Q7328491|Richard Powell]]''
|
|
|
|-
| style='text-align:right'| 1563
| ''[[:d:Q7328531|Richard Pryse]]''
|
|
|
|-
| style='text-align:right'| 1564
| ''[[:d:Q7328693|Richard Roberts]]''
|
|
|
|-
| style='text-align:right'| 1565
| ''[[:d:Q7329296|Richard Summers]]''
|
|
|
|-
| style='text-align:right'| 1566
| ''[[:d:Q7329418|Richard Tecwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 1567
| ''[[:d:Q7329440|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 1568
| ''[[:d:Q7329445|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 1569
| ''[[:d:Q7329554|Richard Trevor]]''
| [[Coadan:Richard Trefor (1558 - 1638).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1570
| ''[[:d:Q7329644|Richard Vaughan]]''
| [[Coadan:Portrait of Ricardvs Vavghanvs (4672123).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1571
| ''[[:d:Q7329946|Richard Whitford]]''
|
|
|
|-
| style='text-align:right'| 1572
| ''[[:d:Q7329983|Richard William Allen]]''
|
|
|
|-
| style='text-align:right'| 1573
| ''[[:d:Q7329992|Richard William Leslie Wain]]''
| [[Coadan:Richard William Leslie Wain (1896–1917).png|center|128px]]
|
|
|-
| style='text-align:right'| 1574
| ''[[:d:Q7330013|Richard Williams Morgan]]''
|
|
|
|-
| style='text-align:right'| 1575
| ''[[:d:Q7340921|Robbie James]]''
| [[Coadan:Robbie James.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1576
| ''[[:d:Q7341588|Robert Armstrong-Jones]]''
| [[Coadan:Robert Armstrong-Jones 1933.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1577
| ''[[:d:Q7342182|Robert Blythe]]''
|
|
|
|-
| style='text-align:right'| 1578
| ''[[:d:Q7342477|Robert Bryan]]''
| [[Coadan:Mr. R. Bryan (5292071).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1579
| ''[[:d:Q7342553|Robert Bye]]''
| [[Coadan:Robert Bye VC IWM Q 114616.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1580
| ''[[:d:Q7342900|Robert Chester]]''
|
|
|
|-
| style='text-align:right'| 1581
| ''[[:d:Q7343089|Robert Cooke]]''
|
|
|
|-
| style='text-align:right'| 1582
| ''[[:d:Q7343389|Robert Daniell]]''
| [[Coadan:Robert Daniell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1583
| ''[[:d:Q7343426|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 1584
| ''[[:d:Q7343516|Robert Dewi Williams]]''
|
|
|
|-
| style='text-align:right'| 1585
| ''[[:d:Q7343531|Robert Dickie]]''
|
|
|
|-
| style='text-align:right'| 1586
| ''[[:d:Q7344015|Robert Ellis]]''
| [[Coadan:Revd Robert Ellis (Cynddelw, 1812-75) NLW3364283.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1587
| ''[[:d:Q7344034|Robert Ellis]]''
|
|
|
|-
| style='text-align:right'| 1588
| ''[[:d:Q7345286|Robert Harris]]''
| [[Coadan:Robert Harris, C.M.G., R.C.A. (I0007812).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1589
| ''[[:d:Q7345469|Robert Herring]]''
|
|
|
|-
| style='text-align:right'| 1590
| ''[[:d:Q7346107|Robert Jermain Thomas]]''
| [[Coadan:Robert Jermain Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1591
| ''[[:d:Q7346173|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 1592
| ''[[:d:Q7346178|Robert Jones]]''
| [[Coadan:Robert Jones (surgeon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1593
| ''[[:d:Q7346179|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 1594
| ''[[:d:Q7346183|R. J. Derfel]]''
| [[Coadan:Robert Jones Derfel (1824-1905) NLW3364553.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1595
| ''[[:d:Q7346820|Robert Lee Roberts]]''
|
|
|
|-
| style='text-align:right'| 1596
| ''[[:d:Q7346876|Robert Lewis-Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1597
| ''[[:d:Q7347000|Robert Lougher]]''
|
|
|
|-
| style='text-align:right'| 1598
| ''[[:d:Q7347323|Robert Mansell]]''
| [[Coadan:Mansell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1599
| ''[[:d:Q7347624|Robert Mends]]''
|
|
|
|-
| style='text-align:right'| 1600
| ''[[:d:Q7347692|Robert Mills-Roberts]]''
| [[Coadan:Preston north end art (Mills-Roberts).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1601
| ''[[:d:Q7347797|Robert Morgan]]''
| [[Coadan:Robert Morgan, Bishop of Bangor (1608-73).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1602
| ''[[:d:Q7348182|Robert Owen]]''
|
|
|
|-
| style='text-align:right'| 1603
| ''[[:d:Q7348749|Robert Parry]]''
|
|
|
|-
| style='text-align:right'| 1604
| ''[[:d:Q7349208|Robert Rees]]''
| [[Coadan:Eos Morlais.gif|center|128px]]
|
|
|-
| style='text-align:right'| 1605
| ''[[:d:Q7349268|Robert Richards]]''
|
|
|
|-
| style='text-align:right'| 1606
| ''[[:d:Q7349272|Robert Richardson-Gardner]]''
| [[Coadan:Robert Richardson-Gardner Vanity Fair 1877-02-17.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1607
| ''[[:d:Q7349314|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 1608
| ''[[:d:Q7349760|Robert Shields]]''
| [[Coadan:Portrait of Robert Shields (4670523) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1609
| ''[[:d:Q7350340|Robert Thomas]]''
| [[Coadan:Robert Thomas South Australian Register.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 1610
| ''[[:d:Q7350341|Robert Thomas]]''
| [[Coadan:Thefamily-sculpture-robert-thomas-7.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1611
| ''[[:d:Q7350584|Robert Vaughan]]''
|
|
|
|-
| style='text-align:right'| 1612
| ''[[:d:Q7350590|Robert Vaughn]]''
| [[Coadan:Robert Vaughn - Montana pioneer - 1900.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1613
| ''[[:d:Q7350786|Robert Waithman]]''
| [[Coadan:ONL (1887) 1.066 - Alderman Waithman, from an authentic portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1614
| ''[[:d:Q7350851|Robert Wanbon]]''
|
|
|
|-
| style='text-align:right'| 1615
| ''[[:d:Q7351086|Robert William Griffiths]]''
| [[Coadan:RWGriffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1616
| ''[[:d:Q7351121|Robert Williams]]''
| [[Coadan:Robert Williams (Trebor Mai, 1830-77) NLW3364532.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1617
| ''[[:d:Q7356340|Rod Richards]]''
| [[Coadan:Rodrogers1999.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1618
| ''[[:d:Q7356419|Rod de'Ath]]''
| [[Coadan:Rod de'Ath cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1619
| ''[[:d:Q7356486|Roddy Hughes]]''
|
|
|
|-
| style='text-align:right'| 1620
| ''[[:d:Q7356568|Roderic Bowen]]''
|
|
|
|-
| style='text-align:right'| 1621
| ''[[:d:Q7357782|Roger Addison]]''
|
|
|
|-
| style='text-align:right'| 1622
| ''[[:d:Q7358146|Roger Edwards]]''
| [[Coadan:Portrait of Roger Edwards (4674356) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1623
| ''[[:d:Q7358144|Roger Edgeworth]]''
|
|
|
|-
| style='text-align:right'| 1624
| ''[[:d:Q7358753|Roger Owen]]''
|
|
|
|-
| style='text-align:right'| 1625
| ''[[:d:Q7359001|Roger Thomas]]''
|
|
|
|-
| style='text-align:right'| 1626
| ''[[:d:Q7360342|Roland Mathias]]''
|
|
|
|-
| style='text-align:right'| 1627
| ''[[:d:Q7360675|Roley Williams]]''
|
|
|
|-
| style='text-align:right'| 1628
| ''[[:d:Q7363525|Ron Berry]]''
|
|
|
|-
| style='text-align:right'| 1629
| ''[[:d:Q7363679|Ron Davies]]''
|
|
|
|-
| style='text-align:right'| 1630
| ''[[:d:Q7363680|Ron Davies]]''
| [[Coadan:Ron davies thumbnail.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1631
| ''[[:d:Q7363838|Ron Gostick]]''
|
|
|
|-
| style='text-align:right'| 1632
| ''[[:d:Q7363946|Ron Howells]]''
|
|
|
|-
| style='text-align:right'| 1633
| ''[[:d:Q7363949|Ron Hughes]]''
|
|
|
|-
| style='text-align:right'| 1634
| ''[[:d:Q7363996|Ronald Jones]]''
|
|
|
|-
| style='text-align:right'| 1635
| ''[[:d:Q7364275|Ron Powell]]''
|
|
|
|-
| style='text-align:right'| 1636
| ''[[:d:Q5238274|David Owen]]''
|
|
|
|-
| style='text-align:right'| 1637
| ''[[:d:Q5238279|David Owen]]''
|
|
|
|-
| style='text-align:right'| 1638
| ''[[:d:Q5238403|David Parry-Jones]]''
|
|
|
|-
| style='text-align:right'| 1639
| ''[[:d:Q5238411|David Parry]]''
|
|
|
|-
| style='text-align:right'| 1640
| ''[[:d:Q5238466|David Pearce]]''
|
|
|
|-
| style='text-align:right'| 1641
| ''[[:d:Q5238564|David Phillips Jones]]''
|
|
|
|-
| style='text-align:right'| 1642
| ''[[:d:Q5238682|David Powell]]''
|
|
|
|-
| style='text-align:right'| 1643
| ''[[:d:Q5238710|David Price]]''
|
|
|
|-
| style='text-align:right'| 1644
| ''[[:d:Q5238746|David Pugh]]''
|
|
|
|-
| style='text-align:right'| 1645
| ''[[:d:Q5238958|David Rees]]''
| [[Coadan:David Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1646
| ''[[:d:Q5238956|David Rees-Williams, 1st Baron Ogmore]]''
| [[Coadan:Lord Ogmore.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1647
| ''[[:d:Q5239033|David Richards]]''
| [[Coadan:David Richards (Dafydd Ionawr, 1751-1827) (print) NLW3362443 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1648
| ''[[:d:Q5239157|David Rocyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 1649
| ''[[:d:Q5239456|David Samwell]]''
| [[Coadan:David samwell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1650
| ''[[:d:Q5239892|David Smith]]''
|
|
|
|-
| style='text-align:right'| 1651
| ''[[:d:Q5240335|David Thomas]]''
| [[Coadan:Photolithograph of Archdeacon D R Thomas, 1897..jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 1652
| ''[[:d:Q5240339|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 1653
| ''[[:d:Q5240340|David Thomas]]''
| [[Coadan:Dewi Hefin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1654
| ''[[:d:Q5240346|David Thomas]]''
| [[Coadan:Portrait of The Editor of 'The Homilist' (4672059).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1655
| ''[[:d:Q5240350|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 1656
| ''[[:d:Q5240355|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 1657
| ''[[:d:Q5240352|David Thomas]]''
| [[Coadan:Industrialist David Thomas.png|center|128px]]
|
|
|-
| style='text-align:right'| 1658
| ''[[:d:Q5240743|David W. Spencer]]''
|
|
|
|-
| style='text-align:right'| 1659
| ''[[:d:Q5240883|David Watts]]''
|
|
|
|-
| style='text-align:right'| 1660
| ''[[:d:Q5240884|David Watts Morgan]]''
| [[Coadan:David Watts Morgan 1923.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1661
| ''[[:d:Q5241114|David William Evans]]''
|
|
|
|-
| style='text-align:right'| 1662
| ''[[:d:Q5241124|David William Thomas]]''
|
|
|
|-
| style='text-align:right'| 1663
| ''[[:d:Q5241128|David Williams]]''
|
|
|
|-
| style='text-align:right'| 1664
| ''[[:d:Q5241134|David Williams]]''
| [[Coadan:David-Williams-Castell-Deudraeth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1665
| ''[[:d:Q5241137|David Williams]]''
|
|
|
|-
| style='text-align:right'| 1666
| ''[[:d:Q5241141|David Williams]]''
|
|
|
|-
| style='text-align:right'| 1667
| ''[[:d:Q5241167|David Willicombe]]''
|
|
|
|-
| style='text-align:right'| 1668
| ''[[:d:Q5241336|David Wynne]]''
|
|
|
|-
| style='text-align:right'| 1669
| ''[[:d:Q5247441|Gareth Williams]]''
|
|
|
|-
| style='text-align:right'| 1670
| ''[[:d:Q5249315|Declan Affley]]''
|
|
|
|-
| style='text-align:right'| 1671
| ''[[:d:Q5249703|Decuman]]''
| [[Coadan:Killag Church SE 2010 09 27.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1672
| ''[[:d:Q5249730|Deddie Davies]]''
|
|
|
|-
| style='text-align:right'| 1673
| ''[[:d:Q5252782|Deke Leonard]]''
| [[Coadan:Leonard 2015-09-12.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1674
| ''[[:d:Q5254281|Delme Bryn-Jones]]''
|
|
|
|-
| style='text-align:right'| 1675
| ''[[:d:Q5254967|Delwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 1676
| ''[[:d:Q5257247|Denis Galloway]]''
|
|
|
|-
| style='text-align:right'| 1677
| ''[[:d:Q5257297|Denis John Boocker]]''
|
|
|
|-
| style='text-align:right'| 1678
| ''[[:d:Q5257685|Denise Idris Jones]]''
| [[Coadan:Deniseidrisjones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1679
| ''[[:d:Q5258121|Dennis A'Court]]''
|
|
|
|-
| style='text-align:right'| 1680
| ''[[:d:Q5258163|Dennis Avoth]]''
|
|
|
|-
| style='text-align:right'| 1681
| ''[[:d:Q5258237|Dennis Burgess]]''
|
|
|
|-
| style='text-align:right'| 1682
| ''[[:d:Q5258574|Dennis John]]''
|
|
|
|-
| style='text-align:right'| 1683
| ''[[:d:Q5258650|Dennis Lewis]]''
|
|
|
|-
| style='text-align:right'| 1684
| ''[[:d:Q5258685|Dennis Madden]]''
|
|
|
|-
| style='text-align:right'| 1685
| ''[[:d:Q5258940|Dennis Selby]]''
|
|
|
|-
| style='text-align:right'| 1686
| ''[[:d:Q5258949|Dennis Shea]]''
|
|
|
|-
| style='text-align:right'| 1687
| ''[[:d:Q5259321|Densey Clyne]]''
|
|
|
|-
| style='text-align:right'| 1688
| ''[[:d:Q5259851|Denys Graham]]''
|
|
|
|-
| style='text-align:right'| 1689
| ''[[:d:Q5259856|Denys Irving]]''
|
|
|
|-
| style='text-align:right'| 1690
| ''[[:d:Q5261835|Derek Brewer]]''
|
|
|
|-
| style='text-align:right'| 1691
| ''[[:d:Q5261927|Derek Draper]]''
|
|
|
|-
| style='text-align:right'| 1692
| ''[[:d:Q5262285|Derek Prag]]''
|
|
|
|-
| style='text-align:right'| 1693
| ''[[:d:Q5262465|Derek Williams]]''
|
|
|
|-
| style='text-align:right'| 1694
| ''[[:d:Q5263436|Des Case]]''
|
|
|
|-
| style='text-align:right'| 1695
| ''[[:d:Q5263461|Des Harlock]]''
|
|
|
|-
| style='text-align:right'| 1696
| ''[[:d:Q5263558|Des Tennant]]''
|
|
|
|-
| style='text-align:right'| 1697
| ''[[:d:Q5264803|Desmond Skirrow]]''
|
|
|
|-
| style='text-align:right'| 1698
| ''[[:d:Q5268239|David Roberts]]''
| [[Coadan:David Roberts (Dewi Havhesp, 1831-84) NLW3361824.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1699
| ''[[:d:Q5268240|Dewi Morgan]]''
|
|
|
|-
| style='text-align:right'| 1700
| ''[[:d:Q5271247|Diana Morgan]]''
|
|
|
|-
| style='text-align:right'| 1701
| ''[[:d:Q5272311|Dic Aberdaron]]''
| [[Coadan:Dic Aberdaron 1823.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1702
| ''[[:d:Q5272316|Dic Goodman]]''
| [[Coadan:Youngtaid.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1703
| ''[[:d:Q5273043|Dick Huxtable]]''
|
|
|
|-
| style='text-align:right'| 1704
| ''[[:d:Q5273569|Dick Yates]]''
|
|
|
|-
| style='text-align:right'| 1705
| ''[[:d:Q5273682|Dickie David]]''
|
|
|
|-
| style='text-align:right'| 1706
| ''[[:d:Q5273702|Dickie Morris]]''
|
|
|
|-
| style='text-align:right'| 1707
| ''[[:d:Q5273709|Dickie Williams]]''
|
|
|
|-
| style='text-align:right'| 1708
| ''[[:d:Q5273850|Dicky Ralph]]''
|
|
|
|-
| style='text-align:right'| 1709
| ''[[:d:Q5276963|Dillwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1710
| ''[[:d:Q5276961|Dillwyn Miles]]''
|
|
|
|-
| style='text-align:right'| 1711
| ''[[:d:Q5277103|Dilwyn Lewis]]''
|
|
|
|-
| style='text-align:right'| 1712
| ''[[:d:Q5277105|Dilys Breese]]''
|
|
|
|-
| style='text-align:right'| 1713
| ''[[:d:Q5277110|Dilys Elwyn-Edwards]]''
|
|
|
|-
| style='text-align:right'| 1714
| ''[[:d:Q5277723|Dimmy Franks]]''
|
|
|
|-
| style='text-align:right'| 1715
| ''[[:d:Q5287114|Doc Sarpolis]]''
|
|
|
|-
| style='text-align:right'| 1716
| ''[[:d:Q5292506|Don Dearson]]''
|
|
|
|-
| style='text-align:right'| 1717
| ''[[:d:Q5292513|Don Devereux]]''
|
|
|
|-
| style='text-align:right'| 1718
| ''[[:d:Q5292576|Don Emery]]''
|
|
|
|-
| style='text-align:right'| 1719
| ''[[:d:Q5292760|Don Hayward]]''
| [[Coadan:Don Hayward 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1720
| ''[[:d:Q5293242|Don Oakes]]''
|
|
|
|-
| style='text-align:right'| 1721
| ''[[:d:Q5293514|Don Shepherd]]''
| [[Coadan:Don Shepherd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1722
| ''[[:d:Q5294021|Donald Baverstock]]''
|
|
|
|-
| style='text-align:right'| 1723
| ''[[:d:Q5294060|Donald Braithwaite]]''
|
|
|
|-
| style='text-align:right'| 1724
| ''[[:d:Q5294183|Donald Coleman]]''
|
|
|
|-
| style='text-align:right'| 1725
| ''[[:d:Q5294449|Donald Gullick]]''
|
|
|
|-
| style='text-align:right'| 1726
| ''[[:d:Q5294516|Donald Holroyde Hey]]''
|
|
|
|-
| style='text-align:right'| 1727
| ''[[:d:Q5295244|Donald Vines]]''
|
|
|
|-
| style='text-align:right'| 1728
| ''[[:d:Q5298404|Dorothy Edwards]]''
|
|
|
|-
| style='text-align:right'| 1729
| ''[[:d:Q5298551|Dorothy Miles]]''
|
|
|
|-
| style='text-align:right'| 1730
| ''[[:d:Q5298607|Dorothy Rees]]''
|
|
|
|-
| style='text-align:right'| 1731
| ''[[:d:Q5298632|Dorothy Simpson]]''
|
|
|
|-
| style='text-align:right'| 1732
| ''[[:d:Q5300818|Doug Phillips]]''
|
|
|
|-
| style='text-align:right'| 1733
| ''[[:d:Q5300842|Doug Rees]]''
|
|
|
|-
| style='text-align:right'| 1734
| ''[[:d:Q5301021|Doug Witcomb]]''
|
|
|
|-
| style='text-align:right'| 1735
| ''[[:d:Q6099393|Ivor Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1736
| ''[[:d:Q6099414|Ivor Herbert, 1st Baron Treowen]]''
| [[Coadan:Ivor John Caradoc Herbert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1737
| ''[[:d:Q6099424|Ivor Jones]]''
| [[Coadan:Ivor Jones 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1738
| ''[[:d:Q6099429|Ivor Jones]]''
|
|
|
|-
| style='text-align:right'| 1739
| ''[[:d:Q6099434|Ivor Lewis]]''
| [[Coadan:Ivor Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1740
| ''[[:d:Q6099547|Ivor Watts]]''
|
|
|
|-
| style='text-align:right'| 1741
| ''[[:d:Q6100567|Iwan Edwards]]''
|
|
|
|-
| style='text-align:right'| 1742
| ''[[:d:Q6105857|J. Gwyn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1743
| ''[[:d:Q6106368|J. Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 1744
| ''[[:d:Q6106503|J. Meirion Lloyd]]''
| [[Coadan:Picture Portrait of John M. Llyod.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1745
| ''[[:d:Q6107038|J. S. Matthews]]''
| [[Coadan:The Archivist at Work, J. S. Matthews, 1941.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1746
| ''[[:d:Q6109742|John Wallace Linton]]''
| [[Coadan:John Wallace Linton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1747
| ''[[:d:Q6111026|Jack Anthony]]''
| [[Coadan:M. Jack Anthony (jockey) - btv1b53098957c.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1748
| ''[[:d:Q6111191|Jack Bassett]]''
| [[Coadan:Jack Bassett 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1749
| ''[[:d:Q6111207|Jack Beames]]''
|
|
|
|-
| style='text-align:right'| 1750
| ''[[:d:Q6111561|Jack Capper]]''
|
|
|
|-
| style='text-align:right'| 1751
| ''[[:d:Q6111669|Jack Chilcott]]''
|
|
|
|-
| style='text-align:right'| 1752
| ''[[:d:Q6111849|Jack Court]]''
|
|
|
|-
| style='text-align:right'| 1753
| ''[[:d:Q6112296|Jack Edwards]]''
|
|
|
|-
| style='text-align:right'| 1754
| ''[[:d:Q6112306|Jack Edwards]]''
|
|
|
|-
| style='text-align:right'| 1755
| ''[[:d:Q6112343|Jack Elwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 1756
| ''[[:d:Q6112380|Jack Evans]]''
|
|
|
|-
| style='text-align:right'| 1757
| ''[[:d:Q6112390|Jack Evans]]''
|
|
|
|-
| style='text-align:right'| 1758
| ''[[:d:Q6112394|Jack Evans]]''
|
|
|
|-
| style='text-align:right'| 1759
| ''[[:d:Q6112392|Jack Evans]]''
|
|
|
|-
| style='text-align:right'| 1760
| ''[[:d:Q6112570|Jack Fowler]]''
|
|
|
|-
| style='text-align:right'| 1761
| ''[[:d:Q6112751|Jack Gore]]''
|
|
|
|-
| style='text-align:right'| 1762
| ''[[:d:Q6113228|Jack Howells]]''
|
|
|
|-
| style='text-align:right'| 1763
| ''[[:d:Q6113340|Jack Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1764
| ''[[:d:Q6113547|Jack L. Jones]]''
|
|
|
|-
| style='text-align:right'| 1765
| ''[[:d:Q6114189|Jack Morley]]''
| [[Coadan:Jack Morley 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1766
| ''[[:d:Q6114314|Jack Newnes]]''
|
|
|
|-
| style='text-align:right'| 1767
| ''[[:d:Q6114325|Jack Nicholls]]''
|
|
|
|-
| style='text-align:right'| 1768
| ''[[:d:Q6114593|Jack Petersen]]''
|
|
|
|-
| style='text-align:right'| 1769
| ''[[:d:Q6114657|Jack Powell]]''
| [[Coadan:Jack Powell, rugby player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1770
| ''[[:d:Q6114816|Jack Rhapps]]''
|
|
|
|-
| style='text-align:right'| 1771
| ''[[:d:Q6114855|Jack Rippon]]''
|
|
|
|-
| style='text-align:right'| 1772
| ''[[:d:Q6115221|Jack Smith]]''
|
|
|
|-
| style='text-align:right'| 1773
| ''[[:d:Q6115670|Jack Warner]]''
|
|
|
|-
| style='text-align:right'| 1774
| ''[[:d:Q6115734|Jack Wetter]]''
|
|
|
|-
| style='text-align:right'| 1775
| ''[[:d:Q6115766|Jack Whitfield]]''
|
|
|
|-
| style='text-align:right'| 1776
| ''[[:d:Q6115803|Jack Williams]]''
|
|
|
|-
| style='text-align:right'| 1777
| ''[[:d:Q6116226|Jackie Benyon]]''
|
|
|
|-
| style='text-align:right'| 1778
| ''[[:d:Q6116246|Jackie Bowen]]''
|
|
|
|-
| style='text-align:right'| 1779
| ''[[:d:Q6116543|Jackie Mittell]]''
|
|
|
|-
| style='text-align:right'| 1780
| ''[[:d:Q6116619|Jackie Roberts]]''
|
|
|
|-
| style='text-align:right'| 1781
| ''[[:d:Q6119347|Jacob Thomas]]''
|
|
|
|-
| style='text-align:right'| 1782
| ''[[:d:Q6120960|Santiago Jorge Bynnon]]''
| [[Coadan:Comte. S. J. Bynon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1783
| ''[[:d:Q6128579|Jim Alford]]''
|
|
|
|-
| style='text-align:right'| 1784
| ''[[:d:Q6128991|James Augustus St. John]]''
|
|
|
|-
| style='text-align:right'| 1785
| ''[[:d:Q6131297|James Childs Gould]]''
|
|
|
|-
| style='text-align:right'| 1786
| ''[[:d:Q6131667|James Conway Davies]]''
|
|
|
|-
| style='text-align:right'| 1787
| ''[[:d:Q6132403|James Davies Lewin]]''
| [[Coadan:James Davies Lewin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1788
| ''[[:d:Q6135632|James Harrison]]''
|
|
|
|-
| style='text-align:right'| 1789
| ''[[:d:Q6136324|James Howell]]''
| [[Coadan:James Howell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1790
| ''[[:d:Q6136411|James Humphreys]]''
|
|
|
|-
| style='text-align:right'| 1791
| ''[[:d:Q6136538|James Idwal Jones]]''
|
|
|
|-
| style='text-align:right'| 1792
| ''[[:d:Q6137411|James Kitchener Davies]]''
| [[Coadan:J Kitchener Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1793
| ''[[:d:Q6138128|James Llewellyn Davies]]''
|
|
|
|-
| style='text-align:right'| 1794
| ''[[:d:Q6139826|James Milo Griffith]]''
| [[Coadan:Portrait of James Milo Griffith (4670005).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1795
| ''[[:d:Q6140907|James Parfitt]]''
|
|
|
|-
| style='text-align:right'| 1796
| ''[[:d:Q6141972|James Relly]]''
|
|
|
|-
| style='text-align:right'| 1797
| ''[[:d:Q6142239|James Roberts]]''
|
|
|
|-
| style='text-align:right'| 1798
| ''[[:d:Q6142792|James Sauvage]]''
|
|
|
|-
| style='text-align:right'| 1799
| ''[[:d:Q6143570|James Stephens]]''
|
|
|
|-
| style='text-align:right'| 1800
| ''[[:d:Q6144426|James Trow]]''
| [[Coadan:JamesTrow23.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1801
| ''[[:d:Q6145491|James Wiegold]]''
| [[Coadan:James Wiegold.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1802
| ''[[:d:Q6145614|James William Richards]]''
|
|
|
|-
| style='text-align:right'| 1803
| ''[[:d:Q6145643|James Williams]]''
|
|
|
|-
| style='text-align:right'| 1804
| ''[[:d:Q6145721|James Winstone]]''
|
|
|
|-
| style='text-align:right'| 1805
| ''[[:d:Q6151119|Jane Arden]]''
|
|
|
|-
| style='text-align:right'| 1806
| ''[[:d:Q6151191|Jane Brereton]]''
|
|
|
|-
| style='text-align:right'| 1807
| ''[[:d:Q6152242|Jane Freeman]]''
|
|
|
|-
| style='text-align:right'| 1808
| ''[[:d:Q6172646|Jed Williams]]''
|
|
|
|-
| style='text-align:right'| 1809
| ''[[:d:Q6174369|Jeff Linton]]''
|
|
|
|-
| style='text-align:right'| 1810
| ''[[:d:Q6176030|Jeffrey Hamm]]''
| [[Coadan:Flag of the British Union of Fascists.svg|center|128px]]
|
|
|-
| style='text-align:right'| 1811
| ''[[:d:Q6176481|Jehoiada Brewer]]''
| [[Coadan:Jehoida Brewer Wyatt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1812
| ''[[:d:Q6177041|Jem Evans]]''
|
|
|
|-
| style='text-align:right'| 1813
| ''[[:d:Q6177165|Jemima Nicholas]]''
|
|
|
|-
| style='text-align:right'| 1814
| ''[[:d:Q6177538|Jenkin Alban Davies]]''
|
|
|
|-
| style='text-align:right'| 1815
| ''[[:d:Q6177549|Jenkin Lloyd Jones]]''
| [[Coadan:Dr. Jenkin Lloyd Jones LCCN2014700500 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1816
| ''[[:d:Q6177967|Jennie Eirian Davies]]''
|
|
|
|-
| style='text-align:right'| 1817
| ''[[:d:Q6178238|Jennifer Daniel]]''
|
|
|
|-
| style='text-align:right'| 1818
| ''[[:d:Q6178528|Jennifer Leak]]''
|
|
|
|-
| style='text-align:right'| 1819
| ''[[:d:Q6180635|Jere Blake]]''
| [[Coadan:Jere Blake 2.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1820
| ''[[:d:Q6184422|Jerry Shea]]''
|
|
|
|-
| style='text-align:right'| 1821
| ''[[:d:Q6193473|Jim Bacon]]''
|
|
|
|-
| style='text-align:right'| 1822
| ''[[:d:Q6194264|Jim Cole]]''
|
|
|
|-
| style='text-align:right'| 1823
| ''[[:d:Q6194552|Jim Davies]]''
|
|
|
|-
| style='text-align:right'| 1824
| ''[[:d:Q6196282|Jim Lang]]''
|
|
|
|-
| style='text-align:right'| 1825
| ''[[:d:Q6197427|Jim Pearce]]''
|
|
|
|-
| style='text-align:right'| 1826
| ''[[:d:Q6197530|Jim Pleass]]''
|
|
|
|-
| style='text-align:right'| 1827
| ''[[:d:Q6197601|Jim Pressdee]]''
|
|
|
|-
| style='text-align:right'| 1828
| ''[[:d:Q6199547|Jimmy Austin]]''
| [[Coadan:Jimmy Austin baseball card.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1829
| ''[[:d:Q6199562|Jimmy Baker]]''
|
|
|
|-
| style='text-align:right'| 1830
| ''[[:d:Q6200082|Jimmy Evans]]''
|
|
|
|-
| style='text-align:right'| 1831
| ''[[:d:Q6201287|Jimmy Singer]]''
|
|
|
|-
| style='text-align:right'| 1832
| ''[[:d:Q7174347|Peter Gray]]''
|
|
|
|-
| style='text-align:right'| 1833
| ''[[:d:Q7174491|Peter Halliday]]''
|
|
|
|-
| style='text-align:right'| 1834
| ''[[:d:Q7175376|Peter Law]]''
| [[Coadan:Peterlaw.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1835
| ''[[:d:Q7175951|Peter Morris]]''
|
|
|
|-
| style='text-align:right'| 1836
| ''[[:d:Q6204983|Joan Curran]]''
|
|
|
|-
| style='text-align:right'| 1837
| ''[[:d:Q6204998|Joan Davis]]''
|
|
|
|-
| style='text-align:right'| 1838
| ''[[:d:Q6911751|Morgan Lloyd]]''
| [[Coadan:Morgan-Lloyd-AS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1839
| ''[[:d:Q6911804|Morgan Owen]]''
|
|
|
|-
| style='text-align:right'| 1840
| ''[[:d:Q6911815|Morgan Phillips]]''
|
|
|
|-
| style='text-align:right'| 1841
| ''[[:d:Q6911824|Morgan Rhys]]''
|
|
|
|-
| style='text-align:right'| 1842
| ''[[:d:Q6915147|Morus Dwyfech]]''
|
|
|
|-
| style='text-align:right'| 1843
| ''[[:d:Q6915789|Moses Griffith]]''
| [[Coadan:Clynnog by Moses Griffith 1782.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1844
| ''[[:d:Q6915930|Moses Russell]]''
| [[Coadan:Moses Russell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1845
| ''[[:d:Q6917024|Mostyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 1846
| ''[[:d:Q6947452|Myfanwy Howell]]''
|
|
|
|-
| style='text-align:right'| 1847
| ''[[:d:Q6947457|Myfanwy Talog]]''
| [[Coadan:Myfanwy Talog.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1848
| ''[[:d:Q6947663|Myles Davies]]''
|
|
|
|-
| style='text-align:right'| 1849
| ''[[:d:Q6948163|John Jones]]''
| [[Coadan:Myrddin Fardd NLW3362574.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1850
| ''[[:d:Q6948612|Myrtle Devenish]]''
|
|
|
|-
| style='text-align:right'| 1851
| ''[[:d:Q6964248|Nansi Richards]]''
| [[Coadan:Mynytho's residents set about fundraising for the Urdd by using the theme 'Taste of the Ancient World' (1527347) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1852
| ''[[:d:Q6964330|Nantlais Williams]]''
| [[Coadan:A young W. Nantlais Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1853
| ''[[:d:Q6969314|Nathan Rogers]]''
|
|
|
|-
| style='text-align:right'| 1854
| ''[[:d:Q6969312|Nathan Rocyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 1855
| ''[[:d:Q6969710|Nathaniel Jones]]''
| [[Coadan:Nathaniel Cynhafal Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1856
| ''[[:d:Q6969928|Nathaniel Williams]]''
|
|
|
|-
| style='text-align:right'| 1857
| ''[[:d:Q6986019|Ned Jenkins]]''
|
|
|
|-
| style='text-align:right'| 1858
| ''[[:d:Q6986087|Ned Roberts]]''
|
|
|
|-
| style='text-align:right'| 1859
| ''[[:d:Q6989019|Neil McPherson]]''
|
|
|
|-
| style='text-align:right'| 1860
| ''[[:d:Q7002124|Noah Morgan Mason]]''
| [[Coadan:NoahMMason.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1861
| ''[[:d:Q7025356|Nicholas Evans]]''
|
|
|
|-
| style='text-align:right'| 1862
| ''[[:d:Q7025584|Nicholas Hunt]]''
|
|
|
|-
| style='text-align:right'| 1863
| ''[[:d:Q7026147|Nicholas Rudall]]''
|
|
|
|-
| style='text-align:right'| 1864
| ''[[:d:Q7031408|Niel Morgan]]''
|
|
|
|-
| style='text-align:right'| 1865
| ''[[:d:Q7032450|Nigel Heseltine]]''
|
|
|
|-
| style='text-align:right'| 1866
| ''[[:d:Q7032732|Nigel Yates]]''
|
|
|
|-
| style='text-align:right'| 1867
| ''[[:d:Q7039571|Nipper Pat Daly]]''
| [[Coadan:Daly (portrait du boxeur) - btv1b532217994.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1868
| ''[[:d:Q7045349|Noah Ablett]]''
|
|
|
|-
| style='text-align:right'| 1869
| ''[[:d:Q7046945|Noel Forbes Humphreys]]''
| [[Coadan:Noel Humphreys.png|center|128px]]
|
|
|-
| style='text-align:right'| 1870
| ''[[:d:Q7047028|Noel Jones]]''
|
|
|
|-
| style='text-align:right'| 1871
| ''[[:d:Q7047242|Noel Trigg]]''
|
|
|
|-
| style='text-align:right'| 1872
| ''[[:d:Q7052107|Norman Coslett]]''
|
|
|
|-
| style='text-align:right'| 1873
| ''[[:d:Q7052209|Norman Fender]]''
|
|
|
|-
| style='text-align:right'| 1874
| ''[[:d:Q7052330|Norman Harris]]''
|
|
|
|-
| style='text-align:right'| 1875
| ''[[:d:Q7052397|Norman Jacob]]''
|
|
|
|-
| style='text-align:right'| 1876
| ''[[:d:Q7052739|Norman Riches]]''
|
|
|
|-
| style='text-align:right'| 1877
| ''[[:d:Q7053254|Norrie Alden]]''
|
|
|
|-
| style='text-align:right'| 1878
| ''[[:d:Q7080312|Ogwyn Davies]]''
|
|
|
|-
| style='text-align:right'| 1879
| ''[[:d:Q7087219|Olive Wheeler]]''
|
|
|
|-
| style='text-align:right'| 1880
| ''[[:d:Q7087668|Oliver Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1881
| ''[[:d:Q7087707|Oliver Morris]]''
|
|
|
|-
| style='text-align:right'| 1882
| ''[[:d:Q7087761|Oliver Piper]]''
| [[Coadan:O.J.S. Piper.png|center|128px]]
|
|
|-
| style='text-align:right'| 1883
| ''[[:d:Q7087796|Oliver Robert Gould]]''
|
|
|
|-
| style='text-align:right'| 1884
| ''[[:d:Q7094141|Onllwyn Brace]]''
|
|
|
|-
| style='text-align:right'| 1885
| ''[[:d:Q7102440|Orig Williams]]''
|
|
|
|-
| style='text-align:right'| 1886
| ''[[:d:Q7103444|Ormond Jones]]''
|
|
|
|-
| style='text-align:right'| 1887
| ''[[:d:Q7106681|Osian Ellis]]''
| [[Coadan:Osian Ellis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1888
| ''[[:d:Q7106908|Michael Berry, Baron Hartwell]]''
|
|
|
|-
| style='text-align:right'| 1889
| ''[[:d:Q7107483|Ossie Jones]]''
|
|
|
|-
| style='text-align:right'| 1890
| ''[[:d:Q7107485|Ossie Male]]''
|
|
|
|-
| style='text-align:right'| 1891
| ''[[:d:Q7108121|Oswald Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1892
| ''[[:d:Q7114471|Owen Evans]]''
|
|
|
|-
| style='text-align:right'| 1893
| ''[[:d:Q7114531|Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 1894
| ''[[:d:Q7114528|Owen John Thomas]]''
| [[Coadan:Owen John Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1895
| ''[[:d:Q7114529|Owen Jones]]''
| [[Coadan:Portrait of Owain Jones, Myfyr (4670959) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1896
| ''[[:d:Q7114532|Owen Jones]]''
| [[Coadan:Owen Lewis Jones, 1953.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1897
| ''[[:d:Q7114543|Owen Lewis]]''
|
|
|
|-
| style='text-align:right'| 1898
| ''[[:d:Q7114583|Owen Morgan Edwards]]''
| [[Coadan:Owen Morgan Edwards in 1916 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1899
| ''[[:d:Q7114599|Owen Phillips]]''
| [[Coadan:Portrait of E. Owen Phillips (4670553).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1900
| ''[[:d:Q7114710|Owen Wynne]]''
|
|
|
|-
| style='text-align:right'| 1901
| ''[[:d:Q7114713|Owen Wynne Jones]]''
| [[Coadan:Revd Owen Wynne Jones (Glasynys, 1828-70) NLW3365408 Cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1902
| ''[[:d:Q7119548|P. K. Thomas]]''
|
|
|
|-
| style='text-align:right'| 1903
| ''[[:d:Q7128230|Palmer Griffiths]]''
|
|
|
|-
| style='text-align:right'| 1904
| ''[[:d:Q7138398|Parker Williams]]''
|
|
|
|-
| style='text-align:right'| 1905
| ''[[:d:Q7143239|Pat Brain]]''
|
|
|
|-
| style='text-align:right'| 1906
| ''[[:d:Q7145521|Patricia Clarke]]''
|
|
|
|-
| style='text-align:right'| 1907
| ''[[:d:Q7145665|Patricia Kane]]''
|
|
|
|-
| style='text-align:right'| 1908
| ''[[:d:Q7145670|Patricia Kern]]''
|
|
|
|-
| style='text-align:right'| 1909
| ''[[:d:Q7146558|Patrick Gibbs]]''
|
|
|
|-
| style='text-align:right'| 1910
| ''[[:d:Q7146653|Patrick Hannan]]''
|
|
|
|-
| style='text-align:right'| 1911
| ''[[:d:Q7149243|Paul Barrett]]''
| [[Coadan:Paul 'Legs' Barrett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1912
| ''[[:d:Q7149548|Paul Brown]]''
|
|
|
|-
| style='text-align:right'| 1913
| ''[[:d:Q7150515|Paul Erickson]]''
|
|
|
|-
| style='text-align:right'| 1914
| ''[[:d:Q7150980|Paul Grant]]''
|
|
|
|-
| style='text-align:right'| 1915
| ''[[:d:Q7152599|Paul Morgan]]''
|
|
|
|-
| style='text-align:right'| 1916
| ''[[:d:Q7154348|Paul Whitsun-Jones]]''
|
|
|
|-
| style='text-align:right'| 1917
| ''[[:d:Q7154476|Paul Woods]]''
|
|
|
|-
| style='text-align:right'| 1918
| ''[[:d:Q7155074|Pauline Peters]]''
|
|
|
|-
| style='text-align:right'| 1919
| ''[[:d:Q7167285|Percy Coldrick]]''
| [[Coadan:Percy Coldrick.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 1920
| ''[[:d:Q7167294|Percy Cudlipp]]''
|
|
|
|-
| style='text-align:right'| 1921
| ''[[:d:Q7167325|Percy Herbert]]''
| [[Coadan:Percy Egerton Herbert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1922
| ''[[:d:Q7167388|Percy Herbert, 2nd Baron Powis]]''
| [[Coadan:British (English) School - Sir Percy Herbert (c.1598–1667), 2nd Baron Powis - 1180923 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1923
| ''[[:d:Q7167435|Percy Jones]]''
|
|
|
|-
| style='text-align:right'| 1924
| ''[[:d:Q7167433|Percy Jones]]''
|
|
|
|-
| style='text-align:right'| 1925
| ''[[:d:Q7167462|Percy Lloyd]]''
|
|
|
|-
| style='text-align:right'| 1926
| ''[[:d:Q7167493|Percy Morgan]]''
|
|
|
|-
| style='text-align:right'| 1927
| ''[[:d:Q7172638|Peter Bailey Williams]]''
| [[Coadan:Portrait of Revd. Peter Bayley Williams (4674737) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1928
| ''[[:d:Q7173295|Peter Clarke]]''
|
|
|
|-
| style='text-align:right'| 1929
| ''[[:d:Q7173568|Peter Davies]]''
|
|
|
|-
| style='text-align:right'| 1931
| ''[[:d:Q1680829|James Miller]]''
|
|
|
|-
| style='text-align:right'| 1932
| ''[[:d:Q1685695|Jean McFarlane, Baroness McFarlane of Llandaff]]''
|
|
|
|-
| style='text-align:right'| 1933
| ''[[:d:Q1686862|Thomas Young]]''
|
|
|
|-
| style='text-align:right'| 1934
| ''[[:d:Q1691410|Joe Erskine]]''
|
|
|
|-
| style='text-align:right'| 1935
| ''[[:d:Q1691828|Joey Jones]]''
| [[Coadan:Joey Jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 1936
| ''[[:d:Q1699100|John Ainsworth-Davis]]''
| [[Coadan:Butler, Ainsworth-Davis, Lindsay, Griffiths 1920.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1937
| ''[[:d:Q1699421|John Brooks, Baron Brooks of Tremorfa]]''
|
|
|
|-
| style='text-align:right'| 1938
| ''[[:d:Q1700056|John Ffowcs Williams]]''
|
|
|
|-
| style='text-align:right'| 1939
| ''[[:d:Q1700207|John Gibson]]''
| [[Coadan:John Gibson by Margaret Sarah Carpenter (née Geddes).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1940
| ''[[:d:Q1700863|John Llewellyn Rhys]]''
|
|
|
|-
| style='text-align:right'| 1941
| ''[[:d:Q1700884|John Lort Stokes]]''
| [[Coadan:John Lort Stokes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1942
| ''[[:d:Q1700954|John Maddox]]''
|
|
|
|-
| style='text-align:right'| 1943
| ''[[:d:Q1701605|John Rogers Thomas]]''
|
|
|
|-
| style='text-align:right'| 1944
| ''[[:d:Q1701635|John Ryan]]''
|
|
|
|-
| style='text-align:right'| 1945
| ''[[:d:Q1701921|John Thomas]]''
| [[Coadan:Portrait of John Thomas (4671480).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1946
| ''[[:d:Q1701969|Tudor Walters]]''
| [[Coadan:Tudor Walters MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1947
| ''[[:d:Q1738621|Ken Jones]]''
|
|
|
|-
| style='text-align:right'| 1948
| ''[[:d:Q1738888|Kenneth Morris]]''
| [[Coadan:Kenneth Morris.png|center|128px]]
|
|
|-
| style='text-align:right'| 1949
| ''[[:d:Q1743733|Leslie Dilley]]''
|
|
|
|-
| style='text-align:right'| 1950
| ''[[:d:Q1743855|Thomas Jones]]''
| [[Coadan:Giuseppe Filippo Liberati Marchi (c.1735-1808) - Thomas Jones (1742–1803) - NMW A 82 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1951
| ''[[:d:Q1748013|Tom Linton]]''
| [[Coadan:Btv1b84489297-p099 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1952
| ''[[:d:Q1750774|Roger Rees]]''
| [[Coadan:Roger Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1953
| ''[[:d:Q1756405|Alfred Lawrence, 1st Baron Trevethin]]''
| [[Coadan:1stLordTrevethin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1954
| ''[[:d:Q1767904|Twm o'r Nant]]''
| [[Coadan:Twm o'r Nant (4702939).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1955
| ''[[:d:Q1768572|Mel Rees]]''
|
|
|
|-
| style='text-align:right'| 1956
| ''[[:d:Q1773997|William Edwards]]''
| [[Coadan:Portrait of Wm. Edwards Archt (4672851) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1957
| ''[[:d:Q1803014|Sir Albert Gladstone, 5th Baronet]]''
|
|
|
|-
| style='text-align:right'| 1958
| ''[[:d:Q1811580|William Cowhig]]''
|
|
|
|-
| style='text-align:right'| 1959
| ''[[:d:Q1815066|Leighton Rees]]''
|
|
|
|-
| style='text-align:right'| 1960
| ''[[:d:Q1842946|Gareth Wood]]''
|
|
|
|-
| style='text-align:right'| 1961
| ''[[:d:Q1889720|Cadoc]]''
| [[Coadan:Saint Cado.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1962
| ''[[:d:Q1894812|Margaret Delacourt-Smith, Baroness Delacourt-Smith of Alteryn]]''
|
|
|
|-
| style='text-align:right'| 1963
| ''[[:d:Q1900176|Mark Kendall]]''
|
|
|
|-
| style='text-align:right'| 1964
| ''[[:d:Q1900455|Mark Thomas]]''
|
|
|
|-
| style='text-align:right'| 1965
| ''[[:d:Q1921937|Merlyn Oliver Evans]]''
|
|
|
|-
| style='text-align:right'| 1966
| ''[[:d:Q1922184|Mervyn Johns]]''
| [[Coadan:1944TheHalfwayHouseMervynJohns.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1967
| ''[[:d:Q1933109|Mike Davies]]''
|
|
|
|-
| style='text-align:right'| 1968
| ''[[:d:Q1933327|Thomas James Powell]]''
|
|
|
|-
| style='text-align:right'| 1969
| ''[[:d:Q1972440|Timothy Evans]]''
|
|
|
|-
| style='text-align:right'| 1970
| ''[[:d:Q1974074|Ifor Williams]]''
|
|
|
|-
| style='text-align:right'| 1971
| ''[[:d:Q1975116|Robert Tear]]''
|
|
|
|-
| style='text-align:right'| 1972
| ''[[:d:Q2000214|Gary Sprake]]''
| [[Coadan:Fairs Cup final 1971, Causio, Bremner, Sprake, Juventus v Leeds.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1973
| ''[[:d:Q2005601|Steve Strange]]''
| [[Coadan:Steve Strange at Harrachov World Ski Championships.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1974
| ''[[:d:Q2008671|Leslie Palmer]]''
|
|
|
|-
| style='text-align:right'| 1975
| ''[[:d:Q2027321|Len Allchurch]]''
|
|
|
|-
| style='text-align:right'| 1976
| ''[[:d:Q2039045|Wyn Morris]]''
|
|
|
|-
| style='text-align:right'| 1977
| ''[[:d:Q2058500|John Perrot]]''
| [[Coadan:Sir John Perrot (c. 1527-1592) mezzotint after George Powle.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1978
| ''[[:d:Q2062366|Tydfil]]''
| [[Coadan:Llandaf, yr eglwys gadeiriol Llandaf Cathedral De Cymru South Wales 98.png|center|128px]]
|
|
|-
| style='text-align:right'| 1979
| ''[[:d:Q2072451|Walter Cowan]]''
| [[Coadan:Rear-admiral Sir Walter Henry Cowan, Kcb, Mvo, Dso - 1920 Art.IWMART3143.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1980
| ''[[:d:Q2078620|Peter Temple-Morris, Baron Temple-Morris]]''
|
|
|
|-
| style='text-align:right'| 1981
| ''[[:d:Q2084377|Mike Peters]]''
| [[Coadan:Mike Peters of The Alarm.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1982
| ''[[:d:Q2086073|Philip Bruce White]]''
| [[Coadan:Philip Bruce White, microbiologist, 1891-1946.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1983
| ''[[:d:Q2086499|Philip Vaughan]]''
|
|
|
|-
| style='text-align:right'| 1984
| ''[[:d:Q2133976|Ray Smith]]''
|
|
|
|-
| style='text-align:right'| 1985
| ''[[:d:Q2140313|William Henry Preece]]''
| [[Coadan:William Henry Preece mca.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1986
| ''[[:d:Q2144018|Spencer Davis]]''
| [[Coadan:Spencer Davis 08072006 NSU 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 1987
| ''[[:d:Q2148362|Rhys Williams]]''
| [[Coadan:Rhys Williams in Bonanza episode Bitter Water.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1988
| ''[[:d:Q2149093|Richard Bond]]''
|
|
|
|-
| style='text-align:right'| 1989
| ''[[:d:Q2150376|Richard Pearson]]''
|
|
|
|-
| style='text-align:right'| 1990
| ''[[:d:Q2159761|Robin Davies]]''
|
|
|
|-
| style='text-align:right'| 1991
| ''[[:d:Q2160835|Eleanor de Clare]]''
| [[Coadan:Elenor de clare.png|center|128px]]
|
|
|-
| style='text-align:right'| 1992
| ''[[:d:Q2165458|Ron Hewitt]]''
|
|
|
|-
| style='text-align:right'| 1993
| ''[[:d:Q2186278|Robert Jones]]''
| [[Coadan:Robert Jones (1857–1898).png|center|128px]]
|
|
|-
| style='text-align:right'| 1994
| ''[[:d:Q2187563|Alfred Hazledine]]''
|
|
|
|-
| style='text-align:right'| 1995
| ''[[:d:Q2196018|Trevor Ford]]''
| [[Coadan:Trevor Ford (1959).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1996
| ''[[:d:Q2271991|Walter Marshall, Baron Marshall of Goring]]''
|
|
|
|-
| style='text-align:right'| 1997
| ''[[:d:Q2280729|Dai Astley]]''
|
|
|
|-
| style='text-align:right'| 1998
| ''[[:d:Q2282661|Carol Ap Rhys Pryce]]''
| [[Coadan:General Carl Ap pryce.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 1999
| ''[[:d:Q2287423|Dwynwen]]''
| [[Coadan:View through the ruins of Saint Dwynwen's Church - geograph.org.uk - 5350254.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2000
| ''[[:d:Q2293838|Gordon Thomas]]''
|
|
|
|-
| style='text-align:right'| 2001
| ''[[:d:Q2354151|Barry Hughes]]''
| [[Coadan:Sparta-trainer Barry Hughes, Bestanddeelnr 930-9802 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2002
| ''[[:d:Q2355882|Stuart Cable]]''
| [[Coadan:Stuart Cable4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2003
| ''[[:d:Q2382658|Don Tarr]]''
|
|
|
|-
| style='text-align:right'| 2004
| ''[[:d:Q2383305|T. H. Parry-Williams]]''
| [[Coadan:Gwynedd Museum and Art Gallery 2019 079.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2005
| ''[[:d:Q2386801|Ian Watkins]]''
| [[Coadan:Ian Watkins (2010) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2006
| ''[[:d:Q2393901|Jim Driscoll]]''
| [[Coadan:Jim Driscoll 1910s.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2007
| ''[[:d:Q2398021|Brychan Brycheiniog]]''
| [[Coadan:Brychan (straightened) Eglwys Aberhonddu (Brecon, Wales) 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2008
| ''[[:d:Q2413249|Iris Gower]]''
|
|
|
|-
| style='text-align:right'| 2009
| ''[[:d:Q2421698|Ron Davies]]''
|
|
|
|-
| style='text-align:right'| 2010
| ''[[:d:Q2422650|Desmond Barrit]]''
|
|
|
|-
| style='text-align:right'| 2011
| ''[[:d:Q2423674|George Parsons]]''
|
|
|
|-
| style='text-align:right'| 2012
| ''[[:d:Q2424156|Thomas Garnet Henry James]]''
|
|
|
|-
| style='text-align:right'| 2013
| ''[[:d:Q2424681|Thomas Henry]]''
| [[Coadan:Thomas Henry (1734-1816).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2014
| ''[[:d:Q2424831|James Cellan Jones]]''
|
|
|
|-
| style='text-align:right'| 2015
| ''[[:d:Q2426055|Thomas McKenny Hughes]]''
|
|
|
|-
| style='text-align:right'| 2016
| ''[[:d:Q2435894|Elizabeth of Rhuddlan]]''
| [[Coadan:Elizabeth from Rhuddlan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2017
| ''[[:d:Q2440993|Tommy Farr]]''
| [[Coadan:Tommyfarr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2018
| ''[[:d:Q2454625|Jack Parry]]''
|
|
|
|-
| style='text-align:right'| 2019
| ''[[:d:Q2457794|David Van de Woestijne]]''
|
|
|
|-
| style='text-align:right'| 2020
| ''[[:d:Q2471118|Colin Webster]]''
|
|
|
|-
| style='text-align:right'| 2021
| ''[[:d:Q2476024|Christopher Love]]''
| [[Coadan:Portrait of Mr. Christophorus Love (4671633).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2022
| ''[[:d:Q2476943|Brioc]]''
| [[Coadan:015 Plonivel Saint Brieuc.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2023
| ''[[:d:Q2480212|Stuart Williams]]''
|
|
|
|-
| style='text-align:right'| 2024
| ''[[:d:Q2484394|William Boyd Dawkins]]''
| [[Coadan:William Boyd Dawkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2025
| ''[[:d:Q2487289|Non]]''
| [[Coadan:Dirinon (31) Chapelle Sainte-Nonne.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2026
| ''[[:d:Q2487332|Mel Charles]]''
|
|
|
|-
| style='text-align:right'| 2027
| ''[[:d:Q2488951|Cynog]]''
|
|
|
|-
| style='text-align:right'| 2028
| ''[[:d:Q2492966|John Williams]]''
| [[Coadan:Victoria Cross Winners- Pre 1914 Q88647.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2029
| ''[[:d:Q2501319|Aaron of Aleth]]''
| [[Coadan:Saint Aaron.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2030
| ''[[:d:Q6242038|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2031
| ''[[:d:Q5301238|Douglas Bassett]]''
| [[Coadan:Douglas Bassett.png|center|128px]]
|
|
|-
| style='text-align:right'| 2032
| ''[[:d:Q5301326|Douglas Chamberlain]]''
|
|
|
|-
| style='text-align:right'| 2033
| ''[[:d:Q5301413|Douglas Dickinson]]''
|
|
|
|-
| style='text-align:right'| 2034
| ''[[:d:Q5301668|David Jones]]''
|
|
|
|-
| style='text-align:right'| 2035
| ''[[:d:Q5301779|Douglas Marsden-Jones]]''
|
|
|
|-
| style='text-align:right'| 2036
| ''[[:d:Q5311941|Dudley Peake]]''
|
|
|
|-
| style='text-align:right'| 2037
| ''[[:d:Q5311954|Dudley Price]]''
|
|
|
|-
| style='text-align:right'| 2038
| ''[[:d:Q5314279|Duncan Bush]]''
|
|
|
|-
| style='text-align:right'| 2039
| ''[[:d:Q5318721|Dylan Harris]]''
|
|
|
|-
| style='text-align:right'| 2040
| ''[[:d:Q5321739|E. B. Powell]]''
| [[Coadan:Eyre Burton Powell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2041
| ''[[:d:Q5321815|E. D. Jones]]''
|
|
|
|-
| style='text-align:right'| 2042
| ''[[:d:Q5331737|Ebenezer Thomas]]''
| [[Coadan:Eben Fardd.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2043
| ''[[:d:Q5336169|Eddie Jones]]''
|
|
|
|-
| style='text-align:right'| 2044
| ''[[:d:Q5336328|Eddie Morgan]]''
|
|
|
|-
| style='text-align:right'| 2045
| ''[[:d:Q5336386|Eddie Parris]]''
|
|
|
|-
| style='text-align:right'| 2046
| ''[[:d:Q5336493|Eddie Smart]]''
|
|
|
|-
| style='text-align:right'| 2047
| ''[[:d:Q5336533|Eddie Thomas]]''
| [[Coadan:EddieThomasSculptureMerthyr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2048
| ''[[:d:Q5336559|Eddie Watkins]]''
|
|
|
|-
| style='text-align:right'| 2049
| ''[[:d:Q5337183|Edgar Cooper]]''
|
|
|
|-
| style='text-align:right'| 2050
| ''[[:d:Q5337227|Edgar Evans]]''
|
|
|
|-
| style='text-align:right'| 2051
| ''[[:d:Q5337317|Edgar Jones]]''
|
|
|
|-
| style='text-align:right'| 2052
| ''[[:d:Q5337382|Edgar Montford]]''
|
|
|
|-
| style='text-align:right'| 2053
| ''[[:d:Q5337386|Edgar Morgan]]''
|
|
|
|-
| style='text-align:right'| 2054
| ''[[:d:Q5337384|Edgar Morgan]]''
|
|
|
|-
| style='text-align:right'| 2055
| ''[[:d:Q5337422|Edgar Phillips]]''
| [[Coadan:Cyhoeddi Eisteddfod Genedlaethol 1962, Llanelli yn 1961 (1468338).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2056
| ''[[:d:Q5337426|Edgar Purnell Hooley]]''
|
|
|
|-
| style='text-align:right'| 2057
| ''[[:d:Q5337424|Edgar Powell]]''
|
|
|
|-
| style='text-align:right'| 2058
| ''[[:d:Q5337436|Edgar Rees Jones]]''
| [[Coadan:Edgar-Jones-AS-Merthyr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2059
| ''[[:d:Q5338553|Edith Gostick]]''
| [[Coadan:Edith Hannah Gostick.png|center|128px]]
|
|
|-
| style='text-align:right'| 2060
| ''[[:d:Q5339515|Edmund Griffith]]''
|
|
|
|-
| style='text-align:right'| 2061
| ''[[:d:Q5339668|Edmund Meyrick]]''
| [[Coadan:Unknown artist - Edmund Meyricke (1636–1713) - PCF19 - Jesus College.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2062
| ''[[:d:Q5339760|Edmund Prys]]''
| [[Coadan:Edmwnd Edmund Prys ar Gofeb Llanelwy, Sir Ddinbych Bible Translators' Memorial St Asaph 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2063
| ''[[:d:Q5339891|Edmund W. Samuel]]''
| [[Coadan:EdmundWSamuel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2064
| ''[[:d:Q5341722|Edward Baker]]''
|
|
|
|-
| style='text-align:right'| 2065
| ''[[:d:Q5341900|Edward Bishop]]''
| [[Coadan:Edward Bishop rugby player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2066
| ''[[:d:Q5341916|Edward Blayney, 1st Baron Blayney]]''
|
|
|
|-
| style='text-align:right'| 2067
| ''[[:d:Q5342184|Edward Cadogan]]''
|
|
|
|-
| style='text-align:right'| 2068
| ''[[:d:Q5342230|Edward Caswell]]''
|
|
|
|-
| style='text-align:right'| 2069
| ''[[:d:Q5342535|Edward Davies]]''
|
|
|
|-
| style='text-align:right'| 2070
| ''[[:d:Q5342662|Edward Dumaresq]]''
|
|
|
|-
| style='text-align:right'| 2071
| ''[[:d:Q5342738|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 2072
| ''[[:d:Q5342788|Edward Ernest Hughes]]''
|
|
|
|-
| style='text-align:right'| 2073
| ''[[:d:Q5342797|Edward Evans]]''
|
|
|
|-
| style='text-align:right'| 2074
| ''[[:d:Q5343428|Edward Herbert, 2nd Earl of Powis]]''
| [[Coadan:Edward Herbert, 2nd Earl of Powis, by Francis Grant.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2075
| ''[[:d:Q5343522|Edward Howel Francis]]''
|
|
|
|-
| style='text-align:right'| 2076
| ''[[:d:Q5343539|Edward Hughes]]''
|
|
|
|-
| style='text-align:right'| 2077
| ''[[:d:Q5343621|Edward J. Blythin]]''
|
|
|
|-
| style='text-align:right'| 2078
| ''[[:d:Q5343718|Edward James]]''
|
|
|
|-
| style='text-align:right'| 2079
| ''[[:d:Q5343717|Edward James]]''
|
|
|
|-
| style='text-align:right'| 2080
| ''[[:d:Q5343788|Edward John Lewis]]''
|
|
|
|-
| style='text-align:right'| 2081
| ''[[:d:Q5343822|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 2082
| ''[[:d:Q5343827|Edward Jones]]''
| [[Coadan:St Etheldreda, Ely Place, London EC1 - Nave statue - geograph.org.uk - 1613372.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2083
| ''[[:d:Q5344278|Edward M. Lewis]]''
| [[Coadan:EdwardMorganLewis.png|center|128px]]
|
|
|-
| style='text-align:right'| 2084
| ''[[:d:Q5344507|Edward Moore]]''
|
|
|
|-
| style='text-align:right'| 2085
| ''[[:d:Q5344515|Edward Morgan]]''
| [[Coadan:Venerable-edward-morgan.png|center|128px]]
|
|
|-
| style='text-align:right'| 2086
| ''[[:d:Q5344711|Edward Owen]]''
| [[Coadan:Edward Owen AM (died 1807).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2087
| ''[[:d:Q5344807|Edward Pegge]]''
| [[Coadan:Edward Pegge.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2088
| ''[[:d:Q5344829|Edward Perkins Alexander]]''
|
|
|
|-
| style='text-align:right'| 2089
| ''[[:d:Q5344893|Edward Powell]]''
|
|
|
|-
| style='text-align:right'| 2090
| ''[[:d:Q5345094|Edward Roderick Davies]]''
|
|
|
|-
| style='text-align:right'| 2091
| ''[[:d:Q5345410|Edward Stanley, 4th Baron Stanley of Alderley]]''
| [[Coadan:Edward Lyulph Stanley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2092
| ''[[:d:Q5345430|Edward Stephen]]''
| [[Coadan:Revd Edward (Jones) Stephen (Tanymarian, 1822-85) NLW3362706.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2093
| ''[[:d:Q5345588|Edward Thomas Chapman]]''
|
|
|
|-
| style='text-align:right'| 2094
| ''[[:d:Q5345705|Edward Vaughan]]''
|
|
|
|-
| style='text-align:right'| 2095
| ''[[:d:Q5345834|Edward Welch]]''
|
|
|
|-
| style='text-align:right'| 2096
| ''[[:d:Q5345919|Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 2097
| ''[[:d:Q5346009|Edward Wynne]]''
|
|
|
|-
| style='text-align:right'| 2098
| ''[[:d:Q5346324|Edwin Cross]]''
|
|
|
|-
| style='text-align:right'| 2099
| ''[[:d:Q5346531|Edwin Hughes]]''
| [[Coadan:Balaclavaned.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2100
| ''[[:d:Q5346733|Edwin Pain]]''
|
|
|
|-
| style='text-align:right'| 2101
| ''[[:d:Q5346868|Edwin Thomas Maynard]]''
| [[Coadan:Edwin Thomas Maynard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2102
| ''[[:d:Q5346920|Edwin Williams]]''
|
|
|
|-
| style='text-align:right'| 2103
| ''[[:d:Q5348887|Eifion Jones]]''
|
|
|
|-
| style='text-align:right'| 2104
| ''[[:d:Q5349538|Eiluned Lewis]]''
|
|
|
|-
| style='text-align:right'| 2105
| ''[[:d:Q5349883|Eirug Wyn]]''
|
|
|
|-
| style='text-align:right'| 2106
| ''[[:d:Q5354271|Eleanor Evans]]''
|
|
|
|-
| style='text-align:right'| 2107
| ''[[:d:Q5354460|Eleazar Roberts]]''
| [[Coadan:Eleazar Roberts.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2108
| ''[[:d:Q5359886|Elfed Morris]]''
|
|
|
|-
| style='text-align:right'| 2109
| ''[[:d:Q5359884|Elfed Evans]]''
|
|
|
|-
| style='text-align:right'| 2110
| ''[[:d:Q5359949|Elfyn Richards]]''
| [[Coadan:Elfyn Richards (2010).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2111
| ''[[:d:Q5360574|Elias Owen]]''
| [[Coadan:Elias Owen Jr..jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2112
| ''[[:d:Q5360573|Elias Owen]]''
| [[Coadan:Elias Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2113
| ''[[:d:Q5360783|Eliezer Williams]]''
|
|
|
|-
| style='text-align:right'| 2114
| ''[[:d:Q5362301|Elizabeth Andrews]]''
|
|
|
|-
| style='text-align:right'| 2115
| ''[[:d:Q5362547|Elizabeth Casson]]''
|
|
|
|-
| style='text-align:right'| 2116
| ''[[:d:Q5363245|Elizabeth Mortimer]]''
|
|
|
|-
| style='text-align:right'| 2117
| ''[[:d:Q5363403|Elizabeth Randles]]''
| [[Coadan:Elizabeth Randles.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2118
| ''[[:d:Q5363418|Elizabeth Harris Aitken]]''
|
|
|
|-
| style='text-align:right'| 2119
| ''[[:d:Q6242070|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2120
| ''[[:d:Q6242277|John Josiah Guest]]''
| [[Coadan:Sir J. J. Guest (?). Mezzotint by W. Walker, 1852, after R. Wellcome V0006515 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2121
| ''[[:d:Q6242653|Daniel P Williams]]''
|
|
|
|-
| style='text-align:right'| 2122
| ''[[:d:Q6242756|John Kelt Edwards]]''
| [[Coadan:J K Edwards & Dr Roberts (5254811) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2123
| ''[[:d:Q6243125|John King]]''
|
|
|
|-
| style='text-align:right'| 2124
| ''[[:d:Q6244480|John Leighton Davies]]''
|
|
|
|-
| style='text-align:right'| 2125
| ''[[:d:Q6244754|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 2126
| ''[[:d:Q6245031|John Lloyd]]''
| [[Coadan:Portrait of The Reverend John Lloyd Rector of Caerwis (4671619).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2127
| ''[[:d:Q6245033|John Lloyd]]''
| [[Coadan:Rev. John Lloyd 1780 by Moses Griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2128
| ''[[:d:Q6245044|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2129
| ''[[:d:Q6245058|John Lloyd Morgan]]''
| [[Coadan:John Lloyd Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2130
| ''[[:d:Q6245362|John Love Jones]]''
|
|
|
|-
| style='text-align:right'| 2131
| ''[[:d:Q5363690|Elizabeth Watkin-Jones]]''
|
|
|
|-
| style='text-align:right'| 2132
| ''[[:d:Q5365877|Ellis Evans]]''
|
|
|
|-
| style='text-align:right'| 2133
| ''[[:d:Q5368039|Elvet Jones]]''
|
|
|
|-
| style='text-align:right'| 2134
| ''[[:d:Q5368267|Elvyn Bowen]]''
|
|
|
|-
| style='text-align:right'| 2135
| ''[[:d:Q5368370|Elwyn Gwyther]]''
|
|
|
|-
| style='text-align:right'| 2136
| ''[[:d:Q5368372|Elwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 2137
| ''[[:d:Q5368405|Ely Devons]]''
|
|
|
|-
| style='text-align:right'| 2138
| ''[[:d:Q5372673|Emlyn Davies]]''
|
|
|
|-
| style='text-align:right'| 2139
| ''[[:d:Q5372676|Emlyn Gwynne]]''
|
|
|
|-
| style='text-align:right'| 2140
| ''[[:d:Q6205148|Joan Howson]]''
| [[Coadan:Pettaugh window.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2141
| ''[[:d:Q6209387|Joe Davies]]''
|
|
|
|-
| style='text-align:right'| 2142
| ''[[:d:Q6209389|Joe Davies]]''
|
|
|
|-
| style='text-align:right'| 2143
| ''[[:d:Q6210540|Joe Johns]]''
|
|
|
|-
| style='text-align:right'| 2144
| ''[[:d:Q6210576|Joe Jones]]''
|
|
|
|-
| style='text-align:right'| 2145
| ''[[:d:Q6210580|Joe Jones]]''
|
|
|
|-
| style='text-align:right'| 2146
| ''[[:d:Q6215184|John Trevor]]''
| [[Coadan:Sir John Trevor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2147
| ''[[:d:Q6218655|John Alf Brown]]''
| [[Coadan:John Alf Brown.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2148
| ''[[:d:Q6220486|John Ballinger]]''
| [[Coadan:John Ballinger, S. K. Greenslade, Evan Davies Jones and Sir John Williams with the American Ambassador , the Hon. Whitelaw Reid (5449722).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2149
| ''[[:d:Q6221041|John Basson Humffray]]''
|
|
|
|-
| style='text-align:right'| 2150
| ''[[:d:Q6221065|John Batchelor]]''
| [[Coadan:John Batchelor statue, The Hayes, Cardiff.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2151
| ''[[:d:Q6223123|John Breynton]]''
| [[Coadan:John Breynton.png|center|128px]]
|
|
|-
| style='text-align:right'| 2152
| ''[[:d:Q6224066|John Bury]]''
|
|
|
|-
| style='text-align:right'| 2153
| ''[[:d:Q6224719|John Cadvan Davies]]''
| [[Coadan:Revd John Cadvan Davies (Cadvan, 1846-1923) NLW3364602.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2154
| ''[[:d:Q6224716|John Cadogan]]''
|
|
|
|-
| style='text-align:right'| 2155
| ''[[:d:Q6225143|John Cargill Brough]]''
|
|
|
|-
| style='text-align:right'| 2156
| ''[[:d:Q6225585|John Cayo Evans]]''
|
|
|
|-
| style='text-align:right'| 2157
| ''[[:d:Q6225635|John Challen]]''
| [[Coadan:John Challen c1895cr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2158
| ''[[:d:Q6225689|John Chandless]]''
|
|
|
|-
| style='text-align:right'| 2159
| ''[[:d:Q6225882|John Cheshire]]''
|
|
|
|-
| style='text-align:right'| 2160
| ''[[:d:Q6226439|John Coates]]''
|
|
|
|-
| style='text-align:right'| 2161
| ''[[:d:Q6226726|John Collins]]''
|
|
|
|-
| style='text-align:right'| 2162
| ''[[:d:Q6228033|John Cutt]]''
|
|
|
|-
| style='text-align:right'| 2163
| ''[[:d:Q6228290|John D. Reese]]''
|
|
|
|-
| style='text-align:right'| 2164
| ''[[:d:Q6228759|John Davies]]''
| [[Coadan:John Davies (historian).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2165
| ''[[:d:Q6228764|John Davies]]''
|
|
|
|-
| style='text-align:right'| 2166
| ''[[:d:Q6228770|John Davies]]''
|
|
|
|-
| style='text-align:right'| 2167
| ''[[:d:Q6229241|John Derrick]]''
|
|
|
|-
| style='text-align:right'| 2168
| ''[[:d:Q6230602|John Dyke]]''
|
|
|
|-
| style='text-align:right'| 2169
| ''[[:d:Q6231293|John Edward Daniel]]''
| [[Coadan:JEDaniel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2170
| ''[[:d:Q6231366|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 2171
| ''[[:d:Q6231368|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 2172
| ''[[:d:Q6231378|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 2173
| ''[[:d:Q6231381|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 2174
| ''[[:d:Q6231573|John Elias]]''
| [[Coadan:William Roos - John Elias (1839).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2175
| ''[[:d:Q6231655|John Ellis]]''
|
|
|
|-
| style='text-align:right'| 2176
| ''[[:d:Q6231675|John Ellis]]''
|
|
|
|-
| style='text-align:right'| 2177
| ''[[:d:Q6231753|John Emlyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 2178
| ''[[:d:Q6231972|John Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 2179
| ''[[:d:Q6231979|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2180
| ''[[:d:Q6231977|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2181
| ''[[:d:Q6231984|John Evans]]''
| [[Coadan:Rev. John Evans, Llwynfortun.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2182
| ''[[:d:Q6231990|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2183
| ''[[:d:Q6231996|John Evans]]''
| [[Coadan:Bp John Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2184
| ''[[:d:Q6232005|John Evans]]''
| [[Coadan:Portrait of John Evans, D.D (4673284).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2185
| ''[[:d:Q6232015|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2186
| ''[[:d:Q6232012|John Evans]]''
| [[Coadan:John Evans, Careening, from the Pirates of the Spanish Main series (N19) for Allen & Ginter Cigarettes MET DP835003.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2187
| ''[[:d:Q6232013|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2188
| ''[[:d:Q6232017|John Evans]]''
|
|
|
|-
| style='text-align:right'| 2189
| ''[[:d:Q6232808|John Faull]]''
|
|
|
|-
| style='text-align:right'| 2190
| ''[[:d:Q6233557|John Foley]]''
|
|
|
|-
| style='text-align:right'| 2191
| ''[[:d:Q6234190|John Freeman]]''
|
|
|
|-
| style='text-align:right'| 2192
| ''[[:d:Q6234314|John Frowen]]''
|
|
|
|-
| style='text-align:right'| 2193
| ''[[:d:Q6235701|John Goodman]]''
|
|
|
|-
| style='text-align:right'| 2194
| ''[[:d:Q6235888|John Goulstone Lewis]]''
|
|
|
|-
| style='text-align:right'| 2195
| ''[[:d:Q6236103|John Gray]]''
|
|
|
|-
| style='text-align:right'| 2196
| ''[[:d:Q6236372|John Griffith]]''
| [[Coadan:Sir John Purser Griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2197
| ''[[:d:Q6236405|John Griffiths]]''
| [[Coadan:Portrait of John Griffiths (4672891).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2198
| ''[[:d:Q6236409|John Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2199
| ''[[:d:Q6236665|John Gwenogvryn Evans]]''
| [[Coadan:J. Gwenogvryn Evans (1852–1930), MA, DLitt (gcf01707).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2200
| ''[[:d:Q6236821|John H. Fisher]]''
|
|
|
|-
| style='text-align:right'| 2201
| ''[[:d:Q6237166|John Habakkuk]]''
|
|
|
|-
| style='text-align:right'| 2202
| ''[[:d:Q6237949|John Harris]]''
|
|
|
|-
| style='text-align:right'| 2203
| ''[[:d:Q6238798|John Henry Evans]]''
|
|
|
|-
| style='text-align:right'| 2204
| ''[[:d:Q6239362|John Hinds]]''
| [[Coadan:John Hinds.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2205
| ''[[:d:Q6240302|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 2206
| ''[[:d:Q6240404|John Humphreys Davies]]''
| [[Coadan:John Humphreys Davies (5292076).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2207
| ''[[:d:Q6240740|John Iltyd Nicholl]]''
| [[Coadan:The House of Commons, 1833 by Sir George Hayter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2208
| ''[[:d:Q6240907|John Islan Jones]]''
|
|
|
|-
| style='text-align:right'| 2209
| ''[[:d:Q6241609|John James Williams]]''
| [[Coadan:John James Williams (JJ).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2210
| ''[[:d:Q6241666|John Jarman]]''
|
|
|
|-
| style='text-align:right'| 2211
| ''[[:d:Q6241779|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2212
| ''[[:d:Q6241777|John Jenkins]]''
| [[Coadan:John Gwili Jenkins (5254851).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2213
| ''[[:d:Q6241786|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2214
| ''[[:d:Q6242001|John Jones]]''
| [[Coadan:Revd John Jones, Talysarn 1796-1857.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2215
| ''[[:d:Q6242004|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2216
| ''[[:d:Q6242009|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2217
| ''[[:d:Q6242023|John Jones]]''
| [[Coadan:Portrait of Mr. John Jones, Plymouth Dock (4673762).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2218
| ''[[:d:Q6242024|John Jones]]''
| [[Coadan:Llun johnjones bangor sas1923 tud272.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2219
| ''[[:d:Q6242032|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2220
| ''[[:d:Q6242042|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2221
| ''[[:d:Q6242046|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2222
| ''[[:d:Q6242044|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2223
| ''[[:d:Q6242062|John Jones]]''
| [[Coadan:Portrait of John Jones (4671536) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2224
| ''[[:d:Q6242066|John Jones]]''
|
|
|
|-
| style='text-align:right'| 2225
| ''[[:d:Q7364652|Ronald Atkins]]''
|
|
|
|-
| style='text-align:right'| 2226
| ''[[:d:Q7364676|Ronald Bell]]''
|
|
|
|-
| style='text-align:right'| 2227
| ''[[:d:Q7364729|Ronald Cass]]''
|
|
|
|-
| style='text-align:right'| 2228
| ''[[:d:Q7365011|Ronald Karslake Starr Wood]]''
|
|
|
|-
| style='text-align:right'| 2229
| ''[[:d:Q7365062|Ronald Lewis]]''
|
|
|
|-
| style='text-align:right'| 2230
| ''[[:d:Q7365384|Ronald Waterhouse]]''
|
|
|
|-
| style='text-align:right'| 2231
| ''[[:d:Q7365803|Ronnie Boon]]''
|
|
|
|-
| style='text-align:right'| 2232
| ''[[:d:Q7365892|Ronnie James]]''
|
|
|
|-
| style='text-align:right'| 2233
| ''[[:d:Q7365964|Ronnie Rees]]''
|
|
|
|-
| style='text-align:right'| 2234
| ''[[:d:Q7368892|Rosie Harris]]''
|
|
|
|-
| style='text-align:right'| 2235
| ''[[:d:Q7371713|Rovi]]''
|
|
|
|-
| style='text-align:right'| 2236
| ''[[:d:Q7372122|Rowland Ellis]]''
|
|
|
|-
| style='text-align:right'| 2237
| ''[[:d:Q7372121|Rowland Ellis]]''
|
|
|
|-
| style='text-align:right'| 2238
| ''[[:d:Q7372152|Rowland Jones]]''
|
|
|
|-
| style='text-align:right'| 2239
| ''[[:d:Q7372156|Rowland Laugharne]]''
| [[Coadan:Portrait of Coll. Langhorne (4673350) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2240
| ''[[:d:Q7372176|Rowland Prichard]]''
| [[Coadan:Portrait of Mr. Pritchard (4670459).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2241
| ''[[:d:Q7372196|Rowland Vaughan]]''
| [[Coadan:Caer Gai, Llanuwchllyn, Plasty o'r 17g y tu fewn i gaer Rhufeinig; a grade II* important mid C17 gentry house withing a Roman fort (Caer Gai); Eryri National Park 10.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2242
| ''[[:d:Q7372206|Rowland Williams]]''
| [[Coadan:Revd Rowland Williams (Hwfa Mon, 1823-1905) NLW3361827 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2243
| ''[[:d:Q7372204|Rowland Williams]]''
|
|
|
|-
| style='text-align:right'| 2244
| ''[[:d:Q7372734|Roy Davies]]''
|
|
|
|-
| style='text-align:right'| 2245
| ''[[:d:Q7372783|Roy Evans]]''
|
|
|
|-
| style='text-align:right'| 2246
| ''[[:d:Q7372819|Roy Francis]]''
|
|
|
|-
| style='text-align:right'| 2247
| ''[[:d:Q7372899|Roy Harris]]''
|
|
|
|-
| style='text-align:right'| 2248
| ''[[:d:Q7373003|Roy John]]''
|
|
|
|-
| style='text-align:right'| 2249
| ''[[:d:Q7377413|Rudolph Feilding, 9th Earl of Denbigh]]''
| [[Coadan:Earl of Denbigh Vanity Fair 23 August 1894.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2250
| ''[[:d:Q7380331|Rupert Morris]]''
|
|
|
|-
| style='text-align:right'| 2251
| ''[[:d:Q7381435|Russell Coughlin]]''
|
|
|
|-
| style='text-align:right'| 2252
| ''[[:d:Q7381750|Russell Robins]]''
|
|
|
|-
| style='text-align:right'| 2253
| ''[[:d:Q7381817|Russell Taylor]]''
|
|
|
|-
| style='text-align:right'| 2254
| ''[[:d:Q7382906|Ruth Bidgood]]''
|
|
|
|-
| style='text-align:right'| 2255
| ''[[:d:Q7384008|Ryan Davies]]''
| [[Coadan:Ffrindiau Ryan, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2256
| ''[[:d:Q7385154|Ryland Davies]]''
|
|
|
|-
| style='text-align:right'| 2257
| ''[[:d:Q7387186|S.G. Courteen]]''
|
|
|
|-
| style='text-align:right'| 2258
| ''[[:d:Q7387421|Stephen Dewar Holden]]''
|
|
|
|-
| style='text-align:right'| 2259
| ''[[:d:Q7387725|S. O. Davies]]''
| [[Coadan:S.O. Davies portrait 1490010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2260
| ''[[:d:Q7401077|Saint Caradoc]]''
|
|
|
|-
| style='text-align:right'| 2261
| ''[[:d:Q7401174|Derfel]]''
|
|
|
|-
| style='text-align:right'| 2262
| ''[[:d:Q7401197|Saint Eigen]]''
| [[Coadan:St Eigon, Llanigon - geograph.org.uk - 714248.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2263
| ''[[:d:Q7405039|Sally Amis]]''
|
|
|
|-
| style='text-align:right'| 2264
| ''[[:d:Q7407801|Sam Livesey]]''
|
|
|
|-
| style='text-align:right'| 2265
| ''[[:d:Q7407834|Sam Mainwaring]]''
|
|
|
|-
| style='text-align:right'| 2266
| ''[[:d:Q7410805|Samuel Augustus Perry]]''
|
|
|
|-
| style='text-align:right'| 2267
| ''[[:d:Q7411260|Samuel Devons]]''
|
|
|
|-
| style='text-align:right'| 2268
| ''[[:d:Q7411541|Samuel Griffith]]''
| [[Coadan:SamuelGriffithPA.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2269
| ''[[:d:Q7411771|Samuel Ifor Enoch]]''
| [[Coadan:Sienoch.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2270
| ''[[:d:Q7411824|Samuel Jagger]]''
| [[Coadan:Samuel Jagger (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2271
| ''[[:d:Q7411872|Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 2272
| ''[[:d:Q7412071|Samuel M. Jones]]''
| [[Coadan:Samuel M Jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 2273
| ''[[:d:Q7412239|Samuel Moss]]''
|
|
|
|-
| style='text-align:right'| 2274
| ''[[:d:Q7412373|Samuel Pearse]]''
| [[Coadan:Samuel Pearse VC (AWM H06653).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2275
| ''[[:d:Q7412490|Samuel Roberts]]''
| [[Coadan:Revd Samuel Roberts (SR, 1800-85) NLW3361790 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2276
| ''[[:d:Q7412628|Samuel Silkin, Baron Silkin of Dulwich]]''
|
|
|
|-
| style='text-align:right'| 2277
| ''[[:d:Q7412772|Samuel Evans]]''
| [[Coadan:The Times history of the war (1914) (14577874670).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2278
| ''[[:d:Q7412884|Samuel Warren]]''
| [[Coadan:Samuel Warren by John Linnell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2279
| ''[[:d:Q7417391|Sandy Orford]]''
|
|
|
|-
| style='text-align:right'| 2280
| ''[[:d:Q7422270|Sarah Edith Wynne]]''
| [[Coadan:Sarah Edith Wynne (Eos Cymru, 1842-97) NLW3362481 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2281
| ''[[:d:Q7427449|Saunders Davies]]''
|
|
|
|-
| style='text-align:right'| 2282
| ''[[:d:Q7440197|Seaborne Davies]]''
|
|
|
|-
| style='text-align:right'| 2283
| ''[[:d:Q7448922|Selwyn Griffith]]''
|
|
|
|-
| style='text-align:right'| 2284
| ''[[:d:Q7456519|Seth Joshua]]''
|
|
|
|-
| style='text-align:right'| 2285
| ''[[:d:Q7459132|Seymour Berry, 1st Baron Buckland]]''
| [[Coadan:Baron Buckland by Goscombe John in Merthyr Tydfil.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2286
| ''[[:d:Q7459191|Seymour J. Farmer]]''
| [[Coadan:Seymour James Farmer 1932-1936.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2287
| ''[[:d:Q7459206|Seymour Morris]]''
|
|
|
|-
| style='text-align:right'| 2288
| ''[[:d:Q7460864|Shadrach Pryce]]''
|
|
|
|-
| style='text-align:right'| 2289
| ''[[:d:Q7500413|Shoni Sguborfawr]]''
|
|
|
|-
| style='text-align:right'| 2290
| ''[[:d:Q7507823|Sid Judd]]''
|
|
|
|-
| style='text-align:right'| 2291
| ''[[:d:Q7509163|Sidney Jerram]]''
|
|
|
|-
| style='text-align:right'| 2292
| ''[[:d:Q7509422|Sidney Wilcox]]''
|
|
|
|-
| style='text-align:right'| 2293
| ''[[:d:Q7515728|Silvanus Bevan]]''
|
|
|
|-
| style='text-align:right'| 2294
| ''[[:d:Q7517201|R. Silyn Roberts]]''
| [[Coadan:Silyn 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2295
| ''[[:d:Q7518708|Simon Evans]]''
|
|
|
|-
| style='text-align:right'| 2296
| ''[[:d:Q7519221|Simon Lloyd]]''
| [[Coadan:Y Parch Simon Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2297
| ''[[:d:Q7526403|Sir David Llewellyn, 1st Baronet]]''
|
|
|
|-
| style='text-align:right'| 2298
| ''[[:d:Q7526659|Sir Evan Davies Jones, 1st Baronet]]''
|
|
|
|-
| style='text-align:right'| 2299
| ''[[:d:Q7526702|Sir Francis Edwards, 1st Baronet]]''
| [[Coadan:1906 Francis Edwards MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2300
| ''[[:d:Q7526707|Sir Francis Geary, 1st Baronet]]''
| [[Coadan:British School - Admiral Sir Francis Geary (1709-1710–1796) - BHC2706 - Royal Museums Greenwich.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2301
| ''[[:d:Q7527724|Sir John Dillwyn-Llewelyn, 1st Baronet]]''
| [[Coadan:John Dillwyn-Llewelyn Vanity Fair 11 October 1900.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2302
| ''[[:d:Q7527751|Sir John Edwards, 1st Baronet, of Garth]]''
|
|
|
|-
| style='text-align:right'| 2303
| ''[[:d:Q7527969|John Nicholl]]''
| [[Coadan:John Nicholl Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2304
| ''[[:d:Q7527984|Sir John Owen, 1st Baronet]]''
| [[Coadan:Sir John Owen 1776 to 1861.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2305
| ''[[:d:Q7528143|Sir John Williams, 1st Baronet, of the City of London]]''
| [[Coadan:Sir John Williams, 1st Baronet.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2306
| ''[[:d:Q7528163|Sir John Wynn, 5th Baronet]]''
| [[Coadan:John Wynn, 5th Bt, by English School of the 18th Century.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2307
| ''[[:d:Q7528532|Sir Rhys Llewellyn, 2nd Baronet]]''
|
|
|
|-
| style='text-align:right'| 2308
| ''[[:d:Q7528861|Sir Robert Vaughan, 2nd Baronet]]''
| [[Coadan:Portrait of Sir Robert Williames Vaughan, Bart. M.P. for the County of Merioneth (4674639) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2309
| ''[[:d:Q7528986|Sir Stephen Glynne, 9th Baronet]]''
| [[Coadan:Sir Stephen Glynne 01.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2310
| ''[[:d:Q7529216|Sir Thomas Morgan, 1st Baronet]]''
| [[Coadan:Major-General Sir Thomas Morgan 1604-1679.png|center|128px]]
|
|
|-
| style='text-align:right'| 2311
| ''[[:d:Q7529259|Sir Thomas Salusbury, 2nd Baronet]]''
| [[Coadan:Sir Thomas Salusbury and Family.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2312
| ''[[:d:Q7529393|Sir Walter Morgan, 1st Baronet]]''
| [[Coadan:Syr Walter Vaughan Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2313
| ''[[:d:Q7529416|Sir Watkin Williams-Wynn, 10th Baronet]]''
|
|
|
|-
| style='text-align:right'| 2314
| ''[[:d:Q7529423|Sir Watkin Williams-Wynn, 11th Baronet]]''
|
|
|
|-
| style='text-align:right'| 2315
| ''[[:d:Q7529427|Sir Watkin Williams-Wynn, 9th Baronet]]''
|
|
|
|-
| style='text-align:right'| 2316
| ''[[:d:Q7529424|Sir Watkin Williams-Wynn, 5th Baronet]]''
| [[Coadan:John Jackson (1778–1831) (by or after) - Sir Watkin Williams Wynn (1772–1840), 5th Bt - PCF200 - Denbighshire Heritage Service Store.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2317
| ''[[:d:Q7529640|Sir William James, 1st Baronet]]''
| [[Coadan:Sir William James.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2318
| ''[[:d:Q7529825|Sir William Williams, 1st Baronet, of Gray's Inn]]''
| [[Coadan:Portrait of Sir William Williams Bart (4672199) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2319
| ''[[:d:Q7533472|Siân James]]''
|
|
|
|-
| style='text-align:right'| 2320
| ''[[:d:Q7533490|Siôn Cent]]''
| [[Coadan:Ceinion Llenyddiaeth Cymreig Cyf I (Siôn Cent).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2321
| ''[[:d:Q7576045|Spencer Evans]]''
|
|
|
|-
| style='text-align:right'| 2322
| ''[[:d:Q7576189|Spencer Summers]]''
| [[Coadan:Sir Spencer Summers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2323
| ''[[:d:Q5372680|Emlyn Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2324
| ''[[:d:Q5372687|Emlyn Watkins]]''
|
|
|
|-
| style='text-align:right'| 2325
| ''[[:d:Q5372684|Emlyn Walters]]''
|
|
|
|-
| style='text-align:right'| 2326
| ''[[:d:Q5372690|Emlyn Williams]]''
|
|
|
|-
| style='text-align:right'| 2327
| ''[[:d:Q5374802|Emrys G. Bowen]]''
| [[Coadan:Emrys George Bowen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2328
| ''[[:d:Q5374803|Emrys Hughes]]''
|
|
|
|-
| style='text-align:right'| 2329
| ''[[:d:Q5374801|Emrys Evans]]''
|
|
|
|-
| style='text-align:right'| 2330
| ''[[:d:Q5374807|Emrys Roberts]]''
|
|
|
|-
| style='text-align:right'| 2331
| ''[[:d:Q5374804|Emrys James]]''
|
|
|
|-
| style='text-align:right'| 2332
| ''[[:d:Q5374805|Emrys Jones]]''
| [[Coadan:Emrys Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2333
| ''[[:d:Q5378861|Enid Charles]]''
|
|
|
|-
| style='text-align:right'| 2334
| ''[[:d:Q5378877|Enid Luff]]''
|
|
|
|-
| style='text-align:right'| 2335
| ''[[:d:Q5379271|Enoch William Bagshaw]]''
| [[Coadan:Enoch W. Bagshaw.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2336
| ''[[:d:Q5379295|Enoch Francis]]''
|
|
|
|-
| style='text-align:right'| 2337
| ''[[:d:Q5384966|Erasmus Lewes]]''
|
|
|
|-
| style='text-align:right'| 2338
| ''[[:d:Q5384974|Erasmus Saunders]]''
|
|
|
|-
| style='text-align:right'| 2339
| ''[[:d:Q5386383|Eric Dolman]]''
|
|
|
|-
| style='text-align:right'| 2340
| ''[[:d:Q5386454|Eric Evans]]''
|
|
|
|-
| style='text-align:right'| 2341
| ''[[:d:Q5386513|Eric Francis]]''
|
|
|
|-
| style='text-align:right'| 2342
| ''[[:d:Q5387133|Eric Morris]]''
|
|
|
|-
| style='text-align:right'| 2343
| ''[[:d:Q5392768|Ernest Basil Verney]]''
|
|
|
|-
| style='text-align:right'| 2344
| ''[[:d:Q5393040|Ernest Evans]]''
| [[Coadan:Ernest Evans (5292082).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2345
| ''[[:d:Q5393758|Ernest Rowland]]''
|
|
|
|-
| style='text-align:right'| 2346
| ''[[:d:Q5393924|Ernest Turner]]''
|
|
|
|-
| style='text-align:right'| 2347
| ''[[:d:Q5394048|Ernest Zobole]]''
|
|
|
|-
| style='text-align:right'| 2348
| ''[[:d:Q5394380|Ernie Bryan]]''
|
|
|
|-
| style='text-align:right'| 2349
| ''[[:d:Q5394444|Ernie Curtis]]''
|
|
|
|-
| style='text-align:right'| 2350
| ''[[:d:Q5394472|Ernie Finch]]''
|
|
|
|-
| style='text-align:right'| 2351
| ''[[:d:Q5394482|Ernie George]]''
|
|
|
|-
| style='text-align:right'| 2352
| ''[[:d:Q5394513|Ernie Harris]]''
|
|
|
|-
| style='text-align:right'| 2353
| ''[[:d:Q5394553|Ernie Jenkins]]''
| [[Coadan:Ernie Jenkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2354
| ''[[:d:Q5394565|Ernie Jones]]''
|
|
|
|-
| style='text-align:right'| 2355
| ''[[:d:Q5394569|Ernie Jones]]''
|
|
|
|-
| style='text-align:right'| 2356
| ''[[:d:Q5394780|Ernie Walley]]''
|
|
|
|-
| style='text-align:right'| 2357
| ''[[:d:Q5395517|Errie Ball]]''
|
|
|
|-
| style='text-align:right'| 2358
| ''[[:d:Q5396271|Eryl Thomas]]''
|
|
|
|-
| style='text-align:right'| 2359
| ''[[:d:Q5413794|Euros Lewis]]''
|
|
|
|-
| style='text-align:right'| 2360
| ''[[:d:Q5414305|Eustace Hill]]''
|
|
|
|-
| style='text-align:right'| 2361
| ''[[:d:Q5415309|Evan Abraham]]''
|
|
|
|-
| style='text-align:right'| 2362
| ''[[:d:Q5415360|Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 2363
| ''[[:d:Q5415380|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 2364
| ''[[:d:Q5415381|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 2365
| ''[[:d:Q5415404|Evan Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2366
| ''[[:d:Q5415434|Evan James]]''
|
|
|
|-
| style='text-align:right'| 2367
| ''[[:d:Q5415435|Evan James]]''
| [[Coadan:Evan James, rugby player.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2368
| ''[[:d:Q5415438|Evan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2369
| ''[[:d:Q5415457|Evan Lewis]]''
|
|
|
|-
| style='text-align:right'| 2370
| ''[[:d:Q5415462|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2371
| ''[[:d:Q5415460|Evan Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 2372
| ''[[:d:Q5415464|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2373
| ''[[:d:Q5415519|Evan Rees]]''
|
|
|
|-
| style='text-align:right'| 2374
| ''[[:d:Q5415523|Evan Richards]]''
|
|
|
|-
| style='text-align:right'| 2375
| ''[[:d:Q5415524|Evan Rees]]''
| [[Coadan:Evan Rees (Dyfed).png|center|128px]]
|
|
|-
| style='text-align:right'| 2376
| ''[[:d:Q5415528|Evan Roberts]]''
| [[Coadan:Evan Roberts (rygbi Llanelli a Chymru).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2377
| ''[[:d:Q5415561|Evan W. Evans]]''
| [[Coadan:Evan W Evans.png|center|128px]]
|
|
|-
| style='text-align:right'| 2378
| ''[[:d:Q5415565|Evan Watkins]]''
|
|
|
|-
| style='text-align:right'| 2379
| ''[[:d:Q5415574|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 2380
| ''[[:d:Q5415575|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 2381
| ''[[:d:Q5416255|Eveline Willett Cunnington]]''
|
|
|
|-
| style='text-align:right'| 2382
| ''[[:d:Q5418903|Ewan Davies]]''
|
|
|
|-
| style='text-align:right'| 2383
| ''[[:d:Q5418983|Ewen MacIntosh]]''
| [[Coadan:Ewen Macintosh.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2384
| ''[[:d:Q5422950|Eynon Evans]]''
|
|
|
|-
| style='text-align:right'| 2385
| ''[[:d:Q5422952|Eynon Hawkins]]''
|
|
|
|-
| style='text-align:right'| 2386
| ''[[:d:Q5423242|Ezer Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2387
| ''[[:d:Q5442307|Felix Powell]]''
|
|
|
|-
| style='text-align:right'| 2388
| ''[[:d:Q5454825|Fisher Morgan]]''
|
|
|
|-
| style='text-align:right'| 2389
| ''[[:d:Q5460608|Florence Eleanor Soper]]''
| [[Coadan:W. Bramwell Booth & wife LCCN2014719301.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2390
| ''[[:d:Q5480742|Francis Dodd]]''
| [[Coadan:Francis Dodd.png|center|128px]]
|
|
|-
| style='text-align:right'| 2391
| ''[[:d:Q5481174|Francis Gulston]]''
|
|
|
|-
| style='text-align:right'| 2392
| ''[[:d:Q5481482|Francis Jayne]]''
| [[Coadan:Bp Francis Jayne by Bassano.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2393
| ''[[:d:Q5481533|Francis Jones]]''
|
|
|
|-
| style='text-align:right'| 2394
| ''[[:d:Q5485025|Frank Andrews]]''
|
|
|
|-
| style='text-align:right'| 2395
| ''[[:d:Q5485358|Frank Blew]]''
|
|
|
|-
| style='text-align:right'| 2396
| ''[[:d:Q5486078|Frank Curtis]]''
|
|
|
|-
| style='text-align:right'| 2397
| ''[[:d:Q5486265|Frank Donovan]]''
|
|
|
|-
| style='text-align:right'| 2398
| ''[[:d:Q5486506|Frank Evans]]''
|
|
|
|-
| style='text-align:right'| 2399
| ''[[:d:Q5487506|Frank Jackett]]''
|
|
|
|-
| style='text-align:right'| 2400
| ''[[:d:Q5488213|Frank Matson]]''
|
|
|
|-
| style='text-align:right'| 2401
| ''[[:d:Q5488823|Frank Osmond]]''
|
|
|
|-
| style='text-align:right'| 2402
| ''[[:d:Q5488892|Frank Parkin]]''
|
|
|
|-
| style='text-align:right'| 2403
| ''[[:d:Q5488986|Frank Phillips]]''
|
|
|
|-
| style='text-align:right'| 2404
| ''[[:d:Q5489069|Frank Powell]]''
|
|
|
|-
| style='text-align:right'| 2405
| ''[[:d:Q5489150|Frank Rankmore]]''
|
|
|
|-
| style='text-align:right'| 2406
| ''[[:d:Q5489556|Frank Shugars]]''
| [[Coadan:FrankShugars.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2407
| ''[[:d:Q5490110|Frank Vickery]]''
|
|
|
|-
| style='text-align:right'| 2408
| ''[[:d:Q5490126|Frank Vining]]''
|
|
|
|-
| style='text-align:right'| 2409
| ''[[:d:Q5490324|Frank Whitcombe]]''
|
|
|
|-
| style='text-align:right'| 2410
| ''[[:d:Q5490382|Frank Williams]]''
|
|
|
|-
| style='text-align:right'| 2411
| ''[[:d:Q5490423|Frank Wilson]]''
|
|
|
|-
| style='text-align:right'| 2412
| ''[[:d:Q5490537|Frank Young]]''
|
|
|
|-
| style='text-align:right'| 2413
| ''[[:d:Q5494458|Fred Andrews]]''
|
|
|
|-
| style='text-align:right'| 2414
| ''[[:d:Q5494638|Fred Birt]]''
|
|
|
|-
| style='text-align:right'| 2415
| ''[[:d:Q5495274|Fred Godfrey]]''
|
|
|
|-
| style='text-align:right'| 2416
| ''[[:d:Q5495313|Fred Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2417
| ''[[:d:Q5495365|Fred Hando]]''
|
|
|
|-
| style='text-align:right'| 2418
| ''[[:d:Q5495472|Fred Hole]]''
|
|
|
|-
| style='text-align:right'| 2419
| ''[[:d:Q5495530|Fred Hutchinson]]''
| [[Coadan:Fred Hutchinson (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2420
| ''[[:d:Q5495593|Fred Jones]]''
|
|
|
|-
| style='text-align:right'| 2421
| ''[[:d:Q5495604|Fred Jones]]''
|
|
|
|-
| style='text-align:right'| 2422
| ''[[:d:Q7176382|Peter Philp]]''
|
|
|
|-
| style='text-align:right'| 2423
| ''[[:d:Q7176440|Peter Prendergast]]''
|
|
|
|-
| style='text-align:right'| 2424
| ''[[:d:Q7176642|Peter Rodon]]''
|
|
|
|-
| style='text-align:right'| 2425
| ''[[:d:Q7176650|Peter Rogers]]''
| [[Coadan:Psr99.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2426
| ''[[:d:Q7177088|Peter Stead]]''
|
|
|
|-
| style='text-align:right'| 2427
| ''[[:d:Q7179526|Peveril William-Powlett]]''
|
|
|
|-
| style='text-align:right'| 2428
| ''[[:d:Q7181939|Phil Griffiths]]''
| [[Coadan:Phil Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2429
| ''[[:d:Q7182080|Phil Kerslake]]''
| [[Coadan:Phil Kerslake MNZM (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2430
| ''[[:d:Q7182365|Phil Ryan]]''
|
|
|
|-
| style='text-align:right'| 2431
| ''[[:d:Q7182476|Phil Thomas]]''
|
|
|
|-
| style='text-align:right'| 2432
| ''[[:d:Q7182544|Phil Whitlock]]''
|
|
|
|-
| style='text-align:right'| 2433
| ''[[:d:Q7182555|Phil Williams]]''
| [[Coadan:Phil Williams.png|center|128px]]
|
|
|-
| style='text-align:right'| 2434
| ''[[:d:Q7183190|Philip Baxter]]''
| [[Coadan:Philip Baxter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2435
| ''[[:d:Q7183865|Philip Jones of Fonmon]]''
| [[Coadan:Portrait of Colonel Philip Jones (1618–1674).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2436
| ''[[:d:Q7184141|Philip Nicholas]]''
|
|
|
|-
| style='text-align:right'| 2437
| ''[[:d:Q7184229|Philip Powell]]''
| [[Coadan:Portrait of Father Philip Powel (4672675) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2438
| ''[[:d:Q7184351|Philip Sayer]]''
|
|
|
|-
| style='text-align:right'| 2439
| ''[[:d:Q7184597|Philip Yorke]]''
| [[Coadan:Thomas Gainsborough (1727-1788) - Philip Yorke I (1743–1804), MP - 1151302 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2440
| ''[[:d:Q7184733|Philippa Roles]]''
|
|
|
|-
| style='text-align:right'| 2441
| ''[[:d:Q7186356|Phineas John]]''
|
|
|
|-
| style='text-align:right'| 2442
| ''[[:d:Q7186662|Phoebe Davies]]''
| [[Coadan:Phoebe Davies 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2443
| ''[[:d:Q7192602|Piers Griffith]]''
|
|
|
|-
| style='text-align:right'| 2444
| ''[[:d:Q7199739|Pixie O'Harris]]''
|
|
|
|-
| style='text-align:right'| 2445
| ''[[:d:Q7245941|Pritchard Hughes]]''
| [[Coadan:Joshua Pritchard Hughes by Elliott & Fry circa 1910s NPG x159177.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2446
| ''[[:d:Q7253236|Pryce Pryce-Jones]]''
| [[Coadan:Pryce Pryce-Jones.gif|center|128px]]
|
|
|-
| style='text-align:right'| 2447
| ''[[:d:Q7273649|R. Geraint Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 2448
| ''[[:d:Q7274067|R. Tudur Jones]]''
|
|
|
|-
| style='text-align:right'| 2449
| ''[[:d:Q7274124|R. Williams Parry]]''
| [[Coadan:R. Williams Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2450
| ''[[:d:Q7279076|Rachael Bland]]''
|
|
|
|-
| style='text-align:right'| 2451
| ''[[:d:Q7279216|Rachel Davies]]''
| [[Coadan:720.Rahel o Fon photo portrait web.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2452
| ''[[:d:Q7279427|Rachel Thomas]]''
|
|
|
|-
| style='text-align:right'| 2453
| ''[[:d:Q7287329|Ralph Champneys Williams]]''
| [[Coadan:Ralph Champneys Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2454
| ''[[:d:Q7287596|Ralph Hancock]]''
| [[Coadan:Hancock FRHS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2455
| ''[[:d:Q7287883|Ralph Morgan]]''
|
|
|
|-
| style='text-align:right'| 2456
| ''[[:d:Q7297448|Ray Elliott]]''
|
|
|
|-
| style='text-align:right'| 2457
| ''[[:d:Q7297530|Ray Glastonbury]]''
|
|
|
|-
| style='text-align:right'| 2458
| ''[[:d:Q7297562|Ray Gunter]]''
|
|
|
|-
| style='text-align:right'| 2459
| ''[[:d:Q7297733|Ray Lambert]]''
|
|
|
|-
| style='text-align:right'| 2460
| ''[[:d:Q7297839|Ray Mielczarek]]''
|
|
|
|-
| style='text-align:right'| 2461
| ''[[:d:Q7297975|Ray Powell]]''
|
|
|
|-
| style='text-align:right'| 2462
| ''[[:d:Q7297992|Ray Prosser]]''
|
|
|
|-
| style='text-align:right'| 2463
| ''[[:d:Q7298291|Ray Wilcox]]''
|
|
|
|-
| style='text-align:right'| 2464
| ''[[:d:Q7298300|Ray Williams]]''
|
|
|
|-
| style='text-align:right'| 2465
| ''[[:d:Q7298707|Raymond Davies Hughes]]''
|
|
|
|-
| style='text-align:right'| 2466
| ''[[:d:Q7298803|Raymond Glendenning]]''
|
|
|
|-
| style='text-align:right'| 2467
| ''[[:d:Q7298808|Raymond Gower]]''
| [[Coadan:Raymond Gower in 1953.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2468
| ''[[:d:Q7299084|Raymond Price]]''
|
|
|
|-
| style='text-align:right'| 2469
| ''[[:d:Q7299161|Raymond Steed]]''
|
|
|
|-
| style='text-align:right'| 2470
| ''[[:d:Q7306435|Redvers Sangoe]]''
|
|
|
|-
| style='text-align:right'| 2471
| ''[[:d:Q7306966|Rees Davies]]''
|
|
|
|-
| style='text-align:right'| 2472
| ''[[:d:Q7306965|Rees G. Richards]]''
| [[Coadan:Rees G Richards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2473
| ''[[:d:Q7306968|Rees Howell Gronow]]''
| [[Coadan:Portrait of R. H. Gronow (4670809).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2474
| ''[[:d:Q7306969|Rees Howells]]''
|
|
|
|-
| style='text-align:right'| 2475
| ''[[:d:Q7306974|Rees Williams]]''
|
|
|
|-
| style='text-align:right'| 2476
| ''[[:d:Q7306975|Rees Thomas]]''
|
|
|
|-
| style='text-align:right'| 2477
| ''[[:d:Q7306973|Rees Thomas]]''
|
|
|
|-
| style='text-align:right'| 2478
| ''[[:d:Q7307724|Reg Anderson]]''
|
|
|
|-
| style='text-align:right'| 2479
| ''[[:d:Q7307734|Reg Blakemore]]''
|
|
|
|-
| style='text-align:right'| 2480
| ''[[:d:Q7307740|Reg Braddick]]''
|
|
|
|-
| style='text-align:right'| 2481
| ''[[:d:Q7307755|Reg Cudlipp]]''
|
|
|
|-
| style='text-align:right'| 2482
| ''[[:d:Q7307759|Reg Davies]]''
|
|
|
|-
| style='text-align:right'| 2483
| ''[[:d:Q7307835|Reg Parker]]''
|
|
|
|-
| style='text-align:right'| 2484
| ''[[:d:Q7307840|Reg Plummer]]''
| [[Coadan:Reg Plummer (rugby player).png|center|128px]]
|
|
|-
| style='text-align:right'| 2485
| ''[[:d:Q7307846|Reg Pugh]]''
|
|
|
|-
| style='text-align:right'| 2486
| ''[[:d:Q7307859|Reg Spencer]]''
|
|
|
|-
| style='text-align:right'| 2487
| ''[[:d:Q7307870|Reg Thomas]]''
| [[Coadan:Reginald Thomas 1929.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2488
| ''[[:d:Q7308838|Reginald Phillips]]''
|
|
|
|-
| style='text-align:right'| 2489
| ''[[:d:Q7308884|Reginald Sutcliffe]]''
|
|
|
|-
| style='text-align:right'| 2490
| ''[[:d:Q7319298|Rex Richards]]''
|
|
|
|-
| style='text-align:right'| 2491
| ''[[:d:Q7321764|Rhys Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 2492
| ''[[:d:Q7321781|Rhys Gethin]]''
|
|
|
|-
| style='text-align:right'| 2493
| ''[[:d:Q7321796|Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 2494
| ''[[:d:Q7321821|Rhys Morgan]]''
|
|
|
|-
| style='text-align:right'| 2495
| ''[[:d:Q7321830|Rhys Prichard]]''
|
|
|
|-
| style='text-align:right'| 2496
| ''[[:d:Q7321835|Rhys Rhys-Williams]]''
|
|
|
|-
| style='text-align:right'| 2497
| ''[[:d:Q7321859|Rhys ap Thomas]]''
| [[Coadan:Portrait of Sir Rhys ab Thomas, Knight Banneret & K-G (4672073).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2498
| ''[[:d:Q7323024|Rice Mansel]]''
|
|
|
|-
| style='text-align:right'| 2499
| ''[[:d:Q7323907|Richard Bagnall-Oakeley]]''
|
|
|
|-
| style='text-align:right'| 2500
| ''[[:d:Q7324005|Richard Bassett]]''
|
|
|
|-
| style='text-align:right'| 2501
| ''[[:d:Q7324011|Richard Bates]]''
|
|
|
|-
| style='text-align:right'| 2502
| ''[[:d:Q7324421|Richard Bryn Williams]]''
|
|
|
|-
| style='text-align:right'| 2503
| ''[[:d:Q7324802|Richard Clough]]''
| [[Coadan:Sir Richard Clough by Moses Griffith 02188.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2504
| ''[[:d:Q7324958|Richard Crawley]]''
|
|
|
|-
| style='text-align:right'| 2505
| ''[[:d:Q7325106|Richard Davies]]''
| [[Coadan:Richard-Davies-AS-Môn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2506
| ''[[:d:Q5495622|Fred Jowett]]''
|
|
|
|-
| style='text-align:right'| 2507
| ''[[:d:Q5495881|Fred Mathias]]''
|
|
|
|-
| style='text-align:right'| 2508
| ''[[:d:Q5496060|Fred Perrett]]''
|
|
|
|-
| style='text-align:right'| 2509
| ''[[:d:Q5496211|Fred Samuel]]''
|
|
|
|-
| style='text-align:right'| 2510
| ''[[:d:Q5496283|Fred Smallwood]]''
|
|
|
|-
| style='text-align:right'| 2511
| ''[[:d:Q5496333|Fred Stansfield]]''
|
|
|
|-
| style='text-align:right'| 2512
| ''[[:d:Q5496506|Fred Warren]]''
|
|
|
|-
| style='text-align:right'| 2513
| ''[[:d:Q5496831|Freddie Williams]]''
|
|
|
|-
| style='text-align:right'| 2514
| ''[[:d:Q5496892|Freddy Morgan]]''
|
|
|
|-
| style='text-align:right'| 2515
| ''[[:d:Q5497346|Frederick Barter]]''
| [[Coadan:Frederick Barter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2516
| ''[[:d:Q5498030|Frederick Higginson]]''
|
|
|
|-
| style='text-align:right'| 2517
| ''[[:d:Q5498073|Frederick Hughes]]''
|
|
|
|-
| style='text-align:right'| 2518
| ''[[:d:Q5498286|Frederick Llewellyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 2519
| ''[[:d:Q5498353|Frederick Margrave]]''
|
|
|
|-
| style='text-align:right'| 2520
| ''[[:d:Q5498509|Frederick Palmer]]''
| [[Coadan:Engineer Frederick Palmer.png|center|128px]]
|
|
|-
| style='text-align:right'| 2521
| ''[[:d:Q5498557|Frederick Phillips]]''
|
|
|
|-
| style='text-align:right'| 2522
| ''[[:d:Q5498664|Frederick Rosier]]''
| [[Coadan:Apr 95 Rosiers St Clement Danes cropsm.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2523
| ''[[:d:Q5499041|Frederick Wilding]]''
| [[Coadan:Frederick wilding.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2524
| ''[[:d:Q5515655|Gabriel Goodman]]''
| [[Coadan:Gabriel Goodman by GP Harding.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2525
| ''[[:d:Q5522758|Garel Rhys]]''
|
|
|
|-
| style='text-align:right'| 2526
| ''[[:d:Q5522779|Gareth Alban Davies]]''
|
|
|
|-
| style='text-align:right'| 2527
| ''[[:d:Q5522852|Gareth Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2528
| ''[[:d:Q5522872|Gareth Hughes]]''
| [[Coadan:Garethhughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2529
| ''[[:d:Q5522889|Gareth Jones]]''
|
|
|
|-
| style='text-align:right'| 2530
| ''[[:d:Q5522939|Gareth Payne]]''
|
|
|
|-
| style='text-align:right'| 2531
| ''[[:d:Q5522947|Gareth Price]]''
|
|
|
|-
| style='text-align:right'| 2532
| ''[[:d:Q5522960|Gareth Roberts]]''
|
|
|
|-
| style='text-align:right'| 2533
| ''[[:d:Q5522989|Gareth Walters]]''
|
|
|
|-
| style='text-align:right'| 2534
| ''[[:d:Q5534081|Geoff Charles]]''
| [[Coadan:Geoff Charles self portrait, 1945.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2535
| ''[[:d:Q5534202|Geoff Lewis]]''
|
|
|
|-
| style='text-align:right'| 2536
| ''[[:d:Q5534908|Geoffrey Somerset, 6th Baron Raglan]]''
|
|
|
|-
| style='text-align:right'| 2537
| ''[[:d:Q5536260|George Andrews]]''
|
|
|
|-
| style='text-align:right'| 2538
| ''[[:d:Q2575163|Cadell Ddyrnllwg]]''
|
|
|
|-
| style='text-align:right'| 2539
| ''[[:d:Q6253539|John Pullen]]''
|
|
|
|-
| style='text-align:right'| 2540
| ''[[:d:Q6245648|John Lyons]]''
| [[Coadan:JP Lyons.png|center|128px]]
|
|
|-
| style='text-align:right'| 2541
| ''[[:d:Q6246101|John MacGregor]]''
|
|
|
|-
| style='text-align:right'| 2542
| ''[[:d:Q6248386|John Meeson Parsons]]''
|
|
|
|-
| style='text-align:right'| 2543
| ''[[:d:Q6248405|John Meirion Morris]]''
|
|
|
|-
| style='text-align:right'| 2544
| ''[[:d:Q6248513|John Meredith]]''
|
|
|
|-
| style='text-align:right'| 2545
| ''[[:d:Q6248845|John Mills]]''
|
|
|
|-
| style='text-align:right'| 2546
| ''[[:d:Q6249221|John Montgomery Traherne]]''
|
|
|
|-
| style='text-align:right'| 2547
| ''[[:d:Q6249387|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 2548
| ''[[:d:Q6249396|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 2549
| ''[[:d:Q6249412|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 2550
| ''[[:d:Q6249473|John Morris-Jones]]''
| [[Coadan:Sir John Morris-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2551
| ''[[:d:Q6250035|John Myles]]''
|
|
|
|-
| style='text-align:right'| 2552
| ''[[:d:Q6251311|John Ormond]]''
|
|
|
|-
| style='text-align:right'| 2553
| ''[[:d:Q6251352|John Osborn Williams]]''
|
|
|
|-
| style='text-align:right'| 2554
| ''[[:d:Q6251441|John Owen]]''
| [[Coadan:Colonel Sir John Owen of Clenenney, Knt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2555
| ''[[:d:Q6251444|John Owen]]''
|
|
|
|-
| style='text-align:right'| 2556
| ''[[:d:Q6251454|John Owen Jones]]''
| [[Coadan:Ap Ffarmwr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2557
| ''[[:d:Q6251980|John Parry]]''
| [[Coadan:John Parry (Mormon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2558
| ''[[:d:Q6251987|John Parry Ddall]]''
| [[Coadan:John Parry, harpist.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2559
| ''[[:d:Q6253276|Sir John Powell]]''
| [[Coadan:SirJohnPowell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2560
| ''[[:d:Q6253393|John Price]]''
|
|
|
|-
| style='text-align:right'| 2561
| ''[[:d:Q6253407|John Price]]''
| [[Coadan:Portrait of J. Price, B.D., F.S.A (4673426).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2562
| ''[[:d:Q6253405|John Price]]''
|
|
|
|-
| style='text-align:right'| 2563
| ''[[:d:Q6253409|John Price Davies]]''
|
|
|
|-
| style='text-align:right'| 2564
| ''[[:d:Q6253502|John Pryce]]''
|
|
|
|-
| style='text-align:right'| 2565
| ''[[:d:Q6253643|John Quantick]]''
|
|
|
|-
| style='text-align:right'| 2566
| ''[[:d:Q6254476|John Rees]]''
|
|
|
|-
| style='text-align:right'| 2567
| ''[[:d:Q6254706|John Rhys Evans]]''
| [[Coadan:Dad toxedo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2568
| ''[[:d:Q6254763|John Richard Williams]]''
| [[Coadan:Tryfanwy 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2569
| ''[[:d:Q6255172|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 2570
| ''[[:d:Q6255179|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 2571
| ''[[:d:Q6255191|John Roberts]]''
| [[Coadan:John Roberts (missionary).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2572
| ''[[:d:Q6255264|John Robins]]''
| [[Coadan:John Robins rugby 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2573
| ''[[:d:Q6255691|John Ross]]''
| [[Coadan:John Ross.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2574
| ''[[:d:Q6255826|John Rowland]]''
|
|
|
|-
| style='text-align:right'| 2575
| ''[[:d:Q6255842|John Rowlands]]''
|
|
|
|-
| style='text-align:right'| 2576
| ''[[:d:Q6255974|John Russell]]''
|
|
|
|-
| style='text-align:right'| 2577
| ''[[:d:Q6256555|John Salusbury]]''
| [[Coadan:JOHN SALUSBURY BY ZOFFANY (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2578
| ''[[:d:Q6256556|John Salusbury]]''
| [[Coadan:Sir John Salisbury by Moses Griffith 02197.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2579
| ''[[:d:Q6257135|Sir John Scourfield, 1st Baronet]]''
| [[Coadan:Sir-John-Henry-Philipps-Scourfield.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2580
| ''[[:d:Q6258851|John Stanley Chick]]''
| [[Coadan:John Chick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2581
| ''[[:d:Q6259367|John Strand-Jones]]''
| [[Coadan:J Strand-Jones-1901.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2582
| ''[[:d:Q6259875|John Sylvester John Gardiner]]''
| [[Coadan:Reverend John Sylvester John Gardiner.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2583
| ''[[:d:Q6260079|John Thomas Pritchard]]''
| [[Coadan:John T. Pritchard (1883-1965) (8276639652).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2584
| ''[[:d:Q6260494|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 2585
| ''[[:d:Q6260506|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 2586
| ''[[:d:Q6260584|John Thomas Job]]''
| [[Coadan:John Thomas Job.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2587
| ''[[:d:Q6260713|John Thorley]]''
|
|
|
|-
| style='text-align:right'| 2588
| ''[[:d:Q6261173|John Treasure]]''
| [[Coadan:JAPT Karsch.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2589
| ''[[:d:Q6261246|John Trevor]]''
|
|
|
|-
| style='text-align:right'| 2590
| ''[[:d:Q6261280|John Tripp]]''
|
|
|
|-
| style='text-align:right'| 2591
| ''[[:d:Q6261637|John Uzzell Edwards]]''
|
|
|
|-
| style='text-align:right'| 2592
| ''[[:d:Q6261849|John Vaughan, 1st Viscount Lisburne]]''
|
|
|
|-
| style='text-align:right'| 2593
| ''[[:d:Q6261871|John Vaughan]]''
| [[Coadan:John Vaughan (1603-1674), follower of John Michael Wright.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2594
| ''[[:d:Q6262037|John Viriamu Jones]]''
| [[Coadan:John Viriamu Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2595
| ''[[:d:Q6262574|John W. Thomas]]''
| [[Coadan:Wisconsin politician John W. Thomas.png|center|128px]]
|
|
|-
| style='text-align:right'| 2596
| ''[[:d:Q6262923|John Walter Jones]]''
|
|
|
|-
| style='text-align:right'| 2597
| ''[[:d:Q6262936|John Walters]]''
|
|
|
|-
| style='text-align:right'| 2598
| ''[[:d:Q6263796|John White]]''
| [[Coadan:Portrait of Effigies of the White's in Tenby Church (4672150).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2599
| ''[[:d:Q6264119|John William Best]]''
|
|
|
|-
| style='text-align:right'| 2600
| ''[[:d:Q6264149|John William Evans]]''
|
|
|
|-
| style='text-align:right'| 2601
| ''[[:d:Q6264172|John William Greene]]''
| [[Coadan:Jwgreene.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2602
| ''[[:d:Q6264334|John Williams]]''
|
|
|
|-
| style='text-align:right'| 2603
| ''[[:d:Q6264332|John Williams]]''
|
|
|
|-
| style='text-align:right'| 2604
| ''[[:d:Q6264353|John Williams]]''
|
|
|
|-
| style='text-align:right'| 2605
| ''[[:d:Q6264359|John Williams]]''
|
|
|
|-
| style='text-align:right'| 2606
| ''[[:d:Q6264378|John Williams]]''
|
|
|
|-
| style='text-align:right'| 2607
| ''[[:d:Q6265051|John Wynne]]''
|
|
|
|-
| style='text-align:right'| 2608
| ''[[:d:Q6265540|John de Ferrers, 1st Baron Ferrers of Chartley]]''
|
|
|
|-
| style='text-align:right'| 2609
| ''[[:d:Q6265659|John de Vere, 15th Earl of Oxford]]''
| [[Coadan:John de Vere, 15th Earl of Oxford cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2610
| ''[[:d:Q6265805|John of Monmouth]]''
|
|
|
|-
| style='text-align:right'| 2611
| ''[[:d:Q6266053|Johnnie Clay]]''
|
|
|
|-
| style='text-align:right'| 2612
| ''[[:d:Q6266298|Johnny Basham]]''
| [[Coadan:Johnny Basham 1914.png|center|128px]]
|
|
|-
| style='text-align:right'| 2613
| ''[[:d:Q6266931|Johnny Houlston]]''
|
|
|
|-
| style='text-align:right'| 2614
| ''[[:d:Q6266963|Johnny Jenkins]]''
| [[Coadan:Johnny Jenkins (1875–1945).png|center|128px]]
|
|
|-
| style='text-align:right'| 2615
| ''[[:d:Q6267335|Johnny Morris]]''
|
|
|
|-
| style='text-align:right'| 2616
| ''[[:d:Q6267578|Johnny Ring]]''
|
|
|
|-
| style='text-align:right'| 2617
| ''[[:d:Q6267780|Johnny Thomas]]''
|
|
|
|-
| style='text-align:right'| 2618
| ''[[:d:Q6271197|Jon Manchip White]]''
| [[Coadan:Jon Manchip White171.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2619
| ''[[:d:Q6271440|Jon Raven]]''
|
|
|
|-
| style='text-align:right'| 2620
| ''[[:d:Q6273019|Jonathan Edwards]]''
|
|
|
|-
| style='text-align:right'| 2621
| ''[[:d:Q6273443|Jonathan Hughes]]''
|
|
|
|-
| style='text-align:right'| 2622
| ''[[:d:Q6274260|Jonathan Rogers]]''
| [[Coadan:Jonathan Rogers GC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2623
| ''[[:d:Q6274785|Jonathan Williams]]''
|
|
|
|-
| style='text-align:right'| 2624
| ''[[:d:Q6281609|Joseph Booth]]''
|
|
|
|-
| style='text-align:right'| 2625
| ''[[:d:Q6282275|Joseph Corsi]]''
|
|
|
|-
| style='text-align:right'| 2626
| ''[[:d:Q6282491|Joseph David Jones]]''
| [[Coadan:Portrait of J. D. Jones (4671538).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2627
| ''[[:d:Q6282502|Joseph Davies]]''
| [[Coadan:Joseph Davies (1866-1954) portrait.tif|center|128px]]
|
|
|-
| style='text-align:right'| 2628
| ''[[:d:Q6282851|Joseph Edward Crawshay Partridge]]''
|
|
|
|-
| style='text-align:right'| 2629
| ''[[:d:Q6282865|Joseph Edwards]]''
| [[Coadan:Joseph Edwards (1814–1882) sculptor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2630
| ''[[:d:Q6283815|Joseph Harris]]''
|
|
|
|-
| style='text-align:right'| 2631
| ''[[:d:Q6283821|Joseph Harris]]''
| [[Coadan:Portrait of Joseph Harris, 'Gomer' (4670840) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2632
| ''[[:d:Q6284379|Joseph Jenkins]]''
| [[Coadan:Joseph Jenkins CC.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2633
| ''[[:d:Q6287209|Joseph Stone]]''
|
|
|
|-
| style='text-align:right'| 2634
| ''[[:d:Q2523705|Richard Maldwyn Price]]''
|
|
|
|-
| style='text-align:right'| 2635
| ''[[:d:Q2526575|Vincent Cronin]]''
|
|
|
|-
| style='text-align:right'| 2636
| ''[[:d:Q2536632|W. Aubrey Thomas]]''
| [[Coadan:W. Aubrey Thomas 1909.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2637
| ''[[:d:Q2537433|Dic Jones]]''
| [[Coadan:Dic Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2638
| ''[[:d:Q2565483|Méen]]''
| [[Coadan:Rennes (35) Métropole Saint-Pierre - Intérieur - Procession des saints de Bretagne - Saint Austol et Méen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2639
| ''[[:d:Q2575137|Cynan Garwyn]]''
|
|
|
|-
| style='text-align:right'| 2640
| ''[[:d:Q2580155|William Nott]]''
| [[Coadan:John Deffett Francis (1815-1901) - General Sir William Nott (1782–1845) - NMW A 3928 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2641
| ''[[:d:Q2591794|Wolfgang Wirth]]''
| [[Coadan:Wirth Dr W.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2642
| ''[[:d:Q2614469|Cadwgan ap Bleddyn]]''
|
|
|
|-
| style='text-align:right'| 2643
| ''[[:d:Q2624753|William Morgan]]''
| [[Coadan:BpWilliamMorgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2644
| ''[[:d:Q2641401|Alex Jones]]''
|
|
|
|-
| style='text-align:right'| 2645
| ''[[:d:Q2662059|Harold Thomas]]''
|
|
|
|-
| style='text-align:right'| 2646
| ''[[:d:Q2663877|Mel Hopkins]]''
|
|
|
|-
| style='text-align:right'| 2647
| ''[[:d:Q2663895|Rosemarie Frankland]]''
|
|
|
|-
| style='text-align:right'| 2648
| ''[[:d:Q2670636|Meilyr Brydydd]]''
|
|
|
|-
| style='text-align:right'| 2649
| ''[[:d:Q2682630|Jet Naessens]]''
|
|
|
|-
| style='text-align:right'| 2650
| ''[[:d:Q2699091|Hywel Teifi Edwards]]''
|
|
|
|-
| style='text-align:right'| 2651
| ''[[:d:Q2707044|Christopher Dawson]]''
| [[Coadan:Christopher Dawson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2652
| [[T. Llew Jones]]
| [[Coadan:Eisteddfod Genedlaethol Cymru, Glynebwy, 1958.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2653
| ''[[:d:Q2717918|Arthur Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2654
| ''[[:d:Q2737983|Lord Arthur Somerset]]''
| [[Coadan:Major Lord Henry Arthur George Somerset (1851-1926), - Vanity fair nov 19 1887.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2655
| ''[[:d:Q2741543|E. Tegla Davies]]''
| [[Coadan:Tegla.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2656
| ''[[:d:Q2745169|Llywelyn Goch ap Meurig Hen]]''
|
|
|
|-
| style='text-align:right'| 2657
| ''[[:d:Q2827000|Anna Maria Bennett]]''
| [[Coadan:Anna Maria Bennett portrait (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2658
| ''[[:d:Q2840543|Alun Pask]]''
|
|
|
|-
| style='text-align:right'| 2659
| ''[[:d:Q2840540|Alun Thomas]]''
|
|
|
|-
| style='text-align:right'| 2660
| ''[[:d:Q2870954|Augusta Hall, Baroness Llanover]]''
| [[Coadan:Augusta Hall.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2661
| ''[[:d:Q2884061|Philip Evans]]''
| [[Coadan:Portret van Phillipus Evans, RP-P-1921-1870.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2662
| ''[[:d:Q2898051|Ray Daniel]]''
|
|
|
|-
| style='text-align:right'| 2663
| ''[[:d:Q2899186|Bert Gould]]''
| [[Coadan:G H Bert Gould.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2664
| ''[[:d:Q2899185|Bert Dauncey]]''
| [[Coadan:Bert Dauncey.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2665
| ''[[:d:Q2900084|Charlie Jones]]''
|
|
|
|-
| style='text-align:right'| 2666
| ''[[:d:Q2903163|Bill Clement]]''
|
|
|
|-
| style='text-align:right'| 2667
| ''[[:d:Q2903257|Bill James]]''
|
|
|
|-
| style='text-align:right'| 2668
| ''[[:d:Q2903371|Bill Tamplin]]''
|
|
|
|-
| style='text-align:right'| 2669
| ''[[:d:Q2903616|Billy Cleaver]]''
| [[Coadan:Billy Cleaver 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2670
| ''[[:d:Q2903678|William McCutcheon]]''
| [[Coadan:William McCutcheon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2671
| ''[[:d:Q2903688|Billy O'Neill]]''
| [[Coadan:Billy O'Neill.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2672
| ''[[:d:Q2903719|Billy Spiller]]''
|
|
|
|-
| style='text-align:right'| 2673
| ''[[:d:Q2903745|Billy Williams]]''
|
|
|
|-
| style='text-align:right'| 2674
| ''[[:d:Q2903748|Billy Williams]]''
|
|
|
|-
| style='text-align:right'| 2675
| ''[[:d:Q2907653|Bob Evans]]''
| [[Coadan:Robert Thomas Evans 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2676
| ''[[:d:Q2907680|Bob Gould]]''
| [[Coadan:Robert Bob Gould.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2677
| ''[[:d:Q2910477|Charles Nicholl]]''
| [[Coadan:Charles Nicholl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2678
| ''[[:d:Q2911997|Thomas Jones]]''
| [[Coadan:Thomas jones at cambridge.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2679
| ''[[:d:Q2913257|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 2680
| ''[[:d:Q2924982|Brian Price]]''
| [[Coadan:Brian Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2681
| ''[[:d:Q2925023|Brian Thomas]]''
|
|
|
|-
| style='text-align:right'| 2682
| ''[[:d:Q2928014|William Henry Williams]]''
| [[Coadan:William Henry Alexander.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2683
| ''[[:d:Q2928012|William Stadden]]''
| [[Coadan:Buller stadden.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2684
| ''[[:d:Q2928233|Bunner Travers]]''
|
|
|
|-
| style='text-align:right'| 2685
| ''[[:d:Q2928498|Burke Shelley]]''
| [[Coadan:Burke Shelley.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2686
| ''[[:d:Q2928553|Burnett Bolloten]]''
| [[Coadan:Burnett Bolloten 1980.tif|center|128px]]
|
|
|-
| style='text-align:right'| 2687
| ''[[:d:Q2938073|Richard Valentine Pitchford]]''
| [[Coadan:Richard Valentine Pitchford magician.png|center|128px]]
|
|
|-
| style='text-align:right'| 2688
| ''[[:d:Q2959086|Charles Foweraker]]''
|
|
|
|-
| style='text-align:right'| 2689
| ''[[:d:Q2959651|Charles Lewis]]''
|
|
|
|-
| style='text-align:right'| 2690
| ''[[:d:Q2959898|Charlie Newman]]''
| [[Coadan:Charles Henry Newman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2691
| ''[[:d:Q2960293|Charles Taylor]]''
| [[Coadan:C. G. Taylor.png|center|128px]]
|
|
|-
| style='text-align:right'| 2692
| ''[[:d:Q2960849|Charlie Faulkner]]''
|
|
|
|-
| style='text-align:right'| 2693
| ''[[:d:Q2960878|Charlie Pritchard]]''
| [[Coadan:Charlie Pritchard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2694
| ''[[:d:Q2961003|Charlotte Mason]]''
| [[Coadan:Charlotte Mason.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2695
| ''[[:d:Q2976625|Claude Davey]]''
|
|
|
|-
| style='text-align:right'| 2696
| ''[[:d:Q2978800|Clem Thomas]]''
|
|
|
|-
| style='text-align:right'| 2697
| ''[[:d:Q2979039|Cliff Bowen]]''
| [[Coadan:Clifford Alfred Bowen (1875–1929).png|center|128px]]
|
|
|-
| style='text-align:right'| 2698
| ''[[:d:Q2979047|Cliff Davies]]''
| [[Coadan:Cliff Davies 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2699
| ''[[:d:Q2979063|Cliff Pritchard]]''
| [[Coadan:Wales Rugby1905.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2700
| ''[[:d:Q2989294|Howell Davis]]''
| [[Coadan:HowellDavies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2701
| ''[[:d:Q3001503|Courtney Meredith]]''
|
|
|
|-
| style='text-align:right'| 2702
| ''[[:d:Q3002796|Crispin Nash-Williams]]''
|
|
|
|-
| style='text-align:right'| 2703
| ''[[:d:Q3008718|Cynan ab Iago]]''
|
|
|
|-
| style='text-align:right'| 2704
| ''[[:d:Q3012007|Dai Fitzgerald]]''
| [[Coadan:Dai Fitzgerald (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2705
| ''[[:d:Q3012010|Dai Jones]]''
|
|
|
|-
| style='text-align:right'| 2706
| ''[[:d:Q3012009|David Jones]]''
| [[Coadan:Dai Tarw Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2707
| ''[[:d:Q3017152|W. J. A. Davies]]''
|
|
|
|-
| style='text-align:right'| 2708
| ''[[:d:Q3018170|David Jones]]''
| [[Coadan:Missionary David Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2709
| ''[[:d:Q3018755|David Samuel]]''
|
|
|
|-
| style='text-align:right'| 2710
| ''[[:d:Q3018959|David Watkins]]''
|
|
|
|-
| style='text-align:right'| 2711
| ''[[:d:Q3018998|David Williams]]''
| [[Coadan:John Hoppner (1758-1810) (attributed to) - Reverend David Williams (1738–1816) - NMW A 5397 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2712
| ''[[:d:Q3025590|Dewi Zephaniah Phillips]]''
|
|
|
|-
| style='text-align:right'| 2713
| ''[[:d:Q3026625|Dick Richards]]''
|
|
|
|-
| style='text-align:right'| 2714
| ''[[:d:Q3026630|Dick Thomas]]''
|
|
|
|-
| style='text-align:right'| 2715
| ''[[:d:Q3026655|Dickie Garrett]]''
|
|
|
|-
| style='text-align:right'| 2716
| ''[[:d:Q3026670|Dicky Owen]]''
| [[Coadan:Dicky Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2717
| ''[[:d:Q3033499|Wilf Cude]]''
|
|
|
|-
| style='text-align:right'| 2718
| ''[[:d:Q3037194|Dorothy Squires]]''
|
|
|
|-
| style='text-align:right'| 2719
| ''[[:d:Q3038019|Douglas McKie]]''
|
|
|
|-
| style='text-align:right'| 2720
| ''[[:d:Q3038045|Douglas Vaughan]]''
|
|
|
|-
| style='text-align:right'| 2721
| ''[[:d:Q3039882|Hugh Percy Wilkins]]''
|
|
|
|-
| style='text-align:right'| 2722
| ''[[:d:Q3048504|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 2723
| ''[[:d:Q3048530|Edward George Bowen]]''
| [[Coadan:Edward George Bowen at Parkes Observatory, c. 1961.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2724
| ''[[:d:Q3048577|Edward Jones]]''
| [[Coadan:Bardd y Brenin, Edward Jones (1752–1824) (gcf10063).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2725
| ''[[:d:Q3048652|Edward Ravenscroft]]''
| [[Coadan:Edward Ravenscroft Esqr (BM 1860,1013.73).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2726
| ''[[:d:Q3048696|Edward Treharne]]''
| [[Coadan:Dr Edward Llewellyn Treharne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2727
| ''[[:d:Q3050565|John Rhys]]''
| [[Coadan:The Right Hon. Sir John Rhŷs, P.C., M.A., D.Litt (5227644) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2728
| ''[[:d:Q3061325|Evan James]]''
| [[Coadan:Portrait of Evan James (4670936) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2729
| ''[[:d:Q3069617|William Goscombe John]]''
| [[Coadan:Portrait of Sir William Goscombe John by Simon Harmon Vedder.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2730
| ''[[:d:Q3082655|Frank Hill]]''
| [[Coadan:Frank Hill (Rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2731
| ''[[:d:Q3086926|Fred Parfitt]]''
| [[Coadan:Fred Parfitt (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2732
| ''[[:d:Q3086951|Fred Scrine]]''
| [[Coadan:Fred Scrine.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2733
| ''[[:d:Q7597536|Stan Awbery]]''
|
|
|
|-
| style='text-align:right'| 2734
| ''[[:d:Q7597565|Stan Bowsher]]''
|
|
|
|-
| style='text-align:right'| 2735
| ''[[:d:Q7597610|Stan Davies]]''
|
|
|
|-
| style='text-align:right'| 2736
| ''[[:d:Q7597761|Stan Leonard]]''
|
|
|
|-
| style='text-align:right'| 2737
| ''[[:d:Q7597805|Stan Morgan]]''
|
|
|
|-
| style='text-align:right'| 2738
| ''[[:d:Q7597821|Stan Owen]]''
|
|
|
|-
| style='text-align:right'| 2739
| ''[[:d:Q7597848|Stan Richards]]''
|
|
|
|-
| style='text-align:right'| 2740
| ''[[:d:Q7597900|Stan Stennett]]''
| [[Coadan:Stan Stennett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2741
| ''[[:d:Q7599882|Stanley Powell]]''
|
|
|
|-
| style='text-align:right'| 2742
| ''[[:d:Q7600045|Stanley Williams]]''
| [[Coadan:Stanley Williams (rugby union).png|center|128px]]
|
|
|-
| style='text-align:right'| 2743
| ''[[:d:Q7600051|Stanley Winmill]]''
|
|
|
|-
| style='text-align:right'| 2744
| ''[[:d:Q7609455|Stephen Healey]]''
|
|
|
|-
| style='text-align:right'| 2745
| ''[[:d:Q7609929|Stephen Maybery]]''
|
|
|
|-
| style='text-align:right'| 2746
| ''[[:d:Q7610673|Stephen Thomas]]''
|
|
|
|-
| style='text-align:right'| 2747
| ''[[:d:Q7612324|Steve Curtis]]''
|
|
|
|-
| style='text-align:right'| 2748
| ''[[:d:Q7613422|Steve Morris]]''
| [[Coadan:Steve Morris -Tom Parker 1922.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2749
| ''[[:d:Q7626565|Stuart Gallacher]]''
|
|
|
|-
| style='text-align:right'| 2750
| ''[[:d:Q7626974|Stuart Prosser]]''
|
|
|
|-
| style='text-align:right'| 2751
| ''[[:d:Q7627026|Stuart Roberts]]''
|
|
|
|-
| style='text-align:right'| 2752
| ''[[:d:Q7636261|Sulien]]''
| [[Coadan:Plaque for Sulien, Llanbadarn Fawr - geograph.org.uk - 2104435.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2753
| ''[[:d:Q7647604|Susan Bradshaw]]''
|
|
|
|-
| style='text-align:right'| 2754
| ''[[:d:Q7651983|Sven Hansen]]''
|
|
|
|-
| style='text-align:right'| 2755
| ''[[:d:Q7659507|Sybil Christopher]]''
| [[Coadan:Sybil Burton Christopher.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2756
| ''[[:d:Q7659509|Sybil Connolly]]''
|
|
|
|-
| style='text-align:right'| 2757
| ''[[:d:Q7659682|Syd Fursland]]''
|
|
|
|-
| style='text-align:right'| 2758
| ''[[:d:Q7659721|Syd Reid]]''
|
|
|
|-
| style='text-align:right'| 2759
| ''[[:d:Q7659740|Syd Worgan]]''
|
|
|
|-
| style='text-align:right'| 2760
| ''[[:d:Q7659969|Sydney Hinam]]''
|
|
|
|-
| style='text-align:right'| 2761
| ''[[:d:Q7660223|Sydney Williams]]''
|
|
|
|-
| style='text-align:right'| 2762
| ''[[:d:Q7668222|T. E. Ellis]]''
| [[Coadan:Tom Ellis 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2763
| ''[[:d:Q7668266|T. Glynne Davies]]''
| [[Coadan:Author T Glynne Davies (1553852).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2764
| ''[[:d:Q7668277|T. Gwynn Jones]]''
| [[Coadan:T. Gwynn Jones (1871–1949) (gcf02648).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2765
| ''[[:d:Q7668315|T. Ifor Rees]]''
|
|
|
|-
| style='text-align:right'| 2766
| ''[[:d:Q7668365|T. J. Morgan]]''
|
|
|
|-
| style='text-align:right'| 2767
| ''[[:d:Q7674966|Taffy O'Callaghan]]''
|
|
|
|-
| style='text-align:right'| 2768
| ''[[:d:Q7674964|Taffy Davies]]''
|
|
|
|-
| style='text-align:right'| 2769
| ''[[:d:Q7674969|Taffy Williams]]''
|
|
|
|-
| style='text-align:right'| 2770
| ''[[:d:Q7678702|Tal Harris]]''
|
|
|
|-
| style='text-align:right'| 2771
| ''[[:d:Q7679434|Talfryn Evans]]''
|
|
|
|-
| style='text-align:right'| 2772
| ''[[:d:Q7679435|Talfryn Thomas]]''
|
|
|
|-
| style='text-align:right'| 2773
| ''[[:d:Q7679452|John Jones]]''
| [[Coadan:John Jones, 'Talhaiarn'.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2774
| ''[[:d:Q7687359|Tasker Watkins]]''
| [[Coadan:Sir Tasker Watkins VC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2775
| ''[[:d:Q7692926|Tecwyn Roberts]]''
| [[Coadan:Tecwyn Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2776
| ''[[:d:Q7693615|Ted Pooley]]''
| [[Coadan:Ted Pooley.png|center|128px]]
|
|
|-
| style='text-align:right'| 2777
| ''[[:d:Q7693850|Ted Ward]]''
|
|
|
|-
| style='text-align:right'| 2778
| ''[[:d:Q7694070|Teddy Peers]]''
|
|
|
|-
| style='text-align:right'| 2779
| ''[[:d:Q7701873|Terence Cook]]''
|
|
|
|-
| style='text-align:right'| 2780
| ''[[:d:Q7703511|Terrence Robbins]]''
|
|
|
|-
| style='text-align:right'| 2781
| ''[[:d:Q7704285|Terry Davies]]''
|
|
|
|-
| style='text-align:right'| 2782
| ''[[:d:Q7704519|Terry Higgins]]''
|
|
|
|-
| style='text-align:right'| 2783
| ''[[:d:Q7781956|Theodore Price]]''
|
|
|
|-
| style='text-align:right'| 2784
| ''[[:d:Q7782307|Theophilus Jones]]''
| [[Coadan:Portrait of Thes. Jones (4672942) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2785
| ''[[:d:Q7782323|Theophilus Redwood]]''
| [[Coadan:Theophilus Redwood.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2786
| ''[[:d:Q7787281|Thomas Babington Jones]]''
|
|
|
|-
| style='text-align:right'| 2787
| ''[[:d:Q7787333|Thomas Baker Jones]]''
|
|
|
|-
| style='text-align:right'| 2788
| ''[[:d:Q7787443|Thomas Bartley]]''
|
|
|
|-
| style='text-align:right'| 2789
| ''[[:d:Q7787897|Thomas Brigstocke]]''
| [[Coadan:Thomas Brigstocke.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2790
| ''[[:d:Q7787900|Thomas Briscoe]]''
|
|
|
|-
| style='text-align:right'| 2791
| ''[[:d:Q7788056|Thomas Burgoyne]]''
|
|
|
|-
| style='text-align:right'| 2792
| ''[[:d:Q7788335|Thomas Charles]]''
| [[Coadan:Thomas Charles, Bala.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2793
| ''[[:d:Q7788342|Thomas Charles Edwards]]''
| [[Coadan:Principal Thomas Charles Edwards (1837-1900) NLW3362721.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2794
| ''[[:d:Q7788707|Thomas Crofts]]''
| [[Coadan:Thomas Crofts 1722 Catalogue.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2795
| ''[[:d:Q7788864|Thomas David Frank Evans]]''
|
|
|
|-
| style='text-align:right'| 2796
| ''[[:d:Q7788876|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 2797
| ''[[:d:Q7789102|Thomas Duncombe Dee]]''
|
|
|
|-
| style='text-align:right'| 2798
| ''[[:d:Q7789165|Thomas E. Heywood]]''
|
|
|
|-
| style='text-align:right'| 2799
| ''[[:d:Q7789203|Thomas E. Stephens]]''
|
|
|
|-
| style='text-align:right'| 2800
| ''[[:d:Q7789287|Thomas Edwards]]''
|
|
|
|-
| style='text-align:right'| 2801
| ''[[:d:Q7789292|Thomas Edwards]]''
|
|
|
|-
| style='text-align:right'| 2802
| ''[[:d:Q7789331|Thomas Ellis]]''
|
|
|
|-
| style='text-align:right'| 2803
| ''[[:d:Q7789332|Thomas Ellis]]''
|
|
|
|-
| style='text-align:right'| 2804
| ''[[:d:Q7789396|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 2805
| ''[[:d:Q7789400|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 2806
| ''[[:d:Q7789414|Thomas Exmewe]]''
| [[Coadan:John Bettes the Elder Sir Thomas Exmewe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2807
| ''[[:d:Q7789686|Thomas Flynn]]''
|
|
|
|-
| style='text-align:right'| 2808
| ''[[:d:Q7789785|Thomas Francis Roberts]]''
| [[Coadan:Dr T. F. Roberts (1860–1919), MA, LLD, Principal of University of Wales, Aberystwyth (1892–1919) (OP81).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2809
| ''[[:d:Q7790214|Thomas Griffiths]]''
| [[Coadan:Tom-Griffiths-AS-Pont-y-pŵl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2810
| ''[[:d:Q7790212|Thomas Griffiths]]''
| [[Coadan:BG T Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2811
| ''[[:d:Q7790756|Thomas Hollingdale]]''
| [[Coadan:Tom Hollingdale 1928.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2812
| ''[[:d:Q7791002|Thomas Mardy Jones]]''
| [[Coadan:G. H. Hall, Mardy-Jones, Grenfell (de d. à g.) - btv1b531623329.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2813
| ''[[:d:Q7791373|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 2814
| ''[[:d:Q7791377|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 2815
| ''[[:d:Q7791382|Thomas Jones]]''
| [[Coadan:Portrait of Thomas Jones (4673346).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2816
| ''[[:d:Q7791381|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 2817
| ''[[:d:Q7791384|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 2818
| ''[[:d:Q7791392|Thomas Joseph-Watkin]]''
|
|
|
|-
| style='text-align:right'| 2819
| ''[[:d:Q7791836|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 2820
| ''[[:d:Q7791887|Thomas Lloyd-Mostyn]]''
|
|
|
|-
| style='text-align:right'| 2821
| ''[[:d:Q7791891|Thomas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2822
| ''[[:d:Q7791892|Thomas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2823
| ''[[:d:Q7792509|Thomas Monaghan]]''
| [[Coadan:Thomas Monaghan (1833–1895).png|center|128px]]
|
|
|-
| style='text-align:right'| 2824
| ''[[:d:Q7792550|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 2825
| ''[[:d:Q7792552|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 2826
| ''[[:d:Q7792716|Thomas Neville George]]''
|
|
|
|-
| style='text-align:right'| 2827
| ''[[:d:Q7792777|Thomas Nowell]]''
|
|
|
|-
| style='text-align:right'| 2828
| ''[[:d:Q7792907|Thomas Owen]]''
|
|
|
|-
| style='text-align:right'| 2829
| ''[[:d:Q7793019|Thomas Parker]]''
|
|
|
|-
| style='text-align:right'| 2830
| ''[[:d:Q7819747|Tommy Nutter]]''
|
|
|
|-
| style='text-align:right'| 2831
| ''[[:d:Q7819800|Tommy Rees]]''
|
|
|
|-
| style='text-align:right'| 2832
| ''[[:d:Q7819839|Tommy Scourfield]]''
|
|
|
|-
| style='text-align:right'| 2833
| ''[[:d:Q7819968|Tommy Vile]]''
| [[Coadan:Tommy Vile.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2834
| ''[[:d:Q7819994|Tommy Weale]]''
|
|
|
|-
| style='text-align:right'| 2835
| ''[[:d:Q7820312|Tomos Prys]]''
| [[Coadan:Tomos Prys portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2836
| ''[[:d:Q7821745|Tony Adams]]''
|
|
|
|-
| style='text-align:right'| 2837
| ''[[:d:Q7822985|Tony Millington]]''
|
|
|
|-
| style='text-align:right'| 2838
| ''[[:d:Q7823053|Tony Nelson]]''
|
|
|
|-
| style='text-align:right'| 2839
| ''[[:d:Q7823270|Tony Ridler]]''
|
|
|
|-
| style='text-align:right'| 2840
| ''[[:d:Q7823324|Tony Rowley]]''
|
|
|
|-
| style='text-align:right'| 2841
| ''[[:d:Q7823625|Tony Villars]]''
|
|
|
|-
| style='text-align:right'| 2842
| ''[[:d:Q7827600|Tosh Powell]]''
|
|
|
|-
| style='text-align:right'| 2843
| ''[[:d:Q7837812|Trefor Jenkins]]''
| [[Coadan:Trefor Jenkins00.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2844
| ''[[:d:Q7838982|Trevil Morgan]]''
|
|
|
|-
| style='text-align:right'| 2845
| ''[[:d:Q7839033|Trevor Arnott]]''
|
|
|
|-
| style='text-align:right'| 2846
| ''[[:d:Q7839139|Trevor Every]]''
|
|
|
|-
| style='text-align:right'| 2847
| ''[[:d:Q7839152|Trevor Foster]]''
|
|
|
|-
| style='text-align:right'| 2848
| ''[[:d:Q7839165|Trevor Gardner]]''
|
|
|
|-
| style='text-align:right'| 2849
| ''[[:d:Q7839243|Trevor Jones]]''
|
|
|
|-
| style='text-align:right'| 2850
| ''[[:d:Q7839282|Trevor Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 2851
| ''[[:d:Q7839287|Trevor Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2852
| ''[[:d:Q7839340|Trevor Morris]]''
|
|
|
|-
| style='text-align:right'| 2853
| ''[[:d:Q7839382|Trevor Preece]]''
|
|
|
|-
| style='text-align:right'| 2854
| ''[[:d:Q7839401|Trevor Roberts]]''
|
|
|
|-
| style='text-align:right'| 2855
| ''[[:d:Q7839460|Trevor Thomas]]''
|
|
|
|-
| style='text-align:right'| 2856
| ''[[:d:Q7839477|Trevor Walters]]''
|
|
|
|-
| style='text-align:right'| 2857
| ''[[:d:Q7851276|Tudor Davies]]''
|
|
|
|-
| style='text-align:right'| 2858
| ''[[:d:Q7851330|Tudor Watkins, Baron Watkins]]''
|
|
|
|-
| style='text-align:right'| 2859
| ''[[:d:Q7861628|Tyrone O'Sullivan]]''
| [[Coadan:Tyrone OSullivan by Aberdare Blog.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2860
| ''[[:d:Q7899835|Urban]]''
|
|
|
|-
| style='text-align:right'| 2861
| ''[[:d:Q7909090|Val Feld]]''
| [[Coadan:Val Feld.png|center|128px]]
|
|
|-
| style='text-align:right'| 2862
| ''[[:d:Q7922142|Vernon Hill]]''
| [[Coadan:Vernon Hill.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2863
| ''[[:d:Q7922194|Vernon Morris]]''
|
|
|
|-
| style='text-align:right'| 2864
| ''[[:d:Q7925889|Victor Erle Nash-Williams]]''
|
|
|
|-
| style='text-align:right'| 2865
| ''[[:d:Q7931505|Vince Griffiths]]''
|
|
|
|-
| style='text-align:right'| 2866
| ''[[:d:Q7931909|Vincent Lloyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 2867
| ''[[:d:Q7937419|Viv Huzzey]]''
|
|
|
|-
| style='text-align:right'| 2868
| ''[[:d:Q7937718|Vivian Harrison]]''
|
|
|
|-
| style='text-align:right'| 2869
| ''[[:d:Q7937766|Vivian Ridler]]''
|
|
|
|-
| style='text-align:right'| 2870
| ''[[:d:Q7945802|William Llewelyn Williams]]''
| [[Coadan:W. Llewelyn Williams (5254833) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2871
| ''[[:d:Q7945968|W. S. Gwynn Williams]]''
| [[Coadan:W S Gwynn Williams, Llangollen (1544595).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2872
| ''[[:d:Q7945972|W. S. Jones]]''
| [[Coadan:Portrayal of Wil Sam (W S Jones), the Llanystumdwy dramatist (1552990).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2873
| ''[[:d:Q7955445|WR Parry]]''
|
|
|
|-
| style='text-align:right'| 2874
| ''[[:d:Q7964582|Walter Coffin]]''
|
|
|
|-
| style='text-align:right'| 2875
| ''[[:d:Q7964611|Walter Cradock]]''
|
|
|
|-
| style='text-align:right'| 2876
| ''[[:d:Q7964653|Walter Davis]]''
|
|
|
|-
| style='text-align:right'| 2877
| ''[[:d:Q7964728|Walter E. Rees]]''
| [[Coadan:Walter E Rees.png|center|128px]]
|
|
|-
| style='text-align:right'| 2878
| ''[[:d:Q7964785|Walter Evans]]''
|
|
|
|-
| style='text-align:right'| 2879
| ''[[:d:Q7965162|Walter Horatio Wilson]]''
| [[Coadan:StateLibQld 1 110840 Honourable Walter Horatio Wilson 1887.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2880
| ''[[:d:Q7965269|Walter Jenkin Evans]]''
| [[Coadan:Professor Walter Jenkin Evans (1856–1927), Carmarthen Presbyterian College (gcf02731).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2881
| ''[[:d:Q7965470|Walter Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2882
| ''[[:d:Q7965658|Walter Monslow, Baron Monslow]]''
|
|
|
|-
| style='text-align:right'| 2883
| ''[[:d:Q7965863|Walter Powell]]''
|
|
|
|-
| style='text-align:right'| 2884
| ''[[:d:Q7965960|Walter Rice Evans]]''
|
|
|
|-
| style='text-align:right'| 2885
| ''[[:d:Q7965980|Walter Robbins]]''
|
|
|
|-
| style='text-align:right'| 2886
| ''[[:d:Q7966122|Walter Shaw Sparrow]]''
|
|
|
|-
| style='text-align:right'| 2887
| ''[[:d:Q7966361|Walter W. Thomas]]''
|
|
|
|-
| style='text-align:right'| 2888
| ''[[:d:Q7972932|Wat Jones]]''
|
|
|
|-
| style='text-align:right'| 2889
| ''[[:d:Q7976043|Wayne Bickerton]]''
|
|
|
|-
| style='text-align:right'| 2890
| ''[[:d:Q7976202|Wayne Edwards]]''
|
|
|
|-
| style='text-align:right'| 2891
| ''[[:d:Q7976216|Wayne Evans]]''
|
|
|
|-
| style='text-align:right'| 2892
| ''[[:d:Q7990708|Wharton Davies]]''
|
|
|
|-
| style='text-align:right'| 2893
| ''[[:d:Q7998393|Wickham Powell]]''
|
|
|
|-
| style='text-align:right'| 2894
| ''[[:d:Q8001663|Wilf Hughes]]''
|
|
|
|-
| style='text-align:right'| 2895
| ''[[:d:Q8001666|Wilf Lewis]]''
|
|
|
|-
| style='text-align:right'| 2896
| ''[[:d:Q8001693|Wilf Walsh]]''
|
|
|
|-
| style='text-align:right'| 2897
| ''[[:d:Q8001810|Wilfred Hodder]]''
|
|
|
|-
| style='text-align:right'| 2898
| ''[[:d:Q8001847|Wilfred Mitford Davies]]''
| [[Coadan:Llun o Wilfred Mitford Davies (1451201).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2899
| ''[[:d:Q8001858|Wilfred Pallott]]''
|
|
|
|-
| style='text-align:right'| 2900
| ''[[:d:Q8001891|Wilfred Trubshaw]]''
|
|
|
|-
| style='text-align:right'| 2901
| ''[[:d:Q8002410|Wiliam Midleton]]''
|
|
|
|-
| style='text-align:right'| 2902
| ''[[:d:Q8002780|Will Davies]]''
|
|
|
|-
| style='text-align:right'| 2903
| ''[[:d:Q8002998|Will Osborne]]''
|
|
|
|-
| style='text-align:right'| 2904
| ''[[:d:Q8003009|Will Parker]]''
|
|
|
|-
| style='text-align:right'| 2905
| ''[[:d:Q8003012|Will Paynter]]''
| [[Coadan:Will Paynter, the newly elected miners' leader (1453859).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2906
| ''[[:d:Q8003042|Will Roberts]]''
|
|
|
|-
| style='text-align:right'| 2907
| ''[[:d:Q8004161|William Addams Williams]]''
|
|
|
|-
| style='text-align:right'| 2908
| ''[[:d:Q8004223|William Albert Jenkins]]''
|
|
|
|-
| style='text-align:right'| 2909
| ''[[:d:Q8004251|William Alexander]]''
|
|
|
|-
| style='text-align:right'| 2910
| ''[[:d:Q8004673|William Aubrey]]''
| [[Coadan:WilliamAubrey.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2911
| ''[[:d:Q8005020|William Banks]]''
|
|
|
|-
| style='text-align:right'| 2912
| ''[[:d:Q8005220|William Baxter]]''
|
|
|
|-
| style='text-align:right'| 2913
| ''[[:d:Q8005312|William Bedloe]]''
|
|
|
|-
| style='text-align:right'| 2914
| ''[[:d:Q8005480|William Berry, 1st Viscount Camrose]]''
| [[Coadan:Sir Wm. Berry LCCN2014715089.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2915
| ''[[:d:Q8005633|William Blethyn]]''
|
|
|
|-
| style='text-align:right'| 2916
| ''[[:d:Q8005643|William Bloomfield Douglas]]''
| [[Coadan:William Bloomfield Douglas.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2917
| ''[[:d:Q8005819|William Brace]]''
| [[Coadan:William Brace.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2918
| ''[[:d:Q8005843|William Bradshaw]]''
| [[Coadan:William Bradshaw by Enoch Seeman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2919
| ''[[:d:Q8006111|William Bulkeley]]''
|
|
|
|-
| style='text-align:right'| 2920
| ''[[:d:Q8006477|William Camden Edwards]]''
|
|
|
|-
| style='text-align:right'| 2921
| ''[[:d:Q8006723|William Charles Fuller]]''
| [[Coadan:Lance Corporal Fuller VC. Welsh Regiment.png|center|128px]]
|
|
|-
| style='text-align:right'| 2922
| ''[[:d:Q8007106|William Cope, 1st Baron Cope]]''
| [[Coadan:Lord Cope.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2923
| ''[[:d:Q8007183|William Cove]]''
|
|
|
|-
| style='text-align:right'| 2924
| ''[[:d:Q8007280|William Crawshay II]]''
| [[Coadan:William Crawshay II (1788–1867).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2925
| ''[[:d:Q8007618|William David Phillips]]''
|
|
|
|-
| style='text-align:right'| 2926
| ''[[:d:Q8007617|William David Owen]]''
|
|
|
|-
| style='text-align:right'| 2927
| ''[[:d:Q8007633|William Davies]]''
| [[Coadan:Syr-William-Davies-AS-Sir-Benfro.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2928
| ''[[:d:Q8007637|William Davies]]''
|
|
|
|-
| style='text-align:right'| 2929
| ''[[:d:Q3324139|Y Prydydd Bychan]]''
|
|
|
|-
| style='text-align:right'| 2930
| ''[[:d:Q3379099|Philip Wood]]''
|
|
|
|-
| style='text-align:right'| 2931
| ''[[:d:Q3395389|Philip Jones Griffiths]]''
| [[Coadan:Philip Jones Griffiths in Bali, Fall, 2000AD.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2932
| ''[[:d:Q3395446|Daniel Owen]]''
| [[Coadan:Storïau o Hanes Cymru cyf I (Daniel Owen).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2933
| ''[[:d:Q3395608|Joseph Parry]]''
| [[Coadan:Dr Joseph Parry (Pencerdd America, 1841-1903) NLW3364255.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2934
| ''[[:d:Q3395749|Robert Morton Nance]]''
|
|
|
|-
| style='text-align:right'| 2935
| ''[[:d:Q3395909|Thomas Price]]''
| [[Coadan:Carnhuanawc.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2936
| ''[[:d:Q3396307|Eileen Beasley]]''
|
|
|
|-
| style='text-align:right'| 2937
| ''[[:d:Q3396721|Llywelyn ap Gruffydd Fychan]]''
| [[Coadan:Castell Llanymddyfri Sir Gaerfyrddin gyda cherflun o - LLywelyn ap Gruffydd Fychan 07.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2938
| ''[[:d:Q3396852|Geraint Bowen]]''
|
|
|
|-
| style='text-align:right'| 2939
| ''[[:d:Q3396876|Ambrose Bebb]]''
| [[Coadan:William Ambrose Bebb (5236463) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2940
| ''[[:d:Q3397209|Thomas Vaughan]]''
|
|
|
|-
| style='text-align:right'| 2941
| ''[[:d:Q3397314|Richard Gwyn]]''
| [[Coadan:Richard Gwyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2942
| ''[[:d:Q3397327|Glanmor Williams]]''
|
|
|
|-
| style='text-align:right'| 2943
| ''[[:d:Q3397435|John Dyer]]''
| [[Coadan:John Dyer Dalziel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2944
| ''[[:d:Q3397600|William Williams Pantycelyn]]''
| [[Coadan:Portrait of Parch. William Williams, Pant-y-Celyn (4674719) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2945
| ''[[:d:Q3397651|Howell Harris]]''
| [[Coadan:Howell harris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2946
| ''[[:d:Q3398027|Owain Owain]]''
| [[Coadan:Owain Owain Traeth Coch circa 1966 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2947
| ''[[:d:Q7795196|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 2948
| ''[[:d:Q7793031|Thomas Parry]]''
| [[Coadan:Professor Thomas Parry on his appointment as Principal of Aberystwyth University College (1529363).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2949
| ''[[:d:Q7793039|Thomas Parry]]''
| [[Coadan:Thomas Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2950
| ''[[:d:Q7793099|Thomas Penson]]''
|
|
|
|-
| style='text-align:right'| 2951
| ''[[:d:Q7793148|Thomas Phillips]]''
| [[Coadan:Portrait of Sir Thomas Phillips (4671785).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2952
| ''[[:d:Q7793237|Thomas Powel]]''
| [[Coadan:Professor Thomas Powel (1845-1922) NLW3364243.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2953
| ''[[:d:Q7793241|Thomas Powell]]''
|
|
|
|-
| style='text-align:right'| 2954
| ''[[:d:Q7793275|Tom Price]]''
| [[Coadan:Thomas Price (Australian politician).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2955
| ''[[:d:Q7793310|Thomas Prothero]]''
| [[Coadan:Thomas Protheroe (1780-1853).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2956
| ''[[:d:Q7793450|Thomas Rees]]''
|
|
|
|-
| style='text-align:right'| 2957
| ''[[:d:Q7793451|Thomas Rees]]''
|
|
|
|-
| style='text-align:right'| 2958
| ''[[:d:Q7793503|Thomas Richard Lloyd]]''
|
|
|
|-
| style='text-align:right'| 2959
| ''[[:d:Q7793510|Thomas Richards]]''
|
|
|
|-
| style='text-align:right'| 2960
| ''[[:d:Q7793509|Thomas Richards]]''
| [[Coadan:Thomas Richards 1905.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 2961
| ''[[:d:Q7793516|Thomas Richards]]''
|
|
|
|-
| style='text-align:right'| 2962
| ''[[:d:Q7793653|T. Rowland Hughes]]''
|
|
|
|-
| style='text-align:right'| 2963
| ''[[:d:Q7793755|Thomas Salisbury]]''
| [[Coadan:Thomas Salisbury died 1586 by Moses Griffith 02198.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2964
| ''[[:d:Q7794427|Thomas Thomas]]''
| [[Coadan:Thomas Thomas.png|center|128px]]
|
|
|-
| style='text-align:right'| 2965
| ''[[:d:Q7794430|Thomas Thomas]]''
|
|
|
|-
| style='text-align:right'| 2966
| ''[[:d:Q7795183|Thomas Williams]]''
| [[Coadan:Thomas Williams (Christadelphian).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2967
| ''[[:d:Q7795190|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 2968
| ''[[:d:Q7795189|Thomas Dominic Williams]]''
|
|
|
|-
| style='text-align:right'| 2969
| ''[[:d:Q7795195|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 2970
| ''[[:d:Q7795206|Thomas Williams of Llanidan]]''
| [[Coadan:Thomas Williams of Llanidan.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2971
| ''[[:d:Q7795363|Thomas Wynne]]''
|
|
|
|-
| style='text-align:right'| 2972
| ''[[:d:Q7795360|Thomas Wynford Rees]]''
| [[Coadan:The War in the Far East- the Burma Campaign 1941-1945 SE3257.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2973
| ''[[:d:Q7795391|Thomas Zacharias]]''
|
|
|
|-
| style='text-align:right'| 2974
| ''[[:d:Q7795526|Thomas of Monmouth]]''
|
|
|
|-
| style='text-align:right'| 2975
| ''[[:d:Q7800585|Tich Gwilym]]''
| [[Coadan:Tich Gwilym (Aberystwyth, November 1985)-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2976
| ''[[:d:Q7803430|Tim Dinsdale]]''
|
|
|
|-
| style='text-align:right'| 2977
| ''[[:d:Q7804257|Tim Selwood]]''
|
|
|
|-
| style='text-align:right'| 2978
| ''[[:d:Q7807530|Timothy Stamps]]''
|
|
|
|-
| style='text-align:right'| 2979
| ''[[:d:Q7808784|Tip Williams]]''
|
|
|
|-
| style='text-align:right'| 2980
| ''[[:d:Q7810316|Titus Lewis]]''
|
|
|
|-
| style='text-align:right'| 2981
| ''[[:d:Q7814803|Tom Arthur]]''
| [[Coadan:Tom Arthur 1928.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2982
| ''[[:d:Q7815366|Tom Collings]]''
|
|
|
|-
| style='text-align:right'| 2983
| ''[[:d:Q7815371|Tom Collins]]''
|
|
|
|-
| style='text-align:right'| 2984
| ''[[:d:Q7815542|Tom Day]]''
|
|
|
|-
| style='text-align:right'| 2985
| ''[[:d:Q7815552|Tom Deacon]]''
| [[Coadan:Tom Deacon rugby player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2986
| ''[[:d:Q7815721|Tom Emanuel]]''
|
|
|
|-
| style='text-align:right'| 2987
| ''[[:d:Q7815737|Tom Evans]]''
|
|
|
|-
| style='text-align:right'| 2988
| ''[[:d:Q7816227|Tom Hooson]]''
|
|
|
|-
| style='text-align:right'| 2989
| ''[[:d:Q7816231|Tom Horabin]]''
|
|
|
|-
| style='text-align:right'| 2990
| ''[[:d:Q7816281|Tom Hurry Riches]]''
|
|
|
|-
| style='text-align:right'| 2991
| ''[[:d:Q7816308|Tom Jackson]]''
|
|
|
|-
| style='text-align:right'| 2992
| ''[[:d:Q7816351|Tom Johnson]]''
|
|
|
|-
| style='text-align:right'| 2993
| ''[[:d:Q7816369|Tom Jones]]''
|
|
|
|-
| style='text-align:right'| 2994
| ''[[:d:Q7816582|Tom Lewis]]''
|
|
|
|-
| style='text-align:right'| 2995
| ''[[:d:Q7816749|Tom Maynard]]''
| [[Coadan:Tommaynard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 2996
| ''[[:d:Q7817160|Tom Parker]]''
| [[Coadan:Tom Parker.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 2997
| ''[[:d:Q7817340|Tom Reason]]''
|
|
|
|-
| style='text-align:right'| 2998
| ''[[:d:Q7817394|Tom Roberts]]''
|
|
|
|-
| style='text-align:right'| 2999
| ''[[:d:Q7817785|Tom Taylor]]''
|
|
|
|-
| style='text-align:right'| 3000
| ''[[:d:Q7817986|Tom Walters]]''
|
|
|
|-
| style='text-align:right'| 3001
| ''[[:d:Q7818044|Tom Whittington]]''
|
|
|
|-
| style='text-align:right'| 3002
| ''[[:d:Q7819187|Tommy Astbury]]''
|
|
|
|-
| style='text-align:right'| 3003
| ''[[:d:Q7819227|Tommy Best]]''
|
|
|
|-
| style='text-align:right'| 3004
| ''[[:d:Q7819339|Tommy Davies]]''
|
|
|
|-
| style='text-align:right'| 3005
| ''[[:d:Q7819500|Tommy Harris]]''
|
|
|
|-
| style='text-align:right'| 3006
| ''[[:d:Q7819577|Tommy Jones-Davies]]''
| [[Coadan:Tommy Jones-Davies 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3007
| ''[[:d:Q3090747|Fulke Walwyn]]''
|
|
|
|-
| style='text-align:right'| 3008
| ''[[:d:Q3098302|Gareth Gwenlan]]''
|
|
|
|-
| style='text-align:right'| 3009
| ''[[:d:Q3098315|Gareth Williams]]''
|
|
|
|-
| style='text-align:right'| 3010
| ''[[:d:Q3098316|Gareth Powell Williams]]''
|
|
|
|-
| style='text-align:right'| 3011
| ''[[:d:Q3098336|Garfield Owen]]''
|
|
|
|-
| style='text-align:right'| 3012
| ''[[:d:Q3101064|Geoff Wheel]]''
|
|
|
|-
| style='text-align:right'| 3013
| ''[[:d:Q3101068|Geoffrey Conway]]''
|
|
|
|-
| style='text-align:right'| 3014
| ''[[:d:Q3101430|George Boots]]''
| [[Coadan:George Boots.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3015
| ''[[:d:Q3101435|George Bowen]]''
|
|
|
|-
| style='text-align:right'| 3016
| ''[[:d:Q3101517|George Davies]]''
| [[Coadan:George Davies, Rugby player.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3017
| ''[[:d:Q3101615|George Guest]]''
|
|
|
|-
| style='text-align:right'| 3018
| ''[[:d:Q3101635|George Hayward]]''
| [[Coadan:George Hayward.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3019
| ''[[:d:Q3103853|Geraint Evans]]''
| [[Coadan:Geraint Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3020
| ''[[:d:Q3104447|Gerwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 3021
| ''[[:d:Q3108690|Glen Renfrew]]''
|
|
|
|-
| style='text-align:right'| 3022
| ''[[:d:Q3109363|Glyn Loosmore]]''
|
|
|
|-
| style='text-align:right'| 3023
| ''[[:d:Q3109367|Glyn Moses]]''
|
|
|
|-
| style='text-align:right'| 3024
| ''[[:d:Q3109364|Glyn Davies]]''
|
|
|
|-
| style='text-align:right'| 3025
| ''[[:d:Q3109365|Glyn Houston]]''
|
|
|
|-
| style='text-align:right'| 3026
| ''[[:d:Q3113252|Graham Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3027
| ''[[:d:Q3116627|Griffith Hughes]]''
|
|
|
|-
| style='text-align:right'| 3028
| ''[[:d:Q3122587|Gwladys Yvonne McKeon]]''
| [[Coadan:Gwladys Yvonne McKeon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3029
| ''[[:d:Q3127737|Harri Webb]]''
|
|
|
|-
| style='text-align:right'| 3030
| ''[[:d:Q3127791|Harry Bowen]]''
| [[Coadan:Harry bowen, rugby union player.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3031
| ''[[:d:Q3127809|Harry Day]]''
| [[Coadan:Harry Day (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3032
| ''[[:d:Q3127841|Harry Jarman]]''
| [[Coadan:Harry Jarman.png|center|128px]]
|
|
|-
| style='text-align:right'| 3033
| ''[[:d:Q3127937|Harry Vaughan Watkins]]''
|
|
|
|-
| style='text-align:right'| 3034
| ''[[:d:Q3128848|Haydn Morgan]]''
|
|
|
|-
| style='text-align:right'| 3035
| ''[[:d:Q3129078|Heather Dohollau]]''
|
|
|
|-
| style='text-align:right'| 3036
| ''[[:d:Q3129631|Helen Morgan]]''
|
|
|
|-
| style='text-align:right'| 3037
| ''[[:d:Q3133040|Geoff Thomas]]''
|
|
|
|-
| style='text-align:right'| 3038
| ''[[:d:Q3133452|Herbert Godwin]]''
|
|
|
|-
| style='text-align:right'| 3039
| ''[[:d:Q3140461|Horace Lyne]]''
| [[Coadan:Horace Lyne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3040
| ''[[:d:Q3142269|Hugh Iorys Hughes]]''
|
|
|
|-
| style='text-align:right'| 3041
| ''[[:d:Q3147943|Idwal Rees]]''
|
|
|
|-
| style='text-align:right'| 3042
| ''[[:d:Q3148103|Ifor Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3043
| ''[[:d:Q3156345|Ivor Barry]]''
|
|
|
|-
| style='text-align:right'| 3044
| ''[[:d:Q3156348|Ivor Morgan]]''
| [[Coadan:Ivor Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3045
| ''[[:d:Q3157121|Jack Bancroft]]''
| [[Coadan:Jack bancroft rugby union.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 3046
| ''[[:d:Q3157222|Jack Jones]]''
| [[Coadan:Jack Jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 3047
| ''[[:d:Q3157267|Jack Matthews]]''
| [[Coadan:Jack Matthews rugby 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3048
| ''[[:d:Q3160120|Jacques Vaillant de Guélis]]''
|
|
|
|-
| style='text-align:right'| 3049
| ''[[:d:Q3161184|James James]]''
| [[Coadan:James James composer of the music of 'Hen wlad fy nhadau' (5292122) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3050
| ''[[:d:Q3176811|Jehoida Hodges]]''
| [[Coadan:Jehoida Hodges.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3051
| ''[[:d:Q3178817|Jim Hannan]]''
| [[Coadan:Jim Hannan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3052
| ''[[:d:Q3180936|John Arthur Jones]]''
|
|
|
|-
| style='text-align:right'| 3053
| ''[[:d:Q3181171|John Callis]]''
|
|
|
|-
| style='text-align:right'| 3054
| ''[[:d:Q3181658|John Gwyn Jeffreys]]''
| [[Coadan:John Gwyn Jeffreys cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3055
| ''[[:d:Q3181859|John Kendall-Carpenter]]''
|
|
|
|-
| style='text-align:right'| 3056
| ''[[:d:Q3181992|John Mantle]]''
|
|
|
|-
| style='text-align:right'| 3057
| ''[[:d:Q3182121|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 3058
| ''[[:d:Q3182297|John Phillips]]''
|
|
|
|-
| style='text-align:right'| 3059
| ''[[:d:Q3182417|John Samuel]]''
|
|
|
|-
| style='text-align:right'| 3060
| ''[[:d:Q3182436|John Savage]]''
|
|
|
|-
| style='text-align:right'| 3061
| ''[[:d:Q3182765|John Williams]]''
| [[Coadan:Archbishop John Williams 1582 - 1650 portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3062
| ''[[:d:Q3182987|Johnny Williams]]''
| [[Coadan:Johnnie Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3063
| ''[[:d:Q3186047|Josiah Tucker]]''
| [[Coadan:Josiah Tucker, Dean of Gloucester 02259.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3064
| ''[[:d:Q3195050|Ken Jones]]''
|
|
|
|-
| style='text-align:right'| 3065
| ''[[:d:Q3236188|Leslie Williams]]''
|
|
|
|-
| style='text-align:right'| 3066
| ''[[:d:Q3237297|Lewis Jones]]''
| [[Coadan:Benjamin Lewis Jones 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3067
| ''[[:d:Q3250688|Caradog Prichard]]''
| [[Coadan:Eisteddfod Genedlaethol Cymru 1979, Caernarfon (1566017).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3068
| ''[[:d:Q3251003|Tom Macdonald]]''
|
|
|
|-
| style='text-align:right'| 3069
| ''[[:d:Q3257496|Llewellyn Lloyd]]''
| [[Coadan:Llewellyn Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3070
| ''[[:d:Q3262891|Lou Phillips]]''
| [[Coadan:Lou Phillips 1900.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3071
| ''[[:d:Q3270230|Goronwy Rees]]''
|
|
|
|-
| style='text-align:right'| 3072
| ''[[:d:Q3278112|Dorothea Bate]]''
| [[Coadan:Dorothea Minola Alice Bate.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3073
| ''[[:d:Q3281723|Malcolm Thomas]]''
| [[Coadan:Malcolm Campbell Thomas 1950.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3074
| ''[[:d:Q3296186|Mary Katherine Herbert]]''
|
|
|
|-
| style='text-align:right'| 3075
| ''[[:d:Q3299818|Matthew Watkins]]''
|
|
|
|-
| style='text-align:right'| 3076
| ''[[:d:Q3300771|David Brunt]]''
| [[Coadan:David Brunt in 1949.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3077
| ''[[:d:Q3304839|Mel Baker]]''
| [[Coadan:Mel Baker.png|center|128px]]
|
|
|-
| style='text-align:right'| 3078
| ''[[:d:Q3308132|Michael David]]''
|
|
|
|-
| style='text-align:right'| 3079
| ''[[:d:Q3309503|Cy Thomas]]''
|
|
|
|-
| style='text-align:right'| 3080
| ''[[:d:Q3313332|Mike Gibbins]]''
| [[Coadan:Mike gibbins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3081
| ''[[:d:Q3324117|Llywarch ap Llywelyn]]''
|
|
|
|-
| style='text-align:right'| 3082
| ''[[:d:Q3330999|Gwgon ap Meurig]]''
|
|
|
|-
| style='text-align:right'| 3083
| ''[[:d:Q3331114|Goronwy Foel]]''
|
|
|
|-
| style='text-align:right'| 3084
| ''[[:d:Q3331132|Phylip Brydydd]]''
|
|
|
|-
| style='text-align:right'| 3085
| ''[[:d:Q3331138|Bleddyn Fardd]]''
|
|
|
|-
| style='text-align:right'| 3086
| ''[[:d:Q3331168|Dafydd Benfras]]''
|
|
|
|-
| style='text-align:right'| 3087
| ''[[:d:Q3331180|Llywelyn Fardd I]]''
|
|
|
|-
| style='text-align:right'| 3088
| ''[[:d:Q3340532|Nicolas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3089
| ''[[:d:Q3343747|Norman Biggs]]''
| [[Coadan:Norman Biggs.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3090
| ''[[:d:Q3343775|Norman Gale]]''
|
|
|
|-
| style='text-align:right'| 3091
| ''[[:d:Q3357354|Ossie Williams]]''
|
|
|
|-
| style='text-align:right'| 3092
| ''[[:d:Q3358989|Owen Badger]]''
| [[Coadan:Owen Badger.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3093
| ''[[:d:Q3366739|James Williams]]''
|
|
|
|-
| style='text-align:right'| 3094
| ''[[:d:Q3367043|Edwin Richards]]''
|
|
|
|-
| style='text-align:right'| 3095
| ''[[:d:Q3367054|Philip Turnbull]]''
|
|
|
|-
| style='text-align:right'| 3096
| ''[[:d:Q3371796|Paul Mascarene]]''
| [[Coadan:WLA lacma Smibert Scotland portrait of Paul Mascarene.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3097
| ''[[:d:Q3373812|Kevin Beurle]]''
|
|
|
|-
| style='text-align:right'| 3098
| ''[[:d:Q3375183|Percy Bush]]''
| [[Coadan:Percy Bush 1905.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3099
| ''[[:d:Q3375217|Percy Phillips]]''
|
|
|
|-
| style='text-align:right'| 3100
| ''[[:d:Q3376765|Peter Morgan]]''
|
|
|
|-
| style='text-align:right'| 3101
| ''[[:d:Q3378770|Phil Dwyer]]''
| [[Coadan:Phil Dwyer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3102
| ''[[:d:Q3378979|Philip Burton]]''
|
|
|
|-
| style='text-align:right'| 3103
| ''[[:d:Q3379022|Phil Hopkins]]''
| [[Coadan:Philip Hopkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3104
| ''[[:d:Q8012638|Billy Hughes]]''
|
|
|
|-
| style='text-align:right'| 3105
| ''[[:d:Q8017668|William Robertson]]''
|
|
|
|-
| style='text-align:right'| 3106
| ''[[:d:Q8020391|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3107
| ''[[:d:Q8020396|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3108
| ''[[:d:Q8007642|William Davies]]''
|
|
|
|-
| style='text-align:right'| 3109
| ''[[:d:Q8007641|William Davies]]''
|
|
|
|-
| style='text-align:right'| 3110
| ''[[:d:Q8008479|William Edwards]]''
|
|
|
|-
| style='text-align:right'| 3111
| ''[[:d:Q8008480|William Edwards]]''
|
|
|
|-
| style='text-align:right'| 3112
| ''[[:d:Q8008498|William Egan]]''
|
|
|
|-
| style='text-align:right'| 3113
| ''[[:d:Q8008562|William Ellis Bailiff]]''
|
|
|
|-
| style='text-align:right'| 3114
| ''[[:d:Q8008626|William Erbery]]''
|
|
|
|-
| style='text-align:right'| 3115
| ''[[:d:Q8008690|William Evans]]''
|
|
|
|-
| style='text-align:right'| 3116
| ''[[:d:Q8008691|William Evans]]''
|
|
|
|-
| style='text-align:right'| 3117
| ''[[:d:Q8008698|William Evans]]''
| [[Coadan:William George Evans (1883 – 1946).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3118
| ''[[:d:Q8009059|William Finney]]''
|
|
|
|-
| style='text-align:right'| 3119
| ''[[:d:Q8009287|William Foxwist]]''
|
|
|
|-
| style='text-align:right'| 3120
| ''[[:d:Q8009291|William Frame]]''
|
|
|
|-
| style='text-align:right'| 3121
| ''[[:d:Q8009876|William Gilbert Rees]]''
| [[Coadan:William Gilbert Rees, July 1853.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3122
| ''[[:d:Q8010301|William Gwynn]]''
| [[Coadan:Gwynn William.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3123
| ''[[:d:Q8010926|William Harris]]''
|
|
|
|-
| style='text-align:right'| 3124
| ''[[:d:Q8011018|William Havard]]''
| [[Coadan:Bishop Havard by Evan Walters.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3125
| ''[[:d:Q8012147|William Henry Scourfield]]''
|
|
|
|-
| style='text-align:right'| 3126
| ''[[:d:Q8012148|William Henry Seager]]''
| [[Coadan:WHSeager.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3127
| ''[[:d:Q8012259|William Herbert Waring]]''
| [[Coadan:William Herbert Waring (1885–1918).png|center|128px]]
|
|
|-
| style='text-align:right'| 3128
| ''[[:d:Q8012504|William Hopper]]''
|
|
|
|-
| style='text-align:right'| 3129
| ''[[:d:Q8013054|Gerry Humphreys]]''
|
|
|
|-
| style='text-align:right'| 3130
| ''[[:d:Q8013397|William Jackson]]''
|
|
|
|-
| style='text-align:right'| 3131
| ''[[:d:Q8013423|William James]]''
|
|
|
|-
| style='text-align:right'| 3132
| ''[[:d:Q8013623|W. J. Gruffydd]]''
| [[Coadan:W. J. Gruffydd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3133
| ''[[:d:Q8013655|William John Parry]]''
| [[Coadan:WJParry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3134
| ''[[:d:Q8013687|William Johnson]]''
|
|
|
|-
| style='text-align:right'| 3135
| ''[[:d:Q8013723|William Jones]]''
| [[Coadan:William Lloyd Jones - Illustrated Australian News (1874).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3136
| ''[[:d:Q8013720|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3137
| ''[[:d:Q8013725|William Jones]]''
| [[Coadan:William Jones AS Arfon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3138
| ''[[:d:Q8013731|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3139
| ''[[:d:Q8013728|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3140
| ''[[:d:Q8013729|William Jones]]''
| [[Coadan:William Jones (1726-1795).jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 3141
| ''[[:d:Q8014533|William Lewis, 1st Baron Merthyr]]''
| [[Coadan:William Lewis, 1st Baron Merthyr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3142
| ''[[:d:Q8014542|William James Lewis]]''
|
|
|
|-
| style='text-align:right'| 3143
| ''[[:d:Q8014552|William Lewis Thomas]]''
|
|
|
|-
| style='text-align:right'| 3144
| ''[[:d:Q8014626|William Llewellyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 3145
| ''[[:d:Q8014627|William Llewellyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 3146
| ''[[:d:Q8014630|William Llewelyn Davies]]''
|
|
|
|-
| style='text-align:right'| 3147
| ''[[:d:Q8014638|William Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3148
| ''[[:d:Q8014765|William Lucas Collins]]''
|
|
|
|-
| style='text-align:right'| 3149
| ''[[:d:Q8015052|William Mainwaring]]''
|
|
|
|-
| style='text-align:right'| 3150
| ''[[:d:Q8015101|William Mansel]]''
| [[Coadan:WilliamLortMansel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3151
| ''[[:d:Q8015535|William Meggitt]]''
|
|
|
|-
| style='text-align:right'| 3152
| ''[[:d:Q8015629|William Milbourne James]]''
| [[Coadan:William M James the judge.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3153
| ''[[:d:Q8015715|William Molloy, Baron Molloy]]''
|
|
|
|-
| style='text-align:right'| 3154
| ''[[:d:Q8015809|William Morgan]]''
| [[Coadan:Thomas Lawrence - Portrait of William Morgan (1750-1833).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3155
| ''[[:d:Q8016046|William Nathaniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3156
| ''[[:d:Q8016190|William Norton]]''
|
|
|
|-
| style='text-align:right'| 3157
| ''[[:d:Q8016385|William Osborne Smith]]''
| [[Coadan:William Osborne Smith -Past masters, St Paul's Lodge, 374, ERmontage of 36 photographs (HS85-10-25525) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3158
| ''[[:d:Q8016424|William Owen Pughe]]''
| [[Coadan:William Owen Pughe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3159
| ''[[:d:Q8016742|William Penfro Rowlands]]''
|
|
|
|-
| style='text-align:right'| 3160
| ''[[:d:Q8017032|William Powell]]''
|
|
|
|-
| style='text-align:right'| 3161
| ''[[:d:Q8017083|William Price]]''
| [[Coadan:William Price painting (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3162
| ''[[:d:Q8017260|William R. P. George]]''
| [[Coadan:Bro Myrddin National Eisteddfod, 1974 (1551147).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3163
| ''[[:d:Q8017443|William Rees]]''
| [[Coadan:Dr William Rees (Gwilym Hiraethog, 1802-83) (1870) NLW3364252 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3164
| ''[[:d:Q8017448|William Rees Morgan Davies]]''
| [[Coadan:William Rees-Davies.png|center|128px]]
|
|
|-
| style='text-align:right'| 3165
| ''[[:d:Q8017467|William Reid Clanny]]''
|
|
|
|-
| style='text-align:right'| 3166
| ''[[:d:Q8017514|William Rhys-Herbert]]''
| [[Coadan:Rhys Herbert headshot.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 3167
| ''[[:d:Q8017521|William Richard Arnold]]''
|
|
|
|-
| style='text-align:right'| 3168
| ''[[:d:Q8017538|William Richards]]''
| [[Coadan:William Richards minister.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3169
| ''[[:d:Q8017648|William Roberts]]''
|
|
|
|-
| style='text-align:right'| 3170
| ''[[:d:Q8017657|William Roberts]]''
| [[Coadan:William Roberts (physician).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3171
| ''[[:d:Q8017750|William Roos]]''
|
|
|
|-
| style='text-align:right'| 3172
| ''[[:d:Q8017810|William Rowland]]''
|
|
|
|-
| style='text-align:right'| 3173
| ''[[:d:Q8018052|William Salesbury]]''
| [[Coadan:William Salesbury on the Translator's Memorial; Llanelwy - St Asaph, Cymru 07.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3174
| ''[[:d:Q8018108|William Sandham]]''
|
|
|
|-
| style='text-align:right'| 3175
| ''[[:d:Q8018129|William Sarvis]]''
|
|
|
|-
| style='text-align:right'| 3176
| ''[[:d:Q8019049|William T. Davies]]''
| [[Coadan:William Tecumseh Davies (1831–1912), Lieutenant Governor of Pennsylvania from 1887–91.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3177
| ''[[:d:Q8019287|William Thomas]]''
| [[Coadan:Portrait of William Thomas, 'Islwyn' (4671182).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3178
| ''[[:d:Q8019284|William Thomas]]''
| [[Coadan:Revd William Thomas (Gwilym Marles, 1834-79) (U) NLW3364226.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3179
| ''[[:d:Q8019290|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3180
| ''[[:d:Q8019295|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3181
| ''[[:d:Q8020060|William Watkin Edward Wynne]]''
| [[Coadan:Portrait of William Watkin Edward Wynne (4674672) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3182
| ''[[:d:Q8020386|William Williams]]''
| [[Coadan:VCWilliamWilliams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3183
| ''[[:d:Q8020385|William Williams]]''
| [[Coadan:William-Williams-AS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3184
| ''[[:d:Q8020395|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3185
| ''[[:d:Q8020392|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3186
| ''[[:d:Q8020402|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3187
| ''[[:d:Q8020407|William Williams of Wern]]''
| [[Coadan:Revd William Williams (1781-1840) (print) NLW3365416.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3188
| ''[[:d:Q8020624|William Wynn-Williams]]''
| [[Coadan:1882 MHRs William Wynn-Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3189
| ''[[:d:Q8020631|William Wynter]]''
|
|
|
|-
| style='text-align:right'| 3190
| ''[[:d:Q8020629|William Wynne]]''
|
|
|
|-
| style='text-align:right'| 3191
| ''[[:d:Q8021458|Willie Davies]]''
|
|
|
|-
| style='text-align:right'| 3192
| ''[[:d:Q8021457|Willie Davies]]''
|
|
|
|-
| style='text-align:right'| 3193
| ''[[:d:Q8021846|Willie Thomas]]''
| [[Coadan:Willie Thomas (Rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3194
| ''[[:d:Q8023109|Wilson Jones]]''
| [[Coadan:1946 AIK-Birmingham ity FC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3195
| ''[[:d:Q8025410|Winifred Maxwell, Countess of Nithsdale]]''
| [[Coadan:Winifred Maxwell, Countess of Nithsdale.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3196
| ''[[:d:Q8040064|Wyn Davies]]''
|
|
|
|-
| style='text-align:right'| 3197
| ''[[:d:Q8040069|Wyn Calvin]]''
| [[Coadan:Wyn Calvin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3198
| ''[[:d:Q8040109|Wyndham Emery]]''
|
|
|
|-
| style='text-align:right'| 3199
| ''[[:d:Q8040155|Wynford Vaughan-Thomas]]''
| [[Coadan:Answering You- the Production of a Bbc Radio Programme For the United States of America, 1941 D4577.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3200
| ''[[:d:Q8069294|Zephaniah Williams]]''
| [[Coadan:Zephaniah Williams - Illustrated Australian News (1874).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3201
| ''[[:d:Q9275390|Graham Harcourt]]''
|
|
|
|-
| style='text-align:right'| 3202
| ''[[:d:Q9346589|Evan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3203
| ''[[:d:Q18126117|Billy Hough]]''
|
|
|
|-
| style='text-align:right'| 3204
| ''[[:d:Q20734642|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 3205
| ''[[:d:Q20734643|William Jacob]]''
|
|
|
|-
| style='text-align:right'| 3206
| ''[[:d:Q20734640|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 3207
| ''[[:d:Q20734641|William Hughes]]''
| [[Coadan:William Hughes, Dolgellau.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3208
| ''[[:d:Q20734646|William James]]''
|
|
|
|-
| style='text-align:right'| 3209
| ''[[:d:Q20734647|William James]]''
| [[Coadan:Revd William James, Aberdar (1848-1907) (U) NLW3365166.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3210
| ''[[:d:Q20734645|William James]]''
| [[Coadan:Revd William James, Manchester (1833-1905) NLW3361817.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3211
| ''[[:d:Q20734650|William John Hughes]]''
|
|
|
|-
| style='text-align:right'| 3212
| ''[[:d:Q20734651|William John Hughes]]''
|
|
|
|-
| style='text-align:right'| 3213
| ''[[:d:Q20734648|William Jenkin Davies]]''
| [[Coadan:Parch William Jenkin Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3214
| ''[[:d:Q20734649|William John Evans]]''
|
|
|
|-
| style='text-align:right'| 3215
| ''[[:d:Q20734654|William John Roberts]]''
|
|
|
|-
| style='text-align:right'| 3216
| ''[[:d:Q20734652|William John Nicholson]]''
| [[Coadan:William John Nicholson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3217
| ''[[:d:Q20734657|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3218
| ''[[:d:Q20734662|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3219
| ''[[:d:Q20734663|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3220
| ''[[:d:Q20734661|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3221
| ''[[:d:Q20734666|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3222
| ''[[:d:Q20734667|William Jones]]''
| [[Coadan:William Jones (Bleddyn, 1829?-1903) (1876) NLW3362448.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3223
| ''[[:d:Q20734665|William Jones]]''
| [[Coadan:William Jones, Abergwaun.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3224
| ''[[:d:Q20734669|William Joseph Rhys]]''
|
|
|
|-
| style='text-align:right'| 3225
| ''[[:d:Q20734674|William Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 3226
| ''[[:d:Q20734675|William Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3227
| ''[[:d:Q20734678|William Meirion Evans]]''
| [[Coadan:Portrait of Rev. William Meirion Evans (4670715).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3228
| ''[[:d:Q20734676|William Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3229
| ''[[:d:Q20734677|William Matthews Williams]]''
|
|
|
|-
| style='text-align:right'| 3230
| ''[[:d:Q20734682|William Mortimer Lewis]]''
| [[Coadan:Portrait of W. Mortimer Lewis (4670575).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3231
| ''[[:d:Q20734680|William Morgan]]''
| [[Coadan:Parch. William Morgan D.D. (1801-1872).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3232
| ''[[:d:Q20734681|William Morgan]]''
|
|
|
|-
| style='text-align:right'| 3233
| ''[[:d:Q20734684|William Nicholson]]''
| [[Coadan:William Nicholson (Diwygwyr Cymru) (crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3234
| ''[[:d:Q20734685|William Ogwen Williams]]''
|
|
|
|-
| style='text-align:right'| 3235
| ''[[:d:Q20734691|William Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 3236
| ''[[:d:Q20734688|William Owen]]''
|
|
|
|-
| style='text-align:right'| 3237
| ''[[:d:Q20734694|William Pari Huws]]''
| [[Coadan:William Pari Huws.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3238
| ''[[:d:Q20734695|William Philip Jones]]''
|
|
|
|-
| style='text-align:right'| 3239
| ''[[:d:Q20734692|William Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 3240
| ''[[:d:Q20734699|William Prytherch]]''
| [[Coadan:Portrait of Wm. Pryderch, Nantcaredig (4670464).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3241
| ''[[:d:Q20734702|William Richard Jones]]''
| [[Coadan:William Richard Jones (Goleufryn 1840-1898).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3242
| ''[[:d:Q20734700|William Pugh]]''
| [[Coadan:William Pugh of Brynllywarch, Kerry, D.L., M.A., J.P born 1783 and died 1842 (5236498).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3243
| ''[[:d:Q20734701|William Reginald Herbert]]''
|
|
|
|-
| style='text-align:right'| 3244
| ''[[:d:Q20734706|William Roger Hughes]]''
|
|
|
|-
| style='text-align:right'| 3245
| ''[[:d:Q20734704|William Robert Ambrose]]''
|
|
|
|-
| style='text-align:right'| 3246
| ''[[:d:Q20734705|William Robert Edwards]]''
|
|
|
|-
| style='text-align:right'| 3247
| ''[[:d:Q20734708|William Thomas]]''
| [[Coadan:William Thomas, Hendy-Gwyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3248
| ''[[:d:Q20734709|William Thomas Samuel]]''
| [[Coadan:Portrait of William Thomas Samuel (4670518).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3249
| ''[[:d:Q20734716|John Clough Williams-Ellis]]''
|
|
|
|-
| style='text-align:right'| 3250
| ''[[:d:Q20737453|Bill Bower]]''
|
|
|
|-
| style='text-align:right'| 3251
| ''[[:d:Q20737482|Eric Corbett]]''
|
|
|
|-
| style='text-align:right'| 3252
| ''[[:d:Q20737583|Ingy Norman]]''
|
|
|
|-
| style='text-align:right'| 3253
| ''[[:d:Q20738016|Alun Davies]]''
|
|
|
|-
| style='text-align:right'| 3254
| ''[[:d:Q20738017|Anthony Powel]]''
|
|
|
|-
| style='text-align:right'| 3255
| ''[[:d:Q20738023|Dafydd Roberts]]''
|
|
|
|-
| style='text-align:right'| 3256
| ''[[:d:Q20738026|David Brazell]]''
| [[Coadan:David Brazell (5294002) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3257
| ''[[:d:Q20738024|David Bowen]]''
|
|
|
|-
| style='text-align:right'| 3258
| ''[[:d:Q20738031|David Emrys Lewis]]''
|
|
|
|-
| style='text-align:right'| 3259
| ''[[:d:Q20738028|David Caxton Davies]]''
|
|
|
|-
| style='text-align:right'| 3260
| ''[[:d:Q20738035|David Jones]]''
|
|
|
|-
| style='text-align:right'| 3261
| ''[[:d:Q20738033|David Francis Roberts]]''
|
|
|
|-
| style='text-align:right'| 3262
| ''[[:d:Q20738036|David Jones]]''
|
|
|
|-
| style='text-align:right'| 3263
| ''[[:d:Q20738043|Daniel Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 3264
| ''[[:d:Q20738041|David Samuel Owen]]''
|
|
|
|-
| style='text-align:right'| 3265
| ''[[:d:Q20738051|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 3266
| ''[[:d:Q20738055|Edward Pritchard]]''
|
|
|
|-
| style='text-align:right'| 3267
| ''[[:d:Q20738063|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 3268
| ''[[:d:Q20738070|George Williams]]''
|
|
|
|-
| style='text-align:right'| 3269
| ''[[:d:Q20738071|Griffith Harris]]''
|
|
|
|-
| style='text-align:right'| 3270
| ''[[:d:Q20738079|Harry Farr]]''
|
|
|
|-
| style='text-align:right'| 3271
| ''[[:d:Q20738076|Gwilym Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 3272
| ''[[:d:Q20738082|Hugh Humphreys]]''
|
|
|
|-
| style='text-align:right'| 3273
| ''[[:d:Q20738081|Hugh Gordon Roberts]]''
|
|
|
|-
| style='text-align:right'| 3274
| ''[[:d:Q20738095|John Davies]]''
| [[Coadan:John Taihirion Davies (5348979).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3275
| ''[[:d:Q20738092|John Bowen Jones]]''
| [[Coadan:John Bowen Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3276
| ''[[:d:Q20738093|John Davies]]''
| [[Coadan:John Davies (Siôn Gymro).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3277
| ''[[:d:Q20738098|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 3278
| ''[[:d:Q20738096|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 3279
| ''[[:d:Q20738102|John Evans]]''
|
|
|
|-
| style='text-align:right'| 3280
| ''[[:d:Q20738105|John James]]''
|
|
|
|-
| style='text-align:right'| 3281
| ''[[:d:Q20738110|John Parry]]''
|
|
|
|-
| style='text-align:right'| 3282
| ''[[:d:Q20738118|John Thomas Pritchard]]''
|
|
|
|-
| style='text-align:right'| 3283
| ''[[:d:Q20738119|John Williams]]''
|
|
|
|-
| style='text-align:right'| 3284
| ''[[:d:Q20738116|John Rowland]]''
|
|
|
|-
| style='text-align:right'| 3285
| ''[[:d:Q20738134|Michael Roberts]]''
|
|
|
|-
| style='text-align:right'| 3286
| ''[[:d:Q20738135|Morgan John Lewis]]''
|
|
|
|-
| style='text-align:right'| 3287
| ''[[:d:Q20738132|Margaret Jones]]''
| [[Coadan:Miss Margaret Jones (Y Gymraes o Gaanan, -1902) NLW3364267 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3288
| ''[[:d:Q20738137|Morgan Jones]]''
| [[Coadan:Portrait of Morgan Jones, Treluach i.e. Trelech, Carmarthenshire (4674166).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3289
| ''[[:d:Q20738143|Richard Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3290
| ''[[:d:Q20738141|Richard Humphreys Evans]]''
|
|
|
|-
| style='text-align:right'| 3291
| ''[[:d:Q20738146|Richard Prichard]]''
|
|
|
|-
| style='text-align:right'| 3292
| ''[[:d:Q20738145|Richard Newell]]''
|
|
|
|-
| style='text-align:right'| 3293
| ''[[:d:Q20738151|Robert Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 3294
| ''[[:d:Q20738148|Richard Roberts Morris]]''
|
|
|
|-
| style='text-align:right'| 3295
| ''[[:d:Q20738149|Richard Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 3296
| ''[[:d:Q20738154|Robert Owen Hughes]]''
| [[Coadan:Robert Oliver Hughes (Elfyn).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3297
| ''[[:d:Q20738153|Robert Jones]]''
| [[Coadan:Y Parch. R. Jones, (Trebor Aled), Llansannan (5349003).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3298
| ''[[:d:Q20738159|Ronald Cavill Mathias]]''
|
|
|
|-
| style='text-align:right'| 3299
| ''[[:d:Q20738162|Thomas Howells]]''
|
|
|
|-
| style='text-align:right'| 3300
| ''[[:d:Q20738164|Thomas Jesse Jones]]''
|
|
|
|-
| style='text-align:right'| 3301
| ''[[:d:Q20738170|Thomas Stephen]]''
|
|
|
|-
| style='text-align:right'| 3302
| ''[[:d:Q20738174|Watcyn Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 3303
| ''[[:d:Q20738175|William Anthony Davies]]''
|
|
|
|-
| style='text-align:right'| 3304
| ''[[:d:Q16206141|Tom Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 3305
| ''[[:d:Q16206326|William Rees]]''
|
|
|
|-
| style='text-align:right'| 3306
| ''[[:d:Q16206367|Johnny Rogers]]''
|
|
|
|-
| style='text-align:right'| 3307
| ''[[:d:Q16206879|Hugh Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3308
| ''[[:d:Q16210390|Louisa Henrietta Sheridan]]''
|
|
|
|-
| style='text-align:right'| 3309
| ''[[:d:Q16228121|Brian Radford]]''
|
|
|
|-
| style='text-align:right'| 3310
| ''[[:d:Q16230200|Thomas Chapman]]''
|
|
|
|-
| style='text-align:right'| 3311
| ''[[:d:Q16237410|Wynford Evans]]''
|
|
|
|-
| style='text-align:right'| 3312
| ''[[:d:Q16240303|Oliver Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3313
| ''[[:d:Q16258569|Sarah Wesley]]''
| [[Coadan:Sarah Gwynne Wesley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3314
| ''[[:d:Q16266578|Ray Henwood]]''
|
|
|
|-
| style='text-align:right'| 3315
| ''[[:d:Q16325363|Frank Spiller Locke]]''
|
|
|
|-
| style='text-align:right'| 3316
| ''[[:d:Q16522550|Robert Ernest Smith]]''
|
|
|
|-
| style='text-align:right'| 3317
| ''[[:d:Q16524116|Isabella Gifford]]''
|
|
|
|-
| style='text-align:right'| 3318
| ''[[:d:Q16559378|Edward Maes Llaned Owen]]''
| [[Coadan:Edward Owen's photography 'Arrived at Chubut in 1874' (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3319
| ''[[:d:Q16591980|Owen Roberts]]''
|
|
|
|-
| style='text-align:right'| 3320
| ''[[:d:Q16623283|William Peart]]''
|
|
|
|-
| style='text-align:right'| 3321
| ''[[:d:Q16658494|Mathonwy Hughes]]''
| [[Coadan:National Eisteddfod of Wales 1956, Aberdare (1464449).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3322
| ''[[:d:Q16658495|Edward Prosser Rhys]]''
|
|
|
|-
| style='text-align:right'| 3323
| ''[[:d:Q16658496|John Ellis Williams]]''
| [[Coadan:John Ellis Williams, the author, at his desk (1540166).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3324
| ''[[:d:Q16707733|Harry Goodwin]]''
|
|
|
|-
| style='text-align:right'| 3325
| ''[[:d:Q16734442|John Peter]]''
|
|
|
|-
| style='text-align:right'| 3326
| ''[[:d:Q16735288|Aled Roberts]]''
| [[Coadan:Aled Roberts (6324905377).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3327
| ''[[:d:Q16737330|Robert Thomas]]''
| [[Coadan:Revd Robert Thomas (Ap Vychan, 1809-80) NLW3362405 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3328
| ''[[:d:Q16737328|John William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3329
| ''[[:d:Q16737332|William Williams]]''
| [[Coadan:Revd William Williams (Caledfryn, 1801-69) NLW3362700.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3330
| ''[[:d:Q16737333|John Williams]]''
|
|
|
|-
| style='text-align:right'| 3331
| ''[[:d:Q16738650|George Lawrence Davis]]''
| [[Coadan:George-lawrence-en-la-imprenta.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3332
| ''[[:d:Q16744933|John Bulloch]]''
|
|
|
|-
| style='text-align:right'| 3333
| ''[[:d:Q16745080|Danny Winter]]''
| [[Coadan:Danny Winter (1947).png|center|128px]]
|
|
|-
| style='text-align:right'| 3334
| ''[[:d:Q16822099|Preston Austin]]''
|
|
|
|-
| style='text-align:right'| 3335
| ''[[:d:Q16839740|Hugh Foulkes]]''
|
|
|
|-
| style='text-align:right'| 3336
| ''[[:d:Q16840644|Marmaduke Gwynne]]''
|
|
|
|-
| style='text-align:right'| 3337
| ''[[:d:Q16842663|Henry Devereux, 14th Viscount Hereford]]''
| [[Coadan:The Trial of Queen Caroline 1820 by Sir George Hayter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3338
| ''[[:d:Q16845399|Hugh Hughes]]''
| [[Coadan:Hugh Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3339
| ''[[:d:Q16846411|John Salusbury]]''
| [[Coadan:Sir John Salisbury by Moses Griffith 02197.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3340
| ''[[:d:Q16848905|Ehud Rogers]]''
|
|
|
|-
| style='text-align:right'| 3341
| ''[[:d:Q16849924|John Wynne]]''
| [[Coadan:Bishop John Wynne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3342
| ''[[:d:Q16850823|David Jones]]''
| [[Coadan:Er cof am y diweddar Barch D Jones, Llangan .. NLW3365112.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3343
| ''[[:d:Q16851896|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3344
| ''[[:d:Q16854017|Joshua Parry]]''
|
|
|
|-
| style='text-align:right'| 3345
| ''[[:d:Q16855987|D. Geraint James]]''
|
|
|
|-
| style='text-align:right'| 3346
| ''[[:d:Q16856736|Albert Purchas]]''
|
|
|
|-
| style='text-align:right'| 3347
| ''[[:d:Q16858267|William Jenkins Rees]]''
| [[Coadan:William Jenkins Rees Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3348
| ''[[:d:Q16859200|John Waters]]''
| [[Coadan:Sir John Waters by William Salter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3349
| ''[[:d:Q16859746|Hugh Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3350
| ''[[:d:Q16859745|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 3351
| ''[[:d:Q16863488|Ellis Price]]''
|
|
|
|-
| style='text-align:right'| 3352
| ''[[:d:Q16863621|Walter Rumsey]]''
|
|
|
|-
| style='text-align:right'| 3353
| ''[[:d:Q16863901|David Davies]]''
|
|
|
|-
| style='text-align:right'| 3354
| ''[[:d:Q16885562|Richard Price]]''
|
|
|
|-
| style='text-align:right'| 3355
| ''[[:d:Q16933947|Martin Lluelyn]]''
|
|
|
|-
| style='text-align:right'| 3356
| ''[[:d:Q16937524|Rosemary Dorothy Moravec]]''
| [[Coadan:Rosemary Moravec 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3357
| ''[[:d:Q16943691|Edward Alfred Jones]]''
|
|
|
|-
| style='text-align:right'| 3358
| ''[[:d:Q16943702|Laurence Bedford Potter]]''
|
|
|
|-
| style='text-align:right'| 3359
| ''[[:d:Q16973311|David Davis, Blaengwawr]]''
| [[Coadan:British School - David Davis (1797–1866), of Blaengarn - NMW A 3806 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3360
| ''[[:d:Q16973316|David Williams]]''
|
|
|
|-
| style='text-align:right'| 3361
| ''[[:d:Q16991664|Evan Edwards]]''
|
|
|
|-
| style='text-align:right'| 3362
| ''[[:d:Q17002888|Ewart Lewis]]''
|
|
|
|-
| style='text-align:right'| 3363
| ''[[:d:Q17006607|Frances Williams]]''
|
|
|
|-
| style='text-align:right'| 3364
| ''[[:d:Q17014441|Thomas Price]]''
| [[Coadan:Rev Thomas Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3365
| ''[[:d:Q17020455|William Henry Skinner]]''
| [[Coadan:Major William Henry Skinner.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3366
| ''[[:d:Q17027823|Chris Williams]]''
|
|
|
|-
| style='text-align:right'| 3367
| ''[[:d:Q17029028|Idris Williams]]''
| [[Coadan:Idris Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3368
| ''[[:d:Q17029694|James Edmund Vincent]]''
| [[Coadan:J.E. Vincent in WT Pike Biographies Berks Bucks & Beds (29).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3369
| ''[[:d:Q17053621|William Morris]]''
| [[Coadan:The Rev. William Morris D.D., Treorchy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3370
| ''[[:d:Q17141872|Jennette Fothergill]]''
|
|
|
|-
| style='text-align:right'| 3371
| ''[[:d:Q17152128|Tom Rees]]''
| [[Coadan:Tom Rees 1915.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3372
| ''[[:d:Q17161194|Anthony Charles]]''
|
|
|
|-
| style='text-align:right'| 3373
| ''[[:d:Q17199130|Tony Orchard]]''
| [[Coadan:Tony Orchard Univ portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3374
| ''[[:d:Q17233261|Ray Desmond]]''
|
|
|
|-
| style='text-align:right'| 3375
| ''[[:d:Q17307366|Robert Hughes]]''
|
|
|
|-
| style='text-align:right'| 3376
| ''[[:d:Q17308772|John Eldon Bankes]]''
| [[Coadan:Bankes JE Vanity Fair 1906-03-29.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3377
| ''[[:d:Q17309155|Arthur D. Houghton]]''
| [[Coadan:Arthur D. Houghton, botanist and politician.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3378
| ''[[:d:Q17309163|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 3379
| ''[[:d:Q17309161|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 3380
| ''[[:d:Q17318796|Joseph A. Munitiz]]''
| [[Coadan:Joseph Munitiz in Oxford in 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3381
| ''[[:d:Q17353645|Catherine Davies]]''
|
|
|
|-
| style='text-align:right'| 3382
| ''[[:d:Q17385896|Jeff Evans]]''
|
|
|
|-
| style='text-align:right'| 3383
| ''[[:d:Q17421625|Lumley Jones]]''
|
|
|
|-
| style='text-align:right'| 3384
| ''[[:d:Q17421719|William Henry Powell]]''
| [[Coadan:WHPowell.png|center|128px]]
|
|
|-
| style='text-align:right'| 3385
| ''[[:d:Q17423834|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3386
| ''[[:d:Q17427011|Huw D. Edwards]]''
|
|
|
|-
| style='text-align:right'| 3387
| ''[[:d:Q17435926|Merfyn Turner]]''
|
|
|
|-
| style='text-align:right'| 3388
| ''[[:d:Q17442758|Rae Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3389
| ''[[:d:Q17479540|Cyngar ap Geraint]]''
| [[Coadan:Eglwys Sant Beuno, St Beuno's Church, Penmorfa, Eifionydd, Gwynedd, Cymru Wales 47.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3390
| ''[[:d:Q17479637|Jack Austin]]''
|
|
|
|-
| style='text-align:right'| 3391
| ''[[:d:Q17484243|Shaun Pickering]]''
|
|
|
|-
| style='text-align:right'| 3392
| ''[[:d:Q17626716|Archie Hughes]]''
|
|
|
|-
| style='text-align:right'| 3393
| ''[[:d:Q17627000|William Pierce Owen]]''
|
|
|
|-
| style='text-align:right'| 3394
| ''[[:d:Q17984517|Gerard H. L. Fitzwilliams]]''
|
|
|
|-
| style='text-align:right'| 3395
| ''[[:d:Q18068338|Clifton Penn-Hughes]]''
|
|
|
|-
| style='text-align:right'| 3396
| ''[[:d:Q18084617|John Jones]]''
| [[Coadan:John Jones (Mathetes).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3397
| ''[[:d:Q18087866|T. Marchant Williams]]''
| [[Coadan:T Marchant Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3398
| ''[[:d:Q18114832|Robert Williams]]''
| [[Coadan:Portrait of Robert Williams (4674647).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3399
| ''[[:d:Q18123555|Griffith John Williams]]''
|
|
|
|-
| style='text-align:right'| 3400
| ''[[:d:Q18129502|Thomas William Davids]]''
| [[Coadan:Portrait of T. W. Davids, Colchester (4669724).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3401
| ''[[:d:Q18148391|Richard Edwards]]''
| [[Coadan:RichardEdwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3402
| ''[[:d:Q6290254|Joshua T. Owen]]''
| [[Coadan:Joshua T Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3403
| ''[[:d:Q6290431|Josiah Boydell]]''
|
|
|
|-
| style='text-align:right'| 3404
| ''[[:d:Q6290468|Josiah Duane Hicks]]''
| [[Coadan:JosiahDuaneHicks.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3405
| ''[[:d:Q6290548|Josiah Lewis Morgan]]''
|
|
|
|-
| style='text-align:right'| 3406
| ''[[:d:Q6290605|Josiah Rees]]''
|
|
|
|-
| style='text-align:right'| 3407
| ''[[:d:Q6290641|Josiah Towyn Jones]]''
| [[Coadan:Josiah Towyn Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3408
| ''[[:d:Q6297402|Joyce Bland]]''
|
|
|
|-
| style='text-align:right'| 3409
| ''[[:d:Q6307044|Julian Cayo-Evans]]''
| [[Coadan:Julian Cayo-Evans, in 1963.png|center|128px]]
|
|
|-
| style='text-align:right'| 3410
| ''[[:d:Q6307098|Julian Davies]]''
|
|
|
|-
| style='text-align:right'| 3411
| ''[[:d:Q6308663|Julien Cahn]]''
| [[Coadan:Sir Julien Cahn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3412
| ''[[:d:Q6312335|June Knox-Mawer]]''
|
|
|
|-
| style='text-align:right'| 3413
| ''[[:d:Q6376387|Katherine Grant, 12th Countess of Dysart]]''
|
|
|
|-
| style='text-align:right'| 3414
| ''[[:d:Q6376590|Katheryn of Berain]]''
| [[Coadan:Adriaen of Cronenburgh, Katheryn of Berain.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3415
| ''[[:d:Q6376713|Kathleen Freeman]]''
|
|
|
|-
| style='text-align:right'| 3416
| ''[[:d:Q6382451|Richard Jones Berwyn]]''
| [[Coadan:R.J.Berwyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3417
| ''[[:d:Q6384028|Keith Barnes]]''
|
|
|
|-
| style='text-align:right'| 3418
| ''[[:d:Q6384037|Keith Baxter]]''
| [[Coadan:Paul Rogers-Keith Baxter in Sleuth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3419
| ''[[:d:Q6384099|Keith Bradshaw]]''
|
|
|
|-
| style='text-align:right'| 3420
| ''[[:d:Q6384571|Keith Jones]]''
|
|
|
|-
| style='text-align:right'| 3421
| ''[[:d:Q6384891|Keith Pontin]]''
|
|
|
|-
| style='text-align:right'| 3422
| ''[[:d:Q6384900|Keith Pring]]''
|
|
|
|-
| style='text-align:right'| 3423
| ''[[:d:Q6385127|Keith Todd]]''
|
|
|
|-
| style='text-align:right'| 3424
| ''[[:d:Q6385196|Keith Webber]]''
|
|
|
|-
| style='text-align:right'| 3425
| ''[[:d:Q6387293|Ken Barton]]''
|
|
|
|-
| style='text-align:right'| 3426
| ''[[:d:Q6387568|Ken Ellis]]''
|
|
|
|-
| style='text-align:right'| 3427
| ''[[:d:Q6387817|Ken Hollyman]]''
|
|
|
|-
| style='text-align:right'| 3428
| ''[[:d:Q6388362|Ken Richards]]''
|
|
|
|-
| style='text-align:right'| 3429
| ''[[:d:Q6388387|Ken Roberts]]''
|
|
|
|-
| style='text-align:right'| 3430
| ''[[:d:Q6388417|Ken Rowlands]]''
|
|
|
|-
| style='text-align:right'| 3431
| ''[[:d:Q6388602|Ken Thomas]]''
|
|
|
|-
| style='text-align:right'| 3432
| ''[[:d:Q6388718|Ken Wookey]]''
|
|
|
|-
| style='text-align:right'| 3433
| ''[[:d:Q6388720|Ken Wookey]]''
|
|
|
|-
| style='text-align:right'| 3434
| ''[[:d:Q6389658|Llwyd ap Iwan]]''
| [[Coadan:LLwyd Ap Iwan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3435
| ''[[:d:Q6389808|Kenneth Allott]]''
|
|
|
|-
| style='text-align:right'| 3436
| ''[[:d:Q6389993|Kenneth Cooper]]''
|
|
|
|-
| style='text-align:right'| 3437
| ''[[:d:Q6391156|Kenny Meadows]]''
| [[Coadan:Kenny Meadows by Lucy Bentley Smith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3438
| ''[[:d:Q6391211|Kenny Simpkins]]''
|
|
|
|-
| style='text-align:right'| 3439
| ''[[:d:Q6392945|Kenyon Jones]]''
|
|
|
|-
| style='text-align:right'| 3440
| ''[[:d:Q6413323|Kingsley Jones]]''
|
|
|
|-
| style='text-align:right'| 3441
| ''[[:d:Q6450928|Kyffin Williams]]''
| [[Coadan:Cerflun Kyffin Williams statue.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3442
| ''[[:d:Q6483606|Lancelot Bulkeley]]''
|
|
|
|-
| style='text-align:right'| 3443
| ''[[:d:Q6501718|Laurie Sheffield]]''
|
|
|
|-
| style='text-align:right'| 3444
| ''[[:d:Q6504303|Lawrence Langner]]''
| [[Coadan:Lawrence Langner portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3445
| ''[[:d:Q6519766|Leighton James]]''
|
|
|
|-
| style='text-align:right'| 3446
| ''[[:d:Q6519893|Leila Megane]]''
| [[Coadan:Leila Megane.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3447
| ''[[:d:Q6521654|Len Apsey]]''
|
|
|
|-
| style='text-align:right'| 3448
| ''[[:d:Q6521680|Len Beynon]]''
|
|
|
|-
| style='text-align:right'| 3449
| ''[[:d:Q6521686|Len Blyth]]''
|
|
|
|-
| style='text-align:right'| 3450
| ''[[:d:Q6521737|Len Davies]]''
| [[Coadan:Davies, Len.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3451
| ''[[:d:Q6521762|Len Evans]]''
|
|
|
|-
| style='text-align:right'| 3452
| ''[[:d:Q6521816|Len Hill]]''
|
|
|
|-
| style='text-align:right'| 3453
| ''[[:d:Q6522001|Len Trump]]''
|
|
|
|-
| style='text-align:right'| 3454
| ''[[:d:Q6522013|Len Weare]]''
|
|
|
|-
| style='text-align:right'| 3455
| ''[[:d:Q6524435|Leoline Jenkins]]''
| [[Coadan:Sir Leoline Jenkins by Herbert Tuer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3456
| ''[[:d:Q6525150|Leonard Brockington]]''
| [[Coadan:Leonard Brockington.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3457
| ''[[:d:Q6525189|Leonard Constance]]''
|
|
|
|-
| style='text-align:right'| 3458
| ''[[:d:Q6525197|Leonard Cox]]''
|
|
|
|-
| style='text-align:right'| 3459
| ''[[:d:Q6525258|Leonard Eastment]]''
|
|
|
|-
| style='text-align:right'| 3460
| ''[[:d:Q6525823|Leonard Watkins]]''
|
|
|
|-
| style='text-align:right'| 3461
| ''[[:d:Q6529155|Les Anthony]]''
|
|
|
|-
| style='text-align:right'| 3462
| ''[[:d:Q6529820|Les Owen]]''
|
|
|
|-
| style='text-align:right'| 3463
| ''[[:d:Q6530869|Leslie Hardman]]''
| [[Coadan:The Liberation of Bergen-belsen Concentration Camp, April 1945 BU4270.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3464
| ''[[:d:Q6530924|Leslie Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3465
| ''[[:d:Q6530940|Leslie Jones]]''
|
|
|
|-
| style='text-align:right'| 3466
| ''[[:d:Q6530999|Leslie Manfield]]''
|
|
|
|-
| style='text-align:right'| 3467
| ''[[:d:Q6534142|Eleanor Mary Reid]]''
|
|
|
|-
| style='text-align:right'| 3468
| ''[[:d:Q6535418|Levi Gibbon]]''
|
|
|
|-
| style='text-align:right'| 3469
| ''[[:d:Q6535944|Lew Booth]]''
|
|
|
|-
| style='text-align:right'| 3470
| ''[[:d:Q6536139|Lewes Roberts]]''
| [[Coadan:Captain Lewis Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3471
| ''[[:d:Q6536435|Lewis Cobden Thomas]]''
|
|
|
|-
| style='text-align:right'| 3472
| ''[[:d:Q6536486|Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 3473
| ''[[:d:Q6536522|Lewis Edwards]]''
| [[Coadan:Revd Dr Lewis Edwards (1809-87) NLW3363289.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3474
| ''[[:d:Q6536534|Lewis Evans]]''
|
|
|
|-
| style='text-align:right'| 3475
| ''[[:d:Q6536537|Lewis Evans]]''
|
|
|
|-
| style='text-align:right'| 3476
| ''[[:d:Q6536585|Lewis Gilbertson]]''
|
|
|
|-
| style='text-align:right'| 3477
| ''[[:d:Q6536746|Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 3478
| ''[[:d:Q6536798|Lewis Llewelyn Dillwyn]]''
| [[Coadan:Lewis Llewelyn Dillwyn Vanity Fair 13 May 1882.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3479
| ''[[:d:Q6536796|Lewis Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 3480
| ''[[:d:Q6536806|Lewis Lougher]]''
|
|
|
|-
| style='text-align:right'| 3481
| ''[[:d:Q6536811|Lewis Lyne]]''
| [[Coadan:Germany Under Allied Occupation BU8524.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3482
| ''[[:d:Q6536902|Lewis Morris]]''
| [[Coadan:Lewis Morris woodburytype.png|center|128px]]
|
|
|-
| style='text-align:right'| 3483
| ''[[:d:Q6536981|Lewis Pugh Pugh]]''
|
|
|
|-
| style='text-align:right'| 3484
| ''[[:d:Q6537000|Lewis Rees]]''
|
|
|
|-
| style='text-align:right'| 3485
| ''[[:d:Q6537243|Lewis Owen]]''
|
|
|
|-
| style='text-align:right'| 3486
| ''[[:d:Q6537490|Lewys Dwnn]]''
|
|
|
|-
| style='text-align:right'| 3487
| ''[[:d:Q6537492|Lewys Morgannwg]]''
|
|
|
|-
| style='text-align:right'| 3488
| ''[[:d:Q6541894|Martin Hinds]]''
|
|
|
|-
| style='text-align:right'| 3489
| ''[[:d:Q6548260|Lillie Goodisson]]''
| [[Coadan:Lillie Goodisson.png|center|128px]]
|
|
|-
| style='text-align:right'| 3490
| ''[[:d:Q6555628|Lionel Emmitt]]''
|
|
|
|-
| style='text-align:right'| 3491
| ''[[:d:Q6555769|Lionel Rees]]''
| [[Coadan:Lionel Rees VC IWM Q 68027.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3492
| ''[[:d:Q6661978|John Jones]]''
| [[Coadan:Portrait of Parchedig John Jones, Llanllyfni (Swydd Gaernarfon) (4673763).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3493
| ''[[:d:Q6662032|Llew Ashcroft]]''
|
|
|
|-
| style='text-align:right'| 3494
| ''[[:d:Q6662036|Llew Edwards]]''
|
|
|
|-
| style='text-align:right'| 3495
| ''[[:d:Q6662070|Llewellyn Heycock, Baron Heycock]]''
|
|
|
|-
| style='text-align:right'| 3496
| ''[[:d:Q19594785|Ray Williams]]''
|
|
|
|-
| style='text-align:right'| 3497
| ''[[:d:Q19599159|John Jones]]''
|
|
|
|-
| style='text-align:right'| 3498
| ''[[:d:Q19599359|Thomas Rees]]''
| [[Coadan:Thomas Rees, 1904.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3499
| ''[[:d:Q19605143|Owen Thomas]]''
|
|
|
|-
| style='text-align:right'| 3500
| ''[[:d:Q19613712|Winifred Phillips Hathaway]]''
| [[Coadan:Winifred Phillips Hathaway (1870?-1954) (5494411890).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3501
| ''[[:d:Q19628748|Cledwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 3502
| ''[[:d:Q19635477|Edward Davies]]''
| [[Coadan:Edward Davies (Iolo Trefaldwyn, 1819-87) NLW3364542.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3503
| ''[[:d:Q19650439|Angus McDermid]]''
|
|
|
|-
| style='text-align:right'| 3504
| ''[[:d:Q19661342|Jeffery Rowthorn]]''
|
|
|
|-
| style='text-align:right'| 3505
| ''[[:d:Q19662041|Saint Austell]]''
|
|
|
|-
| style='text-align:right'| 3506
| ''[[:d:Q19664611|Howel Gwyn]]''
| [[Coadan:Howel-Gwyn-AS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3507
| ''[[:d:Q19665319|Edward Wienholt]]''
| [[Coadan:Edward Wienholt - Queensland politician.png|center|128px]]
|
|
|-
| style='text-align:right'| 3508
| ''[[:d:Q19667602|Edward David Miles]]''
| [[Coadan:Edward David Miles - Queensland politician.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3509
| ''[[:d:Q19667907|Elias Wynne Cemlyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 3510
| ''[[:d:Q19668413|Glyn Owen]]''
|
|
|
|-
| style='text-align:right'| 3511
| ''[[:d:Q19694162|Anthony Sweeting]]''
|
|
|
|-
| style='text-align:right'| 3512
| ''[[:d:Q19760229|Leofric Temple]]''
|
|
|
|-
| style='text-align:right'| 3513
| ''[[:d:Q19790482|John James Hughes]]''
|
|
|
|-
| style='text-align:right'| 3514
| ''[[:d:Q19799260|Hugh James]]''
|
|
|
|-
| style='text-align:right'| 3515
| ''[[:d:Q19801208|Mari Ellis]]''
|
|
|
|-
| style='text-align:right'| 3516
| ''[[:d:Q19819921|David Randell]]''
|
|
|
|-
| style='text-align:right'| 3517
| ''[[:d:Q19819945|William Tudor Howell]]''
| [[Coadan:William Tudor Howell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3518
| ''[[:d:Q19819955|P. Ellis Eyton]]''
|
|
|
|-
| style='text-align:right'| 3519
| ''[[:d:Q19820213|Mia Arnesby Brown]]''
|
|
|
|-
| style='text-align:right'| 3520
| ''[[:d:Q19822503|Amy Parry-Williams]]''
|
|
|
|-
| style='text-align:right'| 3521
| ''[[:d:Q19829084|Arthur Lewis]]''
|
|
|
|-
| style='text-align:right'| 3522
| ''[[:d:Q19829092|Gwyn Martin]]''
| [[Coadan:Gwyn Martin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3523
| ''[[:d:Q19831778|Robert Lambert Gapper]]''
|
|
|
|-
| style='text-align:right'| 3524
| ''[[:d:Q19842165|John Deffett Francis]]''
| [[Coadan:Portrait of J. Deffett Francis as 'Lord of the Isles' (4670730).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3525
| ''[[:d:Q19843134|Ray Elton]]''
|
|
|
|-
| style='text-align:right'| 3526
| ''[[:d:Q19844389|Fred Perry]]''
|
|
|
|-
| style='text-align:right'| 3527
| ''[[:d:Q19845132|Glyn Davies]]''
|
|
|
|-
| style='text-align:right'| 3528
| ''[[:d:Q19873079|Gwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 3529
| ''[[:d:Q19874433|Mike Hughes]]''
|
|
|
|-
| style='text-align:right'| 3530
| ''[[:d:Q19874741|Thomas Llewellyn Jones]]''
| [[Coadan:Thomas Llewellyn Jones, 1941.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3531
| ''[[:d:Q19875292|Henry Llewelyn]]''
| [[Coadan:Henry Llewelyn - Queensland Politician.png|center|128px]]
|
|
|-
| style='text-align:right'| 3532
| ''[[:d:Q19877328|Ernest Purnell]]''
| [[Coadan:Ernest Purnell, 1938.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3533
| ''[[:d:Q19880007|H. H. Tilbrook]]''
| [[Coadan:H. H. Tilbrook.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3534
| ''[[:d:Q19888021|John Murray Thomas]]''
| [[Coadan:John Murray Thomas, Y Wladfa, 1894.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3535
| ''[[:d:Q19894339|Ralph Bingley]]''
|
|
|
|-
| style='text-align:right'| 3536
| ''[[:d:Q19904222|Bert Hodson]]''
|
|
|
|-
| style='text-align:right'| 3537
| ''[[:d:Q19915198|David Thomas Gwynne-Vaughan]]''
|
|
|
|-
| style='text-align:right'| 3538
| ''[[:d:Q19921507|John Wheatley]]''
|
|
|
|-
| style='text-align:right'| 3539
| ''[[:d:Q19959822|Henry Dwnn]]''
|
|
|
|-
| style='text-align:right'| 3540
| ''[[:d:Q19959987|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 3541
| ''[[:d:Q19974211|John Parry]]''
| [[Coadan:John parry portrait arms.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3542
| ''[[:d:Q19974372|Benjamin Price]]''
| [[Coadan:The Right Reverend Benjamin Price .jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3543
| ''[[:d:Q19974769|Thomas Hughes Jones]]''
| [[Coadan:Thomas Hughes Jones (of Blaenpennal) (5292090).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3544
| ''[[:d:Q19975142|Fred Robson]]''
|
|
|
|-
| style='text-align:right'| 3545
| ''[[:d:Q19975438|William Napier Bruce]]''
|
|
|
|-
| style='text-align:right'| 3546
| ''[[:d:Q19997515|Frederick Norman Pryce]]''
|
|
|
|-
| style='text-align:right'| 3547
| ''[[:d:Q20031104|Charles Woolley]]''
|
|
|
|-
| style='text-align:right'| 3548
| ''[[:d:Q20039025|William George Auger]]''
| [[Coadan:Portrait of vaudeville team George Auger and Ernest Rommel (SAYRE 12097).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3549
| ''[[:d:Q20051236|Albert de Belleroche]]''
| [[Coadan:Albert de Belleroche by Sargent.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3550
| ''[[:d:Q20054436|Gwilym Prichard]]''
|
|
|
|-
| style='text-align:right'| 3551
| ''[[:d:Q20109574|Sarah Edwards]]''
| [[Coadan:Sarah Edwards (1947).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3552
| ''[[:d:Q20109704|Oscar Arthur Rackham]]''
|
|
|
|-
| style='text-align:right'| 3553
| ''[[:d:Q20128816|Jack Whitford]]''
|
|
|
|-
| style='text-align:right'| 3554
| ''[[:d:Q20160474|Hefina Headon]]''
|
|
|
|-
| style='text-align:right'| 3555
| ''[[:d:Q20201367|Hawys Gadarn]]''
|
|
|
|-
| style='text-align:right'| 3556
| ''[[:d:Q20202170|Robert Everett]]''
| [[Coadan:Robert Everett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3557
| ''[[:d:Q20252475|Edgar Chappell]]''
| [[Coadan:Edgar L Chappell.tif|center|128px]]
|
|
|-
| style='text-align:right'| 3558
| ''[[:d:Q20256068|John Jones]]''
| [[Coadan:John Jones (Idris Vychan, 1825-87) NLW3364537 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3559
| ''[[:d:Q20263530|Gwilym Williams]]''
| [[Coadan:Castle - Statue of Judge Gwilym Williams of Miskin - 20230926170326.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3560
| ''[[:d:Q20266669|Moc Morgan]]''
|
|
|
|-
| style='text-align:right'| 3561
| ''[[:d:Q20277834|Hafina Clwyd]]''
|
|
|
|-
| style='text-align:right'| 3562
| ''[[:d:Q20354071|John Langford]]''
|
|
|
|-
| style='text-align:right'| 3563
| ''[[:d:Q20476511|Evan Tom Davies]]''
|
|
|
|-
| style='text-align:right'| 3564
| ''[[:d:Q20555787|Siôn Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 3565
| ''[[:d:Q20557508|Abiah Roderick]]''
|
|
|
|-
| style='text-align:right'| 3566
| ''[[:d:Q20558265|Aled Lloyd Davies]]''
| [[Coadan:Cymro 'pop' records by Teldisc for the Christmas market (1528985) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3567
| ''[[:d:Q20558361|Alun 'Sbardun' Huws]]''
|
|
|
|-
| style='text-align:right'| 3568
| ''[[:d:Q20558584|Allgo]]''
| [[Coadan:St Gallgo's Church, Llanallgo - geograph.org.uk - 38557.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3569
| ''[[:d:Q20558676|Andras Millward]]''
|
|
|
|-
| style='text-align:right'| 3570
| ''[[:d:Q20558732|Aneurin Jenkins Jones]]''
|
|
|
|-
| style='text-align:right'| 3571
| ''[[:d:Q20559798|William Griffith]]''
|
|
|
|-
| style='text-align:right'| 3572
| ''[[:d:Q20559811|William Milton Aubrey]]''
|
|
|
|-
| style='text-align:right'| 3573
| ''[[:d:Q20560416|Beti Rhys]]''
|
|
|
|-
| style='text-align:right'| 3574
| ''[[:d:Q20560502|Bethan Phillips]]''
|
|
|
|-
| style='text-align:right'| 3575
| ''[[:d:Q20561073|Andrew Jones Brereton]]''
| [[Coadan:Portrait of Andreas o Vôn (4674316) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3576
| ''[[:d:Q20564443|John Davies]]''
| [[Coadan:John Davies (Ossian Gwent).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3577
| ''[[:d:Q20564458|Richard Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 3578
| ''[[:d:Q20565356|John Edwards]]''
| [[Coadan:Meiriadog at the Powys Eisteddfod (1892) NLW3362573.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3579
| ''[[:d:Q20566517|Hugh Hughes]]''
|
|
|
|-
| style='text-align:right'| 3580
| ''[[:d:Q20566554|Richard Huws]]''
|
|
|
|-
| style='text-align:right'| 3581
| ''[[:d:Q20566881|Edith Nepean]]''
|
|
|
|-
| style='text-align:right'| 3582
| ''[[:d:Q20567187|John Tudor Jones]]''
| [[Coadan:John Tudor Jones (John Eilien).png|center|128px]]
|
|
|-
| style='text-align:right'| 3583
| ''[[:d:Q20567243|David Richard Jones]]''
| [[Coadan:David R.Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3584
| ''[[:d:Q20567253|Emyr Jones]]''
|
|
|
|-
| style='text-align:right'| 3585
| ''[[:d:Q20567274|Owen Gethin Jones]]''
| [[Coadan:Owen Gethin Jones (Gethin, 1816-83) NLW3364544.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3586
| ''[[:d:Q20567285|Robert Lloyd Jones]]''
|
|
|
|-
| style='text-align:right'| 3587
| ''[[:d:Q20567331|Joseph Seth Jones]]''
|
|
|
|-
| style='text-align:right'| 3588
| ''[[:d:Q20567576|Timothy Lewis]]''
|
|
|
|-
| style='text-align:right'| 3589
| ''[[:d:Q20567614|Wyn Lodwick]]''
|
|
|
|-
| style='text-align:right'| 3590
| ''[[:d:Q20567671|David Lyn]]''
| [[Coadan:David Lyn young man.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3591
| ''[[:d:Q20567746|Dafydd Orwig]]''
|
|
|
|-
| style='text-align:right'| 3592
| ''[[:d:Q20567936|Hugh Owen]]''
|
|
|
|-
| style='text-align:right'| 3593
| ''[[:d:Q20568221|William Theophilus Thomas]]''
| [[Coadan:Parchg William Theophilus Thomas (Gwilym Gwenffrwd, 1824-99) NLW3364216 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3594
| ''[[:d:Q20738178|Willam Howell Lewis]]''
|
|
|
|-
| style='text-align:right'| 3595
| ''[[:d:Q20738177|William Bevan Lewis]]''
| [[Coadan:Dr. William Bevan-Lewis Medical Director West Riding Asylum, Wakefield 1884-1910 (5294030).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3596
| ''[[:d:Q20738183|William Lewes]]''
|
|
|
|-
| style='text-align:right'| 3597
| ''[[:d:Q20738180|William James]]''
|
|
|
|-
| style='text-align:right'| 3598
| ''[[:d:Q20738190|William Rees]]''
|
|
|
|-
| style='text-align:right'| 3599
| ''[[:d:Q20738194|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3600
| ''[[:d:Q20738195|William Williams]]''
|
|
|
|-
| style='text-align:right'| 3601
| ''[[:d:Q20738197|Zecharias Thomas]]''
|
|
|
|-
| style='text-align:right'| 3602
| ''[[:d:Q20738563|John Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 3603
| ''[[:d:Q20741167|William Lewis]]''
|
|
|
|-
| style='text-align:right'| 3604
| ''[[:d:Q20746754|Alfred William Sheen]]''
|
|
|
|-
| style='text-align:right'| 3605
| ''[[:d:Q20746755|Alun Ogwen Williams]]''
|
|
|
|-
| style='text-align:right'| 3606
| ''[[:d:Q20746759|Benjamin Waldo Lewis]]''
|
|
|
|-
| style='text-align:right'| 3607
| ''[[:d:Q20746756|Arthur Wynn Williams]]''
|
|
|
|-
| style='text-align:right'| 3608
| ''[[:d:Q20746761|Cliff Prothero]]''
|
|
|
|-
| style='text-align:right'| 3609
| ''[[:d:Q20746767|David Pugh]]''
|
|
|
|-
| style='text-align:right'| 3610
| ''[[:d:Q20746764|Daniel Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3611
| ''[[:d:Q20746770|Ebenezer Richard]]''
| [[Coadan:Portrait of Revd. Ebenezer Richard, Tregaron, Cardiganshire (4671915).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3612
| ''[[:d:Q20746769|David Salmon]]''
|
|
|
|-
| style='text-align:right'| 3613
| ''[[:d:Q20746775|Eliseus Howells]]''
|
|
|
|-
| style='text-align:right'| 3614
| ''[[:d:Q20746779|Evan Phillips]]''
|
|
|
|-
| style='text-align:right'| 3615
| ''[[:d:Q20746777|Evan Hopkins]]''
|
|
|
|-
| style='text-align:right'| 3616
| ''[[:d:Q20746782|Francis Wynn Jones]]''
|
|
|
|-
| style='text-align:right'| 3617
| ''[[:d:Q20746783|George Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3618
| ''[[:d:Q20746780|Laura Evans-Williams]]''
| [[Coadan:Laura Evans-Williams (Musical Advance, 1924).png|center|128px]]
|
|
|-
| style='text-align:right'| 3619
| ''[[:d:Q20746781|Francis Green]]''
|
|
|
|-
| style='text-align:right'| 3620
| ''[[:d:Q20746785|George Henry Parcell]]''
|
|
|
|-
| style='text-align:right'| 3621
| ''[[:d:Q20746788|Ebenezer Griffith-Jones]]''
|
|
|
|-
| style='text-align:right'| 3622
| ''[[:d:Q20746789|William Griffith-Jones]]''
|
|
|
|-
| style='text-align:right'| 3623
| ''[[:d:Q20746794|Hugh Jerman]]''
| [[Coadan:Self portrait by Hugh Jerman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3624
| ''[[:d:Q20746795|Hugh Pugh]]''
|
|
|
|-
| style='text-align:right'| 3625
| ''[[:d:Q20746792|Howell Powell]]''
|
|
|
|-
| style='text-align:right'| 3626
| ''[[:d:Q20746796|Hugh Pugh]]''
| [[Coadan:Revd Hugh Pugh (1803-68) NLW3365418.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3627
| ''[[:d:Q20746802|Isaac Price]]''
|
|
|
|-
| style='text-align:right'| 3628
| ''[[:d:Q20746803|Isaac Thomas]]''
|
|
|
|-
| style='text-align:right'| 3629
| ''[[:d:Q20746800|Idris Lewis]]''
|
|
|
|-
| style='text-align:right'| 3630
| ''[[:d:Q20746806|James Meyler]]''
|
|
|
|-
| style='text-align:right'| 3631
| ''[[:d:Q20746804|Ivor Llewelyn Foster]]''
| [[Coadan:Ivor Llewelyn Foster (1870–1959).png|center|128px]]
|
|
|-
| style='text-align:right'| 3632
| ''[[:d:Q20746814|John Penry]]''
| [[Coadan:Plant y Goedwig (John Penry cenhadwr).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3633
| ''[[:d:Q20746812|John Evans]]''
|
|
|
|-
| style='text-align:right'| 3634
| ''[[:d:Q20746818|Henry Jones-Davies]]''
|
|
|
|-
| style='text-align:right'| 3635
| ''[[:d:Q20746823|Leslie Alun Page]]''
|
|
|
|-
| style='text-align:right'| 3636
| ''[[:d:Q20746821|Kathryn Jenkins]]''
|
|
|
|-
| style='text-align:right'| 3637
| ''[[:d:Q20746826|Ieuan Maddock]]''
| [[Coadan:Ieuan Maddock.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3638
| ''[[:d:Q20746827|Maria James]]''
|
|
|
|-
| style='text-align:right'| 3639
| ''[[:d:Q20746824|Lewis Powell]]''
| [[Coadan:Portrait of Lewis Powell, Caerdydd (4673160).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3640
| ''[[:d:Q20746831|Morgan Watkin]]''
|
|
|
|-
| style='text-align:right'| 3641
| ''[[:d:Q20746829|Meirion Jones]]''
|
|
|
|-
| style='text-align:right'| 3642
| ''[[:d:Q20746834|Owen Prys]]''
|
|
|
|-
| style='text-align:right'| 3643
| ''[[:d:Q20746839|Robert Piercy]]''
|
|
|
|-
| style='text-align:right'| 3644
| ''[[:d:Q20746842|Sampson Thomas]]''
|
|
|
|-
| style='text-align:right'| 3645
| ''[[:d:Q20746843|Llewellyn Thomas Gordon Soulsby]]''
|
|
|
|-
| style='text-align:right'| 3646
| ''[[:d:Q20746840|Roger Price]]''
| [[Coadan:Plant y Goedwig (Roger Price).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3647
| ''[[:d:Q20746841|Rolant Eames]]''
|
|
|
|-
| style='text-align:right'| 3648
| ''[[:d:Q20746846|Thomas William]]''
|
|
|
|-
| style='text-align:right'| 3649
| ''[[:d:Q20746844|Thomas John Jehu]]''
|
|
|
|-
| style='text-align:right'| 3650
| ''[[:d:Q20746845|Thomas Price]]''
|
|
|
|-
| style='text-align:right'| 3651
| ''[[:d:Q20748814|Daniel Thomas Phillips]]''
|
|
|
|-
| style='text-align:right'| 3652
| ''[[:d:Q20748815|David James]]''
|
|
|
|-
| style='text-align:right'| 3653
| ''[[:d:Q20748812|Abraham Williams]]''
|
|
|
|-
| style='text-align:right'| 3654
| ''[[:d:Q20748813|Bleddyn Jones Roberts]]''
| [[Coadan:Professor Bleddyn Jones Roberts (1554584).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3655
| ''[[:d:Q20748816|David John Snell]]''
|
|
|
|-
| style='text-align:right'| 3656
| ''[[:d:Q20748822|Ellen Evans]]''
| [[Coadan:Ellen Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3657
| ''[[:d:Q20748826|Evan Richardson]]''
| [[Coadan:Y Parch Evan Richardson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3658
| ''[[:d:Q20748824|Evan Moses]]''
|
|
|
|-
| style='text-align:right'| 3659
| ''[[:d:Q20748831|Griffith William Hughes]]''
| [[Coadan:Griffith William Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3660
| ''[[:d:Q20748828|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 3661
| ''[[:d:Q20748835|Henry Thomas Payne]]''
|
|
|
|-
| style='text-align:right'| 3662
| ''[[:d:Q20748832|Gwilym Cleaton Jones]]''
|
|
|
|-
| style='text-align:right'| 3663
| ''[[:d:Q20748833|Gwilym Gwalchmai Jones]]''
|
|
|
|-
| style='text-align:right'| 3664
| ''[[:d:Q20748838|Idris Frederick Parry]]''
|
|
|
|-
| style='text-align:right'| 3665
| ''[[:d:Q20748839|Isaac John Williams]]''
|
|
|
|-
| style='text-align:right'| 3666
| ''[[:d:Q20748843|James Phillips]]''
|
|
|
|-
| style='text-align:right'| 3667
| ''[[:d:Q20748841|Iwan James Morgan]]''
|
|
|
|-
| style='text-align:right'| 3668
| ''[[:d:Q20748847|John Breese Davies]]''
| [[Coadan:Ysgrifau (John Breese Davies) (page 8 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3669
| ''[[:d:Q20748845|John Alwyn Charles]]''
|
|
|
|-
| style='text-align:right'| 3670
| ''[[:d:Q20748848|John Daniel Vernon Lewis]]''
|
|
|
|-
| style='text-align:right'| 3671
| ''[[:d:Q20748849|John David Lewis]]''
|
|
|
|-
| style='text-align:right'| 3672
| ''[[:d:Q20748854|Joshua Watkins]]''
|
|
|
|-
| style='text-align:right'| 3673
| ''[[:d:Q20748862|Morgan Williams]]''
|
|
|
|-
| style='text-align:right'| 3674
| ''[[:d:Q20748860|Micah Thomas]]''
|
|
|
|-
| style='text-align:right'| 3675
| ''[[:d:Q20748866|Owen Rees]]''
|
|
|
|-
| style='text-align:right'| 3676
| ''[[:d:Q20748864|Owen Davies Tudor]]''
|
|
|
|-
| style='text-align:right'| 3677
| ''[[:d:Q20748865|Owen Herbert Williams]]''
|
|
|
|-
| style='text-align:right'| 3678
| ''[[:d:Q20748868|Richard Powel]]''
|
|
|
|-
| style='text-align:right'| 3679
| ''[[:d:Q20748879|Thomas Jones Wheldon]]''
| [[Coadan:Thomas J Wheldon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3680
| ''[[:d:Q20748882|Thomas Phillips]]''
|
|
|
|-
| style='text-align:right'| 3681
| ''[[:d:Q20748883|Thomas Phillips]]''
| [[Coadan:Thomas Phillips.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3682
| ''[[:d:Q20748881|Thomas Mordaf Pierce]]''
|
|
|
|-
| style='text-align:right'| 3683
| ''[[:d:Q20748898|William Eifion Powell]]''
|
|
|
|-
| style='text-align:right'| 3684
| ''[[:d:Q20748899|William Emrys Evans]]''
|
|
|
|-
| style='text-align:right'| 3685
| ''[[:d:Q20748896|William Charles Roberts]]''
| [[Coadan:William Charles Roberts (1832–1903).png|center|128px]]
|
|
|-
| style='text-align:right'| 3686
| ''[[:d:Q20748897|William Craven Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 3687
| ''[[:d:Q20748902|William Meloch Hughes]]''
| [[Coadan:William Meloch Hughes (1860-1926).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3688
| ''[[:d:Q20748903|William Morris]]''
| [[Coadan:Revd. William Morris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3689
| ''[[:d:Q20748900|William Evans]]''
|
|
|
|-
| style='text-align:right'| 3690
| ''[[:d:Q20568247|Richard Parry]]''
| [[Coadan:Revd. Richard Parry (Gwalchmai, 1803-97) NLW3364065.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3691
| ''[[:d:Q20568728|Jac Lewis Williams]]''
|
|
|
|-
| style='text-align:right'| 3692
| ''[[:d:Q20568736|William Williams]]''
| [[Coadan:William Williams (Creuddynfab, 1814-69) NLW3364533.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3693
| ''[[:d:Q20568748|John Williams]]''
| [[Coadan:John Williams (Ioan Madog, 1812-78) NLW3362407 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3694
| ''[[:d:Q20568757|John Prydderch Williams]]''
| [[Coadan:John Prydderch Williams (Rhydderch o Fcircon, 1830-68) NLW3364196 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3695
| ''[[:d:Q20568941|John Pritchard]]''
|
|
|
|-
| style='text-align:right'| 3696
| ''[[:d:Q20569280|Rees Arthur Rees]]''
| [[Coadan:Rees Arthur Rees (Rhys Dyfed, 1837-66) (ambrotype) NLW3364105.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3697
| ''[[:d:Q20603878|Hugh Abercrombie]]''
|
|
|
|-
| style='text-align:right'| 3698
| ''[[:d:Q20627091|Morris ap Rhisiart]]''
|
|
|
|-
| style='text-align:right'| 3699
| ''[[:d:Q20631120|Denise Goddard]]''
| [[Coadan:Denise Goddard 1964.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3700
| ''[[:d:Q20631337|Gwenllian Elizabeth Fanny Morgan]]''
| [[Coadan:Gwenllian Morgan Mayor of Brecon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3701
| ''[[:d:Q20631844|R. K. Penson]]''
|
|
|
|-
| style='text-align:right'| 3702
| ''[[:d:Q20639681|Bert Williams]]''
|
|
|
|-
| style='text-align:right'| 3703
| ''[[:d:Q20641049|Tecwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 3704
| ''[[:d:Q20641305|Bill Pendergast]]''
|
|
|
|-
| style='text-align:right'| 3705
| ''[[:d:Q20641359|Arthur Pritchard]]''
|
|
|
|-
| style='text-align:right'| 3706
| ''[[:d:Q20641646|Dai Woodward]]''
|
|
|
|-
| style='text-align:right'| 3707
| ''[[:d:Q20656901|Evan William Evans]]''
| [[Coadan:Evan William Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3708
| ''[[:d:Q20685042|Charles Orme]]''
| [[Coadan:Charles Orme.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3709
| ''[[:d:Q20685186|Lot Hughes]]''
| [[Coadan:Revd Lot Hughes (W) NLW3362907.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3710
| ''[[:d:Q20685424|Robert Llugwy Owen]]''
| [[Coadan:Revd Robert Llugwy Owen (1836-1906) (1867) NLW3362143.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3711
| ''[[:d:Q20687891|D. H. Jones]]''
| [[Coadan:David Jones (Dewi Arfon, 1833-1869) NLW3365388.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3712
| ''[[:d:Q20688633|John Hugh Evans]]''
| [[Coadan:Revd John Hugh Evans (Cynfaen, 1833-86) NLW3364076.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3713
| ''[[:d:Q20712662|John Rae]]''
|
|
|
|-
| style='text-align:right'| 3714
| ''[[:d:Q20713538|P. D. G. Thomas]]''
|
|
|
|-
| style='text-align:right'| 3715
| ''[[:d:Q20713729|Philip Rodgers]]''
|
|
|
|-
| style='text-align:right'| 3716
| ''[[:d:Q20724707|Sydney Chappell]]''
|
|
|
|-
| style='text-align:right'| 3717
| ''[[:d:Q20732606|Lemuel John Hopkin James]]''
|
|
|
|-
| style='text-align:right'| 3718
| ''[[:d:Q20732611|Abel Jones Parry]]''
|
|
|
|-
| style='text-align:right'| 3719
| ''[[:d:Q20732615|Alcwyn Caryni Evans]]''
|
|
|
|-
| style='text-align:right'| 3720
| ''[[:d:Q20732612|Frederick John Alban]]''
|
|
|
|-
| style='text-align:right'| 3721
| ''[[:d:Q20732613|Albert Owen Evans]]''
|
|
|
|-
| style='text-align:right'| 3722
| ''[[:d:Q20732617|Alfred William Hughes]]''
| [[Coadan:Professor Alfred W. Hughes, 1895.png|center|128px]]
|
|
|-
| style='text-align:right'| 3723
| ''[[:d:Q20732623|Aneurin Jones]]''
|
|
|
|-
| style='text-align:right'| 3724
| ''[[:d:Q20732620|Alun Herbert Davies]]''
|
|
|
|-
| style='text-align:right'| 3725
| ''[[:d:Q20732626|Annie Foulkes]]''
|
|
|
|-
| style='text-align:right'| 3726
| ''[[:d:Q20732625|Annie Davies]]''
|
|
|
|-
| style='text-align:right'| 3727
| ''[[:d:Q20732628|Arthur ap Gwynn]]''
|
|
|
|-
| style='text-align:right'| 3728
| ''[[:d:Q20732629|Arthur Evans]]''
|
|
|
|-
| style='text-align:right'| 3729
| ''[[:d:Q20732634|Arthur Leonard Leach]]''
|
|
|
|-
| style='text-align:right'| 3730
| ''[[:d:Q20732635|Arthur Tudor Edwards]]''
|
|
|
|-
| style='text-align:right'| 3731
| ''[[:d:Q20732633|Arthur Jones]]''
| [[Coadan:Arthur Jones, Congregationalist minister, Bangor 1776-1860.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3732
| ''[[:d:Q20732636|Athelstan Owen]]''
|
|
|
|-
| style='text-align:right'| 3733
| ''[[:d:Q20732643|Ben Davies]]''
| [[Coadan:Ben Davies (Capel Iwan).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3734
| ''[[:d:Q20732645|Ben Davies]]''
|
|
|
|-
| style='text-align:right'| 3735
| ''[[:d:Q20732650|Benjamin Evans]]''
|
|
|
|-
| style='text-align:right'| 3736
| ''[[:d:Q20732651|Benjamin Humphreys]]''
|
|
|
|-
| style='text-align:right'| 3737
| ''[[:d:Q20732649|Benjamin Davies]]''
|
|
|
|-
| style='text-align:right'| 3738
| ''[[:d:Q20732655|Benjamin Maelor Jones]]''
|
|
|
|-
| style='text-align:right'| 3739
| ''[[:d:Q20732652|Benjamin Jones]]''
|
|
|
|-
| style='text-align:right'| 3740
| ''[[:d:Q20732653|Benjamin Jones]]''
|
|
|
|-
| style='text-align:right'| 3741
| ''[[:d:Q20732658|Benjamin Morris Williams]]''
|
|
|
|-
| style='text-align:right'| 3742
| ''[[:d:Q20732656|Benjamin Meredith]]''
|
|
|
|-
| style='text-align:right'| 3743
| ''[[:d:Q20732657|Benjamin Millingchamp]]''
|
|
|
|-
| style='text-align:right'| 3744
| ''[[:d:Q20732661|Benjamin William Chidlaw]]''
| [[Coadan:Benjamin William Chidlaw (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3745
| ''[[:d:Q20732671|Evan Breeze]]''
|
|
|
|-
| style='text-align:right'| 3746
| ''[[:d:Q20732679|Cadwaladr Evans]]''
|
|
|
|-
| style='text-align:right'| 3747
| ''[[:d:Q20732676|Fanny Mary Katherine Bulkeley-Owen]]''
|
|
|
|-
| style='text-align:right'| 3748
| ''[[:d:Q20732680|Cadwaladr Jones]]''
| [[Coadan:Portrait of Cadwaladr Jones (4671525).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3749
| ''[[:d:Q20732681|Cadwaladr Jones]]''
|
|
|
|-
| style='text-align:right'| 3750
| ''[[:d:Q20732686|Caleb Rees]]''
|
|
|
|-
| style='text-align:right'| 3751
| ''[[:d:Q20732685|Caleb Morris]]''
| [[Coadan:Portrait of Caleb Morris (4672653) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3752
| ''[[:d:Q20732690|Ceinwen Rowlands]]''
|
|
|
|-
| style='text-align:right'| 3753
| ''[[:d:Q20732691|Charles Conway]]''
|
|
|
|-
| style='text-align:right'| 3754
| ''[[:d:Q20732689|Caradog Fynach]]''
|
|
|
|-
| style='text-align:right'| 3755
| ''[[:d:Q20732695|Charles Hassall]]''
|
|
|
|-
| style='text-align:right'| 3756
| ''[[:d:Q20732692|Charles Davies]]''
| [[Coadan:Portrait of Charles Davies (4673058).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3757
| ''[[:d:Q20732696|Charles Hughes]]''
|
|
|
|-
| style='text-align:right'| 3758
| ''[[:d:Q20732697|Charles James]]''
|
|
|
|-
| style='text-align:right'| 3759
| ''[[:d:Q20732703|Charles Thomas Edward Hinde]]''
|
|
|
|-
| style='text-align:right'| 3760
| ''[[:d:Q20732707|Christopher Mends]]''
|
|
|
|-
| style='text-align:right'| 3761
| ''[[:d:Q20732705|Charles Winter]]''
|
|
|
|-
| style='text-align:right'| 3762
| ''[[:d:Q20732714|Cradock Glascott]]''
|
|
|
|-
| style='text-align:right'| 3763
| ''[[:d:Q20732712|Coslett Coslett]]''
| [[Coadan:Cosslett Cosslett (Carnelian).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3764
| ''[[:d:Q20732737|Dafydd Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 3765
| ''[[:d:Q20732746|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 3766
| ''[[:d:Q20732748|Dafydd Llwyd]]''
|
|
|
|-
| style='text-align:right'| 3767
| ''[[:d:Q20732759|Dafydd Rhys ap Thomas]]''
|
|
|
|-
| style='text-align:right'| 3768
| ''[[:d:Q20732760|Dafydd Siencyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 3769
| ''[[:d:Q20732767|Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 3770
| ''[[:d:Q20732770|Daniel Evans]]''
| [[Coadan:Portrait of Daniel Evans 'Eos Dâr' (4673945).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3771
| ''[[:d:Q20732768|Daniel Davies]]''
| [[Coadan:Dr Daniel Davies, Swansea (1797-1876) NLW3361967.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3772
| ''[[:d:Q20732774|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3773
| ''[[:d:Q20732775|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3774
| ''[[:d:Q20732772|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3775
| ''[[:d:Q20732773|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3776
| ''[[:d:Q20732778|Daniel Lewis Moses]]''
|
|
|
|-
| style='text-align:right'| 3777
| ''[[:d:Q20732776|Daniel Jones]]''
| [[Coadan:Dan Jones (Mormon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3778
| ''[[:d:Q20732777|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 3779
| ''[[:d:Q20732782|Daniel Rowlands]]''
| [[Coadan:D Rowlands NLW3361839.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3780
| ''[[:d:Q20732783|Daniel Williams]]''
|
|
|
|-
| style='text-align:right'| 3781
| ''[[:d:Q20732780|Daniel Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 3782
| ''[[:d:Q20732786|David Alban Davies]]''
|
|
|
|-
| style='text-align:right'| 3783
| ''[[:d:Q20732787|David Bowen]]''
|
|
|
|-
| style='text-align:right'| 3784
| ''[[:d:Q20732785|David Adams]]''
| [[Coadan:Parch. D. Adams, B.A., Lerpwl (5349031).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3785
| ''[[:d:Q20732788|David David Williams]]''
|
|
|
|-
| style='text-align:right'| 3786
| ''[[:d:Q10495488|Jack Lewis]]''
|
|
|
|-
| style='text-align:right'| 3787
| ''[[:d:Q10517262|David Davies]]''
|
|
|
|-
| style='text-align:right'| 3788
| ''[[:d:Q18159992|Isaac Clarke]]''
|
|
|
|-
| style='text-align:right'| 3789
| ''[[:d:Q18160397|Arthur James Johnes]]''
|
|
|
|-
| style='text-align:right'| 3790
| ''[[:d:Q18162074|Edmund Stonelake]]''
|
|
|
|-
| style='text-align:right'| 3791
| ''[[:d:Q18164639|Charles Davies]]''
| [[Coadan:Charles Davies MLC.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 3792
| ''[[:d:Q18200042|Edward Pugh]]''
|
|
|
|-
| style='text-align:right'| 3793
| ''[[:d:Q18201527|John Gwilym Jones]]''
|
|
|
|-
| style='text-align:right'| 3794
| ''[[:d:Q18223030|John Callan James Metford]]''
|
|
|
|-
| style='text-align:right'| 3795
| ''[[:d:Q18325032|Siôn Dafydd Rhys]]''
|
|
|
|-
| style='text-align:right'| 3796
| ''[[:d:Q18325685|James Birch]]''
|
|
|
|-
| style='text-align:right'| 3797
| ''[[:d:Q18325718|Robert Davies]]''
| [[Coadan:The home of Robert Davies (Bardd Nantglyn, 1769-1835) NLW3363888.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3798
| ''[[:d:Q18327524|William Ellis Jones]]''
| [[Coadan:Portrait of W. E. Jones. Cawrdaf (4671562) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3799
| ''[[:d:Q18346805|Azariah Shadrach]]''
|
|
|
|-
| style='text-align:right'| 3800
| ''[[:d:Q18385261|Arnold Williams]]''
|
|
|
|-
| style='text-align:right'| 3801
| ''[[:d:Q18385268|Arthur Radclyffe Dugmore]]''
| [[Coadan:Portrait of Arthur Radclyffe Dugmore.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3802
| ''[[:d:Q18391923|Samuel Tomkinson]]''
| [[Coadan:Samuel Tomkinson.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 3803
| ''[[:d:Q18440082|Matthew Gough]]''
|
|
|
|-
| style='text-align:right'| 3804
| ''[[:d:Q18509163|William Charles Evans]]''
|
|
|
|-
| style='text-align:right'| 3805
| ''[[:d:Q18510202|Alfred Owen Hughes Jarman]]''
|
|
|
|-
| style='text-align:right'| 3806
| ''[[:d:Q18524054|Isaac Jones]]''
|
|
|
|-
| style='text-align:right'| 3807
| ''[[:d:Q18526294|Ada Vachell]]''
|
|
|
|-
| style='text-align:right'| 3808
| ''[[:d:Q18526331|Agnes Mason]]''
|
|
|
|-
| style='text-align:right'| 3809
| ''[[:d:Q18526437|Alun Oldfield Davies]]''
|
|
|
|-
| style='text-align:right'| 3810
| ''[[:d:Q18526570|Arthur Whitford]]''
| [[Coadan:Arthur Whitford (1928).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3811
| ''[[:d:Q18526694|Cadwaladr Cesail]]''
|
|
|
|-
| style='text-align:right'| 3812
| ''[[:d:Q18526861|Richard Pendrill Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 3813
| ''[[:d:Q18526878|John Evans]]''
| [[Coadan:Portrait of John Evans, Eglwysbach (4674386).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3814
| ''[[:d:Q18527125|John Jones]]''
|
|
|
|-
| style='text-align:right'| 3815
| ''[[:d:Q18527386|David Jones]]''
|
|
|
|-
| style='text-align:right'| 3816
| ''[[:d:Q18527701|Dinah Williams]]''
|
|
|
|-
| style='text-align:right'| 3817
| ''[[:d:Q18527726|Ruby Levick]]''
|
|
|
|-
| style='text-align:right'| 3818
| ''[[:d:Q18527879|José Deniz]]''
|
|
|
|-
| style='text-align:right'| 3819
| ''[[:d:Q18527918|Samuel Evans]]''
|
|
|
|-
| style='text-align:right'| 3820
| ''[[:d:Q18527967|Gruffydd Phylip]]''
|
|
|
|-
| style='text-align:right'| 3821
| ''[[:d:Q18528236|Sheila Collins]]''
|
|
|
|-
| style='text-align:right'| 3822
| ''[[:d:Q18528438|Laurence Deniz]]''
|
|
|
|-
| style='text-align:right'| 3823
| ''[[:d:Q18528453|Eirlys Roberts]]''
|
|
|
|-
| style='text-align:right'| 3824
| ''[[:d:Q18528597|Lewis Probert]]''
| [[Coadan:Lewis Probert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3825
| ''[[:d:Q18528756|Enid Wyn Jones]]''
|
|
|
|-
| style='text-align:right'| 3826
| ''[[:d:Q18528939|Evan Walters]]''
|
|
|
|-
| style='text-align:right'| 3827
| ''[[:d:Q18529126|Mary Bridges-Adams]]''
|
|
|
|-
| style='text-align:right'| 3828
| ''[[:d:Q18529229|Mary Catherine Pendrill Llewelyn]]''
| [[Coadan:Mary Pendrill Llewelyn.png|center|128px]]
|
|
|-
| style='text-align:right'| 3829
| ''[[:d:Q18529257|Jacob Owen]]''
| [[Coadan:Jacob Owen, Principal Architect and Engineer, Department of Public Works, Ireland.png|center|128px]]
|
|
|-
| style='text-align:right'| 3830
| ''[[:d:Q18529853|James Edwards]]''
|
|
|
|-
| style='text-align:right'| 3831
| ''[[:d:Q18530096|John ap John]]''
|
|
|
|-
| style='text-align:right'| 3832
| ''[[:d:Q18530551|Pamela Shepherd]]''
| [[Coadan:Mother aka Pamela Shepherd and brolly.png|center|128px]]
|
|
|-
| style='text-align:right'| 3833
| ''[[:d:Q18530852|Thomas Powell]]''
|
|
|
|-
| style='text-align:right'| 3834
| ''[[:d:Q18530965|Walter Churchey]]''
|
|
|
|-
| style='text-align:right'| 3835
| ''[[:d:Q18531443|William Morgan Kinsey]]''
|
|
|
|-
| style='text-align:right'| 3836
| ''[[:d:Q18534114|Abel Morgan]]''
|
|
|
|-
| style='text-align:right'| 3837
| ''[[:d:Q18534191|James Hughes]]''
| [[Coadan:Portrait of James Hughes, (Iago Trichrug) Jewin Street, Llundain (4672617) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3838
| ''[[:d:Q18534775|Benjamin Phelps Gibbon]]''
|
|
|
|-
| style='text-align:right'| 3839
| ''[[:d:Q18535464|R. G. Berry]]''
|
|
|
|-
| style='text-align:right'| 3840
| ''[[:d:Q18535474|Roger Boore]]''
|
|
|
|-
| style='text-align:right'| 3841
| ''[[:d:Q18535478|Edward Breese]]''
| [[Coadan:Edward Breese.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3842
| ''[[:d:Q18535548|David Thomas]]''
| [[Coadan:David Thomas, 'Dafydd Ddu Eryri'.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3843
| ''[[:d:Q18535562|William John Davies]]''
|
|
|
|-
| style='text-align:right'| 3844
| ''[[:d:Q18535563|D. T. Davies]]''
|
|
|
|-
| style='text-align:right'| 3845
| ''[[:d:Q18535561|John Davies]]''
|
|
|
|-
| style='text-align:right'| 3846
| ''[[:d:Q18535570|Jonathan Ceredig Davies]]''
|
|
|
|-
| style='text-align:right'| 3847
| ''[[:d:Q18535571|Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 3848
| ''[[:d:Q18535569|John Davies]]''
|
|
|
|-
| style='text-align:right'| 3849
| ''[[:d:Q18535575|Huw Derfel]]''
| [[Coadan:Hugh Derfel Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3850
| ''[[:d:Q18535572|Rhisiart Morgan Davies]]''
|
|
|
|-
| style='text-align:right'| 3851
| ''[[:d:Q18535573|William Davies]]''
|
|
|
|-
| style='text-align:right'| 3852
| ''[[:d:Q18535594|William Thomas Edwards]]''
| [[Coadan:William Thomas Edwards (Gwilym Deudraeth).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3853
| ''[[:d:Q18535598|William Edwards]]''
|
|
|
|-
| style='text-align:right'| 3854
| ''[[:d:Q18535596|Alun R. Edwards]]''
|
|
|
|-
| style='text-align:right'| 3855
| ''[[:d:Q18535602|Eirwen Davies]]''
|
|
|
|-
| style='text-align:right'| 3856
| ''[[:d:Q18535612|Robert Evans]]''
| [[Coadan:(The poet Robert Evans (Cybi), outside his home, Bryn Eithin, Llangybi) (6347476638).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3857
| ''[[:d:Q18535618|Thomas Christopher Evans]]''
| [[Coadan:Iolo Morganwg (Cadrawd) (page 18 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3858
| ''[[:d:Q18535623|J. O. Francis]]''
|
|
|
|-
| style='text-align:right'| 3859
| ''[[:d:Q18535631|William Gambold]]''
|
|
|
|-
| style='text-align:right'| 3860
| ''[[:d:Q18535642|Bruce Griffiths]]''
|
|
|
|-
| style='text-align:right'| 3861
| ''[[:d:Q18535641|Robert Arthur Griffith]]''
| [[Coadan:Robert Arthur Griffith (Elphin).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3862
| ''[[:d:Q18535652|Gruffudd de la Pole]]''
|
|
|
|-
| style='text-align:right'| 3863
| ''[[:d:Q18535657|Ifan Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 3864
| ''[[:d:Q18535694|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 3865
| ''[[:d:Q18535692|Hywel Hughes]]''
| [[Coadan:Hywel Hughes, Bogota (1452212).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3866
| ''[[:d:Q18535697|Huw Cae Llwyd]]''
|
|
|
|-
| style='text-align:right'| 3867
| ''[[:d:Q18535714|Ifor Rees]]''
|
|
|
|-
| style='text-align:right'| 3868
| ''[[:d:Q18535719|Eldra Jarman]]''
|
|
|
|-
| style='text-align:right'| 3869
| ''[[:d:Q18535726|Robert Isaac Jones]]''
| [[Coadan:Robert Isaac Jones (1813 - 1905), Dictionary of Welsh Biography.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3870
| ''[[:d:Q18535727|Rees Jones]]''
|
|
|
|-
| style='text-align:right'| 3871
| ''[[:d:Q18535730|David Watkin Jones]]''
| [[Coadan:Portrait of David Watkin Jones, 'Dafydd Morganwg' (4670538) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3872
| ''[[:d:Q18535731|William Jones]]''
| [[Coadan:Ehedydd Iâl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3873
| ''[[:d:Q18535728|Edward Jones]]''
| [[Coadan:Edward Jones, Bathafarn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3874
| ''[[:d:Q18535734|Robert Jones]]''
| [[Coadan:RJRhoslan.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 3875
| ''[[:d:Q18535735|Abel Jones]]''
| [[Coadan:Abel Jones (Y Bardd Crwst).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3876
| ''[[:d:Q18535732|Thomas Lloyd Jones]]''
|
|
|
|-
| style='text-align:right'| 3877
| ''[[:d:Q18535733|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 3878
| ''[[:d:Q18535738|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 3879
| ''[[:d:Q18535739|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 3880
| ''[[:d:Q18535736|Aneurin Jones]]''
|
|
|
|-
| style='text-align:right'| 3881
| ''[[:d:Q18535743|Gerallt Jones]]''
|
|
|
|-
| style='text-align:right'| 3882
| ''[[:d:Q18535741|Evan Pan Jones]]''
| [[Coadan:Evan Pan Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3883
| ''[[:d:Q18535747|J. Tywi Jones]]''
|
|
|
|-
| style='text-align:right'| 3884
| ''[[:d:Q18535748|John Puleston Jones]]''
| [[Coadan:Puleston Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3885
| ''[[:d:Q20748901|William Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 3886
| ''[[:d:Q20748906|William Roberts]]''
|
|
|
|-
| style='text-align:right'| 3887
| ''[[:d:Q20748908|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3888
| ''[[:d:Q20748909|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3889
| ''[[:d:Q20748912|William Tudor Jones]]''
|
|
|
|-
| style='text-align:right'| 3890
| ''[[:d:Q20751795|Alan Trevor Jones]]''
|
|
|
|-
| style='text-align:right'| 3891
| ''[[:d:Q20751798|David Tegan Davies]]''
|
|
|
|-
| style='text-align:right'| 3892
| ''[[:d:Q20751796|Benjamin Haydn Williams]]''
|
|
|
|-
| style='text-align:right'| 3893
| ''[[:d:Q20751797|David Glyn Bowen]]''
|
|
|
|-
| style='text-align:right'| 3894
| ''[[:d:Q20751802|Edwin Stephen Griffiths]]''
|
|
|
|-
| style='text-align:right'| 3895
| ''[[:d:Q20751803|Ewart Stanley John]]''
|
|
|
|-
| style='text-align:right'| 3896
| ''[[:d:Q20751807|James Jubilee Young]]''
|
|
|
|-
| style='text-align:right'| 3897
| ''[[:d:Q20751810|John Emrys Jones]]''
|
|
|
|-
| style='text-align:right'| 3898
| ''[[:d:Q20751811|John Hugh Michael]]''
|
|
|
|-
| style='text-align:right'| 3899
| ''[[:d:Q20751809|John Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 3900
| ''[[:d:Q20751812|John James Morgan]]''
|
|
|
|-
| style='text-align:right'| 3901
| ''[[:d:Q20751813|John Owen]]''
|
|
|
|-
| style='text-align:right'| 3902
| ''[[:d:Q20751817|Morris Thomas]]''
|
|
|
|-
| style='text-align:right'| 3903
| ''[[:d:Q20751823|William Rowland]]''
|
|
|
|-
| style='text-align:right'| 3904
| ''[[:d:Q20751820|Owain Llewelyn Owain]]''
| [[Coadan:Owain Llew Owain.tif|center|128px]]
|
|
|-
| style='text-align:right'| 3905
| ''[[:d:Q20751821|Thomas Perrot]]''
|
|
|
|-
| style='text-align:right'| 3906
| ''[[:d:Q20751826|Stephen Owen Tudor]]''
|
|
|
|-
| style='text-align:right'| 3907
| ''[[:d:Q20751827|Susannah Jane Rankin]]''
|
|
|
|-
| style='text-align:right'| 3908
| ''[[:d:Q20751828|Thomas Arwyn Watkins]]''
|
|
|
|-
| style='text-align:right'| 3909
| ''[[:d:Q20751829|Thomas Richards]]''
|
|
|
|-
| style='text-align:right'| 3910
| ''[[:d:Q20751834|William Jones]]''
|
|
|
|-
| style='text-align:right'| 3911
| ''[[:d:Q20751835|William Leslie Richards]]''
|
|
|
|-
| style='text-align:right'| 3912
| ''[[:d:Q20751832|Trevor Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 3913
| ''[[:d:Q20751837|William Roberts]]''
| [[Coadan:William Roberts, athrofa Aberhonddu.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3914
| ''[[:d:Q20751841|William Thomas Edwards]]''
|
|
|
|-
| style='text-align:right'| 3915
| ''[[:d:Q20755087|Helen Thomas]]''
|
|
|
|-
| style='text-align:right'| 3916
| ''[[:d:Q20758210|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 3917
| ''[[:d:Q20804657|Mary Jane Evans]]''
|
|
|
|-
| style='text-align:right'| 3918
| ''[[:d:Q20804660|Alfred Phillips Morgan]]''
|
|
|
|-
| style='text-align:right'| 3919
| ''[[:d:Q20804661|Benjamin Jones]]''
|
|
|
|-
| style='text-align:right'| 3920
| ''[[:d:Q20804670|David Christmas Williams]]''
| [[Coadan:David Christmas Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3921
| ''[[:d:Q20804671|David Ffrangcon Thomas]]''
|
|
|
|-
| style='text-align:right'| 3922
| ''[[:d:Q20804668|Daniel Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 3923
| ''[[:d:Q20804669|Daniel Phillips]]''
|
|
|
|-
| style='text-align:right'| 3924
| ''[[:d:Q20804675|David Morgan Richards]]''
|
|
|
|-
| style='text-align:right'| 3925
| ''[[:d:Q20804673|David John Lewis]]''
|
|
|
|-
| style='text-align:right'| 3926
| ''[[:d:Q20804678|David Rees]]''
|
|
|
|-
| style='text-align:right'| 3927
| ''[[:d:Q20804679|David Robert Griffiths]]''
|
|
|
|-
| style='text-align:right'| 3928
| ''[[:d:Q20804676|David Morris Jones]]''
|
|
|
|-
| style='text-align:right'| 3929
| ''[[:d:Q20804682|David Saunders]]''
| [[Coadan:Portrait of David Saunders (4670522).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3930
| ''[[:d:Q20804683|David Stanley Jones]]''
| [[Coadan:David Stanley Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3931
| ''[[:d:Q20804680|David Rogers]]''
| [[Coadan:David Rogers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3932
| ''[[:d:Q20804681|David Rowland]]''
|
|
|
|-
| style='text-align:right'| 3933
| ''[[:d:Q20804686|David Williams]]''
|
|
|
|-
| style='text-align:right'| 3934
| ''[[:d:Q20804685|David Vaughan Thomas]]''
|
|
|
|-
| style='text-align:right'| 3935
| ''[[:d:Q20804691|Dewi Aled Eirug Davies]]''
|
|
|
|-
| style='text-align:right'| 3936
| ''[[:d:Q20804688|David Young]]''
| [[Coadan:Portrait of Revd. David Young (4671085).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3937
| ''[[:d:Q20804693|Edward Price]]''
| [[Coadan:Portrait of Edward Price, Bangor (4670450).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3938
| ''[[:d:Q20804698|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 3939
| ''[[:d:Q20804699|Evan Owen Allen]]''
|
|
|
|-
| style='text-align:right'| 3940
| ''[[:d:Q20804696|Edward William Thomas]]''
|
|
|
|-
| style='text-align:right'| 3941
| ''[[:d:Q20804703|George Roberts]]''
|
|
|
|-
| style='text-align:right'| 3942
| ''[[:d:Q20804701|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 3943
| ''[[:d:Q20804706|Glanville Rees Jeffreys Jones]]''
|
|
|
|-
| style='text-align:right'| 3944
| ''[[:d:Q20804707|Griffith Davies]]''
|
|
|
|-
| style='text-align:right'| 3945
| ''[[:d:Q20804709|Griffith Williams]]''
| [[Coadan:Revd Griffith Williams, Talsarnau (1824-81) NLW3360979.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3946
| ''[[:d:Q20804714|Jenkin James]]''
|
|
|
|-
| style='text-align:right'| 3947
| ''[[:d:Q20804715|John Cox]]''
| [[Coadan:John Cox, died 1870.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3948
| ''[[:d:Q20804712|Henry Thomas Jacob]]''
|
|
|
|-
| style='text-align:right'| 3949
| ''[[:d:Q20804713|James James]]''
|
|
|
|-
| style='text-align:right'| 3950
| ''[[:d:Q20804716|John Davies]]''
| [[Coadan:John Davies, Fronheulog, Llandderfel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3951
| ''[[:d:Q20804717|John Edward Hughes]]''
|
|
|
|-
| style='text-align:right'| 3952
| ''[[:d:Q20804722|John Price]]''
|
|
|
|-
| style='text-align:right'| 3953
| ''[[:d:Q20804723|John Price Roberts]]''
|
|
|
|-
| style='text-align:right'| 3954
| ''[[:d:Q20804720|John Powell]]''
|
|
|
|-
| style='text-align:right'| 3955
| ''[[:d:Q20804726|John Roberts]]''
| [[Coadan:John Roberts Llangwm.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3956
| ''[[:d:Q20804724|John Pugh]]''
|
|
|
|-
| style='text-align:right'| 3957
| ''[[:d:Q20804725|John Pugh]]''
| [[Coadan:John Pugh.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3958
| ''[[:d:Q20804731|John Sparks]]''
|
|
|
|-
| style='text-align:right'| 3959
| ''[[:d:Q20804728|John Roberts]]''
| [[Coadan:Portrait of John Roberts (4670509).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3960
| ''[[:d:Q20804734|John Young Evans]]''
|
|
|
|-
| style='text-align:right'| 3961
| ''[[:d:Q20804735|Joseph Jones]]''
|
|
|
|-
| style='text-align:right'| 3962
| ''[[:d:Q20804733|John Williams Hughes]]''
|
|
|
|-
| style='text-align:right'| 3963
| ''[[:d:Q20804739|Mary Owen]]''
| [[Coadan:Portrait of Mary Owen (4670421) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3964
| ''[[:d:Q20804737|Lewis Jones Roberts]]''
| [[Coadan:L. J. Roberts, Esq., M.A. (Oxon) (5236459) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3965
| ''[[:d:Q20804742|Owen Owens Roberts]]''
|
|
|
|-
| style='text-align:right'| 3966
| ''[[:d:Q20804743|Owen Picton Davies]]''
|
|
|
|-
| style='text-align:right'| 3967
| ''[[:d:Q20804750|Richard Davies (Isgarn)]]''
|
|
|
|-
| style='text-align:right'| 3968
| ''[[:d:Q20804751|Richard Roberts]]''
|
|
|
|-
| style='text-align:right'| 3969
| ''[[:d:Q20804748|Rhys Thomas]]''
|
|
|
|-
| style='text-align:right'| 3970
| ''[[:d:Q20804749|John Richard]]''
|
|
|
|-
| style='text-align:right'| 3971
| ''[[:d:Q20804754|Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 3972
| ''[[:d:Q20804755|Robert Ellis Vaughan Roberts]]''
|
|
|
|-
| style='text-align:right'| 3973
| ''[[:d:Q20804752|Richard Samuel Hughes]]''
|
|
|
|-
| style='text-align:right'| 3974
| ''[[:d:Q20804753|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 3975
| ''[[:d:Q20804759|Robert Roberts]]''
| [[Coadan:Portrait of Yr eiddoch yn diffuant Robert Roberts (4673015).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3976
| ''[[:d:Q20804756|Robert Gwilym Hughes]]''
|
|
|
|-
| style='text-align:right'| 3977
| ''[[:d:Q20804757|Robert Henry Roberts]]''
| [[Coadan:Robert Henry Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3978
| ''[[:d:Q20804760|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 3979
| ''[[:d:Q20804761|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 3980
| ''[[:d:Q20804764|Robert Thomas]]''
| [[Coadan:Robert Thomas, Llidiardau (1796-1866) NLW3365202.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3981
| ''[[:d:Q20804765|Robert William Jones]]''
|
|
|
|-
| style='text-align:right'| 3982
| ''[[:d:Q20804768|Benjamin Rowland]]''
|
|
|
|-
| style='text-align:right'| 3983
| ''[[:d:Q20804769|Ellis Rowland]]''
|
|
|
|-
| style='text-align:right'| 3984
| ''[[:d:Q9357296|Teresa Helena Higginson]]''
| [[Coadan:Teresa Helena Higginson Servant of God.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3985
| ''[[:d:Q10382040|Lot Jones]]''
| [[Coadan:Lot Jones Footballer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3986
| ''[[:d:Q10391964|Billy Thomas]]''
|
|
|
|-
| style='text-align:right'| 3987
| ''[[:d:Q10395857|Ivor Perry]]''
|
|
|
|-
| style='text-align:right'| 3988
| ''[[:d:Q10409543|Dudley Lewis]]''
|
|
|
|-
| style='text-align:right'| 3989
| ''[[:d:Q10416121|Horace Williams]]''
|
|
|
|-
| style='text-align:right'| 3990
| ''[[:d:Q10449958|Harry Beadles]]''
| [[Coadan:Harry Beadles.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3991
| ''[[:d:Q10499403|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 3992
| ''[[:d:Q10501113|James Trainer]]''
| [[Coadan:James Trainer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 3993
| ''[[:d:Q10510315|Frank Hoddinott]]''
|
|
|
|-
| style='text-align:right'| 3994
| ''[[:d:Q10510353|Tony James]]''
|
|
|
|-
| style='text-align:right'| 3995
| ''[[:d:Q10511916|Harry Montford]]''
|
|
|
|-
| style='text-align:right'| 3996
| ''[[:d:Q10519662|John Pugsley]]''
|
|
|
|-
| style='text-align:right'| 3997
| ''[[:d:Q10524861|Bert Gray]]''
|
|
|
|-
| style='text-align:right'| 3998
| ''[[:d:Q10525511|Bill Roberts]]''
|
|
|
|-
| style='text-align:right'| 3999
| ''[[:d:Q10527809|Idwal Davies]]''
|
|
|
|-
| style='text-align:right'| 4000
| ''[[:d:Q10546480|Harry Hanford]]''
|
|
|
|-
| style='text-align:right'| 4001
| ''[[:d:Q10555802|Roy Finch]]''
|
|
|
|-
| style='text-align:right'| 4002
| ''[[:d:Q10567797|Desmond Brayley, Baron Brayley]]''
| [[Coadan:Desmond Brayley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4003
| ''[[:d:Q10969182|Gwyn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4004
| ''[[:d:Q10970620|Nigel Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4005
| ''[[:d:Q10978349|Edward Richard]]''
|
|
|
|-
| style='text-align:right'| 4006
| ''[[:d:Q10982897|William Williams]]''
|
|
|
|-
| style='text-align:right'| 4007
| ''[[:d:Q10994531|Marged ferch Ifan]]''
|
|
|
|-
| style='text-align:right'| 4008
| ''[[:d:Q10995139|Afan Ferddig]]''
|
|
|
|-
| style='text-align:right'| 4009
| [[Dyddgu Owen]]
|
|
|
|-
| style='text-align:right'| 4010
| ''[[:d:Q11003861|William Williams]]''
| [[Coadan:William Crwys Williams (Crwys).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4011
| ''[[:d:Q11005077|Rhiannon Davies Jones]]''
|
|
|
|-
| style='text-align:right'| 4012
| ''[[:d:Q11017673|Humphrey Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 4013
| ''[[:d:Q11024973|John Harries]]''
|
|
|
|-
| style='text-align:right'| 4014
| ''[[:d:Q11063761|Dafydd Huws]]''
|
|
|
|-
| style='text-align:right'| 4015
| ''[[:d:Q11129881|Ernest Willows]]''
|
|
|
|-
| style='text-align:right'| 4016
| ''[[:d:Q11161686|Idwal Robling]]''
|
|
|
|-
| style='text-align:right'| 4017
| ''[[:d:Q11208643|Thomas Tudor]]''
| [[Coadan:ThomasTudor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4018
| ''[[:d:Q11246040|Ralph Hancock]]''
|
|
|
|-
| style='text-align:right'| 4019
| ''[[:d:Q11280238|Beriah Gwynfe Evans]]''
| [[Coadan:BGE Diwygwyr Cymru (Cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4020
| ''[[:d:Q11288719|Walter Gibb]]''
|
|
|
|-
| style='text-align:right'| 4021
| ''[[:d:Q11679925|Archibald Dickson]]''
| [[Coadan:Captain Archibald Dickson Uniform cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4022
| ''[[:d:Q11685171|John Daniel Evans]]''
| [[Coadan:John Daniel Evans (1862-1943).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4023
| ''[[:d:Q11685219|John Stone]]''
|
|
|
|-
| style='text-align:right'| 4024
| ''[[:d:Q11722962|Ness Edwards]]''
|
|
|
|-
| style='text-align:right'| 4025
| ''[[:d:Q11738693|Ken Buffin]]''
|
|
|
|-
| style='text-align:right'| 4026
| ''[[:d:Q11801889|Richard Williams]]''
| [[Coadan:Portrait of a Man in Black, Follower of Hans Holbein the Younger, c. 1600.png|center|128px]]
|
|
|-
| style='text-align:right'| 4027
| ''[[:d:Q11866743|John George Williams]]''
|
|
|
|-
| style='text-align:right'| 4028
| ''[[:d:Q11921104|Esyllt T. Lawrence]]''
| [[Coadan:Esyllt T. Lawrence.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4029
| ''[[:d:Q11935381|Maredudd ap Rhys Gryg]]''
|
|
|
|-
| style='text-align:right'| 4030
| ''[[:d:Q11964288|Cyril Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4031
| ''[[:d:Q12065586|Penry Williams]]''
| [[Coadan:Portrait of Penry Williams (4671215).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4032
| ''[[:d:Q12072266|Henry Vivian, 1st Baron Swansea]]''
| [[Coadan:Henry Hussey Vivian, Vanity Fair, 1886-06-05.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4033
| ''[[:d:Q12072959|Morgan Williams]]''
| [[Coadan:Morgan Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4034
| ''[[:d:Q12346622|Douglas B. Gregor]]''
|
|
|
|-
| style='text-align:right'| 4035
| ''[[:d:Q12407875|Hugh Holland]]''
|
|
|
|-
| style='text-align:right'| 4036
| ''[[:d:Q12740776|Shelagh Roberts]]''
| [[Coadan:OP050 Shelagh ROBERTS 001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4037
| ''[[:d:Q12784125|Albert Edward Nash]]''
|
|
|
|-
| style='text-align:right'| 4038
| ''[[:d:Q12794838|Lewis Henry Owain Pugh]]''
|
|
|
|-
| style='text-align:right'| 4039
| ''[[:d:Q12795056|Llewellyn Isaac Gethin Morgan-Owen]]''
|
|
|
|-
| style='text-align:right'| 4040
| ''[[:d:Q12813930|Clive Kingston]]''
|
|
|
|-
| style='text-align:right'| 4041
| ''[[:d:Q12859012|Margaret Purves]]''
|
|
|
|-
| style='text-align:right'| 4042
| ''[[:d:Q12881301|Betty Bartlett-Ambatielos]]''
|
|
|
|-
| style='text-align:right'| 4043
| ''[[:d:Q12899847|Evan Evans Bevan]]''
|
|
|
|-
| style='text-align:right'| 4044
| ''[[:d:Q12977437|Kay Green]]''
|
|
|
|-
| style='text-align:right'| 4045
| ''[[:d:Q13107212|Jones Hewson]]''
| [[Coadan:Jones Hewson (1874–1902) as Luiz in The Gondoliers.png|center|128px]]
|
|
|-
| style='text-align:right'| 4046
| ''[[:d:Q13125440|Aled Rhys Wiliam]]''
|
|
|
|-
| style='text-align:right'| 4047
| ''[[:d:Q13125471|Alun Llywelyn-Williams]]''
|
|
|
|-
| style='text-align:right'| 4048
| ''[[:d:Q13125672|Benjamin Thomas Hopkins]]''
|
|
|
|-
| style='text-align:right'| 4049
| ''[[:d:Q13125957|Ben Davies]]''
| [[Coadan:Ben Davies, Pant-teg.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4050
| ''[[:d:Q13125985|Benjamin Francis]]''
| [[Coadan:Portrait of The Revd. Benjamin Francis, A.M (4670733) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4051
| ''[[:d:Q13125995|Beryl Williams]]''
| [[Coadan:Yr actores Beryl Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4052
| ''[[:d:Q13126247|Brinley Rees]]''
|
|
|
|-
| style='text-align:right'| 4053
| ''[[:d:Q13126322|Bryan Martin Davies]]''
|
|
|
|-
| style='text-align:right'| 4054
| ''[[:d:Q13126457|Cadwallon ap Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 4055
| ''[[:d:Q13126875|Cassie Jane Davies]]''
|
|
|
|-
| style='text-align:right'| 4056
| ''[[:d:Q13127753|D. J. Davies]]''
|
|
|
|-
| style='text-align:right'| 4057
| ''[[:d:Q13127766|Dafydd Nicolas]]''
|
|
|
|-
| style='text-align:right'| 4058
| ''[[:d:Q13127784|Dan Isaac Davies]]''
| [[Coadan:Portrait of Dan Isaac Davies (4669990).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4059
| ''[[:d:Q13127794|D. Simon Evans]]''
|
|
|
|-
| style='text-align:right'| 4060
| ''[[:d:Q13127792|Daniel Rees]]''
| [[Coadan:Daniel Rees (Cymeriadau TGJ).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4061
| ''[[:d:Q13127810|David Davies]]''
| [[Coadan:Portrait of David (Dewi Emlyn) Davies (4673062) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4062
| ''[[:d:Q13127814|David Ffrangcon-Davies]]''
| [[Coadan:David Ffrangcon Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4063
| ''[[:d:Q13127818|David Mathew Williams]]''
|
|
|
|-
| style='text-align:right'| 4064
| ''[[:d:Q13127816|David Rowlands]]''
| [[Coadan:Revd David Rowlands (Dewi Mon, 1836-1907) NLW3361826.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4065
| ''[[:d:Q13127822|David Myrddin Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4066
| ''[[:d:Q13127823|David Miall Edwards]]''
| [[Coadan:David-Miall-Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4067
| ''[[:d:Q13127821|David Tecwyn Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4068
| ''[[:d:Q13127867|Dewi Emrys]]''
| [[Coadan:National Eisteddfod of Wales 1948, Bridgend (1585533).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4069
| ''[[:d:Q13127871|Dewi Nantbrân]]''
|
|
|
|-
| style='text-align:right'| 4070
| ''[[:d:Q13127868|Dewi 'Pws' Morris]]''
| [[Coadan:Ras yr Iaith dau ddraig a Dewi Pws 2016 Cei Newydd (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4071
| ''[[:d:Q13128018|Dyfnallt Morgan]]''
| [[Coadan:Dyfnallt Morgan after visiting Klogenfurt in Holland where he worked with refugees in 1945 (1557527).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4072
| ''[[:d:Q13128086|Edward David Hughes]]''
|
|
|
|-
| style='text-align:right'| 4073
| ''[[:d:Q13128085|Edward Charles]]''
|
|
|
|-
| style='text-align:right'| 4074
| ''[[:d:Q13128122|Eigra Lewis Roberts]]''
|
|
|
|-
| style='text-align:right'| 4075
| ''[[:d:Q13128224|Elena Puw Morgan]]''
| [[Coadan:Fl 1938 corwen elena puw morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4076
| ''[[:d:Q13128258|Emyr Daniel]]''
|
|
|
|-
| style='text-align:right'| 4077
| ''[[:d:Q13128262|Emyr Davies]]''
| [[Coadan:Hugh Emyr Davies (Emyr).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4078
| ''[[:d:Q13128283|Enid Pierce Roberts]]''
|
|
|
|-
| style='text-align:right'| 4079
| ''[[:d:Q28047860|Harry Gould]]''
|
|
|
|-
| style='text-align:right'| 4080
| ''[[:d:Q28065152|Ron Howells]]''
|
|
|
|-
| style='text-align:right'| 4081
| ''[[:d:Q28091599|Trefor Beasley]]''
|
|
|
|-
| style='text-align:right'| 4082
| ''[[:d:Q28115294|Ellis Stanbury]]''
|
|
|
|-
| style='text-align:right'| 4083
| ''[[:d:Q28160608|Ivor Hughes]]''
|
|
|
|-
| style='text-align:right'| 4084
| ''[[:d:Q28308507|John Haydn Davies]]''
|
|
|
|-
| style='text-align:right'| 4085
| ''[[:d:Q28312981|Joseph Davies]]''
|
|
|
|-
| style='text-align:right'| 4086
| ''[[:d:Q28354969|Stewart Williams]]''
|
|
|
|-
| style='text-align:right'| 4087
| ''[[:d:Q28354972|Richard Elwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 4088
| ''[[:d:Q28356929|Ted Breeze Jones]]''
|
|
|
|-
| style='text-align:right'| 4089
| ''[[:d:Q28360693|Thomas Redvers Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 4090
| ''[[:d:Q28360696|Eric Sunderland]]''
|
|
|
|-
| style='text-align:right'| 4091
| ''[[:d:Q28360706|William (John) Morgan]]''
|
|
|
|-
| style='text-align:right'| 4092
| ''[[:d:Q28360712|Thomas Evan Watkins]]''
|
|
|
|-
| style='text-align:right'| 4093
| ''[[:d:Q28360713|John Jenkyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 4094
| ''[[:d:Q28360720|Henry John Randall]]''
|
|
|
|-
| style='text-align:right'| 4095
| ''[[:d:Q28360726|David Roberts]]''
|
|
|
|-
| style='text-align:right'| 4096
| ''[[:d:Q28360731|David John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4097
| ''[[:d:Q28360736|Robert Roberts]]''
| [[Coadan:Bob Roberts, Tai'r Felin, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4098
| ''[[:d:Q28360740|George Isaac Thomas]]''
|
|
|
|-
| style='text-align:right'| 4099
| ''[[:d:Q28360744|William Phillip Thomas]]''
|
|
|
|-
| style='text-align:right'| 4100
| ''[[:d:Q28360754|Thomas Glyn Walters]]''
|
|
|
|-
| style='text-align:right'| 4101
| ''[[:d:Q28360757|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4102
| ''[[:d:Q28360762|Robert John Williams]]''
|
|
|
|-
| style='text-align:right'| 4103
| ''[[:d:Q28360793|Alice Matilda Langland Williams]]''
|
|
|
|-
| style='text-align:right'| 4104
| ''[[:d:Q28360830|Thomas Oswald Williams]]''
|
|
|
|-
| style='text-align:right'| 4105
| ''[[:d:Q28360838|William Owen]]''
|
|
|
|-
| style='text-align:right'| 4106
| ''[[:d:Q28360844|Edward Walter Rees]]''
|
|
|
|-
| style='text-align:right'| 4107
| ''[[:d:Q28360848|Howell Roberts]]''
|
|
|
|-
| style='text-align:right'| 4108
| ''[[:d:Q28360853|Peter Williams]]''
| [[Coadan:Rev. Peter Williams (Pedr Hir), Liverpool (5293994).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4109
| ''[[:d:Q28360856|Thomas Williams]]''
| [[Coadan:Wynebddalen Hanes Bywyd Thomas Williams, Capelulo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4110
| ''[[:d:Q28360862|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 4111
| ''[[:d:Q28360860|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4112
| ''[[:d:Q28360874|Lewis Meredith]]''
|
|
|
|-
| style='text-align:right'| 4113
| ''[[:d:Q28360879|David Michael]]''
|
|
|
|-
| style='text-align:right'| 4114
| ''[[:d:Q28360881|Evan Morgan]]''
|
|
|
|-
| style='text-align:right'| 4115
| ''[[:d:Q28360885|John Rhys Morgan]]''
| [[Coadan:Portrait of John Rhys Morgan, D.D (4670414).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4116
| ''[[:d:Q28360890|William Morgan]]''
|
|
|
|-
| style='text-align:right'| 4117
| ''[[:d:Q28360900|William Moses]]''
|
|
|
|-
| style='text-align:right'| 4118
| ''[[:d:Q28360904|Owen Griffith Owen]]''
| [[Coadan:Owen Griffith Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4119
| ''[[:d:Q28360913|Richard Jones Owen]]''
| [[Coadan:Richard Jones Owen, 'Glaslyn' (5449759) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4120
| ''[[:d:Q28360918|William Owen]]''
|
|
|
|-
| style='text-align:right'| 4121
| ''[[:d:Q28360916|Robert Owen]]''
| [[Coadan:Robert Owen (Eyron Gwyllt Walia).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4122
| ''[[:d:Q28360923|William Owen]]''
|
|
|
|-
| style='text-align:right'| 4123
| ''[[:d:Q28361196|William Owen]]''
| [[Coadan:Portrait of W. Owen Prysgol (4670429).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4124
| ''[[:d:Q28361200|David Parry]]''
|
|
|
|-
| style='text-align:right'| 4125
| ''[[:d:Q28361205|Harri Parri]]''
|
|
|
|-
| style='text-align:right'| 4126
| ''[[:d:Q28361334|Robert Parry]]''
| [[Coadan:Portrait of Robert Parry neu Robyn Ddu Eryri (4673403).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4127
| ''[[:d:Q28361336|Thomas Parry]]''
|
|
|
|-
| style='text-align:right'| 4128
| ''[[:d:Q28361346|Benjamin Price]]''
| [[Coadan:Portrait of Benjamin Price Cymro Bach (4671821).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4129
| ''[[:d:Q28361349|David Price]]''
|
|
|
|-
| style='text-align:right'| 4130
| ''[[:d:Q28361353|Thomas Walter Price]]''
|
|
|
|-
| style='text-align:right'| 4131
| ''[[:d:Q28361357|John Price]]''
|
|
|
|-
| style='text-align:right'| 4132
| ''[[:d:Q28361361|John William Prichard]]''
|
|
|
|-
| style='text-align:right'| 4133
| ''[[:d:Q28361371|William Thomas Rees]]''
| [[Coadan:Portrait of William Thomas Rees, 'Alaw Ddu' (4670485).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4134
| ''[[:d:Q28361374|Jonathan Owain Reynolds]]''
|
|
|
|-
| style='text-align:right'| 4135
| ''[[:d:Q28361384|John Richards]]''
|
|
|
|-
| style='text-align:right'| 4136
| ''[[:d:Q28361388|Griffith Roberts]]''
|
|
|
|-
| style='text-align:right'| 4137
| ''[[:d:Q28361398|John Roberts]]''
| [[Coadan:Portrait of John Roberts, harpist, of Newtown (4670503) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4138
| ''[[:d:Q28361402|John John Roberts]]''
| [[Coadan:Iolo Caernarfon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4139
| ''[[:d:Q28361407|Richard Roberts]]''
|
|
|
|-
| style='text-align:right'| 4140
| ''[[:d:Q28361405|Lewis Roberts]]''
|
|
|
|-
| style='text-align:right'| 4141
| ''[[:d:Q28361414|Thomas Rowland Roberts]]''
| [[Coadan:Thomas Rowland Roberts (Asaph).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4142
| ''[[:d:Q28361412|Richard Roberts]]''
| [[Coadan:Richard Gwylfa Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4143
| ''[[:d:Q28361417|Thomas Roberts]]''
| [[Coadan:Thomas Roberts, Scorpion (4974950).png|center|128px]]
|
|
|-
| style='text-align:right'| 4144
| ''[[:d:Q28361425|David Rowland(S)]]''
|
|
|
|-
| style='text-align:right'| 4145
| ''[[:d:Q28361431|Henry Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4146
| ''[[:d:Q28361434|David Samuel]]''
| [[Coadan:David Samuel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4147
| ''[[:d:Q28361438|David Saunders]]''
|
|
|
|-
| style='text-align:right'| 4148
| ''[[:d:Q28361446|David Rhys Stephen]]''
| [[Coadan:Portrait of D. Rhys Stephen (4672025) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4149
| ''[[:d:Q28361448|Robert David Thomas]]''
| [[Coadan:Portrait of R. D. Thomas (4672710).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4150
| ''[[:d:Q28361459|Thomas Emlyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 4151
| ''[[:d:Q28361456|Edward Thomas]]''
| [[Coadan:Cochfarf.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4152
| ''[[:d:Q28361462|Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 4153
| ''[[:d:Q28361464|Hugh Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 4154
| ''[[:d:Q28361471|Jenkin Thomas]]''
|
|
|
|-
| style='text-align:right'| 4155
| ''[[:d:Q28361468|Francis Thomas]]''
|
|
|
|-
| style='text-align:right'| 4156
| ''[[:d:Q28361479|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 4157
| ''[[:d:Q28361476|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 4158
| ''[[:d:Q28361482|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 4159
| ''[[:d:Q28361486|John Thomas]]''
| [[Coadan:Portrait of Mr. John Thomas (Eifionydd) (4671487).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4160
| ''[[:d:Q28361492|Arthur Simon Thomas]]''
|
|
|
|-
| style='text-align:right'| 4161
| ''[[:d:Q28361498|Rowland Walter]]''
|
|
|
|-
| style='text-align:right'| 4162
| ''[[:d:Q28361501|Abraham Williams]]''
|
|
|
|-
| style='text-align:right'| 4163
| ''[[:d:Q28361504|Robert Arthur Williams]]''
| [[Coadan:Robert Arthur Williams (Berw).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4164
| ''[[:d:Q28361511|John Ceulanydd Williams]]''
| [[Coadan:John Williams (Ceulanydd).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4165
| ''[[:d:Q28361508|Benjamin Williams]]''
| [[Coadan:Portrait of 'Gwynionydd' (4672166).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4166
| ''[[:d:Q28361514|David Williams]]''
|
|
|
|-
| style='text-align:right'| 4167
| ''[[:d:Q28361519|Robert Herbert Williams]]''
| [[Coadan:Portrait of R. H. Williams, Menai Bridge (Corfanydd) (4671218).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4168
| ''[[:d:Q28361522|Hugh Williams]]''
| [[Coadan:H Cernyw Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4169
| ''[[:d:Q28361531|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4170
| ''[[:d:Q28361528|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4171
| ''[[:d:Q28361538|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4172
| ''[[:d:Q28361542|John Williams]]''
| [[Coadan:John Williams (Gorfyniawc o Arfon, 1814-78) NLW3362955.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4173
| ''[[:d:Q28361547|Lewis William(S)]]''
| [[Coadan:Lewis William.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4174
| ''[[:d:Q28361685|Dafydd Rhys Williams]]''
| [[Coadan:Dafydd Rhys Williams (Index).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4175
| ''[[:d:Q28361688|Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 4176
| ''[[:d:Q28361692|Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 4177
| ''[[:d:Q20732790|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4178
| ''[[:d:Q20732794|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4179
| ''[[:d:Q20732795|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4180
| ''[[:d:Q20732793|David Davies]]''
| [[Coadan:Portrait of David Davies, Swansea (4669729).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4181
| ''[[:d:Q20732798|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4182
| ''[[:d:Q20732799|David Davies Evans]]''
|
|
|
|-
| style='text-align:right'| 4183
| ''[[:d:Q20732796|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4184
| ''[[:d:Q20732797|David Davies]]''
|
|
|
|-
| style='text-align:right'| 4185
| ''[[:d:Q20732805|David Eirwyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 4186
| ''[[:d:Q20732811|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4187
| ''[[:d:Q20732809|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4188
| ''[[:d:Q20732815|David Evans]]''
| [[Coadan:David Evans, Caerfyrddin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4189
| ''[[:d:Q20732812|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4190
| ''[[:d:Q20732818|David Evans]]''
| [[Coadan:Dewi Haran (David Evans) (1812–1885) (gcf10113).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4191
| ''[[:d:Q20732819|David Evans]]''
| [[Coadan:Portrait of David Evans 'Dewi Dawel' (4674375).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4192
| ''[[:d:Q20732816|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4193
| ''[[:d:Q20732817|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4194
| ''[[:d:Q20732822|David Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4195
| ''[[:d:Q20732820|David Gravell]]''
|
|
|
|-
| style='text-align:right'| 4196
| ''[[:d:Q20732821|David Griffith]]''
| [[Coadan:David Griffith, Bethel, Arfon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4197
| ''[[:d:Q20732826|David Herbert]]''
|
|
|
|-
| style='text-align:right'| 4198
| ''[[:d:Q20732827|David Howell]]''
| [[Coadan:D Howells (print) NLW3361223.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4199
| ''[[:d:Q20732824|David Harries]]''
|
|
|
|-
| style='text-align:right'| 4200
| ''[[:d:Q20732830|David James]]''
|
|
|
|-
| style='text-align:right'| 4201
| ''[[:d:Q20732835|David Jehu]]''
|
|
|
|-
| style='text-align:right'| 4202
| ''[[:d:Q20732833|David James Williams]]''
| [[Coadan:David James Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4203
| ''[[:d:Q20732838|David John Tawe Jones]]''
|
|
|
|-
| style='text-align:right'| 4204
| ''[[:d:Q20732839|David John Williams]]''
|
|
|
|-
| style='text-align:right'| 4205
| ''[[:d:Q20732842|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4206
| ''[[:d:Q20732847|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4207
| ''[[:d:Q20732844|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4208
| ''[[:d:Q20732845|David Jones]]''
| [[Coadan:Portrait of David Jones, Holywell, Flintshire (4673329) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4209
| ''[[:d:Q20732850|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4210
| ''[[:d:Q20732851|David Joshua Davies]]''
|
|
|
|-
| style='text-align:right'| 4211
| ''[[:d:Q20732848|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4212
| ''[[:d:Q20732849|David Jones]]''
| [[Coadan:Portrait of Rev. David Jones, Treborth (4670294).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4213
| ''[[:d:Q20732854|David Lewis Evans]]''
|
|
|
|-
| style='text-align:right'| 4214
| ''[[:d:Q20732855|David Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 4215
| ''[[:d:Q20732852|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 4216
| ''[[:d:Q20732853|David Lewis]]''
| [[Coadan:Barnwr (Judge) David Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4217
| ''[[:d:Q20732859|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4218
| ''[[:d:Q20732856|David Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 4219
| ''[[:d:Q20732857|David Lewis Wooding]]''
|
|
|
|-
| style='text-align:right'| 4220
| ''[[:d:Q20732862|David Lloyd Isaac]]''
|
|
|
|-
| style='text-align:right'| 4221
| ''[[:d:Q20732863|David Lloyd Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4222
| ''[[:d:Q20732860|David Lloyd Davies]]''
|
|
|
|-
| style='text-align:right'| 4223
| ''[[:d:Q20732861|David Lloyd Evans]]''
|
|
|
|-
| style='text-align:right'| 4224
| ''[[:d:Q20732866|David Manuel]]''
|
|
|
|-
| style='text-align:right'| 4225
| ''[[:d:Q20732867|David Marks]]''
|
|
|
|-
| style='text-align:right'| 4226
| ''[[:d:Q20732870|David Morgan]]''
| [[Coadan:Portrait of D. Morgan, Machynlleth (4669852).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4227
| ''[[:d:Q20732868|David Mervyn Himbury]]''
|
|
|
|-
| style='text-align:right'| 4228
| ''[[:d:Q20732874|David Morris]]''
|
|
|
|-
| style='text-align:right'| 4229
| ''[[:d:Q20732872|David Morgan Lewis]]''
|
|
|
|-
| style='text-align:right'| 4230
| ''[[:d:Q20732878|David Parry]]''
|
|
|
|-
| style='text-align:right'| 4231
| ''[[:d:Q20732876|David Onllwyn Brace]]''
| [[Coadan:Parch D Onllwyn Brace.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4232
| ''[[:d:Q20732882|David Pugh Evans]]''
|
|
|
|-
| style='text-align:right'| 4233
| ''[[:d:Q20732880|David Philips]]''
|
|
|
|-
| style='text-align:right'| 4234
| ''[[:d:Q20732881|David Phillips]]''
| [[Coadan:Reverend David Phillips.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4235
| ''[[:d:Q20732886|David Richards]]''
|
|
|
|-
| style='text-align:right'| 4236
| ''[[:d:Q20732887|David Robert Daniel]]''
| [[Coadan:D R Daniel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4237
| ''[[:d:Q20732884|David Rhys Phillips]]''
|
|
|
|-
| style='text-align:right'| 4238
| ''[[:d:Q20732891|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 4239
| ''[[:d:Q20732888|David Stephen Davies]]''
|
|
|
|-
| style='text-align:right'| 4240
| ''[[:d:Q20732889|David Tecwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 4241
| ''[[:d:Q20732894|David Tyssil Evans]]''
|
|
|
|-
| style='text-align:right'| 4242
| ''[[:d:Q20732893|David Tudor Evans]]''
| [[Coadan:D Tudor Evans (ap Tudor).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4243
| ''[[:d:Q20732898|David Williams]]''
| [[Coadan:Portrait of David Williams, Troedwhiwdalar (4672170).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4244
| ''[[:d:Q20732899|David Wyre Lewis]]''
|
|
|
|-
| style='text-align:right'| 4245
| ''[[:d:Q20732896|David William Lewis]]''
|
|
|
|-
| style='text-align:right'| 4246
| ''[[:d:Q20732903|William Davies]]''
| [[Coadan:William Davies (Western Mail).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4247
| ''[[:d:Q20732900|David Charles]]''
|
|
|
|-
| style='text-align:right'| 4248
| ''[[:d:Q20732911|Ebenezer Gwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 4249
| ''[[:d:Q20732914|Ebenezer Morris]]''
| [[Coadan:Portrait of Ebenzr. Morris late of Cardiganshire (4669857).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4250
| ''[[:d:Q20732915|Ebenezer Rees]]''
| [[Coadan:Ebenezer Rees (1848-1908).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4251
| ''[[:d:Q20732919|Edmund David Jones]]''
| [[Coadan:Edmund David Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4252
| ''[[:d:Q20732916|Edgar Jones]]''
|
|
|
|-
| style='text-align:right'| 4253
| ''[[:d:Q20732917|Edgar William Jones]]''
|
|
|
|-
| style='text-align:right'| 4254
| ''[[:d:Q20732922|Edmund Osborne Jones]]''
|
|
|
|-
| style='text-align:right'| 4255
| ''[[:d:Q20732926|Edward Barnes]]''
|
|
|
|-
| style='text-align:right'| 4256
| ''[[:d:Q20732925|Edward Anwyl]]''
| [[Coadan:Edward Anwyl (1786-1852).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4257
| ''[[:d:Q20732930|Edward Cynolwyn Pugh]]''
|
|
|
|-
| style='text-align:right'| 4258
| ''[[:d:Q20732931|Edward David Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4259
| ''[[:d:Q20732928|Edward Carnes]]''
|
|
|
|-
| style='text-align:right'| 4260
| ''[[:d:Q20732934|Edward Eddie Thomas]]''
|
|
|
|-
| style='text-align:right'| 4261
| ''[[:d:Q20732935|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 4262
| ''[[:d:Q20732939|Edward Gittins]]''
|
|
|
|-
| style='text-align:right'| 4263
| ''[[:d:Q20732936|Edward Edwards]]''
| [[Coadan:Edward Edwards (Pencerdd Ceredigion, 1816-97) NLW3364548.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4264
| ''[[:d:Q20732937|Edward Ellis]]''
|
|
|
|-
| style='text-align:right'| 4265
| ''[[:d:Q20732942|Edward Hamer]]''
|
|
|
|-
| style='text-align:right'| 4266
| ''[[:d:Q20732943|Edward Harker]]''
|
|
|
|-
| style='text-align:right'| 4267
| ''[[:d:Q20732940|Edward Griffith]]''
| [[Coadan:Edward Griffith, Dolgellau.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4268
| ''[[:d:Q20732944|Edward Harri]]''
|
|
|
|-
| style='text-align:right'| 4269
| ''[[:d:Q20732950|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4270
| ''[[:d:Q20732955|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4271
| ''[[:d:Q20732952|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4272
| ''[[:d:Q20732959|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4273
| ''[[:d:Q20732962|Edward Matthews]]''
| [[Coadan:Revd Edward Matthews (1813-92) NLW3365363.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4274
| ''[[:d:Q20732963|Edward Meredith Price]]''
|
|
|
|-
| style='text-align:right'| 4275
| ''[[:d:Q20732960|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4276
| ''[[:d:Q20732961|Edward Laws]]''
|
|
|
|-
| style='text-align:right'| 4277
| ''[[:d:Q18535749|John Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 4278
| ''[[:d:Q18535754|Mei Jones]]''
|
|
|
|-
| style='text-align:right'| 4279
| ''[[:d:Q18535752|John William Jones]]''
| [[Coadan:John Williams Jones (Andronicus).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4280
| ''[[:d:Q18535753|Kenneth Glyn Jones]]''
|
|
|
|-
| style='text-align:right'| 4281
| ''[[:d:Q18535758|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 4282
| ''[[:d:Q18535756|Nesta Wyn Jones]]''
| [[Coadan:Nesta Wyn Jones (1546023).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4283
| ''[[:d:Q18535757|Rhydderch Jones]]''
|
|
|
|-
| style='text-align:right'| 4284
| ''[[:d:Q18535765|Thomas Levi]]''
| [[Coadan:Portrait of Thomas Levi (4670546) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4285
| ''[[:d:Q18535771|Lewis Haydn Lewis]]''
|
|
|
|-
| style='text-align:right'| 4286
| ''[[:d:Q18535773|Roger Lort]]''
|
|
|
|-
| style='text-align:right'| 4287
| ''[[:d:Q18535782|Robert Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4288
| ''[[:d:Q18535784|John Selwyn Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4289
| ''[[:d:Q18535799|Mari'r Fantell Wen]]''
|
|
|
|-
| style='text-align:right'| 4290
| ''[[:d:Q18535821|Dafydd Morris]]''
|
|
|
|-
| style='text-align:right'| 4291
| ''[[:d:Q18535845|Bob Owen, Croesor]]''
| [[Coadan:Bob Owen, Croesor, with his wife and some of his books (8469901287).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4292
| ''[[:d:Q18535853|John Parry]]''
| [[Coadan:Er cof am y diweddar Barch John Parry (Caer) .. NLW3364386.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4293
| ''[[:d:Q18535874|Stafford Prys]]''
|
|
|
|-
| style='text-align:right'| 4294
| ''[[:d:Q18535878|John Phillips]]''
| [[Coadan:Revd. John Phillips, Bangor (1810-67) NLW3362029.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4295
| ''[[:d:Q18535890|Thomas Mardy Rees]]''
| [[Coadan:T-Mardy-Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4296
| ''[[:d:Q18535888|Thomas Rees]]''
| [[Coadan:Thomas Rees Bala-Bangor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4297
| ''[[:d:Q18535889|Henry Rees]]''
| [[Coadan:Parch. Henry Rees, Lerpwl, 1798-1869.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4298
| ''[[:d:Q18535894|Melville Richards]]''
| [[Coadan:Professor Melville Richards beginning a series of articles on Welsh place names in Y Cymro (1508965).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4299
| ''[[:d:Q18535898|Absalom Roberts]]''
|
|
|
|-
| style='text-align:right'| 4300
| ''[[:d:Q18535896|Ellis Roberts]]''
| [[Coadan:Portrait of 'Ellis Wyn o Wyrfai' (4670499) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4301
| ''[[:d:Q18535908|Wynne Roberts]]''
|
|
|
|-
| style='text-align:right'| 4302
| ''[[:d:Q18535916|Robert John Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4303
| ''[[:d:Q18535939|Edward Samuel]]''
| [[Coadan:Portrait of Edward Samuel (4670191) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4304
| ''[[:d:Q18535942|Thomas Shankland]]''
|
|
|
|-
| style='text-align:right'| 4305
| ''[[:d:Q18535948|John Davies]]''
|
|
|
|-
| style='text-align:right'| 4306
| ''[[:d:Q18535980|Gwilym Tudur]]''
|
|
|
|-
| style='text-align:right'| 4307
| ''[[:d:Q18535994|Ernest Lewis Thomas]]''
|
|
|
|-
| style='text-align:right'| 4308
| ''[[:d:Q18535993|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 4309
| ''[[:d:Q18536007|Gareth F. Williams]]''
|
|
|
|-
| style='text-align:right'| 4310
| ''[[:d:Q18536009|Ifor Wyn Williams]]''
|
|
|
|-
| style='text-align:right'| 4311
| ''[[:d:Q18536013|John Roberts Williams]]''
| [[Coadan:John Roberts Williams, Editor of 'Y Cymro' (1457926).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4312
| ''[[:d:Q18536016|William Morgan Williams]]''
|
|
|
|-
| style='text-align:right'| 4313
| ''[[:d:Q18536031|Tom Beynon]]''
|
|
|
|-
| style='text-align:right'| 4314
| ''[[:d:Q18536056|Ben Bowen]]''
| [[Coadan:Ben Bowen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4315
| ''[[:d:Q18536061|Griffith Evans]]''
| [[Coadan:Portrait of Griffith Evans (1835-1935) Wellcome L0002989.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4316
| ''[[:d:Q18546110|Arthur Roberts]]''
|
|
|
|-
| style='text-align:right'| 4317
| ''[[:d:Q18546445|David Emlyn Evans]]''
| [[Coadan:Portrait of D. Emlyn Evans (4673959).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4318
| ''[[:d:Q18546621|John Roland Phillips]]''
|
|
|
|-
| style='text-align:right'| 4319
| ''[[:d:Q18546647|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4320
| ''[[:d:Q18559339|Valerie Gearon]]''
|
|
|
|-
| style='text-align:right'| 4321
| ''[[:d:Q18559698|Benjamin Davies]]''
| [[Coadan:Benjamin Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4322
| ''[[:d:Q18559723|Edward Le Davis]]''
|
|
|
|-
| style='text-align:right'| 4323
| ''[[:d:Q18559733|Frederick Brundrett]]''
|
|
|
|-
| style='text-align:right'| 4324
| ''[[:d:Q18559825|Marmaduke Matthews]]''
|
|
|
|-
| style='text-align:right'| 4325
| ''[[:d:Q18559856|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 4326
| ''[[:d:Q18559864|Sarah Matthews]]''
|
|
|
|-
| style='text-align:right'| 4327
| ''[[:d:Q18559909|William Davis]]''
|
|
|
|-
| style='text-align:right'| 4328
| ''[[:d:Q18572211|Alice Williams]]''
|
|
|
|-
| style='text-align:right'| 4329
| ''[[:d:Q18572230|Ann Davies]]''
|
|
|
|-
| style='text-align:right'| 4330
| ''[[:d:Q18572258|Anne Penny]]''
|
|
|
|-
| style='text-align:right'| 4331
| ''[[:d:Q18576619|Kathleen Lloyd Jones]]''
| [[Coadan:Kathleen Lloyd Jones by unknown in 1920s.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4332
| ''[[:d:Q18576682|Margaret Davies]]''
|
|
|
|-
| style='text-align:right'| 4333
| ''[[:d:Q18576757|Michael Williams]]''
|
|
|
|-
| style='text-align:right'| 4334
| ''[[:d:Q18576797|Nun Morgan Harry]]''
| [[Coadan:Portrait of Morgan Harry, Banbury, Oxfordshire (4674767).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4335
| ''[[:d:Q18577073|Thomas Gruffydd]]''
| [[Coadan:Thomas Gruffydd (1815 - 30 Awst 1887) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4336
| ''[[:d:Q18588991|Henry Stanhope Sloman]]''
|
|
|
|-
| style='text-align:right'| 4337
| ''[[:d:Q18593184|Jenkin Jones]]''
|
|
|
|-
| style='text-align:right'| 4338
| ''[[:d:Q18603715|Bedo Hafesb]]''
|
|
|
|-
| style='text-align:right'| 4339
| ''[[:d:Q18627269|Tudor Owen]]''
| [[Coadan:Tudor Owen in Perils of the Jungle.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4340
| ''[[:d:Q18638518|David Morrell]]''
|
|
|
|-
| style='text-align:right'| 4341
| ''[[:d:Q18638752|Gwyn Parry]]''
| [[Coadan:Sharon Norman and Gwyn Parry preparing for Cwmni Theatr Cymru's performance of Persi Rygarug (1530487).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4342
| ''[[:d:Q18640326|Les Boulter]]''
|
|
|
|-
| style='text-align:right'| 4343
| ''[[:d:Q18640419|T. H. Thomas]]''
| [[Coadan:TH Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4344
| ''[[:d:Q18641449|Dick Hall]]''
|
|
|
|-
| style='text-align:right'| 4345
| ''[[:d:Q18641986|Edward Abel]]''
|
|
|
|-
| style='text-align:right'| 4346
| ''[[:d:Q18645677|Edwin Bickerstaff]]''
|
|
|
|-
| style='text-align:right'| 4347
| ''[[:d:Q18646016|Herbert Buckler]]''
|
|
|
|-
| style='text-align:right'| 4348
| ''[[:d:Q18658485|David Erwyd Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4349
| ''[[:d:Q18670941|Dafydd William]]''
|
|
|
|-
| style='text-align:right'| 4350
| ''[[:d:Q18670974|David Hughes]]''
| [[Coadan:Portrait of D. Hughes, B.A., Tredegar (4672914).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4351
| ''[[:d:Q18670980|David Johns]]''
| [[Coadan:David Johns, Madagasgar.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4352
| ''[[:d:Q18670987|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4353
| ''[[:d:Q18670989|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4354
| ''[[:d:Q18671020|Edmund Jones]]''
|
|
|
|-
| style='text-align:right'| 4355
| ''[[:d:Q18671358|Griffith Owen]]''
|
|
|
|-
| style='text-align:right'| 4356
| ''[[:d:Q13129361|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4357
| ''[[:d:Q13129368|Josiah Jones]]''
|
|
|
|-
| style='text-align:right'| 4358
| ''[[:d:Q13129369|Josiah Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 4359
| ''[[:d:Q13129508|Leah Owen]]''
|
|
|
|-
| style='text-align:right'| 4360
| ''[[:d:Q13129535|Lewis William Lewis]]''
| [[Coadan:Lewis William Lewis (Llew Llwyfo, 1831-1901) NLW3364260.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4361
| ''[[:d:Q13129533|Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 4362
| ''[[:d:Q13129538|Lewis Hopkin]]''
|
|
|
|-
| style='text-align:right'| 4363
| ''[[:d:Q13129541|Lewis Holme Lewis]]''
|
|
|
|-
| style='text-align:right'| 4364
| ''[[:d:Q13130248|Moses Glyn Jones]]''
| [[Coadan:Bro Myrddin National Eisteddfod, 1974 (1551282).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4365
| ''[[:d:Q13130254|Morys Clynnog]]''
|
|
|
|-
| style='text-align:right'| 4366
| ''[[:d:Q13130283|Muriel Drinkwater]]''
|
|
|
|-
| style='text-align:right'| 4367
| ''[[:d:Q13130336|Myron Wyn Evans]]''
|
|
|
|-
| style='text-align:right'| 4368
| ''[[:d:Q13130346|Nans Jones]]''
|
|
|
|-
| style='text-align:right'| 4369
| ''[[:d:Q13130551|Owain Meirion]]''
|
|
|
|-
| style='text-align:right'| 4370
| ''[[:d:Q13130554|Owen Jones]]''
| [[Coadan:Portrait of Owen Jones, 'Meudwy Môn' (4670352) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4371
| ''[[:d:Q13130555|Owen Gruffydd]]''
| [[Coadan:Owen Gruffydd.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4372
| ''[[:d:Q13130558|Owen Owen]]''
|
|
|
|-
| style='text-align:right'| 4373
| ''[[:d:Q13130556|Owen Williams]]''
| [[Coadan:Owen Williams (Owain Gwyrfai, 1790-1874) NLW3362699.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4374
| ''[[:d:Q13130596|Paul Panton]]''
| [[Coadan:Portrait of Paul Panton Esqre. and his chestnut gelding 'The Marquiss' (4670430).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4375
| ''[[:d:Q13130737|Peter Jones]]''
| [[Coadan:Portrait of Peter Jones, Bard, Llynlleifiad (4672939) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4376
| ''[[:d:Q13130915|R. Gerallt Jones]]''
|
|
|
|-
| style='text-align:right'| 4377
| ''[[:d:Q13130916|Ronald Lockley]]''
|
|
|
|-
| style='text-align:right'| 4378
| ''[[:d:Q13131044|Rhosier Smyth]]''
|
|
|
|-
| style='text-align:right'| 4379
| ''[[:d:Q13131071|Rhydwen Williams]]''
|
|
|
|-
| style='text-align:right'| 4380
| ''[[:d:Q13131078|Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 4381
| ''[[:d:Q13131094|Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 4382
| ''[[:d:Q13131102|Robert Alun Roberts]]''
|
|
|
|-
| style='text-align:right'| 4383
| ''[[:d:Q13131111|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 4384
| ''[[:d:Q13131118|Robyn Léwis]]''
|
|
|
|-
| style='text-align:right'| 4385
| ''[[:d:Q13131119|Robin Williams]]''
| [[Coadan:Rev Robin Williams advising on renovations at Capel Gorphwysa, Penrhyndeudraeth (1492299).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4386
| ''[[:d:Q13131210|Sarah Jacob]]''
| [[Coadan:Sarah jacob.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4387
| ''[[:d:Q18671495|Hugh Owen]]''
|
|
|
|-
| style='text-align:right'| 4388
| ''[[:d:Q18671555|James Gooden]]''
|
|
|
|-
| style='text-align:right'| 4389
| ''[[:d:Q18671762|John Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4390
| ''[[:d:Q18671795|John Harris]]''
|
|
|
|-
| style='text-align:right'| 4391
| ''[[:d:Q18671846|John Howell]]''
|
|
|
|-
| style='text-align:right'| 4392
| ''[[:d:Q18671850|John Hughes]]''
| [[Coadan:John Hughes (1876-1843).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4393
| ''[[:d:Q18671851|John Hughes]]''
| [[Coadan:Venble John Hughes, Archdeacon of Cardigan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4394
| ''[[:d:Q18671852|John Hughes]]''
| [[Coadan:Rev. John Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4395
| ''[[:d:Q18671895|John Jones]]''
|
|
|
|-
| style='text-align:right'| 4396
| ''[[:d:Q18671893|John Jones]]''
|
|
|
|-
| style='text-align:right'| 4397
| ''[[:d:Q18671898|John Jones]]''
|
|
|
|-
| style='text-align:right'| 4398
| ''[[:d:Q18671990|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4399
| ''[[:d:Q18671991|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4400
| ''[[:d:Q18672119|Richard Lloyd]]''
| [[Coadan:Portrait of Dr. Richardi Lloyd (4673365).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4401
| ''[[:d:Q18672131|Richard Mills]]''
|
|
|
|-
| style='text-align:right'| 4402
| ''[[:d:Q18672164|Robert Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4403
| ''[[:d:Q18672183|Robert Holland]]''
|
|
|
|-
| style='text-align:right'| 4404
| ''[[:d:Q18672266|Roger Pocock]]''
| [[Coadan:Henry Roger Ashwell Pocock (1865–1941).png|center|128px]]
|
|
|-
| style='text-align:right'| 4405
| ''[[:d:Q18672558|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 4406
| ''[[:d:Q18672598|Thomas Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 4407
| ''[[:d:Q13128322|Evan Jones]]''
| [[Coadan:Evan Jones (Ieuan Gwynedd).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4408
| ''[[:d:Q13128321|Evan Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 4409
| ''[[:d:Q13128327|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4410
| ''[[:d:Q13128324|Evan Davies]]''
| [[Coadan:Portrait of Evan Davies (4672729).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4411
| ''[[:d:Q13128330|Evan Keri Evans]]''
| [[Coadan:E Keri Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4412
| ''[[:d:Q13128331|Evan Evans]]''
| [[Coadan:Ieuan Glan Geirionydd.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4413
| ''[[:d:Q13128333|Evan Jenkin Evans]]''
|
|
|
|-
| style='text-align:right'| 4414
| ''[[:d:Q13128566|Gareth Wynn Jones]]''
|
|
|
|-
| style='text-align:right'| 4415
| ''[[:d:Q13128611|George Lewis]]''
|
|
|
|-
| style='text-align:right'| 4416
| ''[[:d:Q13128619|Geraint Jarman]]''
| [[Coadan:GeraintJarman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4417
| ''[[:d:Q13128662|Glyn M. Ashton]]''
|
|
|
|-
| style='text-align:right'| 4418
| ''[[:d:Q13128702|Goronwy ap Heilin]]''
|
|
|
|-
| style='text-align:right'| 4419
| ''[[:d:Q13128779|Gruffudd Llwyd]]''
|
|
|
|-
| style='text-align:right'| 4420
| ''[[:d:Q13128786|Gruffudd ab Ieuan ap Llywelyn Fychan]]''
|
|
|
|-
| style='text-align:right'| 4421
| ''[[:d:Q13128784|Gruffydd Young]]''
|
|
|
|-
| style='text-align:right'| 4422
| ''[[:d:Q13128794|Gruffudd ap Nicolas]]''
|
|
|
|-
| style='text-align:right'| 4423
| ''[[:d:Q13128800|Gruffydd Robert]]''
|
|
|
|-
| style='text-align:right'| 4424
| ''[[:d:Q13128857|Gwilym Owen]]''
|
|
|
|-
| style='text-align:right'| 4425
| ''[[:d:Q13128861|Gwilym Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 4426
| ''[[:d:Q13129135|Horace Charles Jones]]''
|
|
|
|-
| style='text-align:right'| 4427
| ''[[:d:Q13129158|Hugh Bevan]]''
|
|
|
|-
| style='text-align:right'| 4428
| ''[[:d:Q13129159|Hugh Evans]]''
| [[Coadan:Hugh Evans Cwm eithin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4429
| ''[[:d:Q13129160|Hugh Brython Hughes]]''
|
|
|
|-
| style='text-align:right'| 4430
| ''[[:d:Q13129166|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 4431
| ''[[:d:Q13129165|Hugh Hughes]]''
| [[Coadan:Hugh Hughes (Hugh Tegai, 1805-64) (print) NLW3361210.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4432
| ''[[:d:Q13129169|Hugh Hughes]]''
|
|
|
|-
| style='text-align:right'| 4433
| ''[[:d:Q13129177|Hugh Hughes]]''
|
|
|
|-
| style='text-align:right'| 4434
| ''[[:d:Q13129194|Huw Jones]]''
|
|
|
|-
| style='text-align:right'| 4435
| ''[[:d:Q13129200|Huw Llwyd]]''
|
|
|
|-
| style='text-align:right'| 4436
| ''[[:d:Q13129207|Hydwedd Boyer]]''
|
|
|
|-
| style='text-align:right'| 4437
| ''[[:d:Q13129235|Idwal Jones]]''
|
|
|
|-
| style='text-align:right'| 4438
| ''[[:d:Q13129237|Idris Foster]]''
| [[Coadan:Three prominent Welshmen, Ernest Roberts, Sir Idris Foster and the folk-singer Elfed Lewis (1544715).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4439
| ''[[:d:Q13129262|Ioan Bowen Rees]]''
|
|
|
|-
| style='text-align:right'| 4440
| ''[[:d:Q13129267|Iolo Ceredig Jones]]''
| [[Coadan:Iolo Ceredig Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4441
| ''[[:d:Q13129264|John Jenkin]]''
|
|
|
|-
| style='text-align:right'| 4442
| ''[[:d:Q13129276|Isaac Carter]]''
|
|
|
|-
| style='text-align:right'| 4443
| ''[[:d:Q13129280|Isaac Hughes]]''
|
|
|
|-
| style='text-align:right'| 4444
| ''[[:d:Q13129281|Isaac Foulkes]]''
| [[Coadan:Mr. Isaac Foulkes (Llyfrbryf) ganwyd Tachwedd 9fed, 1836 ; bu farw Tachwedd 2il, 1904 (5294020).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4445
| ''[[:d:Q13129291|J. Brynach Davies]]''
|
|
|
|-
| style='text-align:right'| 4446
| ''[[:d:Q13129292|Iwan Llwyd]]''
|
|
|
|-
| style='text-align:right'| 4447
| ''[[:d:Q13129299|Jane Hughes]]''
|
|
|
|-
| style='text-align:right'| 4448
| ''[[:d:Q13129296|James Spinther James]]''
| [[Coadan:James Spinther James.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4449
| ''[[:d:Q13129297|James Nicholas]]''
|
|
|
|-
| style='text-align:right'| 4450
| ''[[:d:Q13129300|Jane Cave]]''
| [[Coadan:Jane Cave from her book.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4451
| ''[[:d:Q13129307|Jenkin Morgan Edwards]]''
|
|
|
|-
| style='text-align:right'| 4452
| ''[[:d:Q13129318|John Ambrose Lloyd]]''
| [[Coadan:John Ambrose Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4453
| ''[[:d:Q13129319|John Dafydd]]''
|
|
|
|-
| style='text-align:right'| 4454
| ''[[:d:Q13129322|John Elwyn Jones]]''
| [[Coadan:John Elwyn Jones (1939).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4455
| ''[[:d:Q13129321|John Barnard Jenkins]]''
| [[Coadan:John-Jenkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4456
| ''[[:d:Q13129327|John Griffith Williams]]''
| [[Coadan:John Griffith Williams, the author and carpenter from Cricieth (1511536).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4457
| ''[[:d:Q13129328|John Geraint Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4458
| ''[[:d:Q13129334|John Humphreys Parry]]''
|
|
|
|-
| style='text-align:right'| 4459
| ''[[:d:Q13129335|John Griffith]]''
| [[Coadan:John Griffith (Y Gohebydd, 1821-77) NLW3365401.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4460
| ''[[:d:Q13129332|John Gruffydd Moelwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 4461
| ''[[:d:Q13129338|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4462
| ''[[:d:Q13129342|John Parry]]''
| [[Coadan:Dr John Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4463
| ''[[:d:Q13129341|John Lloyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 4464
| ''[[:d:Q13129347|John Owen Griffith]]''
|
|
|
|-
| style='text-align:right'| 4465
| ''[[:d:Q13129344|John Robert Pryse]]''
|
|
|
|-
| style='text-align:right'| 4466
| ''[[:d:Q13129345|John Roberts Evans]]''
|
|
|
|-
| style='text-align:right'| 4467
| ''[[:d:Q13129355|John Williams]]''
|
|
|
|-
| style='text-align:right'| 4468
| ''[[:d:Q13129358|John Williams]]''
| [[Coadan:Reverend John Williams (1853–1921) (gcf10374).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4469
| ''[[:d:Q13129356|John Thomas]]''
| [[Coadan:Portrait of Y bardd yn ei wely (4674271).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4470
| ''[[:d:Q13129357|John Roderick Rees]]''
|
|
|
|-
| style='text-align:right'| 4471
| ''[[:d:Q13129363|Joshua Thomas]]''
| [[Coadan:Portrait of Joshua Thomas (4673043) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4472
| ''[[:d:Q13129360|John Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4473
| ''[[:d:Q20732966|Edward Morgan]]''
|
|
|
|-
| style='text-align:right'| 4474
| ''[[:d:Q20732967|Edward Morgan]]''
| [[Coadan:Rev. Edward Morgan, Dyffryn Ardudwy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4475
| ''[[:d:Q20732965|Edward Mills]]''
|
|
|
|-
| style='text-align:right'| 4476
| ''[[:d:Q20732970|Edward Parry]]''
|
|
|
|-
| style='text-align:right'| 4477
| ''[[:d:Q20732971|Edward Parry]]''
|
|
|
|-
| style='text-align:right'| 4478
| ''[[:d:Q20732968|Edward Oliver]]''
|
|
|
|-
| style='text-align:right'| 4479
| ''[[:d:Q20732969|Edward Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 4480
| ''[[:d:Q20732975|Edward Stanton Roberts]]''
|
|
|
|-
| style='text-align:right'| 4481
| ''[[:d:Q20732972|Edward Randles]]''
|
|
|
|-
| style='text-align:right'| 4482
| ''[[:d:Q20732973|Edward Roberts]]''
|
|
|
|-
| style='text-align:right'| 4483
| ''[[:d:Q20732979|William Rice Edwards]]''
|
|
|
|-
| style='text-align:right'| 4484
| ''[[:d:Q20732982|Edwin Davies]]''
| [[Coadan:Edwin Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4485
| ''[[:d:Q20732990|Elizabeth Jane Louis Jones]]''
|
|
|
|-
| style='text-align:right'| 4486
| ''[[:d:Q20732998|Ellis Evans]]''
| [[Coadan:Portrait of Ellis Evans, D.D., Cefnmawr (4673713) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4487
| ''[[:d:Q20732996|Ellis Edwards]]''
| [[Coadan:Portrait of Ellis Edwards (4674351) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4488
| ''[[:d:Q20733002|Ellis Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 4489
| ''[[:d:Q20733000|Ellis Owen Ellis]]''
| [[Coadan:Ellis Owen Ellis (Ellis Bryn Coch) (print) NLW3363652.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4490
| ''[[:d:Q20733006|Lewis Evan]]''
|
|
|
|-
| style='text-align:right'| 4491
| ''[[:d:Q20733007|Evan Bevan]]''
|
|
|
|-
| style='text-align:right'| 4492
| ''[[:d:Q20733011|Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 4493
| ''[[:d:Q20733013|Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 4494
| ''[[:d:Q20733018|Evan Edward Morgan]]''
|
|
|
|-
| style='text-align:right'| 4495
| ''[[:d:Q20733019|Evan Edwards]]''
|
|
|
|-
| style='text-align:right'| 4496
| ''[[:d:Q20733016|Evan Davies]]''
| [[Coadan:Evan Davies (Eta Delta).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4497
| ''[[:d:Q20733022|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 4498
| ''[[:d:Q20733023|Evan Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4499
| ''[[:d:Q20733021|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 4500
| ''[[:d:Q20733026|Evan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4501
| ''[[:d:Q20733027|Evan John Evans]]''
|
|
|
|-
| style='text-align:right'| 4502
| ''[[:d:Q20733030|Evan Jones]]''
| [[Coadan:Portrait of Y Parch. Evan Jones (Caernarfon) (4670300) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4503
| ''[[:d:Q20733031|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4504
| ''[[:d:Q20733028|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4505
| ''[[:d:Q20733034|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4506
| ''[[:d:Q20733032|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4507
| ''[[:d:Q20733033|Evan Gurnos Jones]]''
| [[Coadan:Evan Gurnos Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4508
| ''[[:d:Q20733038|Evan Morgan]]''
|
|
|
|-
| style='text-align:right'| 4509
| ''[[:d:Q20733039|Evan Robert Thomas]]''
|
|
|
|-
| style='text-align:right'| 4510
| ''[[:d:Q20733036|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4511
| ''[[:d:Q20733037|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4512
| ''[[:d:Q20733046|Evan William Evans]]''
| [[Coadan:Evan-William-Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4513
| ''[[:d:Q20733047|Evan William Pearce]]''
|
|
|
|-
| style='text-align:right'| 4514
| ''[[:d:Q20733044|Evan Thomas Davies]]''
| [[Coadan:Revd Canon Evan Thomas Davies, Saint David's Church, Liverpool (Dyfrig, 1847-1927) NLW3363074.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4515
| ''[[:d:Q20733050|Griffith Humphrey Pugh Evans]]''
|
|
|
|-
| style='text-align:right'| 4516
| ''[[:d:Q20733048|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 4517
| ''[[:d:Q20733049|David Treharne Evans]]''
|
|
|
|-
| style='text-align:right'| 4518
| ''[[:d:Q20733055|Thomas Foulkes]]''
|
|
|
|-
| style='text-align:right'| 4519
| ''[[:d:Q20733052|Fanny Winifred Edwards]]''
|
|
|
|-
| style='text-align:right'| 4520
| ''[[:d:Q20733058|Francis Pugh]]''
|
|
|
|-
| style='text-align:right'| 4521
| ''[[:d:Q20733059|Frank Vivian Emery]]''
|
|
|
|-
| style='text-align:right'| 4522
| ''[[:d:Q20733057|Francis Hiley]]''
| [[Coadan:Portrait of Revd. Francis Hiley, Llanwenarth (4674791).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4523
| ''[[:d:Q20733063|Gabriel Rees]]''
|
|
|
|-
| style='text-align:right'| 4524
| ''[[:d:Q20733060|Thomas Mansel Franklen]]''
|
|
|
|-
| style='text-align:right'| 4525
| ''[[:d:Q20733061|Frederick Evans]]''
| [[Coadan:Fred Evans (Ednyfed) Gweinidog y Bedyddwyr Cymreig yn yr Unol Daleithiau.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4526
| ''[[:d:Q20733066|George Humphreys]]''
|
|
|
|-
| style='text-align:right'| 4527
| ''[[:d:Q20733064|George Ethelbert Sayce]]''
|
|
|
|-
| style='text-align:right'| 4528
| ''[[:d:Q20733068|George Lewis]]''
|
|
|
|-
| style='text-align:right'| 4529
| ''[[:d:Q20733069|George Lewis]]''
|
|
|
|-
| style='text-align:right'| 4530
| ''[[:d:Q20733074|George Rees]]''
|
|
|
|-
| style='text-align:right'| 4531
| ''[[:d:Q20733075|Gethin Davies]]''
| [[Coadan:Gethin Davies, Bangor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4532
| ''[[:d:Q20733072|George Prichard Evans]]''
|
|
|
|-
| style='text-align:right'| 4533
| ''[[:d:Q20733078|Gomer Morgan Roberts]]''
|
|
|
|-
| style='text-align:right'| 4534
| ''[[:d:Q20733079|Grace Wynne Griffith]]''
|
|
|
|-
| style='text-align:right'| 4535
| ''[[:d:Q20733087|Griffith Ellis]]''
| [[Coadan:Revd Griffith Ellis, Bootle (CM) NLW3365255 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4536
| ''[[:d:Q20733084|Griffith Anthony]]''
|
|
|
|-
| style='text-align:right'| 4537
| ''[[:d:Q20733085|Griffith Edwards]]''
| [[Coadan:Griffith Edwards (Gutyn Padarn).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4538
| ''[[:d:Q20733090|Griffith Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4539
| ''[[:d:Q20733091|Griffith Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 4540
| ''[[:d:Q20733088|Griffith Francis]]''
|
|
|
|-
| style='text-align:right'| 4541
| ''[[:d:Q20733094|Griffith John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4542
| ''[[:d:Q20733095|Griffith John Williams]]''
| [[Coadan:Griffith John Williams (5254831).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4543
| ''[[:d:Q20733092|Griffith Hughes]]''
| [[Coadan:Griffith Hughes (Diwygwyr Cymru) (crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4544
| ''[[:d:Q20733098|Griffith Parry]]''
| [[Coadan:Revd Griffith Parry (1827-1901) NLW3361807 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4545
| ''[[:d:Q20733099|Griffith Pennar Griffiths]]''
| [[Coadan:Griffith Pennar Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4546
| ''[[:d:Q20733097|Griffith Jones]]''
|
|
|
|-
| style='text-align:right'| 4547
| ''[[:d:Q20733100|Griffith Wynn]]''
|
|
|
|-
| style='text-align:right'| 4548
| ''[[:d:Q20733114|Gruffydd Evans]]''
|
|
|
|-
| style='text-align:right'| 4549
| ''[[:d:Q20733115|Gruffydd Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 4550
| ''[[:d:Q20733119|Gwenfron Moss]]''
|
|
|
|-
| style='text-align:right'| 4551
| ''[[:d:Q20733122|Gwilym Howell]]''
|
|
|
|-
| style='text-align:right'| 4552
| ''[[:d:Q20733123|Gwilym Ieuan Williams]]''
|
|
|
|-
| style='text-align:right'| 4553
| ''[[:d:Q20733120|Gwilym Bowyer]]''
|
|
|
|-
| style='text-align:right'| 4554
| ''[[:d:Q20733121|Gwilym Eirwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 4555
| ''[[:d:Q20733124|John Gwyn]]''
|
|
|
|-
| style='text-align:right'| 4556
| ''[[:d:Q20733128|Gwynne Henton Davies]]''
|
|
|
|-
| style='text-align:right'| 4557
| ''[[:d:Q20733135|John Harries]]''
|
|
|
|-
| style='text-align:right'| 4558
| ''[[:d:Q20733132|John Dorney Harding]]''
|
|
|
|-
| style='text-align:right'| 4559
| ''[[:d:Q20733139|Henry Charles]]''
|
|
|
|-
| style='text-align:right'| 4560
| ''[[:d:Q20733137|Henry Bailey Hughes]]''
|
|
|
|-
| style='text-align:right'| 4561
| ''[[:d:Q20733141|Henry Davies]]''
|
|
|
|-
| style='text-align:right'| 4562
| ''[[:d:Q20733146|Henry Griffiths]]''
| [[Coadan:Portrait of Henry Griffiths (4669768).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4563
| ''[[:d:Q20733151|Henry Lloyd]]''
| [[Coadan:ApHefin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4564
| ''[[:d:Q20733149|Henry Hughes]]''
| [[Coadan:Capel Soar Bryncir - geograph.org.uk - 603091.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4565
| ''[[:d:Q20733154|Henry Owen]]''
| [[Coadan:Henry Owen (5449771).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4566
| ''[[:d:Q20733158|Henry Rees Davies]]''
|
|
|
|-
| style='text-align:right'| 4567
| ''[[:d:Q20733159|Henry Samuel Hayden]]''
|
|
|
|-
| style='text-align:right'| 4568
| ''[[:d:Q20733156|Henry Phillips]]''
|
|
|
|-
| style='text-align:right'| 4569
| ''[[:d:Q20733163|Henry, Or Harri Sion John]]''
|
|
|
|-
| style='text-align:right'| 4570
| ''[[:d:Q20733161|Henry Tobit Evans]]''
| [[Coadan:Henry Tobit Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4571
| ''[[:d:Q20733167|Herbert Benjamin Winfield]]''
|
|
|
|-
| style='text-align:right'| 4572
| ''[[:d:Q20804771|Samuel Thomas]]''
|
|
|
|-
| style='text-align:right'| 4573
| ''[[:d:Q20804775|Joseph Simmons]]''
|
|
|
|-
| style='text-align:right'| 4574
| ''[[:d:Q20804790|Thomas Griffiths Jones]]''
|
|
|
|-
| style='text-align:right'| 4575
| ''[[:d:Q20804788|Thomas Bevan Phillips]]''
|
|
|
|-
| style='text-align:right'| 4576
| ''[[:d:Q20804794|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 4577
| ''[[:d:Q20804795|Thomas Michaeliones]]''
|
|
|
|-
| style='text-align:right'| 4578
| ''[[:d:Q20804792|Thomas James Rees]]''
|
|
|
|-
| style='text-align:right'| 4579
| ''[[:d:Q20804796|Thomas Morgan Thomas]]''
|
|
|
|-
| style='text-align:right'| 4580
| ''[[:d:Q20804797|Thomas Price]]''
| [[Coadan:Tom Price, Merthyr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4581
| ''[[:d:Q20804801|Thomas Roberts]]''
|
|
|
|-
| style='text-align:right'| 4582
| ''[[:d:Q20804806|Thomas Thomas]]''
|
|
|
|-
| style='text-align:right'| 4583
| ''[[:d:Q20804807|Thomas Walters]]''
|
|
|
|-
| style='text-align:right'| 4584
| ''[[:d:Q20804804|Thomas Rowland]]''
|
|
|
|-
| style='text-align:right'| 4585
| ''[[:d:Q20804810|Tom Bryant]]''
|
|
|
|-
| style='text-align:right'| 4586
| ''[[:d:Q20804808|Timothy Thomas]]''
|
|
|
|-
| style='text-align:right'| 4587
| ''[[:d:Q20804809|Timothy Thomas]]''
|
|
|
|-
| style='text-align:right'| 4588
| ''[[:d:Q20804819|William Arthur Jones]]''
|
|
|
|-
| style='text-align:right'| 4589
| ''[[:d:Q20804822|William Emyr Williams]]''
|
|
|
|-
| style='text-align:right'| 4590
| ''[[:d:Q20804826|William Gilbert Williams]]''
|
|
|
|-
| style='text-align:right'| 4591
| ''[[:d:Q20804824|William George]]''
| [[Coadan:William George-brawd DLlG.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4592
| ''[[:d:Q20804830|William Morgan Roberts]]''
|
|
|
|-
| style='text-align:right'| 4593
| ''[[:d:Q20804831|William Morris Lewis]]''
| [[Coadan:William Morris Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4594
| ''[[:d:Q20804828|William Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4595
| ''[[:d:Q20804834|William Saunders]]''
|
|
|
|-
| style='text-align:right'| 4596
| ''[[:d:Q20804835|William Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 4597
| ''[[:d:Q20804832|William Rhys Watkin]]''
|
|
|
|-
| style='text-align:right'| 4598
| ''[[:d:Q20804833|William Roberts]]''
| [[Coadan:Revd William Roberts, Utica (1809-87) NLW3361775.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4599
| ''[[:d:Q20804838|Winifred Mair Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4600
| ''[[:d:Q20807044|Sammy Brett]]''
|
|
|
|-
| style='text-align:right'| 4601
| ''[[:d:Q20810495|Silvanus Bevan]]''
|
|
|
|-
| style='text-align:right'| 4602
| ''[[:d:Q20811066|Richard Lewis Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4603
| ''[[:d:Q20811173|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 4604
| ''[[:d:Q20811188|Lewis Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4605
| ''[[:d:Q20821090|Bertie George Charles]]''
|
|
|
|-
| style='text-align:right'| 4606
| ''[[:d:Q20821089|Arthur Hughes]]''
|
|
|
|-
| style='text-align:right'| 4607
| ''[[:d:Q20821095|Daniel Howell Williams]]''
|
|
|
|-
| style='text-align:right'| 4608
| ''[[:d:Q20821092|Bowen Rees]]''
| [[Coadan:Plant y Goedwig (Bowen Rees).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4609
| ''[[:d:Q20821093|Clifford Phillips]]''
|
|
|
|-
| style='text-align:right'| 4610
| ''[[:d:Q20821098|David Christopher Davies]]''
|
|
|
|-
| style='text-align:right'| 4611
| ''[[:d:Q20821099|David Cledlyn Evans]]''
|
|
|
|-
| style='text-align:right'| 4612
| ''[[:d:Q20821097|David Brynmor Anthony]]''
|
|
|
|-
| style='text-align:right'| 4613
| ''[[:d:Q20821102|David Griffith]]''
|
|
|
|-
| style='text-align:right'| 4614
| ''[[:d:Q20821103|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 4615
| ''[[:d:Q20821100|David Delta Evans]]''
| [[Coadan:Rev. D. Delta Evans editor of The christian life. (5449744) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4616
| ''[[:d:Q20821101|David Evans]]''
|
|
|
|-
| style='text-align:right'| 4617
| ''[[:d:Q20821106|David Owen Jones]]''
| [[Coadan:David Owen Jones (1856-1903).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4618
| ''[[:d:Q20821107|David Owen Roberts]]''
|
|
|
|-
| style='text-align:right'| 4619
| ''[[:d:Q20821104|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 4620
| ''[[:d:Q20821105|David Jones]]''
|
|
|
|-
| style='text-align:right'| 4621
| ''[[:d:Q20821110|David Rowland Hughes]]''
|
|
|
|-
| style='text-align:right'| 4622
| ''[[:d:Q20821109|David Phillips]]''
|
|
|
|-
| style='text-align:right'| 4623
| ''[[:d:Q20821112|David Thomas Glyndŵr Richards]]''
|
|
|
|-
| style='text-align:right'| 4624
| ''[[:d:Q20821113|David Williams]]''
|
|
|
|-
| style='text-align:right'| 4625
| ''[[:d:Q20821119|Edward Jones]]''
| [[Coadan:Dr Edward Jones Dolgellau.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4626
| ''[[:d:Q20821117|Edmund Evans]]''
|
|
|
|-
| style='text-align:right'| 4627
| ''[[:d:Q20821122|Edward Owen Humphreys]]''
|
|
|
|-
| style='text-align:right'| 4628
| ''[[:d:Q20821123|Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 4629
| ''[[:d:Q20821120|Edward Lewis Ellis]]''
|
|
|
|-
| style='text-align:right'| 4630
| ''[[:d:Q20821121|Edward Owen]]''
|
|
|
|-
| style='text-align:right'| 4631
| ''[[:d:Q20821127|Eurys Ionor Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4632
| ''[[:d:Q20821124|Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 4633
| ''[[:d:Q20821130|Evan Lewis]]''
|
|
|
|-
| style='text-align:right'| 4634
| ''[[:d:Q20821131|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4635
| ''[[:d:Q20821129|Evan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4636
| ''[[:d:Q20821135|Frank Treharne James]]''
|
|
|
|-
| style='text-align:right'| 4637
| ''[[:d:Q20821132|Evan Roberts]]''
|
|
|
|-
| style='text-align:right'| 4638
| ''[[:d:Q20821138|Griffith Rowlands]]''
| [[Coadan:Portrait of Griffith Rowlands Esqr (4669928) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4639
| ''[[:d:Q20821136|Garfield Hopkin Hughes]]''
|
|
|
|-
| style='text-align:right'| 4640
| ''[[:d:Q20821142|Henry Morgan Stafford Thomas]]''
|
|
|
|-
| style='text-align:right'| 4641
| ''[[:d:Q20821143|Howel Harris Hughes]]''
|
|
|
|-
| style='text-align:right'| 4642
| ''[[:d:Q20821141|Henry Gethin Lewis]]''
|
|
|
|-
| style='text-align:right'| 4643
| ''[[:d:Q20821146|Hugh Jones]]''
| [[Coadan:Revd Hugh Jones, Liverpool (1830-1911) NLW3361796.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4644
| ''[[:d:Q20821147|Hugh Jones]]''
| [[Coadan:Portrait of Dr. Hugh Jones (of Llangollen) (4670596).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4645
| ''[[:d:Q20821144|Howell Thomas Evans]]''
| [[Coadan:Howell T. Evans fishing in the Aeron river (5449712).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4646
| ''[[:d:Q20821145|Hugh John Owen]]''
|
|
|
|-
| style='text-align:right'| 4647
| ''[[:d:Q20821150|Hugh Williams]]''
|
|
|
|-
| style='text-align:right'| 4648
| ''[[:d:Q20821151|Hugh Williams]]''
|
|
|
|-
| style='text-align:right'| 4649
| ''[[:d:Q20821148|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 4650
| ''[[:d:Q20821149|Hugh Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 4651
| ''[[:d:Q20821154|James Cornelius Morrice]]''
|
|
|
|-
| style='text-align:right'| 4652
| ''[[:d:Q20821155|T. I. Jeffreys Jones]]''
|
|
|
|-
| style='text-align:right'| 4653
| ''[[:d:Q20821152|Humphrey Rowland Jones]]''
|
|
|
|-
| style='text-align:right'| 4654
| ''[[:d:Q20821153|Irwyn Ranald Walters]]''
|
|
|
|-
| style='text-align:right'| 4655
| ''[[:d:Q20821158|John Eiddon Jones]]''
|
|
|
|-
| style='text-align:right'| 4656
| ''[[:d:Q20821159|John Evans]]''
| [[Coadan:John Evans, Archddiacon Meirionnydd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4657
| ''[[:d:Q20821156|John Davies]]''
|
|
|
|-
| style='text-align:right'| 4658
| ''[[:d:Q20821157|John Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 4659
| ''[[:d:Q20821163|John James]]''
|
|
|
|-
| style='text-align:right'| 4660
| ''[[:d:Q20821161|John Ithel Jones]]''
|
|
|
|-
| style='text-align:right'| 4661
| ''[[:d:Q20821166|John Jones Owen]]''
|
|
|
|-
| style='text-align:right'| 4662
| ''[[:d:Q20821167|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4663
| ''[[:d:Q20821164|John James Jones]]''
|
|
|
|-
| style='text-align:right'| 4664
| ''[[:d:Q20821165|John John Williams]]''
|
|
|
|-
| style='text-align:right'| 4665
| ''[[:d:Q20821170|John Rhaiadore Evans]]''
|
|
|
|-
| style='text-align:right'| 4666
| ''[[:d:Q20821171|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4667
| ''[[:d:Q20821168|John Mather Jones]]''
|
|
|
|-
| style='text-align:right'| 4668
| ''[[:d:Q20821169|John Pierce]]''
|
|
|
|-
| style='text-align:right'| 4669
| ''[[:d:Q19043535|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 4670
| ''[[:d:Q19043766|William Evans]]''
|
|
|
|-
| style='text-align:right'| 4671
| ''[[:d:Q19324971|Morland Lewis]]''
|
|
|
|-
| style='text-align:right'| 4672
| ''[[:d:Q19324995|Amy Bulley]]''
| [[Coadan:Mrs Amy Brook (born Bulley) by Mary Florence Monkhouse.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4673
| ''[[:d:Q19325030|Oliver Thomas]]''
|
|
|
|-
| style='text-align:right'| 4674
| ''[[:d:Q19325183|Rhondda Williams]]''
|
|
|
|-
| style='text-align:right'| 4675
| ''[[:d:Q19325185|Betty Johnston]]''
|
|
|
|-
| style='text-align:right'| 4676
| ''[[:d:Q19325211|Richard Hughes]]''
|
|
|
|-
| style='text-align:right'| 4677
| ''[[:d:Q19325318|Clara Deniz]]''
|
|
|
|-
| style='text-align:right'| 4678
| ''[[:d:Q19325401|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 4679
| ''[[:d:Q19325414|Rosina Davies]]''
| [[Coadan:Rosina Davies (1863–1949) (gcf02725).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4680
| ''[[:d:Q19325608|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 4681
| ''[[:d:Q19325627|Ethel Trew]]''
|
|
|
|-
| style='text-align:right'| 4682
| ''[[:d:Q19325687|Thomas Williams]]''
| [[Coadan:Cofeb Tom Nefyn Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4683
| ''[[:d:Q19326557|Samuel Evans]]''
|
|
|
|-
| style='text-align:right'| 4684
| ''[[:d:Q19335498|John Aneurin Grey Griffith]]''
| [[Coadan:John Aneurin Grey Griffith, c1980 (4322172360).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4685
| ''[[:d:Q19360550|John D. Jones]]''
| [[Coadan:Representative John D. Jones, 1971.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4686
| ''[[:d:Q19360836|Roger Cecil]]''
|
|
|
|-
| style='text-align:right'| 4687
| ''[[:d:Q19364441|Gwynne Edwards]]''
|
|
|
|-
| style='text-align:right'| 4688
| ''[[:d:Q19367438|John Williams]]''
| [[Coadan:Revd John Williams, 'Yr Hen Syr'.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4689
| ''[[:d:Q19368760|William Davies]]''
|
|
|
|-
| style='text-align:right'| 4690
| ''[[:d:Q19396015|Paul Brown]]''
|
|
|
|-
| style='text-align:right'| 4691
| ''[[:d:Q19407331|Maureen Guy]]''
|
|
|
|-
| style='text-align:right'| 4692
| ''[[:d:Q19513574|Owain Dwnn]]''
|
|
|
|-
| style='text-align:right'| 4693
| ''[[:d:Q19518672|Geoffrey Glyn]]''
|
|
|
|-
| style='text-align:right'| 4694
| ''[[:d:Q19518932|John Goodwin]]''
|
|
|
|-
| style='text-align:right'| 4695
| ''[[:d:Q19560432|Glyn England]]''
|
|
|
|-
| style='text-align:right'| 4696
| ''[[:d:Q19560889|David Bevan Jones]]''
|
|
|
|-
| style='text-align:right'| 4697
| ''[[:d:Q19560894|Mary Jones]]''
|
|
|
|-
| style='text-align:right'| 4698
| ''[[:d:Q19578248|Les Wilkins]]''
|
|
|
|-
| style='text-align:right'| 4699
| ''[[:d:Q19578256|Ralph Williams]]''
|
|
|
|-
| style='text-align:right'| 4700
| ''[[:d:Q18672685|Trevor Evans]]''
|
|
|
|-
| style='text-align:right'| 4701
| ''[[:d:Q18672826|William Holland]]''
|
|
|
|-
| style='text-align:right'| 4702
| ''[[:d:Q18672832|William Hopkins]]''
|
|
|
|-
| style='text-align:right'| 4703
| ''[[:d:Q18672840|William Howels]]''
| [[Coadan:Portrait of The Revd. William Howels (4670914).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4704
| ''[[:d:Q18672847|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 4705
| ''[[:d:Q18672856|William Johns]]''
|
|
|
|-
| style='text-align:right'| 4706
| ''[[:d:Q18674052|Julines Herring]]''
|
|
|
|-
| style='text-align:right'| 4707
| ''[[:d:Q18674094|Lewis Lewis]]''
|
|
|
|-
| style='text-align:right'| 4708
| ''[[:d:Q18674333|Peter Williams]]''
|
|
|
|-
| style='text-align:right'| 4709
| ''[[:d:Q18674355|Rachel Barrett]]''
| [[Coadan:Rachel Barrett - Suffragette.png|center|128px]]
|
|
|-
| style='text-align:right'| 4710
| ''[[:d:Q18674374|Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 4711
| ''[[:d:Q18715771|Enoch Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4712
| ''[[:d:Q18715898|William Davies]]''
|
|
|
|-
| style='text-align:right'| 4713
| ''[[:d:Q18716154|David Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4714
| ''[[:d:Q18719690|Mark James Elgar Coode]]''
|
|
|
|-
| style='text-align:right'| 4715
| ''[[:d:Q18729823|Trystan Edwards]]''
|
|
|
|-
| style='text-align:right'| 4716
| ''[[:d:Q18729849|E. M. Bruce Vaughan]]''
|
|
|
|-
| style='text-align:right'| 4717
| ''[[:d:Q18730079|Charles Morgan]]''
| [[Coadan:Sint Gertrudiskerk grafmonument Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4718
| ''[[:d:Q18730434|Henry Salesbury]]''
|
|
|
|-
| style='text-align:right'| 4719
| ''[[:d:Q18734926|Thomas Peter Ellis]]''
|
|
|
|-
| style='text-align:right'| 4720
| ''[[:d:Q18735322|Thomas Nicholas]]''
|
|
|
|-
| style='text-align:right'| 4721
| ''[[:d:Q18736094|William Morgan]]''
|
|
|
|-
| style='text-align:right'| 4722
| ''[[:d:Q18737039|Jack Phillips]]''
|
|
|
|-
| style='text-align:right'| 4723
| ''[[:d:Q18737121|David Eastwood]]''
|
|
|
|-
| style='text-align:right'| 4724
| ''[[:d:Q18737198|Mair Russell-Jones]]''
|
|
|
|-
| style='text-align:right'| 4725
| ''[[:d:Q18756580|Alice Jones]]''
| [[Coadan:Ceridwen Peris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4726
| ''[[:d:Q18756644|David Peter]]''
| [[Coadan:Portrait of Revd. David Peter, Carmarthen (4671774).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4727
| ''[[:d:Q18756688|Emma Maitland]]''
|
|
|
|-
| style='text-align:right'| 4728
| ''[[:d:Q18756705|Francisco Antonio Deniz]]''
|
|
|
|-
| style='text-align:right'| 4729
| ''[[:d:Q18756798|James Owen]]''
|
|
|
|-
| style='text-align:right'| 4730
| ''[[:d:Q18756803|James Parke]]''
|
|
|
|-
| style='text-align:right'| 4731
| ''[[:d:Q18756845|John Oliver]]''
|
|
|
|-
| style='text-align:right'| 4732
| ''[[:d:Q18756964|Mary Nicol]]''
|
|
|
|-
| style='text-align:right'| 4733
| ''[[:d:Q18757104|Robert Wycherley]]''
|
|
|
|-
| style='text-align:right'| 4734
| ''[[:d:Q18757146|Thomas Owen]]''
|
|
|
|-
| style='text-align:right'| 4735
| ''[[:d:Q18757228|William Parry]]''
|
|
|
|-
| style='text-align:right'| 4736
| ''[[:d:Q18759414|Thomas Powell]]''
|
|
|
|-
| style='text-align:right'| 4737
| ''[[:d:Q18761925|Henry Clifford Darby]]''
|
|
|
|-
| style='text-align:right'| 4738
| ''[[:d:Q18761942|Ellis Pugh]]''
|
|
|
|-
| style='text-align:right'| 4739
| ''[[:d:Q18762054|Philip Pugh]]''
|
|
|
|-
| style='text-align:right'| 4740
| ''[[:d:Q18762129|William Price]]''
|
|
|
|-
| style='text-align:right'| 4741
| ''[[:d:Q18762132|William Probert]]''
|
|
|
|-
| style='text-align:right'| 4742
| ''[[:d:Q18763709|Peter Davies]]''
|
|
|
|-
| style='text-align:right'| 4743
| ''[[:d:Q18783770|John Rhydderch]]''
|
|
|
|-
| style='text-align:right'| 4744
| ''[[:d:Q18783790|John Roberts]]''
| [[Coadan:Revd John Roberts (J.R., 1804-84) NLW3365386.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4745
| ''[[:d:Q18783788|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4746
| ''[[:d:Q18783892|Peter Roberts]]''
| [[Coadan:Portrait of Revd. Peter Roberts, M.A (4671108).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4747
| ''[[:d:Q18783922|Richard Roberts]]''
|
|
|
|-
| style='text-align:right'| 4748
| ''[[:d:Q18783951|Robert of Shrewsbury]]''
|
|
|
|-
| style='text-align:right'| 4749
| ''[[:d:Q18784000|Thomas Redmond]]''
|
|
|
|-
| style='text-align:right'| 4750
| ''[[:d:Q18808855|Len Newcombe]]''
|
|
|
|-
| style='text-align:right'| 4751
| ''[[:d:Q18810707|Ernest Tristram]]''
| [[Coadan:Medieval wall paintings and Norman window in the church of St. Thomas a Becket - geograph.org.uk - 1795359.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4752
| ''[[:d:Q18810922|John Salisbury]]''
|
|
|
|-
| style='text-align:right'| 4753
| ''[[:d:Q18811029|Lucy Thomas]]''
|
|
|
|-
| style='text-align:right'| 4754
| ''[[:d:Q18811065|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 4755
| ''[[:d:Q18811222|Rose Davies]]''
|
|
|
|-
| style='text-align:right'| 4756
| ''[[:d:Q18813249|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 4757
| ''[[:d:Q18819465|Guildhaume Myrddin-Evans]]''
|
|
|
|-
| style='text-align:right'| 4758
| ''[[:d:Q18875883|Evan Daniel]]''
| [[Coadan:Canon Evan Daniel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4759
| ''[[:d:Q18879144|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 4760
| ''[[:d:Q18879165|John Thomas]]''
| [[Coadan:Revd Dr John Thomas, Liverpool (1821-92) (1882) NLW3362411.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4761
| ''[[:d:Q18880142|Mildred Riddelsdell]]''
|
|
|
|-
| style='text-align:right'| 4762
| ''[[:d:Q18880149|Noah Thomas]]''
| [[Coadan:Sir Noah Thomas (1720-92).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4763
| ''[[:d:Q18880154|Owen Thomas]]''
| [[Coadan:Dr Owen Thomas (1812-91) NLW3362711.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4764
| ''[[:d:Q18880164|Pendrill Charles Jones-Varrier]]''
|
|
|
|-
| style='text-align:right'| 4765
| ''[[:d:Q18910300|Edith Sophia Hooper]]''
|
|
|
|-
| style='text-align:right'| 4766
| ''[[:d:Q18910435|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 4767
| ''[[:d:Q18911657|Robert Warden Lee]]''
|
|
|
|-
| style='text-align:right'| 4768
| ''[[:d:Q18911858|William Rees Williams]]''
| [[Coadan:Revd William Williams, Swansea (1817-1900) NLW3365189.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4769
| ''[[:d:Q18912095|Herbert Millingchamp Vaughan]]''
|
|
|
|-
| style='text-align:right'| 4770
| ''[[:d:Q18913039|John Howard Purnell]]''
|
|
|
|-
| style='text-align:right'| 4771
| ''[[:d:Q18913097|Elis Roberts]]''
|
|
|
|-
| style='text-align:right'| 4772
| ''[[:d:Q18913337|John William Watson Stephens]]''
| [[Coadan:John William Watson Stephens. Photograph. Wellcome V0027757.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4773
| ''[[:d:Q18914801|Alis Wen]]''
|
|
|
|-
| style='text-align:right'| 4774
| ''[[:d:Q18914804|Gwen ferch Ellis]]''
|
|
|
|-
| style='text-align:right'| 4775
| ''[[:d:Q18917139|Abram Wood]]''
|
|
|
|-
| style='text-align:right'| 4776
| ''[[:d:Q18917172|Norman Percy Allen]]''
|
|
|
|-
| style='text-align:right'| 4777
| ''[[:d:Q18917233|Peter Williams]]''
| [[Coadan:Y Parch Peter Williams o Gaerfyrddin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4778
| ''[[:d:Q18917385|John Harris]]''
|
|
|
|-
| style='text-align:right'| 4779
| ''[[:d:Q18917541|Emlyn Williams]]''
|
|
|
|-
| style='text-align:right'| 4780
| ''[[:d:Q18917654|Lawrence Hugh Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4781
| ''[[:d:Q18917778|Zachariah Williams]]''
|
|
|
|-
| style='text-align:right'| 4782
| ''[[:d:Q18920464|Roscoe Howells]]''
|
|
|
|-
| style='text-align:right'| 4783
| ''[[:d:Q18922056|Anne Griffith]]''
|
|
|
|-
| style='text-align:right'| 4784
| ''[[:d:Q18922147|Daniel Davies]]''
| [[Coadan:Dan Davies, Merthyr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4785
| ''[[:d:Q18922178|Percy Watkins]]''
|
|
|
|-
| style='text-align:right'| 4786
| ''[[:d:Q18922208|Richard Davis]]''
|
|
|
|-
| style='text-align:right'| 4787
| ''[[:d:Q18922225|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 4788
| ''[[:d:Q18934912|Donald Emrys Strong]]''
|
|
|
|-
| style='text-align:right'| 4789
| ''[[:d:Q18936277|Thomas Jones]]''
| [[Coadan:Portrait of Tho. Jones (4674170) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4790
| ''[[:d:Q18954073|Arthur Lloyd James]]''
|
|
|
|-
| style='text-align:right'| 4791
| ''[[:d:Q18954136|David Oliver]]''
|
|
|
|-
| style='text-align:right'| 4792
| ''[[:d:Q18954309|Jack Bailey]]''
|
|
|
|-
| style='text-align:right'| 4793
| ''[[:d:Q18954350|John Hughes]]''
| [[Coadan:Portrait of Rev. John Hughes (4670920).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4794
| ''[[:d:Q18962084|William Ick]]''
| [[Coadan:Photograph of William Ick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4795
| ''[[:d:Q19039146|David Owen]]''
|
|
|
|-
| style='text-align:right'| 4796
| ''[[:d:Q19040140|Ezekiel Hughes]]''
|
|
|
|-
| style='text-align:right'| 4797
| ''[[:d:Q19040262|Frances Hughes]]''
|
|
|
|-
| style='text-align:right'| 4798
| ''[[:d:Q19042104|Ivor Broom]]''
|
|
|
|-
| style='text-align:right'| 4799
| ''[[:d:Q37770200|William James Morgan]]''
|
|
|
|-
| style='text-align:right'| 4800
| ''[[:d:Q13131218|Sassie Rees]]''
| [[Coadan:Sassie Rees, Caernarfon, cantores gyda'r BBC (1476258).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4801
| ''[[:d:Q13131449|Sian Owen]]''
|
|
|
|-
| style='text-align:right'| 4802
| ''[[:d:Q13131459|Simon B. Jones]]''
|
|
|
|-
| style='text-align:right'| 4803
| ''[[:d:Q13131617|Stephen J. Williams]]''
|
|
|
|-
| style='text-align:right'| 4804
| ''[[:d:Q13131715|Sulwyn Thomas]]''
| [[Coadan:Eisteddfod Genedlaethol Cymru 1984, Llanbedr Pont Steffan a'r Fro (1586573) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4805
| ''[[:d:Q13131712|Sue Noake]]''
|
|
|
|-
| style='text-align:right'| 4806
| ''[[:d:Q13131848|Thomas Jacob Thomas]]''
| [[Coadan:Thomas Jacob Thomas (Sarnicol).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4807
| ''[[:d:Q13131854|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 4808
| ''[[:d:Q13131852|Thomas Hudson-Williams]]''
|
|
|
|-
| style='text-align:right'| 4809
| ''[[:d:Q13131853|Thomas James Jenkin]]''
|
|
|
|-
| style='text-align:right'| 4810
| ''[[:d:Q13131858|Thomas Iorwerth Ellis]]''
| [[Coadan:Thomas Iorwerth Ellis (5236476).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4811
| ''[[:d:Q13131856|Thomas Jones]]''
| [[Coadan:Tudno 00.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4812
| ''[[:d:Q13131857|T. E. Nicholas]]''
| [[Coadan:D. J. Williams conversing at a CND rally at Aberystwyth (6773943208) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4813
| ''[[:d:Q13131866|Thomas Williams]]''
| [[Coadan:Gwilym Morganwg, bard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4814
| ''[[:d:Q13131864|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4815
| ''[[:d:Q13131865|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4816
| ''[[:d:Q13131882|Thomas Jones]]''
| [[Coadan:Glan Alun.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4817
| ''[[:d:Q13131944|Tom Parri Jones]]''
|
|
|
|-
| style='text-align:right'| 4818
| ''[[:d:Q13131982|Trebor Lloyd Evans]]''
|
|
|
|-
| style='text-align:right'| 4819
| ''[[:d:Q13132174|Vaughan Hughes]]''
| [[Coadan:Eisteddfod Genedlaethol Cymru 1979, Caernarfon (1555519).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4820
| ''[[:d:Q13132190|William Rhys Nicholas]]''
|
|
|
|-
| style='text-align:right'| 4821
| ''[[:d:Q13132358|William John Griffith]]''
|
|
|
|-
| style='text-align:right'| 4822
| ''[[:d:Q13132359|William John Roberts]]''
| [[Coadan:Llanrwst Poets (1876) (8363305937).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4823
| ''[[:d:Q13132362|William Williams]]''
| [[Coadan:Portrait of William Williams, 'Gwilym Cyfeiliog' (4672196) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4824
| ''[[:d:Q13132363|William Morris]]''
|
|
|
|-
| style='text-align:right'| 4825
| ''[[:d:Q13132360|William Jones]]''
|
|
|
|-
| style='text-align:right'| 4826
| ''[[:d:Q13132361|William Jones]]''
|
|
|
|-
| style='text-align:right'| 4827
| ''[[:d:Q13132366|William Rowlands]]''
| [[Coadan:Portrait of Y Parch. Wm. Rowlands, 'Gwilym Lleyn' (4671153).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4828
| ''[[:d:Q13132364|William Spurrell]]''
|
|
|
|-
| style='text-align:right'| 4829
| ''[[:d:Q13132369|William Owen Stanley]]''
| [[Coadan:Portrait of Hon. W. O. Stanley, M.P (4673027).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4830
| ''[[:d:Q13157407|Henry Harries]]''
|
|
|
|-
| style='text-align:right'| 4831
| ''[[:d:Q13157452|J. E. Caerwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 4832
| ''[[:d:Q13218562|David Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4833
| ''[[:d:Q13341457|Isaac Williams]]''
| [[Coadan:Portrait of Revd. Isaac Williams (4671204).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4834
| ''[[:d:Q13405589|Iris Williams]]''
| [[Coadan:Advertising various books and records (1574760) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4835
| ''[[:d:Q13406331|Mary Dillwyn]]''
| [[Coadan:Mary Dillwyn M.D. 1853.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4836
| ''[[:d:Q13415127|James Holmes-Siedle]]''
|
|
|
|-
| style='text-align:right'| 4837
| ''[[:d:Q13423692|Mary Letitia Green]]''
|
|
|
|-
| style='text-align:right'| 4838
| ''[[:d:Q13445386|Gordon Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4839
| ''[[:d:Q13522455|Ian Buckett]]''
|
|
|
|-
| style='text-align:right'| 4840
| ''[[:d:Q13522489|John Rice Jones]]''
| [[Coadan:Judge John Rice Jones.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4841
| ''[[:d:Q13530049|John Stradling Thomas]]''
|
|
|
|-
| style='text-align:right'| 4842
| ''[[:d:Q13583800|Hugh Price Hughes]]''
| [[Coadan:Hugh Price Hughes2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4843
| ''[[:d:Q13584022|Edward Morgan Humphreys]]''
| [[Coadan:E.Morgan Humphreys 002.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4844
| ''[[:d:Q13616740|John T. Lewis]]''
| [[Coadan:JohnLewis01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4845
| ''[[:d:Q13634239|Edwyn Cynrig Roberts]]''
| [[Coadan:EdwynCynrigRoberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4846
| ''[[:d:Q13634263|Ellis Wynne]]''
| [[Coadan:Ellis Wynne plaque.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4847
| ''[[:d:Q13635559|Gwallter Mechain]]''
| [[Coadan:Walter Davies (Gwallter Mechain).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4848
| ''[[:d:Q13639581|John Ceiriog Hughes]]''
| [[Coadan:Portrait of John Ceiriog Hughes (4674472).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4849
| ''[[:d:Q13643306|Leslie Norris]]''
|
|
|
|-
| style='text-align:right'| 4850
| ''[[:d:Q13643406|Lewys Daron]]''
|
|
|
|-
| style='text-align:right'| 4851
| ''[[:d:Q13703019|Haydn Morris]]''
|
|
|
|-
| style='text-align:right'| 4852
| ''[[:d:Q14476852|Thomas Jones]]''
| [[Coadan:Er cof am y diweddar Barch Thos Jones, Dynbych .. NLW3364382.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4853
| ''[[:d:Q14480365|William Ambrose]]''
| [[Coadan:Revd Williams Ambrose (1813-73) NLW3362510.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4854
| ''[[:d:Q14480438|William Glyn]]''
|
|
|
|-
| style='text-align:right'| 4855
| ''[[:d:Q14508516|Humphrey Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4856
| ''[[:d:Q14508527|John Jones]]''
|
|
|
|-
| style='text-align:right'| 4857
| ''[[:d:Q14593035|Isaac D. Seyburn]]''
|
|
|
|-
| style='text-align:right'| 4858
| ''[[:d:Q14626703|Eleanor Vachell]]''
|
|
|
|-
| style='text-align:right'| 4859
| ''[[:d:Q14918258|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4860
| ''[[:d:Q14945454|Richard John Lloyd Price]]''
| [[Coadan:Richard John Lloyd Price of Rhiwlas, Vanity Fair, 1885-10-10.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4861
| ''[[:d:Q14945647|Arthur Evanson]]''
|
|
|
|-
| style='text-align:right'| 4862
| ''[[:d:Q14945657|Hugh Jones]]''
| [[Coadan:St Grwst.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4863
| ''[[:d:Q14945665|John Mason]]''
|
|
|
|-
| style='text-align:right'| 4864
| ''[[:d:Q14945674|Emlyn Rhoderick]]''
|
|
|
|-
| style='text-align:right'| 4865
| ''[[:d:Q14945672|Owen Owen]]''
| [[Coadan:Owen Owen (arolygydd ysgolion).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4866
| ''[[:d:Q14945676|William Bowen Rowlands]]''
|
|
|
|-
| style='text-align:right'| 4867
| ''[[:d:Q14945684|Hugh Williams]]''
|
|
|
|-
| style='text-align:right'| 4868
| ''[[:d:Q14949186|Hilary Tann]]''
|
|
|
|-
| style='text-align:right'| 4869
| ''[[:d:Q14949184|Clement Price Thomas]]''
|
|
|
|-
| style='text-align:right'| 4870
| ''[[:d:Q14982023|John Walters]]''
|
|
|
|-
| style='text-align:right'| 4871
| ''[[:d:Q15049074|Daniel Lleufer Thomas]]''
| [[Coadan:Daniel Lleufer Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4872
| ''[[:d:Q15050659|Leo McAuliffe]]''
|
|
|
|-
| style='text-align:right'| 4873
| ''[[:d:Q15054657|John Lasarus Williams]]''
|
|
|
|-
| style='text-align:right'| 4874
| ''[[:d:Q15074921|Watkin Hezekiah Williams]]''
| [[Coadan:Watcyn Wyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4875
| ''[[:d:Q15109553|Jim Ede]]''
|
|
|
|-
| style='text-align:right'| 4876
| ''[[:d:Q15109565|Leslie Gilbert Illingworth]]''
| [[Coadan:Illingworth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4877
| ''[[:d:Q15244394|Griffith Williams]]''
| [[Coadan:Gutyn Peris.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 4878
| ''[[:d:Q15378630|Thomas Davis]]''
|
|
|
|-
| style='text-align:right'| 4879
| ''[[:d:Q15378639|Phil Clift]]''
|
|
|
|-
| style='text-align:right'| 4880
| ''[[:d:Q15378641|Joseph Davis]]''
| [[Coadan:Joseph Davis 1865 public domain USGov.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4881
| ''[[:d:Q15427153|Patricia Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 4882
| ''[[:d:Q15428895|Richard Britnell]]''
|
|
|
|-
| style='text-align:right'| 4883
| ''[[:d:Q15429196|Benjamin Evans]]''
| [[Coadan:Reverend Benjamin Evans (Telynfab) (1845–1900) (gcf10105).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4884
| ''[[:d:Q15429403|John Vaughan]]''
|
|
|
|-
| style='text-align:right'| 4885
| ''[[:d:Q15434762|Jack Livesey]]''
|
|
|
|-
| style='text-align:right'| 4886
| ''[[:d:Q15435915|Bernard Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4887
| ''[[:d:Q15438714|W. D. Davies]]''
|
|
|
|-
| style='text-align:right'| 4888
| ''[[:d:Q15440925|Philip R. Davies]]''
|
|
|
|-
| style='text-align:right'| 4889
| ''[[:d:Q15452420|Louis Barnett Abrahams]]''
|
|
|
|-
| style='text-align:right'| 4890
| ''[[:d:Q15453116|Michael Shepherd]]''
|
|
|
|-
| style='text-align:right'| 4891
| ''[[:d:Q15453135|John Hughes]]''
| [[Coadan:John Hughes editor 1985.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4892
| ''[[:d:Q15453626|John Bowen]]''
| [[Coadan:John Bowen (bishop).png|center|128px]]
|
|
|-
| style='text-align:right'| 4893
| ''[[:d:Q15453717|Charles Wynford Parsons]]''
|
|
|
|-
| style='text-align:right'| 4894
| ''[[:d:Q15453874|Paul Ferris]]''
|
|
|
|-
| style='text-align:right'| 4895
| ''[[:d:Q15453944|Terence Rees]]''
|
|
|
|-
| style='text-align:right'| 4896
| ''[[:d:Q15454409|Myfanwy Haycock]]''
|
|
|
|-
| style='text-align:right'| 4897
| ''[[:d:Q15456236|William Williams]]''
| [[Coadan:Portrait of W. Williams (4673914).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4898
| ''[[:d:Q28361695|Foulk Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 4899
| ''[[:d:Q28361697|Robert Williamson]]''
|
|
|
|-
| style='text-align:right'| 4900
| ''[[:d:Q28361707|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4901
| ''[[:d:Q28361705|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4902
| ''[[:d:Q28361711|Daniel Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4903
| ''[[:d:Q28361719|William Williams]]''
|
|
|
|-
| style='text-align:right'| 4904
| ''[[:d:Q28361717|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 4905
| ''[[:d:Q28361723|William Williams]]''
|
|
|
|-
| style='text-align:right'| 4906
| ''[[:d:Q28361726|William Williams]]''
|
|
|
|-
| style='text-align:right'| 4907
| ''[[:d:Q28416510|William Warrington]]''
|
|
|
|-
| style='text-align:right'| 4908
| ''[[:d:Q28509045|Charles Evans]]''
|
|
|
|-
| style='text-align:right'| 4909
| ''[[:d:Q28523296|David Dilwyn John]]''
|
|
|
|-
| style='text-align:right'| 4910
| ''[[:d:Q28528581|Arthur Gimblett]]''
|
|
|
|-
| style='text-align:right'| 4911
| ''[[:d:Q28531012|William Price]]''
|
|
|
|-
| style='text-align:right'| 4912
| ''[[:d:Q28531231|Samuel Elliott]]''
|
|
|
|-
| style='text-align:right'| 4913
| ''[[:d:Q28600790|Mary Williams]]''
| [[Coadan:Mary Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4914
| ''[[:d:Q28731295|Sion Trevor]]''
| [[Coadan:Sion Trefor (m. 1589) Gresffordd. John Trevor (d. 1589) Gresford Church, Cymru Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4915
| ''[[:d:Q28741101|Cyril Lewis]]''
|
|
|
|-
| style='text-align:right'| 4916
| ''[[:d:Q28748041|David Collier]]''
|
|
|
|-
| style='text-align:right'| 4917
| ''[[:d:Q28752872|Doreen Vermeulen-Cranch]]''
|
|
|
|-
| style='text-align:right'| 4918
| ''[[:d:Q28777314|André Hue]]''
|
|
|
|-
| style='text-align:right'| 4919
| ''[[:d:Q28823400|Huw O. Pritchard]]''
|
|
|
|-
| style='text-align:right'| 4920
| ''[[:d:Q28867978|Frank Squires]]''
|
|
|
|-
| style='text-align:right'| 4921
| ''[[:d:Q28868083|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 4922
| ''[[:d:Q28870737|Louis Ford]]''
|
|
|
|-
| style='text-align:right'| 4923
| ''[[:d:Q28922150|Wyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 4924
| ''[[:d:Q28935566|Leonora Brito]]''
|
|
|
|-
| style='text-align:right'| 4925
| ''[[:d:Q28972086|John Audland]]''
|
|
|
|-
| style='text-align:right'| 4926
| ''[[:d:Q29021227|Selina Rushbrook]]''
|
|
|
|-
| style='text-align:right'| 4927
| ''[[:d:Q29029634|John Puleston]]''
|
|
|
|-
| style='text-align:right'| 4928
| ''[[:d:Q29034214|Roger Jenkins]]''
| [[Coadan:Jenkins, Roger 1981-06-20.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4929
| ''[[:d:Q29447102|Randall Baker]]''
|
|
|
|-
| style='text-align:right'| 4930
| ''[[:d:Q29578277|John Huw Lewis]]''
|
|
|
|-
| style='text-align:right'| 4931
| ''[[:d:Q29642353|Beverley Beech]]''
|
|
|
|-
| style='text-align:right'| 4932
| ''[[:d:Q29643012|Jack Howell]]''
|
|
|
|-
| style='text-align:right'| 4933
| ''[[:d:Q29643019|Jeff Hughes]]''
|
|
|
|-
| style='text-align:right'| 4934
| ''[[:d:Q29643376|Michael Oliver]]''
|
|
|
|-
| style='text-align:right'| 4935
| ''[[:d:Q29643800|Martin Williams]]''
|
|
|
|-
| style='text-align:right'| 4936
| ''[[:d:Q29869245|Dafydd Dafis]]''
|
|
|
|-
| style='text-align:right'| 4937
| ''[[:d:Q29904560|John Potter]]''
|
|
|
|-
| style='text-align:right'| 4938
| ''[[:d:Q29948275|Rosalind Rusbridge]]''
|
|
|
|-
| style='text-align:right'| 4939
| ''[[:d:Q29956338|D. F. Brewer]]''
|
|
|
|-
| style='text-align:right'| 4940
| ''[[:d:Q29966512|Edith Downing]]''
|
|
|
|-
| style='text-align:right'| 4941
| ''[[:d:Q30105096|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 4942
| ''[[:d:Q30110173|Jack Windsor Lewis]]''
|
|
|
|-
| style='text-align:right'| 4943
| ''[[:d:Q30122806|Albert Derrick]]''
|
|
|
|-
| style='text-align:right'| 4944
| ''[[:d:Q30344574|Geraint Dyfnallt Owen]]''
|
|
|
|-
| style='text-align:right'| 4945
| ''[[:d:Q30500638|Joan Cowick]]''
| [[Coadan:Shipyard Sally Pic.png|center|128px]]
|
|
|-
| style='text-align:right'| 4946
| ''[[:d:Q30605435|Brinley Rees]]''
|
|
|
|-
| style='text-align:right'| 4947
| ''[[:d:Q30609027|William Ellis Williams]]''
|
|
|
|-
| style='text-align:right'| 4948
| ''[[:d:Q30609165|Billy Hughes]]''
|
|
|
|-
| style='text-align:right'| 4949
| ''[[:d:Q30609386|Tom Green]]''
|
|
|
|-
| style='text-align:right'| 4950
| ''[[:d:Q30612083|John Davies]]''
|
|
|
|-
| style='text-align:right'| 4951
| ''[[:d:Q31358714|Hywel Sele]]''
|
|
|
|-
| style='text-align:right'| 4952
| ''[[:d:Q32062166|G. W. Hemans]]''
|
|
|
|-
| style='text-align:right'| 4953
| ''[[:d:Q32131488|Jane Anne Lloyd]]''
|
|
|
|-
| style='text-align:right'| 4954
| ''[[:d:Q33083014|John Cedric Griffiths]]''
|
|
|
|-
| style='text-align:right'| 4955
| ''[[:d:Q33634794|Alfie Clarke]]''
|
|
|
|-
| style='text-align:right'| 4956
| ''[[:d:Q33712219|Tommy Wolfe]]''
|
|
|
|-
| style='text-align:right'| 4957
| ''[[:d:Q33818814|Estyn Griffths]]''
|
|
|
|-
| style='text-align:right'| 4958
| ''[[:d:Q33821432|Keith Huntley]]''
|
|
|
|-
| style='text-align:right'| 4959
| ''[[:d:Q33825302|Les Orphan]]''
|
|
|
|-
| style='text-align:right'| 4960
| ''[[:d:Q35160552|John Francon Williams]]''
| [[Coadan:John Francon Williams 1854-1911 Commemorative Plaque.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4961
| ''[[:d:Q35695307|Enoch Rowland Jones]]''
|
|
|
|-
| style='text-align:right'| 4962
| ''[[:d:Q37347750|David Humphrey Jones]]''
|
|
|
|-
| style='text-align:right'| 4963
| ''[[:d:Q37509560|David Rice Rees]]''
|
|
|
|-
| style='text-align:right'| 4964
| ''[[:d:Q37663328|John Bird]]''
|
|
|
|-
| style='text-align:right'| 4965
| ''[[:d:Q37725178|Gary Roach]]''
|
|
|
|-
| style='text-align:right'| 4966
| ''[[:d:Q37804072|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 4967
| ''[[:d:Q37826665|Josiah Thomas]]''
|
|
|
|-
| style='text-align:right'| 4968
| ''[[:d:Q37892401|Henry Hughes]]''
|
|
|
|-
| style='text-align:right'| 4969
| ''[[:d:Q38009527|David O'Brien Owen]]''
|
|
|
|-
| style='text-align:right'| 4970
| ''[[:d:Q38170780|William Watkin Davies]]''
|
|
|
|-
| style='text-align:right'| 4971
| ''[[:d:Q38209921|Noel Lloyd]]''
| [[Coadan:Yr Athro Noel Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 4972
| ''[[:d:Q38216587|Marie Trevelyan]]''
|
|
|
|-
| style='text-align:right'| 4973
| ''[[:d:Q38606122|Emily Davis]]''
|
|
|
|-
| style='text-align:right'| 4974
| ''[[:d:Q38686224|Alison Bielski]]''
|
|
|
|-
| style='text-align:right'| 4975
| ''[[:d:Q38898929|Paul Dickson]]''
|
|
|
|-
| style='text-align:right'| 4976
| ''[[:d:Q39039624|Billy Moore]]''
|
|
|
|-
| style='text-align:right'| 4977
| ''[[:d:Q39039625|Derek Williams]]''
|
|
|
|-
| style='text-align:right'| 4978
| ''[[:d:Q39040013|Peter Elias Jones]]''
|
|
|
|-
| style='text-align:right'| 4979
| ''[[:d:Q39040026|Mary Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 4980
| ''[[:d:Q39078711|Albert Derrick]]''
|
|
|
|-
| style='text-align:right'| 4981
| ''[[:d:Q39078898|Sam Davies]]''
|
|
|
|-
| style='text-align:right'| 4982
| ''[[:d:Q39078897|Glyn Davies]]''
|
|
|
|-
| style='text-align:right'| 4983
| ''[[:d:Q39078904|Roy McDonald]]''
|
|
|
|-
| style='text-align:right'| 4984
| ''[[:d:Q39078905|George Wheeler]]''
|
|
|
|-
| style='text-align:right'| 4985
| ''[[:d:Q39078914|Peter Davies]]''
|
|
|
|-
| style='text-align:right'| 4986
| ''[[:d:Q39078917|Les Jones]]''
|
|
|
|-
| style='text-align:right'| 4987
| ''[[:d:Q39295246|Sir Edmund Buckley, 2nd Baronet]]''
|
|
|
|-
| style='text-align:right'| 4988
| ''[[:d:Q40889067|Basil Cottle]]''
|
|
|
|-
| style='text-align:right'| 4989
| ''[[:d:Q41019354|Gino Basille]]''
|
|
|
|-
| style='text-align:right'| 4990
| ''[[:d:Q41198636|John Wilkes Poundley]]''
|
|
|
|-
| style='text-align:right'| 4991
| ''[[:d:Q41701277|John Wynne Jones]]''
|
|
|
|-
| style='text-align:right'| 4992
| ''[[:d:Q41767537|Christopher Vaughan Edwards]]''
|
|
|
|-
| style='text-align:right'| 4993
| ''[[:d:Q42186286|William Powell]]''
|
|
|
|-
| style='text-align:right'| 4994
| ''[[:d:Q42434789|Archie Ridley]]''
|
|
|
|-
| style='text-align:right'| 4995
| ''[[:d:Q42774158|Colin St. Clair Oakes]]''
|
|
|
|-
| style='text-align:right'| 4996
| ''[[:d:Q43127454|Irwin John David Bevan]]''
|
|
|
|-
| style='text-align:right'| 4997
| ''[[:d:Q20733170|Herman Jones]]''
|
|
|
|-
| style='text-align:right'| 4998
| ''[[:d:Q20733168|Herbert Jenkins]]''
|
|
|
|-
| style='text-align:right'| 4999
| ''[[:d:Q20733169|Herbert Morgan]]''
| [[Coadan:The Rev. Herbert Morgan M.A (5349013).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5000
| ''[[:d:Q20733178|Hopkin Bevan]]''
|
|
|
|-
| style='text-align:right'| 5001
| ''[[:d:Q20733179|Howel Davies]]''
|
|
|
|-
| style='text-align:right'| 5002
| ''[[:d:Q20733182|Howell Powell]]''
|
|
|
|-
| style='text-align:right'| 5003
| ''[[:d:Q20733181|Howell Howells]]''
|
|
|
|-
| style='text-align:right'| 5004
| ''[[:d:Q20733186|Hugh Davies]]''
|
|
|
|-
| style='text-align:right'| 5005
| ''[[:d:Q20733185|Hugh Carter]]''
|
|
|
|-
| style='text-align:right'| 5006
| ''[[:d:Q20733189|Hugh Evans]]''
|
|
|
|-
| style='text-align:right'| 5007
| ''[[:d:Q20733195|Hugh Jones]]''
| [[Coadan:Parch Hugh Jones (EF).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5008
| ''[[:d:Q20733192|Hugh Hughes]]''
|
|
|
|-
| style='text-align:right'| 5009
| ''[[:d:Q20733198|Hugh Maurice]]''
|
|
|
|-
| style='text-align:right'| 5010
| ''[[:d:Q20733199|Hugh Michael Hughes]]''
| [[Coadan:Hugh Michael Hughes.tif|center|128px]]
|
|
|-
| style='text-align:right'| 5011
| ''[[:d:Q20733196|Hugh Jones]]''
| [[Coadan:Portrait of Hugh Jones ('Erfyl') (4670306).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5012
| ''[[:d:Q20733197|Hugh Jones]]''
| [[Coadan:Hugh Jones, Caerfyrddin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5013
| ''[[:d:Q20733203|Hugh Owen]]''
|
|
|
|-
| style='text-align:right'| 5014
| ''[[:d:Q20733201|Hugh Owen of Gwenynog]]''
|
|
|
|-
| style='text-align:right'| 5015
| ''[[:d:Q20733206|Hugh Roberts]]''
|
|
|
|-
| style='text-align:right'| 5016
| ''[[:d:Q20733204|Hugh Owen]]''
|
|
|
|-
| style='text-align:right'| 5017
| ''[[:d:Q20733205|Hugh Robert Hughes]]''
| [[Coadan:Portrait of Hugh Robert Hughes (of Kinmel and Dinorben, Denbighshire) (4674698).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5018
| ''[[:d:Q20733211|Humphrey Bromley]]''
|
|
|
|-
| style='text-align:right'| 5019
| ''[[:d:Q20733208|Hugh Tudwal Davies]]''
| [[Coadan:Hugh Tudwal Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5020
| ''[[:d:Q20733209|Hugh William Jones]]''
|
|
|
|-
| style='text-align:right'| 5021
| ''[[:d:Q20733214|Humphrey Gwalchmai]]''
|
|
|
|-
| style='text-align:right'| 5022
| ''[[:d:Q20733215|Humphrey Jones]]''
| [[Coadan:Humphrey Jones (Bryfdir).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5023
| ''[[:d:Q20733213|Humphrey Edwards]]''
|
|
|
|-
| style='text-align:right'| 5024
| ''[[:d:Q20733216|Humphrey Parry]]''
|
|
|
|-
| style='text-align:right'| 5025
| ''[[:d:Q20733222|Huw Arwystli]]''
|
|
|
|-
| style='text-align:right'| 5026
| ''[[:d:Q20733227|Huw Ellis]]''
|
|
|
|-
| style='text-align:right'| 5027
| ''[[:d:Q20733248|Hywel David Emanuel]]''
|
|
|
|-
| style='text-align:right'| 5028
| ''[[:d:Q20733249|Hywel Davies]]''
|
|
|
|-
| style='text-align:right'| 5029
| ''[[:d:Q20733254|Idwal Jones]]''
|
|
|
|-
| style='text-align:right'| 5030
| ''[[:d:Q20733255|Iestyn Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 5031
| ''[[:d:Q20733253|Idris Thomas]]''
|
|
|
|-
| style='text-align:right'| 5032
| ''[[:d:Q20733268|Ieuan Brechfa]]''
|
|
|
|-
| style='text-align:right'| 5033
| ''[[:d:Q20733278|Ieuan Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 5034
| ''[[:d:Q20733282|Ifan Gruffudd]]''
|
|
|
|-
| style='text-align:right'| 5035
| ''[[:d:Q20733286|Ifor Thomas]]''
|
|
|
|-
| style='text-align:right'| 5036
| ''[[:d:Q20733290|Isaac James]]''
|
|
|
|-
| style='text-align:right'| 5037
| ''[[:d:Q20733291|Isaac Jenkins]]''
| [[Coadan:Portrait of Isaac Jenkins (4672921).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5038
| ''[[:d:Q20733294|Ishmael Jones]]''
| [[Coadan:Portrait of Revd. Ishmael Jones (4672932).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5039
| ''[[:d:Q20733295|Ivor Bowen]]''
|
|
|
|-
| style='text-align:right'| 5040
| ''[[:d:Q20733293|Isaac Samuel Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5041
| ''[[:d:Q20733296|Ivor James]]''
|
|
|
|-
| style='text-align:right'| 5042
| ''[[:d:Q20733297|Jabez Edmund Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5043
| ''[[:d:Q20733303|James Bilsland Hughes]]''
|
|
|
|-
| style='text-align:right'| 5044
| ''[[:d:Q20733306|James Conway Brown]]''
|
|
|
|-
| style='text-align:right'| 5045
| ''[[:d:Q20733310|James Davies]]''
|
|
|
|-
| style='text-align:right'| 5046
| ''[[:d:Q20733311|James Davies]]''
|
|
|
|-
| style='text-align:right'| 5047
| ''[[:d:Q20733309|James Davies]]''
| [[Coadan:Portrait of James Davies (4674063).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5048
| ''[[:d:Q20733314|James Evan]]''
|
|
|
|-
| style='text-align:right'| 5049
| ''[[:d:Q20733315|James Evans]]''
|
|
|
|-
| style='text-align:right'| 5050
| ''[[:d:Q20733318|James Henry Howard]]''
|
|
|
|-
| style='text-align:right'| 5051
| ''[[:d:Q20733319|James Ifano Jones]]''
| [[Coadan:Ifano Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5052
| ''[[:d:Q20733316|James Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5053
| ''[[:d:Q20733322|James Jardine]]''
|
|
|
|-
| style='text-align:right'| 5054
| ''[[:d:Q20733321|James James]]''
|
|
|
|-
| style='text-align:right'| 5055
| ''[[:d:Q20733326|James Mansel John]]''
|
|
|
|-
| style='text-align:right'| 5056
| ''[[:d:Q20733325|James Lewis]]''
|
|
|
|-
| style='text-align:right'| 5057
| ''[[:d:Q20733330|James Nicholas]]''
|
|
|
|-
| style='text-align:right'| 5058
| ''[[:d:Q20733328|James Morgan Gibbon]]''
|
|
|
|-
| style='text-align:right'| 5059
| ''[[:d:Q20733329|James Morris]]''
|
|
|
|-
| style='text-align:right'| 5060
| ''[[:d:Q20733334|James Rees]]''
|
|
|
|-
| style='text-align:right'| 5061
| ''[[:d:Q20733335|James Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 5062
| ''[[:d:Q20733338|Jehoiada Hodges]]''
|
|
|
|-
| style='text-align:right'| 5063
| ''[[:d:Q20733339|Jenkin Davies]]''
|
|
|
|-
| style='text-align:right'| 5064
| ''[[:d:Q20733342|Jenkin Lewis]]''
|
|
|
|-
| style='text-align:right'| 5065
| ''[[:d:Q20733340|Jenkin Evans]]''
|
|
|
|-
| style='text-align:right'| 5066
| ''[[:d:Q20733341|Jenkin Howell]]''
|
|
|
|-
| style='text-align:right'| 5067
| ''[[:d:Q20733346|Jethro Gough]]''
|
|
|
|-
| style='text-align:right'| 5068
| ''[[:d:Q20733347|Job David]]''
|
|
|
|-
| style='text-align:right'| 5069
| ''[[:d:Q20733350|John Arthur Sandbrook]]''
|
|
|
|-
| style='text-align:right'| 5070
| ''[[:d:Q20733351|John Ashton]]''
|
|
|
|-
| style='text-align:right'| 5071
| ''[[:d:Q20733348|John Emlyn Jones]]''
| [[Coadan:Revd John Emlyn Jones (Ioan Emlyn, 1820-73) NLW3364395.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5072
| ''[[:d:Q20733349|John Abel]]''
|
|
|
|-
| style='text-align:right'| 5073
| ''[[:d:Q20733355|John Bickerton Morgan]]''
|
|
|
|-
| style='text-align:right'| 5074
| ''[[:d:Q20733353|John Bancroft Willans]]''
|
|
|
|-
| style='text-align:right'| 5075
| ''[[:d:Q20733358|John Bryan]]''
| [[Coadan:Portrait of John Bryan (4671299) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5076
| ''[[:d:Q20733359|John Bryant]]''
|
|
|
|-
| style='text-align:right'| 5077
| ''[[:d:Q20733356|John Bird]]''
|
|
|
|-
| style='text-align:right'| 5078
| ''[[:d:Q20733357|John Breese]]''
|
|
|
|-
| style='text-align:right'| 5079
| ''[[:d:Q20733362|John Daniel]]''
|
|
|
|-
| style='text-align:right'| 5080
| ''[[:d:Q20733363|John David]]''
|
|
|
|-
| style='text-align:right'| 5081
| ''[[:d:Q20733361|John Ceredig Evans]]''
|
|
|
|-
| style='text-align:right'| 5082
| ''[[:d:Q20733367|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5083
| ''[[:d:Q20733364|John David Davies]]''
|
|
|
|-
| style='text-align:right'| 5084
| ''[[:d:Q20733365|John David Rheinallt Jones]]''
|
|
|
|-
| style='text-align:right'| 5085
| ''[[:d:Q20733370|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5086
| ''[[:d:Q20733371|John Davies]]''
| [[Coadan:Rev. John Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5087
| ''[[:d:Q20733368|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5088
| ''[[:d:Q20733374|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5089
| ''[[:d:Q20733372|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5090
| ''[[:d:Q20733378|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5091
| ''[[:d:Q20733379|John Davies]]''
| [[Coadan:Reverend John Davies, Cardiff, 1823-1874.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5092
| ''[[:d:Q20733377|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5093
| ''[[:d:Q20733382|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5094
| ''[[:d:Q20733380|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5095
| ''[[:d:Q20733381|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5096
| ''[[:d:Q15458784|Peter Reynolds]]''
| [[Coadan:Peter Reynolds Korea (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5097
| ''[[:d:Q15459489|John James]]''
|
|
|
|-
| style='text-align:right'| 5098
| ''[[:d:Q15460120|T. Harri Jones]]''
|
|
|
|-
| style='text-align:right'| 5099
| ''[[:d:Q15460645|John Trevor]]''
| [[Coadan:Sion Trevor - John Trevor (1563–1630) memorial St Cynfarch Ch, Hope, Flintshire Cymru Wales 08.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5100
| ''[[:d:Q15491437|William Ifor Jones]]''
| [[Coadan:William Ifor Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5101
| ''[[:d:Q15493820|Howard Thomas]]''
|
|
|
|-
| style='text-align:right'| 5102
| ''[[:d:Q15523834|Charles William King]]''
| [[Coadan:Retrato de C. W. King (1847) - Visconde de Meneses.png|center|128px]]
|
|
|-
| style='text-align:right'| 5103
| ''[[:d:Q15619225|William Glynne-Jones]]''
|
|
|
|-
| style='text-align:right'| 5104
| ''[[:d:Q15624399|John Evans]]''
| [[Coadan:Bardd Cocos 01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 5105
| ''[[:d:Q15637773|Kenneth "Ken" Davies]]''
|
|
|
|-
| style='text-align:right'| 5106
| ''[[:d:Q15637838|John Cooke]]''
|
|
|
|-
| style='text-align:right'| 5107
| ''[[:d:Q15806311|Donald Marcus Kelway Marendaz]]''
| [[Coadan:Marendaz (CN) - btv1b53238255h.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5108
| ''[[:d:Q15954198|Hans Busk]]''
|
|
|
|-
| style='text-align:right'| 5109
| ''[[:d:Q15967265|Sir John Beynon, 1st Baronet]]''
|
|
|
|-
| style='text-align:right'| 5110
| ''[[:d:Q15967282|Thomas Dalton-Morgan]]''
|
|
|
|-
| style='text-align:right'| 5111
| ''[[:d:Q15967649|Denis Crowley-Milling]]''
| [[Coadan:Denis Crowley-Milling, 1940.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5112
| ''[[:d:Q15969655|Meredith Thomas]]''
| [[Coadan:Air Vice-Marshal Meredith Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5113
| ''[[:d:Q15971211|Wilfrith Green]]''
|
|
|
|-
| style='text-align:right'| 5114
| ''[[:d:Q15983646|N. E. Yorke Davis]]''
| [[Coadan:Nathaniel Edward Yorke-Davies Vanity Fair 1900-04-12.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5115
| ''[[:d:Q15983878|Francis James Burgoyne]]''
|
|
|
|-
| style='text-align:right'| 5116
| ''[[:d:Q15983891|William Retlaw Williams]]''
|
|
|
|-
| style='text-align:right'| 5117
| ''[[:d:Q15987407|Leonard Llewelyn Bulkeley Williams]]''
| [[Coadan:Leonard Llewelyn Bulkeley Williams.png|center|128px]]
|
|
|-
| style='text-align:right'| 5118
| ''[[:d:Q15989799|James Allen]]''
|
|
|
|-
| style='text-align:right'| 5119
| ''[[:d:Q15990059|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 5120
| ''[[:d:Q15990317|Horace Thomas]]''
|
|
|
|-
| style='text-align:right'| 5121
| ''[[:d:Q15990363|Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 5122
| ''[[:d:Q15991633|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 5123
| ''[[:d:Q15992732|John Thomas Burton Wollaston]]''
|
|
|
|-
| style='text-align:right'| 5124
| ''[[:d:Q15993118|Huw Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5125
| ''[[:d:Q15993548|Tony Summers]]''
|
|
|
|-
| style='text-align:right'| 5126
| ''[[:d:Q15994396|William Davies]]''
|
|
|
|-
| style='text-align:right'| 5127
| ''[[:d:Q15994452|George Phillips Bevan]]''
|
|
|
|-
| style='text-align:right'| 5128
| ''[[:d:Q15994588|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5129
| ''[[:d:Q15994666|Thomas Richard Owen]]''
| [[Coadan:Thomas Richard Owen, SWGA president 1966-1968.png|center|128px]]
|
|
|-
| style='text-align:right'| 5130
| ''[[:d:Q15994689|William Phillips]]''
|
|
|
|-
| style='text-align:right'| 5131
| ''[[:d:Q15994726|Harry Morrey Salmon]]''
|
|
|
|-
| style='text-align:right'| 5132
| ''[[:d:Q15996134|Gus Merry]]''
|
|
|
|-
| style='text-align:right'| 5133
| ''[[:d:Q15996281|Howell Idris]]''
| [[Coadan:The disillusionment of Idris like a cork out of a soda-water bottle! (5236536).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5134
| ''[[:d:Q15997566|Herbert Charles Tippet]]''
|
|
|
|-
| style='text-align:right'| 5135
| ''[[:d:Q15997564|James John Thomas]]''
| [[Coadan:James John Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5136
| ''[[:d:Q15997578|Job Wilding]]''
|
|
|
|-
| style='text-align:right'| 5137
| ''[[:d:Q15998021|Phil Tanner]]''
|
|
|
|-
| style='text-align:right'| 5138
| ''[[:d:Q15998730|Joe Pullman]]''
|
|
|
|-
| style='text-align:right'| 5139
| ''[[:d:Q15998907|Nathaniel Walters]]''
|
|
|
|-
| style='text-align:right'| 5140
| ''[[:d:Q15999154|Edgar Long]]''
|
|
|
|-
| style='text-align:right'| 5141
| ''[[:d:Q15999184|Gilbert Rattenbury]]''
|
|
|
|-
| style='text-align:right'| 5142
| ''[[:d:Q15999292|Dick Duckfield]]''
|
|
|
|-
| style='text-align:right'| 5143
| ''[[:d:Q15999402|Frank Williams]]''
|
|
|
|-
| style='text-align:right'| 5144
| ''[[:d:Q15999400|Sir Evan Williams, 1st Baronet]]''
|
|
|
|-
| style='text-align:right'| 5145
| ''[[:d:Q15999467|Joseph Jones]]''
|
|
|
|-
| style='text-align:right'| 5146
| ''[[:d:Q15999888|Percy Latham]]''
| [[Coadan:Percy Holland Latham c1905.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5147
| ''[[:d:Q16000236|Lewis Pugh Evans]]''
| [[Coadan:Lewis Pugh Evans VC IWM HU 93411.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5148
| ''[[:d:Q16003649|Young Allsopp]]''
| [[Coadan:Young Allsopp, boxer.png|center|128px]]
|
|
|-
| style='text-align:right'| 5149
| ''[[:d:Q16003708|James Phillips Jones]]''
|
|
|
|-
| style='text-align:right'| 5150
| ''[[:d:Q16003922|Billy Tudor]]''
|
|
|
|-
| style='text-align:right'| 5151
| ''[[:d:Q16004072|Malcolm McColm]]''
| [[Coadan:MalcolmMcColm1956.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5152
| ''[[:d:Q16004090|Howard Poole]]''
| [[Coadan:Howard Poole 1930.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5153
| ''[[:d:Q16005766|Edward Benson]]''
|
|
|
|-
| style='text-align:right'| 5154
| ''[[:d:Q16005824|Colin Jones]]''
|
|
|
|-
| style='text-align:right'| 5155
| ''[[:d:Q16005835|Ronald Lewis]]''
|
|
|
|-
| style='text-align:right'| 5156
| ''[[:d:Q16005869|Ivor Rees]]''
| [[Coadan:Ivor Rees VC IWM Q 70903.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5157
| ''[[:d:Q16005912|Bobbie Williams]]''
|
|
|
|-
| style='text-align:right'| 5158
| ''[[:d:Q16006585|Herbert Huntingdon]]''
|
|
|
|-
| style='text-align:right'| 5159
| ''[[:d:Q16007439|Albert Mays]]''
|
|
|
|-
| style='text-align:right'| 5160
| ''[[:d:Q16007473|Wick Powell]]''
|
|
|
|-
| style='text-align:right'| 5161
| ''[[:d:Q16007476|Kenneth Raikes]]''
|
|
|
|-
| style='text-align:right'| 5162
| ''[[:d:Q16007482|Trevor Rowlands]]''
|
|
|
|-
| style='text-align:right'| 5163
| ''[[:d:Q16007521|Morris Meredith Williams]]''
|
|
|
|-
| style='text-align:right'| 5164
| ''[[:d:Q16007647|Bessie Jones]]''
|
|
|
|-
| style='text-align:right'| 5165
| ''[[:d:Q16007792|Trevor Edmunds]]''
|
|
|
|-
| style='text-align:right'| 5166
| ''[[:d:Q16007849|Tom Morgan]]''
|
|
|
|-
| style='text-align:right'| 5167
| ''[[:d:Q16007857|R. Ifor Parry]]''
|
|
|
|-
| style='text-align:right'| 5168
| ''[[:d:Q16008200|Glyn Gething]]''
|
|
|
|-
| style='text-align:right'| 5169
| ''[[:d:Q16008355|Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 5170
| ''[[:d:Q16008415|William Marsh]]''
|
|
|
|-
| style='text-align:right'| 5171
| ''[[:d:Q16008683|Harold Finch]]''
|
|
|
|-
| style='text-align:right'| 5172
| ''[[:d:Q16008703|Tyssul Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5173
| ''[[:d:Q16008819|Jackie Williams]]''
|
|
|
|-
| style='text-align:right'| 5174
| ''[[:d:Q16009241|Thomas Danter]]''
|
|
|
|-
| style='text-align:right'| 5175
| ''[[:d:Q16009948|George Crisp]]''
|
|
|
|-
| style='text-align:right'| 5176
| ''[[:d:Q16010271|Len Attewell]]''
|
|
|
|-
| style='text-align:right'| 5177
| ''[[:d:Q16011255|Leslie Harris]]''
|
|
|
|-
| style='text-align:right'| 5178
| ''[[:d:Q16011565|Howard Ford]]''
|
|
|
|-
| style='text-align:right'| 5179
| ''[[:d:Q16011583|Bert Hodges]]''
|
|
|
|-
| style='text-align:right'| 5180
| ''[[:d:Q16011855|Ernie Carless]]''
|
|
|
|-
| style='text-align:right'| 5181
| ''[[:d:Q16011912|Jimmy Jewell]]''
|
|
|
|-
| style='text-align:right'| 5182
| ''[[:d:Q16012094|David Jones]]''
|
|
|
|-
| style='text-align:right'| 5183
| ''[[:d:Q16012333|Wynne Samuel]]''
|
|
|
|-
| style='text-align:right'| 5184
| ''[[:d:Q16012454|David Jones]]''
|
|
|
|-
| style='text-align:right'| 5185
| ''[[:d:Q16012809|Roderick Jones]]''
|
|
|
|-
| style='text-align:right'| 5186
| ''[[:d:Q16013064|Dennis Powell]]''
| [[Coadan:Boxing - Dennis Powell v Mel Brown (USA).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5187
| ''[[:d:Q16013604|Thomas Nathaniel Davies]]''
|
|
|
|-
| style='text-align:right'| 5188
| ''[[:d:Q16013662|Willie Jones]]''
|
|
|
|-
| style='text-align:right'| 5189
| ''[[:d:Q16013737|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 5190
| ''[[:d:Q16015013|Walter Vickery]]''
|
|
|
|-
| style='text-align:right'| 5191
| ''[[:d:Q16015267|Dafydd Rowlands]]''
| [[Coadan:National Eisteddfod 1972, Haverfordwest (1580227).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5192
| ''[[:d:Q16015315|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 5193
| ''[[:d:Q16015743|Leslie James Bennett]]''
|
|
|
|-
| style='text-align:right'| 5194
| ''[[:d:Q16015797|Graham Davies]]''
|
|
|
|-
| style='text-align:right'| 5195
| ''[[:d:Q56186351|Owen Williamson]]''
|
|
|
|-
| style='text-align:right'| 5196
| ''[[:d:Q56186374|Margaret Wingfield]]''
|
|
|
|-
| style='text-align:right'| 5197
| ''[[:d:Q56186690|William Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 5198
| ''[[:d:Q56186692|Myfanwy Williams Parry]]''
|
|
|
|-
| style='text-align:right'| 5199
| ''[[:d:Q56186718|Siân Williams]]''
|
|
|
|-
| style='text-align:right'| 5200
| ''[[:d:Q56186735|John Pugh]]''
|
|
|
|-
| style='text-align:right'| 5201
| ''[[:d:Q56186754|Tydfor Jones]]''
|
|
|
|-
| style='text-align:right'| 5202
| ''[[:d:Q56186763|Owen Owen]]''
|
|
|
|-
| style='text-align:right'| 5203
| ''[[:d:Q56186791|Dai Williams]]''
|
|
|
|-
| style='text-align:right'| 5204
| ''[[:d:Q56186795|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5205
| ''[[:d:Q56186801|Iorwerth Hughes Jones]]''
|
|
|
|-
| style='text-align:right'| 5206
| ''[[:d:Q56186828|John Buckland Thomas]]''
|
|
|
|-
| style='text-align:right'| 5207
| ''[[:d:Q56186834|Giraldus Jones]]''
|
|
|
|-
| style='text-align:right'| 5208
| ''[[:d:Q56186848|Rachel Mary Davies]]''
|
|
|
|-
| style='text-align:right'| 5209
| ''[[:d:Q56186852|Robert Roberts]]''
| [[Coadan:Dr Robert Roberts (Isallt 1839-1914).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5210
| ''[[:d:Q56186886|Morris Peat]]''
|
|
|
|-
| style='text-align:right'| 5211
| ''[[:d:Q56186920|Griffith Williams]]''
|
|
|
|-
| style='text-align:right'| 5212
| ''[[:d:Q56186942|Haydn Jones]]''
|
|
|
|-
| style='text-align:right'| 5213
| ''[[:d:Q56186987|William Cosslett]]''
|
|
|
|-
| style='text-align:right'| 5214
| ''[[:d:Q56186985|Thomas James Davies]]''
|
|
|
|-
| style='text-align:right'| 5215
| ''[[:d:Q56187014|Islwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 5216
| ''[[:d:Q56187067|Elizabeth Elen Roberts]]''
|
|
|
|-
| style='text-align:right'| 5217
| ''[[:d:Q56187082|Brinley Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5218
| ''[[:d:Q56187112|Richard Ellis Williams]]''
|
|
|
|-
| style='text-align:right'| 5219
| ''[[:d:Q56187113|Thomas Llewellyn Stephens]]''
|
|
|
|-
| style='text-align:right'| 5220
| ''[[:d:Q56187126|Evan John Williams]]''
|
|
|
|-
| style='text-align:right'| 5221
| ''[[:d:Q56187127|Ffowc Williams]]''
|
|
|
|-
| style='text-align:right'| 5222
| ''[[:d:Q56187139|Harri Samuel]]''
|
|
|
|-
| style='text-align:right'| 5223
| ''[[:d:Q56187142|Hugh Roberts]]''
|
|
|
|-
| style='text-align:right'| 5224
| ''[[:d:Q56187149|Sion Phylip]]''
|
|
|
|-
| style='text-align:right'| 5225
| ''[[:d:Q56187160|Cassie Simon]]''
|
|
|
|-
| style='text-align:right'| 5226
| ''[[:d:Q56187161|Tom Williams]]''
|
|
|
|-
| style='text-align:right'| 5227
| ''[[:d:Q56187176|David Cynddelw Williams]]''
|
|
|
|-
| style='text-align:right'| 5228
| ''[[:d:Q56187190|Annie Julian Parry]]''
|
|
|
|-
| style='text-align:right'| 5229
| ''[[:d:Q56187231|David Peate]]''
|
|
|
|-
| style='text-align:right'| 5230
| ''[[:d:Q56187241|Mattie Adele Gwynne Evans]]''
|
|
|
|-
| style='text-align:right'| 5231
| ''[[:d:Q56187272|Glyn Williams]]''
|
|
|
|-
| style='text-align:right'| 5232
| ''[[:d:Q56187280|Mati Rees]]''
|
|
|
|-
| style='text-align:right'| 5233
| ''[[:d:Q56187291|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 5234
| ''[[:d:Q56187302|William Jones]]''
|
|
|
|-
| style='text-align:right'| 5235
| ''[[:d:Q56187325|Robert D. Edwards]]''
|
|
|
|-
| style='text-align:right'| 5236
| ''[[:d:Q56187369|Caleb Chivers]]''
|
|
|
|-
| style='text-align:right'| 5237
| ''[[:d:Q56187381|John Davies]]''
|
|
|
|-
| style='text-align:right'| 5238
| ''[[:d:Q56187415|Daniel Evans]]''
|
|
|
|-
| style='text-align:right'| 5239
| ''[[:d:Q56187420|John Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 5240
| ''[[:d:Q56187424|Joseph Evans]]''
|
|
|
|-
| style='text-align:right'| 5241
| ''[[:d:Q56187471|Ethel Dora Heins]]''
|
|
|
|-
| style='text-align:right'| 5242
| ''[[:d:Q56187527|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 5243
| ''[[:d:Q56187543|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5244
| ''[[:d:Q56187572|William Lewes]]''
|
|
|
|-
| style='text-align:right'| 5245
| ''[[:d:Q56187576|Henry Isgaer Lewis]]''
|
|
|
|-
| style='text-align:right'| 5246
| ''[[:d:Q56187626|Job Miles]]''
|
|
|
|-
| style='text-align:right'| 5247
| ''[[:d:Q56187643|Benjamin Joseph Morse]]''
|
|
|
|-
| style='text-align:right'| 5248
| ''[[:d:Q56187671|Hugh T. Owen]]''
|
|
|
|-
| style='text-align:right'| 5249
| ''[[:d:Q56187675|Robert Owen]]''
|
|
|
|-
| style='text-align:right'| 5250
| ''[[:d:Q56187742|David Roberts]]''
| [[Coadan:Portrait of Dr. David Roberts, 'Dewi Ogwen', of Wrexham (4670497).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5251
| ''[[:d:Q56187751|Thomas Gwynedd Roberts]]''
|
|
|
|-
| style='text-align:right'| 5252
| ''[[:d:Q56187761|Lewis Christmas, Rev. Simons]]''
|
|
|
|-
| style='text-align:right'| 5253
| ''[[:d:Q56187789|Richard Tibbott]]''
|
|
|
|-
| style='text-align:right'| 5254
| ''[[:d:Q56187818|Elizabeth Phillipps Williams]]''
|
|
|
|-
| style='text-align:right'| 5255
| ''[[:d:Q56187928|William Wynn]]''
|
|
|
|-
| style='text-align:right'| 5256
| ''[[:d:Q56226224|Steve Kenworthy]]''
|
|
|
|-
| style='text-align:right'| 5257
| ''[[:d:Q56248408|Glyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 5258
| ''[[:d:Q56248566|George Jones]]''
|
|
|
|-
| style='text-align:right'| 5259
| ''[[:d:Q56254513|Dennis Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5260
| ''[[:d:Q56254683|Joe Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5261
| ''[[:d:Q56291966|Peter Maurice]]''
|
|
|
|-
| style='text-align:right'| 5262
| ''[[:d:Q56374089|James Alfred Vanes]]''
|
|
|
|-
| style='text-align:right'| 5263
| ''[[:d:Q56423618|Clifford Jack Spurgeon]]''
|
|
|
|-
| style='text-align:right'| 5264
| ''[[:d:Q56448683|Kenneth Bowen]]''
| [[Coadan:Kenneth Bowen (tenor).png|center|128px]]
|
|
|-
| style='text-align:right'| 5265
| ''[[:d:Q56517052|Alice Bunting]]''
| [[Coadan:Alice Bunting (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5266
| ''[[:d:Q56569685|Benjamin Roose]]''
| [[Coadan:Benjamin Roos, Parys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5267
| ''[[:d:Q56596108|Brownlow Wynne Cumming]]''
| [[Coadan:Wynne Brownlow.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5268
| ''[[:d:Q56598139|Richard Roberts]]''
| [[Coadan:Portrait of Richard Roberts Esq (4670515).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5269
| ''[[:d:Q56599693|Eddie Beynon]]''
|
|
|
|-
| style='text-align:right'| 5270
| ''[[:d:Q56611801|John Henry Davies]]''
|
|
|
|-
| style='text-align:right'| 5271
| ''[[:d:Q56650872|Catherine Lewis]]''
| [[Coadan:Catherine Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5272
| ''[[:d:Q56651111|Catherine Anwyl]]''
| [[Coadan:Catherine Owen, daughter Lewis Anwyl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5273
| ''[[:d:Q56651238|Charles Martin Strick Humphreys]]''
| [[Coadan:Charles Martin Strick Humphreys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5274
| ''[[:d:Q56651639|Ebenezer Cooper]]''
| [[Coadan:Ebenezer Cooper, Llangollen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5275
| ''[[:d:Q56663821|Howell Gwynne]]''
|
|
|
|-
| style='text-align:right'| 5276
| ''[[:d:Q56676566|Mary Eleanor Hamlyn-Williams]]''
| [[Coadan:Lady M.E. Hamlyn Williams & Sir H. Drummond.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5277
| ''[[:d:Q56685080|Margaret Wynne]]''
| [[Coadan:Margaret Wynne (1722 -).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5278
| ''[[:d:Q56739671|John Wilson]]''
| [[Coadan:Revd John Wilson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5279
| ''[[:d:Q56753204|Thomas Williams]]''
| [[Coadan:Thos Williams, JP, Gwaelodygarth 1823-03.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5280
| ''[[:d:Q56798470|Gareth Crwys-Williams]]''
|
|
|
|-
| style='text-align:right'| 5281
| ''[[:d:Q56809237|Charlie Kelsall]]''
|
|
|
|-
| style='text-align:right'| 5282
| ''[[:d:Q56811976|Gib Bellis]]''
|
|
|
|-
| style='text-align:right'| 5283
| ''[[:d:Q56849322|James Lawton]]''
|
|
|
|-
| style='text-align:right'| 5284
| ''[[:d:Q56868240|Isaac Jones]]''
|
|
|
|-
| style='text-align:right'| 5285
| ''[[:d:Q56885702|William James Orville-Thomas]]''
|
|
|
|-
| style='text-align:right'| 5286
| ''[[:d:Q57156069|William Bernard Ready]]''
|
|
|
|-
| style='text-align:right'| 5287
| ''[[:d:Q57239164|Trevor Peck]]''
|
|
|
|-
| style='text-align:right'| 5288
| ''[[:d:Q57293437|Charles Henry Pugh]]''
|
|
|
|-
| style='text-align:right'| 5289
| ''[[:d:Q57342401|Dennis Callan]]''
|
|
|
|-
| style='text-align:right'| 5290
| ''[[:d:Q57342446|Thomas Eyton-Jones]]''
| [[Coadan:Dr Thomas Eyton-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5291
| ''[[:d:Q57418933|John William Duncan]]''
| [[Coadan:Duncan, John William (1903 cricket first X1 team photo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5292
| ''[[:d:Q57449691|Benjamin Parry]]''
|
|
|
|-
| style='text-align:right'| 5293
| ''[[:d:Q57498379|Joseph Williams]]''
|
|
|
|-
| style='text-align:right'| 5294
| ''[[:d:Q57541918|Robin Williams]]''
|
|
|
|-
| style='text-align:right'| 5295
| ''[[:d:Q20733386|John Davies]]''
| [[Coadan:John Davies (Gwyneddon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5296
| ''[[:d:Q20733390|John Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 5297
| ''[[:d:Q20733388|John Davies]]''
| [[Coadan:John Davies (Taliesin Hiraethog, 1841-94) NLW3364595.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5298
| ''[[:d:Q20733394|John Edward Tomley]]''
|
|
|
|-
| style='text-align:right'| 5299
| ''[[:d:Q20733395|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 5300
| ''[[:d:Q20733398|John Edwards]]''
|
|
|
|-
| style='text-align:right'| 5301
| ''[[:d:Q20733402|John Edwards Griffith]]''
|
|
|
|-
| style='text-align:right'| 5302
| ''[[:d:Q20733403|John Elias Davies]]''
|
|
|
|-
| style='text-align:right'| 5303
| ''[[:d:Q20733406|John Emrys Evans]]''
|
|
|
|-
| style='text-align:right'| 5304
| ''[[:d:Q20733407|John Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 5305
| ''[[:d:Q20733404|John Ellis]]''
|
|
|
|-
| style='text-align:right'| 5306
| ''[[:d:Q20733405|John Ellis Meredith]]''
|
|
|
|-
| style='text-align:right'| 5307
| ''[[:d:Q20733410|John Evans]]''
|
|
|
|-
| style='text-align:right'| 5308
| ''[[:d:Q20733408|John Evan Hughes]]''
|
|
|
|-
| style='text-align:right'| 5309
| ''[[:d:Q20733414|John Evans]]''
| [[Coadan:Mr John Evans, Bala.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5310
| ''[[:d:Q20733418|John Evans]]''
| [[Coadan:John Evans, Abermeurig.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5311
| ''[[:d:Q20733419|John Evans Jones]]''
| [[Coadan:Evans Jones, Yr Herald.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5312
| ''[[:d:Q20733416|John Evans]]''
|
|
|
|-
| style='text-align:right'| 5313
| ''[[:d:Q20733417|John Evans]]''
| [[Coadan:John Evans, Aberystwyth (5348990).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5314
| ''[[:d:Q20733422|John Francis]]''
|
|
|
|-
| style='text-align:right'| 5315
| ''[[:d:Q20733420|John Fisher]]''
|
|
|
|-
| style='text-align:right'| 5316
| ''[[:d:Q20733421|John Foulkes Jones]]''
|
|
|
|-
| style='text-align:right'| 5317
| ''[[:d:Q20733426|John Griffith]]''
|
|
|
|-
| style='text-align:right'| 5318
| ''[[:d:Q20733427|John Griffith Davies]]''
|
|
|
|-
| style='text-align:right'| 5319
| ''[[:d:Q20733430|John Gwynoro Davies]]''
| [[Coadan:John Gwynoro Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5320
| ''[[:d:Q20733434|John Harris Jones]]''
| [[Coadan:Portrait of Y Parchedig John Harris Jones, M.A., Ph.D (4670334).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5321
| ''[[:d:Q20733439|John Henry Hughes]]''
|
|
|
|-
| style='text-align:right'| 5322
| ''[[:d:Q20733437|John Henry]]''
|
|
|
|-
| style='text-align:right'| 5323
| ''[[:d:Q20733441|John Herbert Jones]]''
|
|
|
|-
| style='text-align:right'| 5324
| ''[[:d:Q20733444|John Herring]]''
|
|
|
|-
| style='text-align:right'| 5325
| ''[[:d:Q20733450|John Hughes]]''
| [[Coadan:Portrait of Y Parchg. John Hughes, Pont Robert (4670916).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5326
| ''[[:d:Q20733455|John Hughes]]''
| [[Coadan:Portrait of John Hughes (4670278) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5327
| ''[[:d:Q20733459|John Humphreys]]''
|
|
|
|-
| style='text-align:right'| 5328
| ''[[:d:Q20733461|John Idris Davies]]''
|
|
|
|-
| style='text-align:right'| 5329
| ''[[:d:Q20733467|John James]]''
|
|
|
|-
| style='text-align:right'| 5330
| ''[[:d:Q20733465|John James]]''
| [[Coadan:Portrait of John James (4673313).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5331
| ''[[:d:Q20733475|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5332
| ''[[:d:Q20733473|John Jeffreys]]''
|
|
|
|-
| style='text-align:right'| 5333
| ''[[:d:Q20733478|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5334
| ''[[:d:Q20733482|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5335
| ''[[:d:Q20733480|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5336
| ''[[:d:Q20733486|John John Evans]]''
|
|
|
|-
| style='text-align:right'| 5337
| ''[[:d:Q20733484|John Jeremy]]''
|
|
|
|-
| style='text-align:right'| 5338
| ''[[:d:Q20733488|John Johnes]]''
| [[Coadan:Portrait of John Johnes (4673754).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5339
| ''[[:d:Q20733494|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5340
| ''[[:d:Q20733492|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5341
| ''[[:d:Q20733498|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5342
| ''[[:d:Q20733496|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5343
| ''[[:d:Q20733502|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5344
| ''[[:d:Q20733500|John Jones]]''
| [[Coadan:Mr John Jones, L'pool. printer, preacher.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5345
| ''[[:d:Q20733506|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5346
| ''[[:d:Q20733504|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5347
| ''[[:d:Q20733510|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5348
| ''[[:d:Q20733508|John Jones]]''
| [[Coadan:Revd. John Jones, Blaenannerch (1807-1875) NLW3362409.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5349
| ''[[:d:Q20733513|John Jones]]''
| [[Coadan:Reverend Dr John Cynddylan Jones (1841–1930) (gcf10082).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5350
| ''[[:d:Q20733518|John Jones]]''
| [[Coadan:Revd John Jones (Humilis, 1818-69) NLW3361063.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5351
| ''[[:d:Q20733516|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5352
| ''[[:d:Q20733522|John Jones]]''
| [[Coadan:Revd John Jones (Vulcan, 1825-89) NLW3363082.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5353
| ''[[:d:Q20733520|John Jones]]''
| [[Coadan:John Jones (Ivon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5354
| ''[[:d:Q20733527|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5355
| ''[[:d:Q20733525|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5356
| ''[[:d:Q20733529|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5357
| ''[[:d:Q20733539|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 5358
| ''[[:d:Q20733543|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 5359
| ''[[:d:Q20733541|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 5360
| ''[[:d:Q20733551|John Lloyd Davies]]''
|
|
|
|-
| style='text-align:right'| 5361
| ''[[:d:Q20733549|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5362
| ''[[:d:Q20733555|John Luther Thomas]]''
|
|
|
|-
| style='text-align:right'| 5363
| ''[[:d:Q20733553|John Lloyd James]]''
|
|
|
|-
| style='text-align:right'| 5364
| ''[[:d:Q20733557|John Matthews]]''
| [[Coadan:Portrait of John Matthews Esq. (4670402).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5365
| ''[[:d:Q20733563|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 5366
| ''[[:d:Q20733561|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 5367
| ''[[:d:Q20733566|John Morgan Jones]]''
|
|
|
|-
| style='text-align:right'| 5368
| ''[[:d:Q20733565|John Morgan Jones]]''
| [[Coadan:Parchedig John Morgan Jones (1838–1921), Caerdydd (gcf06911).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5369
| ''[[:d:Q20733571|John Morris]]''
| [[Coadan:Rev John Morris, DD, 1813-96.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5370
| ''[[:d:Q20733569|John Morgan Jones]]''
|
|
|
|-
| style='text-align:right'| 5371
| ''[[:d:Q20733579|John Ossian Davies]]''
| [[Coadan:J Ossian Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5372
| ''[[:d:Q20733577|John Oliver Stephens]]''
|
|
|
|-
| style='text-align:right'| 5373
| ''[[:d:Q20733581|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5374
| ''[[:d:Q20733586|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5375
| ''[[:d:Q20733584|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5376
| ''[[:d:Q20733590|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5377
| ''[[:d:Q20733588|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5378
| ''[[:d:Q20733593|John Owen]]''
|
|
|
|-
| style='text-align:right'| 5379
| ''[[:d:Q20733598|John Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 5380
| ''[[:d:Q20733596|John Owen Jones]]''
| [[Coadan:John Owen Jones (1857-1906).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5381
| ''[[:d:Q20733602|John Park Davies]]''
|
|
|
|-
| style='text-align:right'| 5382
| ''[[:d:Q20733605|John Parry]]''
|
|
|
|-
| style='text-align:right'| 5383
| ''[[:d:Q20733615|John Propert]]''
| [[Coadan:John Propert. Photograph, 1855 (?). Wellcome V0027046.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5384
| ''[[:d:Q20733613|John Prichard]]''
| [[Coadan:Portrait of John Prichard (4672994) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5385
| ''[[:d:Q20733619|John Pryse]]''
|
|
|
|-
| style='text-align:right'| 5386
| ''[[:d:Q20733624|John Rees]]''
| [[Coadan:Portrait of The Revd. John Rees (4669902).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5387
| ''[[:d:Q20733630|John Richard Hughes]]''
| [[Coadan:Revd Hughes, Tredegar (copy) NLW3362433.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5388
| ''[[:d:Q20733636|John Richards Evans]]''
|
|
|
|-
| style='text-align:right'| 5389
| ''[[:d:Q20733640|John Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 5390
| ''[[:d:Q20733645|John Roberts]]''
| [[Coadan:Portrait of John Roberts (4671886).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5391
| ''[[:d:Q20733649|John Roberts]]''
| [[Coadan:John Roberts (1842 - 1908).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5392
| ''[[:d:Q20733655|John Rowland Thomas]]''
|
|
|
|-
| style='text-align:right'| 5393
| ''[[:d:Q20733659|John Stuart Corbett]]''
|
|
|
|-
| style='text-align:right'| 5394
| ''[[:d:Q20821178|John Victor Evans]]''
|
|
|
|-
| style='text-align:right'| 5395
| ''[[:d:Q20821177|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5396
| ''[[:d:Q20821182|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5397
| ''[[:d:Q20821183|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5398
| ''[[:d:Q20821180|John William Jones]]''
| [[Coadan:Y Fainc Sglodion (page 6 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5399
| ''[[:d:Q20821186|William Jones]]''
|
|
|
|-
| style='text-align:right'| 5400
| ''[[:d:Q20821185|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5401
| ''[[:d:Q20821191|Richard Martin]]''
|
|
|
|-
| style='text-align:right'| 5402
| ''[[:d:Q20821189|Lewis John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5403
| ''[[:d:Q20821194|Owen Williams]]''
|
|
|
|-
| style='text-align:right'| 5404
| ''[[:d:Q20821195|Owen Williams]]''
|
|
|
|-
| style='text-align:right'| 5405
| ''[[:d:Q20821192|Morris Davies]]''
|
|
|
|-
| style='text-align:right'| 5406
| ''[[:d:Q20821199|Peter Edwards]]''
|
|
|
|-
| style='text-align:right'| 5407
| ''[[:d:Q20821200|Peter Price]]''
|
|
|
|-
| style='text-align:right'| 5408
| ''[[:d:Q20821201|Philip Scott Yorke]]''
| [[Coadan:Gilbert Baldry (1876-1928) - Simon Yorke IV (1903–1966), and Philip Yorke III (1905–1978), as Children - 1151358 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5409
| ''[[:d:Q20821206|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 5410
| ''[[:d:Q20821204|Richard Jenkin Rees]]''
|
|
|
|-
| style='text-align:right'| 5411
| ''[[:d:Q20821208|Richard Roberts]]''
| [[Coadan:Portrait of Rev. Richard Roberts (London) (4670533) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5412
| ''[[:d:Q20821209|Richard Samuel Rogers]]''
|
|
|
|-
| style='text-align:right'| 5413
| ''[[:d:Q20821214|Robert Stephen]]''
|
|
|
|-
| style='text-align:right'| 5414
| ''[[:d:Q20821215|George Fossett Roberts]]''
|
|
|
|-
| style='text-align:right'| 5415
| ''[[:d:Q20821212|Robert Meirion Roberts]]''
|
|
|
|-
| style='text-align:right'| 5416
| ''[[:d:Q20821213|Robert Rolfe Williams]]''
|
|
|
|-
| style='text-align:right'| 5417
| ''[[:d:Q20821218|Roger Thomas]]''
|
|
|
|-
| style='text-align:right'| 5418
| ''[[:d:Q20821219|Thomas Carrington]]''
|
|
|
|-
| style='text-align:right'| 5419
| ''[[:d:Q20821216|John Rowland]]''
|
|
|
|-
| style='text-align:right'| 5420
| ''[[:d:Q20821217|Samuel James Leeke]]''
|
|
|
|-
| style='text-align:right'| 5421
| ''[[:d:Q20821222|Thomas Davies James]]''
|
|
|
|-
| style='text-align:right'| 5422
| ''[[:d:Q20821223|Thomas Ivor Jones]]''
|
|
|
|-
| style='text-align:right'| 5423
| ''[[:d:Q20821221|Thomas Arthur Levi]]''
|
|
|
|-
| style='text-align:right'| 5424
| ''[[:d:Q20821225|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 5425
| ''[[:d:Q20821230|Tom Ellis Jones]]''
|
|
|
|-
| style='text-align:right'| 5426
| ''[[:d:Q20821229|Thomas Williams Chance]]''
|
|
|
|-
| style='text-align:right'| 5427
| ''[[:d:Q20821234|William Ewart Williams]]''
|
|
|
|-
| style='text-align:right'| 5428
| ''[[:d:Q20821235|William Gareth Evans]]''
|
|
|
|-
| style='text-align:right'| 5429
| ''[[:d:Q20821233|William Davies]]''
|
|
|
|-
| style='text-align:right'| 5430
| ''[[:d:Q20821238|William Hugh Owen]]''
|
|
|
|-
| style='text-align:right'| 5431
| ''[[:d:Q20821239|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 5432
| ''[[:d:Q20821237|William Hubert Vaughan]]''
|
|
|
|-
| style='text-align:right'| 5433
| ''[[:d:Q20821242|William Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5434
| ''[[:d:Q20821243|William Morris Williams]]''
|
|
|
|-
| style='text-align:right'| 5435
| ''[[:d:Q20821241|William Jones Williams]]''
|
|
|
|-
| style='text-align:right'| 5436
| ''[[:d:Q20821246|William Robert Hughes]]''
|
|
|
|-
| style='text-align:right'| 5437
| ''[[:d:Q20821244|William Prichard Williams]]''
|
|
|
|-
| style='text-align:right'| 5438
| ''[[:d:Q20821245|William Richard Owen]]''
|
|
|
|-
| style='text-align:right'| 5439
| ''[[:d:Q20821250|William Williams]]''
|
|
|
|-
| style='text-align:right'| 5440
| ''[[:d:Q20821251|William Wyn Williams]]''
|
|
|
|-
| style='text-align:right'| 5441
| ''[[:d:Q20821248|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 5442
| ''[[:d:Q20821249|William Williams]]''
|
|
|
|-
| style='text-align:right'| 5443
| ''[[:d:Q20821415|David Jenkins Morgan]]''
|
|
|
|-
| style='text-align:right'| 5444
| ''[[:d:Q20821418|David Jones]]''
|
|
|
|-
| style='text-align:right'| 5445
| ''[[:d:Q20821416|David John Evans]]''
|
|
|
|-
| style='text-align:right'| 5446
| ''[[:d:Q20821417|David John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5447
| ''[[:d:Q20821422|Edward Arthur Lewis]]''
|
|
|
|-
| style='text-align:right'| 5448
| ''[[:d:Q20821423|Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 5449
| ''[[:d:Q20821420|David Lloyd]]''
| [[Coadan:Revd. Principal David Lloyd M.A., Ll.D.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5450
| ''[[:d:Q20821421|David William Richards]]''
|
|
|
|-
| style='text-align:right'| 5451
| ''[[:d:Q20821426|Griffith Richard Maethlu Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5452
| ''[[:d:Q20821424|Evan Thomas Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5453
| ''[[:d:Q20821425|George John]]''
|
|
|
|-
| style='text-align:right'| 5454
| ''[[:d:Q20821428|John Castell Evans]]''
|
|
|
|-
| style='text-align:right'| 5455
| ''[[:d:Q20821434|John Morgan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5456
| ''[[:d:Q20821435|John Powell Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5457
| ''[[:d:Q20821438|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5458
| ''[[:d:Q20821439|Matthew W. Davies]]''
|
|
|
|-
| style='text-align:right'| 5459
| ''[[:d:Q20821437|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5460
| ''[[:d:Q20821443|Robert Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 5461
| ''[[:d:Q20821440|Richard Arthur Roberts]]''
|
|
|
|-
| style='text-align:right'| 5462
| ''[[:d:Q20821441|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 5463
| ''[[:d:Q20821446|William James Thomas]]''
|
|
|
|-
| style='text-align:right'| 5464
| ''[[:d:Q20821447|Thomas Hopkin Evans]]''
|
|
|
|-
| style='text-align:right'| 5465
| ''[[:d:Q20821450|Thomas Roberts]]''
| [[Coadan:Thomas Roberts, Bethesda.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5466
| ''[[:d:Q20821451|Thomas William]]''
|
|
|
|-
| style='text-align:right'| 5467
| ''[[:d:Q20821448|Thomas Llechid Jones]]''
| [[Coadan:T. Llechid Jones (5236454).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5468
| ''[[:d:Q20821449|Thomas Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 5469
| ''[[:d:Q20821458|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 5470
| ''[[:d:Q20821456|William Saunders]]''
|
|
|
|-
| style='text-align:right'| 5471
| ''[[:d:Q20824262|John Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 5472
| ''[[:d:Q20859130|Jill Tomlinson]]''
|
|
|
|-
| style='text-align:right'| 5473
| ''[[:d:Q20860216|Roger Jones]]''
|
|
|
|-
| style='text-align:right'| 5474
| ''[[:d:Q20865154|Derek Williams]]''
|
|
|
|-
| style='text-align:right'| 5475
| ''[[:d:Q20878173|Marcus Owen]]''
|
|
|
|-
| style='text-align:right'| 5476
| ''[[:d:Q20878227|Roy Andrewartha]]''
|
|
|
|-
| style='text-align:right'| 5477
| ''[[:d:Q20888934|Morgan Maddox Morgan-Owen]]''
| [[Coadan:Morgan Maddox Morgan-Owen from G ouafc 1899 1 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5478
| ''[[:d:Q20888933|Owen Morris Roberts]]''
|
|
|
|-
| style='text-align:right'| 5479
| ''[[:d:Q20890211|Robert John Pryse]]''
|
|
|
|-
| style='text-align:right'| 5480
| ''[[:d:Q20890214|Catherine Prichard]]''
| [[Coadan:Catherine Prichard (Buddug).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5481
| ''[[:d:Q20942797|Ken Jones]]''
|
|
|
|-
| style='text-align:right'| 5482
| ''[[:d:Q20949588|J. Elwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 5483
| ''[[:d:Q20962418|Arnold Wienholt]]''
|
|
|
|-
| style='text-align:right'| 5484
| ''[[:d:Q20985688|Alan Rees]]''
|
|
|
|-
| style='text-align:right'| 5485
| ''[[:d:Q20988974|Jack Norman]]''
|
|
|
|-
| style='text-align:right'| 5486
| ''[[:d:Q21000502|Geraint Stanley Jones]]''
|
|
|
|-
| style='text-align:right'| 5487
| ''[[:d:Q21030575|Charles Gough Howell]]''
|
|
|
|-
| style='text-align:right'| 5488
| ''[[:d:Q21030591|Gwenan Jones]]''
|
|
|
|-
| style='text-align:right'| 5489
| ''[[:d:Q21030640|Owen Harris]]''
|
|
|
|-
| style='text-align:right'| 5490
| ''[[:d:Q21034024|Lewis Davis]]''
|
|
|
|-
| style='text-align:right'| 5491
| ''[[:d:Q21035496|William Jones]]''
|
|
|
|-
| style='text-align:right'| 5492
| ''[[:d:Q21038704|Illtyd Harrington]]''
|
|
|
|-
| style='text-align:right'| 5493
| ''[[:d:Q21061998|Meredith Etherington-Smith]]''
|
|
|
|-
| style='text-align:right'| 5494
| ''[[:d:Q16015856|Norah Isaac]]''
|
|
|
|-
| style='text-align:right'| 5495
| ''[[:d:Q16015862|Michael John]]''
|
|
|
|-
| style='text-align:right'| 5496
| ''[[:d:Q16017367|Aubrey Darmody]]''
|
|
|
|-
| style='text-align:right'| 5497
| ''[[:d:Q16017775|Clive Graham]]''
|
|
|
|-
| style='text-align:right'| 5498
| ''[[:d:Q16017871|Geoffrey Olsen]]''
|
|
|
|-
| style='text-align:right'| 5499
| ''[[:d:Q16018255|Graham Reynolds]]''
|
|
|
|-
| style='text-align:right'| 5500
| ''[[:d:Q16018720|Jim Davies]]''
| [[Coadan:Jim Davies 1951.png|center|128px]]
|
|
|-
| style='text-align:right'| 5501
| ''[[:d:Q16018799|Denzil Jones]]''
|
|
|
|-
| style='text-align:right'| 5502
| ''[[:d:Q16018796|Katrina Jacks]]''
|
|
|
|-
| style='text-align:right'| 5503
| ''[[:d:Q16019700|Jocelyn Hay]]''
|
|
|
|-
| style='text-align:right'| 5504
| ''[[:d:Q16022834|Noel Birch]]''
| [[Coadan:Major-general James Frederick Noel Birch, Cb Art.IWMART1784.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5505
| ''[[:d:Q16022941|Edwin Rowlands]]''
|
|
|
|-
| style='text-align:right'| 5506
| ''[[:d:Q16026297|John Aeron Thomas]]''
| [[Coadan:J Aeron Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5507
| ''[[:d:Q16026316|William Arthur Evelyn]]''
|
|
|
|-
| style='text-align:right'| 5508
| ''[[:d:Q16029271|James Watts]]''
| [[Coadan:James Watts (rygbi).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5509
| ''[[:d:Q16029495|John Jones]]''
|
|
|
|-
| style='text-align:right'| 5510
| ''[[:d:Q16029927|Edward Thomas John]]''
| [[Coadan:Edward John.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5511
| ''[[:d:Q16030023|David Davies]]''
|
|
|
|-
| style='text-align:right'| 5512
| ''[[:d:Q16030060|Huw Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 5513
| ''[[:d:Q16030073|Bobby Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5514
| ''[[:d:Q16030266|David Morgan]]''
|
|
|
|-
| style='text-align:right'| 5515
| ''[[:d:Q16030721|Sir Osmond Williams, 1st Baronet]]''
| [[Coadan:Arthur Osmond Williams, Vanity Fair, 1909-12-01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5516
| ''[[:d:Q16030806|David Howell]]''
| [[Coadan:Llawdden.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5517
| ''[[:d:Q16030858|Eliezer Pugh]]''
|
|
|
|-
| style='text-align:right'| 5518
| ''[[:d:Q16031163|James Bevan Bowen]]''
|
|
|
|-
| style='text-align:right'| 5519
| ''[[:d:Q16031849|John Williams]]''
| [[Coadan:John Williams 1905.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 5520
| ''[[:d:Q16037803|Hopkin Maddock]]''
| [[Coadan:Hopkin Maddock.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5521
| ''[[:d:Q16037844|Owen Morgan]]''
| [[Coadan:Owen Morgan, Morien.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5522
| ''[[:d:Q16041125|Lyndon Sims]]''
|
|
|
|-
| style='text-align:right'| 5523
| ''[[:d:Q16043610|Richard Watkins Richards]]''
| [[Coadan:Richard Watkins Richards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5524
| ''[[:d:Q16043621|John Stevens]]''
| [[Coadan:JohnStevens.png|center|128px]]
|
|
|-
| style='text-align:right'| 5525
| ''[[:d:Q16059274|Henry Bracy]]''
| [[Coadan:HenryBracyAustralia.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5526
| ''[[:d:Q16059441|William Creese]]''
|
|
|
|-
| style='text-align:right'| 5527
| ''[[:d:Q16059767|David Edwards]]''
|
|
|
|-
| style='text-align:right'| 5528
| ''[[:d:Q16059778|John Griffiths]]''
| [[Coadan:Archddeacon John Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5529
| ''[[:d:Q16060029|David Davies]]''
|
|
|
|-
| style='text-align:right'| 5530
| ''[[:d:Q16062191|Eleanor Bufton]]''
| [[Coadan:Eleanor Bufton-3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5531
| ''[[:d:Q16062277|Robert J. Davies]]''
|
|
|
|-
| style='text-align:right'| 5532
| ''[[:d:Q16062575|Enoch Salisbury]]''
|
|
|
|-
| style='text-align:right'| 5533
| ''[[:d:Q16062627|Samuel Goldsworthy]]''
|
|
|
|-
| style='text-align:right'| 5534
| ''[[:d:Q16062637|James Rhys Jones]]''
| [[Coadan:Reverend J R Kilsby Jones 1813-89.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5535
| ''[[:d:Q16062664|Thomas Purnell]]''
|
|
|
|-
| style='text-align:right'| 5536
| ''[[:d:Q16063361|Henry Beor]]''
| [[Coadan:StateLibQld 1 131563 Portrait Honourable Henry R. Beor, ca. 1880.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5537
| ''[[:d:Q16065475|John Mills]]''
|
|
|
|-
| style='text-align:right'| 5538
| ''[[:d:Q16065541|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 5539
| ''[[:d:Q16065913|John Lloyd Vaughan Watkins]]''
| [[Coadan:Portrait of Coll. Lloyd V. Watkins, M.P (4674634) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5540
| ''[[:d:Q16066202|John Williams]]''
| [[Coadan:John Williams 'Yr Hen Syr'.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5541
| ''[[:d:Q16066761|Dai St. John]]''
|
|
|
|-
| style='text-align:right'| 5542
| ''[[:d:Q16073356|David Jones]]''
| [[Coadan:Dan Jones 1928.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5543
| ''[[:d:Q16087651|Jackie Sutton]]''
|
|
|
|-
| style='text-align:right'| 5544
| ''[[:d:Q16089619|Archie Lamb]]''
|
|
|
|-
| style='text-align:right'| 5545
| ''[[:d:Q16090378|Robert Morris]]''
|
|
|
|-
| style='text-align:right'| 5546
| ''[[:d:Q16090862|Haydn Morris]]''
|
|
|
|-
| style='text-align:right'| 5547
| ''[[:d:Q16091470|Owen Harries]]''
|
|
|
|-
| style='text-align:right'| 5548
| ''[[:d:Q16091496|Les Jones]]''
|
|
|
|-
| style='text-align:right'| 5549
| ''[[:d:Q16091540|Edward Millward]]''
|
|
|
|-
| style='text-align:right'| 5550
| ''[[:d:Q16091844|Ted Grace]]''
|
|
|
|-
| style='text-align:right'| 5551
| ''[[:d:Q16092037|Jeffrey Steele]]''
| [[Coadan:Jeffrey-steele-10-2-2014.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 5552
| ''[[:d:Q16092619|Hugh Davies]]''
|
|
|
|-
| style='text-align:right'| 5553
| ''[[:d:Q16097086|Robert Alwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 5554
| ''[[:d:Q16104421|Billy Davies]]''
|
|
|
|-
| style='text-align:right'| 5555
| ''[[:d:Q16104440|Valerie Ganz]]''
|
|
|
|-
| style='text-align:right'| 5556
| ''[[:d:Q16104808|Juliet Ace]]''
|
|
|
|-
| style='text-align:right'| 5557
| ''[[:d:Q16105688|Judith M. Lumley]]''
| [[Coadan:Judith-lumley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5558
| ''[[:d:Q16106989|Neville Hughes]]''
|
|
|
|-
| style='text-align:right'| 5559
| ''[[:d:Q16107553|Lawrence Williams]]''
|
|
|
|-
| style='text-align:right'| 5560
| ''[[:d:Q16148758|Nick Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5561
| ''[[:d:Q16190199|Philip Bounds]]''
| [[Coadan:PhilipBounds2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5562
| ''[[:d:Q16190509|Helen Griffin]]''
|
|
|
|-
| style='text-align:right'| 5563
| ''[[:d:Q16191353|Thomas Thomas]]''
|
|
|
|-
| style='text-align:right'| 5564
| ''[[:d:Q16198194|Lew Baker]]''
|
|
|
|-
| style='text-align:right'| 5565
| ''[[:d:Q16199534|Ian Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5566
| ''[[:d:Q16199645|Jesse Meredith]]''
|
|
|
|-
| style='text-align:right'| 5567
| ''[[:d:Q16200395|Rees Hopkin Rhys]]''
|
|
|
|-
| style='text-align:right'| 5568
| ''[[:d:Q16203457|Emmeline Lewis Lloyd]]''
| [[Coadan:CharletStraton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5569
| ''[[:d:Q16205567|William Latham Bevan]]''
| [[Coadan:William lathan bevan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5570
| ''[[:d:Q16205780|Howell de Francis]]''
|
|
|
|-
| style='text-align:right'| 5571
| ''[[:d:Q16205902|Thomas Grey]]''
|
|
|
|-
| style='text-align:right'| 5572
| ''[[:d:Q20733661|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5573
| ''[[:d:Q20733667|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5574
| ''[[:d:Q20733665|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5575
| ''[[:d:Q20733671|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 5576
| ''[[:d:Q20733675|John Thomas Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5577
| ''[[:d:Q20733678|John William Hughes]]''
|
|
|
|-
| style='text-align:right'| 5578
| ''[[:d:Q20733679|John William Jones]]''
|
|
|
|-
| style='text-align:right'| 5579
| ''[[:d:Q20733681|John Williams]]''
|
|
|
|-
| style='text-align:right'| 5580
| ''[[:d:Q20733691|Jonathan Jones]]''
|
|
|
|-
| style='text-align:right'| 5581
| ''[[:d:Q20733693|Jonathan Powell]]''
|
|
|
|-
| style='text-align:right'| 5582
| ''[[:d:Q20733709|Joseph E. Davies]]''
|
|
|
|-
| style='text-align:right'| 5583
| ''[[:d:Q20733718|Joseph Hughes]]''
|
|
|
|-
| style='text-align:right'| 5584
| ''[[:d:Q20733716|Joseph Evans]]''
|
|
|
|-
| style='text-align:right'| 5585
| ''[[:d:Q20733722|Joseph Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5586
| ''[[:d:Q20733726|Joseph Jones]]''
|
|
|
|-
| style='text-align:right'| 5587
| ''[[:d:Q20733724|Joseph Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5588
| ''[[:d:Q20733730|Joseph Rhys Lewis]]''
|
|
|
|-
| style='text-align:right'| 5589
| ''[[:d:Q20733728|Joseph Jones]]''
|
|
|
|-
| style='text-align:right'| 5590
| ''[[:d:Q20733739|Joseph William Thomas]]''
|
|
|
|-
| style='text-align:right'| 5591
| ''[[:d:Q20733737|Joseph Tudor Hughes]]''
| [[Coadan:Portrait of Master Hughes and his brothers (4672622).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5592
| ''[[:d:Q20733750|Josiah Jones]]''
| [[Coadan:Josiah Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5593
| ''[[:d:Q20733752|Judith Godwin]]''
|
|
|
|-
| style='text-align:right'| 5594
| ''[[:d:Q20733758|Leonard Owen]]''
|
|
|
|-
| style='text-align:right'| 5595
| ''[[:d:Q20733766|Henry Lewis]]''
|
|
|
|-
| style='text-align:right'| 5596
| ''[[:d:Q20733774|Lewis Davies Jones]]''
| [[Coadan:Llew Tegid.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5597
| ''[[:d:Q20733776|Lewis Ellis]]''
|
|
|
|-
| style='text-align:right'| 5598
| ''[[:d:Q20733785|Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 5599
| ''[[:d:Q20733791|Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 5600
| ''[[:d:Q20733789|Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 5601
| ''[[:d:Q20733795|Lewis Loyd]]''
| [[Coadan:Eden Upton Eddis (1812-1901) - Lewis Lloyd (1767–1858) - No.5 - Harris Manchester College.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5602
| ''[[:d:Q20733797|Lewis Morris]]''
|
|
|
|-
| style='text-align:right'| 5603
| ''[[:d:Q20733801|Lewis Rees]]''
|
|
|
|-
| style='text-align:right'| 5604
| ''[[:d:Q20733807|Lewis Thomas]]''
|
|
|
|-
| style='text-align:right'| 5605
| ''[[:d:Q20733815|Lleision ap Thomas]]''
|
|
|
|-
| style='text-align:right'| 5606
| ''[[:d:Q20733819|Llewelyn David Howell]]''
|
|
|
|-
| style='text-align:right'| 5607
| ''[[:d:Q20733821|Llewelyn Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5608
| ''[[:d:Q20733839|Robert Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5609
| ''[[:d:Q20733837|Margaret Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5610
| ''[[:d:Q20733843|William Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5611
| ''[[:d:Q20733869|John Lynn-Thomas]]''
|
|
|
|-
| style='text-align:right'| 5612
| ''[[:d:Q20733879|Mary Anne Edmunds]]''
| [[Coadan:Yr athrawes o ddifrif (page 6 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5613
| ''[[:d:Q20733881|Mary Davies]]''
| [[Coadan:Mair-Eifion.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5614
| ''[[:d:Q20733889|Mathew Lewis]]''
|
|
|
|-
| style='text-align:right'| 5615
| ''[[:d:Q20733895|Mathias Maurice]]''
|
|
|
|-
| style='text-align:right'| 5616
| ''[[:d:Q20733899|Matthew Williams]]''
|
|
|
|-
| style='text-align:right'| 5617
| ''[[:d:Q20733903|Megan Watts Hughes]]''
|
|
|
|-
| style='text-align:right'| 5618
| ''[[:d:Q20733901|Maurice Evans]]''
|
|
|
|-
| style='text-align:right'| 5619
| ''[[:d:Q20733905|Meirion Williams]]''
|
|
|
|-
| style='text-align:right'| 5620
| ''[[:d:Q20733911|Herbert Henry Merrett]]''
|
|
|
|-
| style='text-align:right'| 5621
| ''[[:d:Q20733915|Meurig Dafydd]]''
|
|
|
|-
| style='text-align:right'| 5622
| ''[[:d:Q20733923|Michael Pritchard]]''
|
|
|
|-
| style='text-align:right'| 5623
| ''[[:d:Q20733921|Michael Jones]]''
| [[Coadan:Michael Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5624
| ''[[:d:Q20733927|Miles Edwards]]''
|
|
|
|-
| style='text-align:right'| 5625
| ''[[:d:Q20733929|Miles Harry]]''
|
|
|
|-
| style='text-align:right'| 5626
| ''[[:d:Q20733935|Morgan Albert Ellis]]''
|
|
|
|-
| style='text-align:right'| 5627
| ''[[:d:Q20733939|Morgan Evans]]''
|
|
|
|-
| style='text-align:right'| 5628
| ''[[:d:Q20733946|Morgan Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 5629
| ''[[:d:Q20733948|Morgan Jones]]''
|
|
|
|-
| style='text-align:right'| 5630
| ''[[:d:Q20733949|Morgan Parry Morgan]]''
|
|
|
|-
| style='text-align:right'| 5631
| ''[[:d:Q20733955|Morien Mon Huws]]''
|
|
|
|-
| style='text-align:right'| 5632
| ''[[:d:Q20733957|Daniel Morris]]''
|
|
|
|-
| style='text-align:right'| 5633
| ''[[:d:Q20733963|Morris Charles Jones]]''
|
|
|
|-
| style='text-align:right'| 5634
| ''[[:d:Q20733967|Morris Davies]]''
| [[Coadan:Morris Davies (Meurig Ebrill).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5635
| ''[[:d:Q20733965|Morris Davies]]''
| [[Coadan:Portrait of Morris Davies (4672735) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5636
| ''[[:d:Q20733969|Eddie Evans Morris]]''
|
|
|
|-
| style='text-align:right'| 5637
| ''[[:d:Q20733975|Morris Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5638
| ''[[:d:Q20733983|Morris Roberts]]''
| [[Coadan:Portrait of Morris Roberts (4669920) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5639
| ''[[:d:Q20733996|Moses Davies]]''
|
|
|
|-
| style='text-align:right'| 5640
| ''[[:d:Q20734002|Moses Owen Jones]]''
| [[Coadan:Moses Owen Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5641
| ''[[:d:Q20734008|David Ellis Nanney]]''
|
|
|
|-
| style='text-align:right'| 5642
| ''[[:d:Q20734018|Nicholas Bennett]]''
| [[Coadan:Nicholas Bennett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5643
| ''[[:d:Q20734028|Harri William]]''
|
|
|
|-
| style='text-align:right'| 5644
| ''[[:d:Q20734044|Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 5645
| ''[[:d:Q20734050|Owen Davies]]''
| [[Coadan:Owen Davies (Caernarfon).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5646
| ''[[:d:Q20734054|Owen Evans]]''
|
|
|
|-
| style='text-align:right'| 5647
| ''[[:d:Q20734057|Owen Evans]]''
| [[Coadan:Parch Dr Owen Evans DD, Fetter Lane.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5648
| ''[[:d:Q20734066|Owen Griffith]]''
| [[Coadan:Owen Griffith (Giraldus 1832 - 1896).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5649
| ''[[:d:Q20734070|Owen Griffith]]''
| [[Coadan:Eryr Eryri.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5650
| ''[[:d:Q20734079|Owen Humphrey Davies]]''
|
|
|
|-
| style='text-align:right'| 5651
| ''[[:d:Q20734076|Owen Hughes]]''
|
|
|
|-
| style='text-align:right'| 5652
| ''[[:d:Q20734082|Owen Jones]]''
| [[Coadan:Revd Owen Jones, Llanfair Caereinion.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5653
| ''[[:d:Q20734086|Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 5654
| ''[[:d:Q20734088|Owen Jones]]''
| [[Coadan:Owen Jones, Chatham Street, Lerpwl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5655
| ''[[:d:Q20734093|Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 5656
| ''[[:d:Q20734099|Owen Owen]]''
|
|
|
|-
| style='text-align:right'| 5657
| ''[[:d:Q20734096|Owen Madoc Roberts]]''
| [[Coadan:Owen Madoc Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5658
| ''[[:d:Q20734102|Owen Owen Roberts]]''
|
|
|
|-
| style='text-align:right'| 5659
| ''[[:d:Q20734105|Owen Owens]]''
|
|
|
|-
| style='text-align:right'| 5660
| ''[[:d:Q20734112|Owen Rice]]''
|
|
|
|-
| style='text-align:right'| 5661
| ''[[:d:Q20734127|D. E. Parry-Williams]]''
|
|
|
|-
| style='text-align:right'| 5662
| ''[[:d:Q20734133|Peter Hughes Griffiths]]''
| [[Coadan:Peter Hughes Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5663
| ''[[:d:Q20734137|Peter Maelor Evans]]''
| [[Coadan:Portrait of diweddar Mr. Peter Maelor Evans (4673285).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5664
| ''[[:d:Q20734153|Philip Esmonde Phillips]]''
|
|
|
|-
| style='text-align:right'| 5665
| ''[[:d:Q20734156|Philip James]]''
|
|
|
|-
| style='text-align:right'| 5666
| ''[[:d:Q20734166|Grismond Picton Phillips]]''
|
|
|
|-
| style='text-align:right'| 5667
| ''[[:d:Q20734182|Ieuan Rees-Davies]]''
|
|
|
|-
| style='text-align:right'| 5668
| ''[[:d:Q20734189|Rees Cribin Jones]]''
|
|
|
|-
| style='text-align:right'| 5669
| ''[[:d:Q20734206|Rees Lewis]]''
|
|
|
|-
| style='text-align:right'| 5670
| ''[[:d:Q20734208|Rees Morgan]]''
|
|
|
|-
| style='text-align:right'| 5671
| ''[[:d:Q20734218|Reuben Davies]]''
|
|
|
|-
| style='text-align:right'| 5672
| ''[[:d:Q43132155|Charles Jones]]''
|
|
|
|-
| style='text-align:right'| 5673
| ''[[:d:Q43260453|Tony O'Connor]]''
|
|
|
|-
| style='text-align:right'| 5674
| ''[[:d:Q43304180|Philip Henry Egerton]]''
|
|
|
|-
| style='text-align:right'| 5675
| ''[[:d:Q43371054|Mary De la Beche Nicholl]]''
| [[Coadan:Mary De la Beche Nicholl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5676
| ''[[:d:Q43538963|Wenna]]''
|
|
|
|-
| style='text-align:right'| 5677
| ''[[:d:Q43580958|William Dempster]]''
| [[Coadan:Cpl William Dempster.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5678
| ''[[:d:Q43761704|Mike P. Harris]]''
|
|
|
|-
| style='text-align:right'| 5679
| ''[[:d:Q44633113|Fred Condrey]]''
|
|
|
|-
| style='text-align:right'| 5680
| ''[[:d:Q44691153|William Powell]]''
|
|
|
|-
| style='text-align:right'| 5681
| ''[[:d:Q45048920|David Davies]]''
| [[Coadan:Dewi Cynon (David Davies 1853-1937).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5682
| ''[[:d:Q45300946|J. Gwynn Williams]]''
|
|
|
|-
| style='text-align:right'| 5683
| ''[[:d:Q45831939|Arthur Watkyn]]''
|
|
|
|-
| style='text-align:right'| 5684
| ''[[:d:Q45972376|Mary Thomas]]''
|
|
|
|-
| style='text-align:right'| 5685
| ''[[:d:Q46194169|Charles Henry Clements]]''
|
|
|
|-
| style='text-align:right'| 5686
| ''[[:d:Q46231570|Samuel Homfray]]''
|
|
|
|-
| style='text-align:right'| 5687
| ''[[:d:Q47015455|Francis Huntly Griffith]]''
|
|
|
|-
| style='text-align:right'| 5688
| ''[[:d:Q47116012|J. Aelwyn Roberts]]''
|
|
|
|-
| style='text-align:right'| 5689
| ''[[:d:Q47120646|Ena Thomas]]''
|
|
|
|-
| style='text-align:right'| 5690
| ''[[:d:Q47120904|Heulwen Hâf]]''
|
|
|
|-
| style='text-align:right'| 5691
| ''[[:d:Q47121066|R. Gwynn Davies]]''
| [[Coadan:R Gwynn Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5692
| ''[[:d:Q47121085|T. Ceiri Griffith]]''
|
|
|
|-
| style='text-align:right'| 5693
| ''[[:d:Q47121249|Cledwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 5694
| ''[[:d:Q47121859|Nansi Selwood]]''
|
|
|
|-
| style='text-align:right'| 5695
| ''[[:d:Q47122648|Gwyn Erfyl]]''
|
|
|
|-
| style='text-align:right'| 5696
| ''[[:d:Q47122741|Eirwyn George]]''
| [[Coadan:Dwy Goron Eirwyn .jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5697
| ''[[:d:Q47123094|Emyr Wyn Jones]]''
|
|
|
|-
| style='text-align:right'| 5698
| ''[[:d:Q47123304|Idris Charles]]''
|
|
|
|-
| style='text-align:right'| 5699
| ''[[:d:Q47123476|Gilmor Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5700
| ''[[:d:Q47124236|Mair Garnon]]''
|
|
|
|-
| style='text-align:right'| 5701
| ''[[:d:Q47124259|Anthony Packer]]''
|
|
|
|-
| style='text-align:right'| 5702
| ''[[:d:Q47124788|Emyr Hywel]]''
|
|
|
|-
| style='text-align:right'| 5703
| ''[[:d:Q47125330|Dafydd Owen]]''
| [[Coadan:Dafydd Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5704
| ''[[:d:Q47125612|Sara Minwel Tibbott]]''
| [[Coadan:S. Minwel Tibbott.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5705
| ''[[:d:Q47125622|Ieuan Gwynedd Jones]]''
|
|
|
|-
| style='text-align:right'| 5706
| ''[[:d:Q47125703|Gwynedd O. Pierce]]''
|
|
|
|-
| style='text-align:right'| 5707
| ''[[:d:Q47125779|John Owen Huws]]''
|
|
|
|-
| style='text-align:right'| 5708
| ''[[:d:Q47126028|Dafydd Gwilym Merfyn Jones]]''
|
|
|
|-
| style='text-align:right'| 5709
| ''[[:d:Q47126053|Islwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 5710
| ''[[:d:Q47126652|Angharad Jones]]''
|
|
|
|-
| style='text-align:right'| 5711
| ''[[:d:Q47127197|J. Towyn Jones]]''
| [[Coadan:J. Towyn Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5712
| ''[[:d:Q47127962|G. Melvyn Howe]]''
|
|
|
|-
| style='text-align:right'| 5713
| ''[[:d:Q47128817|Vivian Jones]]''
|
|
|
|-
| style='text-align:right'| 5714
| ''[[:d:Q47129647|Patti Flynn]]''
|
|
|
|-
| style='text-align:right'| 5715
| ''[[:d:Q47129851|Teleri Bevan]]''
|
|
|
|-
| style='text-align:right'| 5716
| ''[[:d:Q47129879|Dai Rees Davies]]''
|
|
|
|-
| style='text-align:right'| 5717
| ''[[:d:Q47130540|Morfydd E. Owen]]''
|
|
|
|-
| style='text-align:right'| 5718
| ''[[:d:Q47179942|Llwchaiarn]]''
|
|
|
|-
| style='text-align:right'| 5719
| ''[[:d:Q47309379|Vaughan Thomas]]''
|
|
|
|-
| style='text-align:right'| 5720
| ''[[:d:Q47458804|Gary Pickford-Hopkins]]''
|
|
|
|-
| style='text-align:right'| 5721
| ''[[:d:Q47459774|Paula Gellibrand]]''
| [[Coadan:Paula Gellibrand.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5722
| ''[[:d:Q47460742|Thomas Carey-Evans]]''
| [[Coadan:Olwen Lloyd George a Capt T J Carey Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5723
| ''[[:d:Q47467076|Horace Debenham]]''
|
|
|
|-
| style='text-align:right'| 5724
| ''[[:d:Q47476985|Frank Williams]]''
|
|
|
|-
| style='text-align:right'| 5725
| ''[[:d:Q47541497|Walter Morgan]]''
|
|
|
|-
| style='text-align:right'| 5726
| ''[[:d:Q48794179|Honor Arundel]]''
|
|
|
|-
| style='text-align:right'| 5727
| ''[[:d:Q48817063|Albert Gower-Rees]]''
|
|
|
|-
| style='text-align:right'| 5728
| ''[[:d:Q49679357|Cyril Mossford]]''
|
|
|
|-
| style='text-align:right'| 5729
| ''[[:d:Q49995733|Catherine Lynch]]''
|
|
|
|-
| style='text-align:right'| 5730
| ''[[:d:Q50015148|John Walford McLean]]''
|
|
|
|-
| style='text-align:right'| 5731
| ''[[:d:Q50131942|Trefor Selway]]''
|
|
|
|-
| style='text-align:right'| 5732
| ''[[:d:Q50136388|Howard Sheppeard]]''
|
|
|
|-
| style='text-align:right'| 5733
| ''[[:d:Q50169885|Thomas Price]]''
|
|
|
|-
| style='text-align:right'| 5734
| ''[[:d:Q50276520|Lily Argent]]''
|
|
|
|-
| style='text-align:right'| 5735
| ''[[:d:Q50298099|Islwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 5736
| ''[[:d:Q50309032|Timothy Davis]]''
|
|
|
|-
| style='text-align:right'| 5737
| ''[[:d:Q50322911|Bray Wilkins]]''
|
|
|
|-
| style='text-align:right'| 5738
| ''[[:d:Q50365977|Brian Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5739
| ''[[:d:Q50528961|Trevor Jones]]''
|
|
|
|-
| style='text-align:right'| 5740
| ''[[:d:Q50528968|Tommy Edwards]]''
|
|
|
|-
| style='text-align:right'| 5741
| ''[[:d:Q50580585|Audrey Bates]]''
|
|
|
|-
| style='text-align:right'| 5742
| ''[[:d:Q50580877|Audrey Coombs]]''
|
|
|
|-
| style='text-align:right'| 5743
| ''[[:d:Q50581145|Betty Gray]]''
|
|
|
|-
| style='text-align:right'| 5744
| ''[[:d:Q50591265|Ivor Edward David]]''
|
|
|
|-
| style='text-align:right'| 5745
| ''[[:d:Q51051504|Emma Hutchinson]]''
| [[Coadan:Emma Sarah Hutchinson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5746
| ''[[:d:Q51218990|Len Attley]]''
|
|
|
|-
| style='text-align:right'| 5747
| ''[[:d:Q51221808|Enoch Mort]]''
|
|
|
|-
| style='text-align:right'| 5748
| ''[[:d:Q51537516|Anthony Robert Alwyn Hobson]]''
|
|
|
|-
| style='text-align:right'| 5749
| ''[[:d:Q51537525|Ann Mercy Hunt]]''
|
|
|
|-
| style='text-align:right'| 5750
| ''[[:d:Q51683462|Charles John Ribton-Turner]]''
|
|
|
|-
| style='text-align:right'| 5751
| ''[[:d:Q51705802|Mihangel Jones]]''
|
|
|
|-
| style='text-align:right'| 5752
| ''[[:d:Q51799848|Alex Beckett]]''
|
|
|
|-
| style='text-align:right'| 5753
| ''[[:d:Q51844029|Gomer Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5754
| ''[[:d:Q51954536|Cenhedlon ach Briafael]]''
|
|
|
|-
| style='text-align:right'| 5755
| ''[[:d:Q52099094|David Evans, Jr.]]''
|
|
|
|-
| style='text-align:right'| 5756
| ''[[:d:Q52153538|J. Edwal Williams]]''
| [[Coadan:John Edwal ac Angharad Williams; tad a mam Waldo Williams (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5757
| ''[[:d:Q52154446|Frances Williams Wynn]]''
| [[Coadan:Lady Williams-Wynn and her Children.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5758
| ''[[:d:Q52156361|Ralph Joseph Horner]]''
|
|
|
|-
| style='text-align:right'| 5759
| ''[[:d:Q52157138|Keith Winter]]''
|
|
|
|-
| style='text-align:right'| 5760
| ''[[:d:Q52160410|Charles Williams]]''
| [[Coadan:Charles Williams, the comedian and actor from Bodffordd, visiting his home region (1561472).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5761
| ''[[:d:Q52191516|Euryn Ogwen Williams]]''
|
|
|
|-
| style='text-align:right'| 5762
| ''[[:d:Q52231233|Ebenezer Morgan]]''
|
|
|
|-
| style='text-align:right'| 5763
| ''[[:d:Q52231975|Marged Esli]]''
| [[Coadan:Marged Esli yn Sigaret? 1991.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5764
| ''[[:d:Q52293977|Watkin Bronfryn Joseph]]''
| [[Coadan:Portrait of Watkin B. Joseph, 'Y Myfyr' (4670369).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5765
| ''[[:d:Q52455681|Annie Brewer]]''
| [[Coadan:Annie brewer.png|center|128px]]
|
|
|-
| style='text-align:right'| 5766
| ''[[:d:Q52496375|Huw Llewelyn Williams]]''
|
|
|
|-
| style='text-align:right'| 5767
| ''[[:d:Q52604716|Reg Phillips]]''
|
|
|
|-
| style='text-align:right'| 5768
| ''[[:d:Q52911912|Jack Edwards]]''
| [[Coadan:Jack Edwards (5292077).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5769
| ''[[:d:Q53428221|David Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 5770
| ''[[:d:Q53598867|Sue Harvard]]''
| [[Coadan:Harvard LCCN2014711368.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5771
| ''[[:d:Q53868716|John Bevan]]''
|
|
|
|-
| style='text-align:right'| 5772
| ''[[:d:Q20734338|Robert Humphreys]]''
|
|
|
|-
| style='text-align:right'| 5773
| ''[[:d:Q62468253|Samuel Bevan]]''
|
|
|
|-
| style='text-align:right'| 5774
| ''[[:d:Q57579739|Brian S. Osborne]]''
|
|
|
|-
| style='text-align:right'| 5775
| ''[[:d:Q57725826|Ted Gorin]]''
|
|
|
|-
| style='text-align:right'| 5776
| ''[[:d:Q57725863|Stan Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5777
| ''[[:d:Q57725868|Wyn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5778
| ''[[:d:Q57729457|Noel Phillips]]''
|
|
|
|-
| style='text-align:right'| 5779
| ''[[:d:Q58174217|Joe Hillier]]''
|
|
|
|-
| style='text-align:right'| 5780
| ''[[:d:Q58174859|Emlyn John]]''
|
|
|
|-
| style='text-align:right'| 5781
| ''[[:d:Q58241482|Wyndraeth Morris-Jones]]''
|
|
|
|-
| style='text-align:right'| 5782
| ''[[:d:Q58331721|Margaret Roberts]]''
|
|
|
|-
| style='text-align:right'| 5783
| ''[[:d:Q58365710|Frank Arthur Morgan]]''
|
|
|
|-
| style='text-align:right'| 5784
| ''[[:d:Q58456635|Dave Ridley]]''
|
|
|
|-
| style='text-align:right'| 5785
| ''[[:d:Q58483511|George G. Bywater]]''
|
|
|
|-
| style='text-align:right'| 5786
| ''[[:d:Q58689968|Thomas Salusbury]]''
|
|
|
|-
| style='text-align:right'| 5787
| ''[[:d:Q58756929|Thelma Rodgers]]''
|
|
|
|-
| style='text-align:right'| 5788
| ''[[:d:Q58815528|Idris Miles]]''
|
|
|
|-
| style='text-align:right'| 5789
| ''[[:d:Q58815533|Ivor Llewellyn Brace]]''
|
|
|
|-
| style='text-align:right'| 5790
| ''[[:d:Q58830228|Gwyneth Alva Challis]]''
|
|
|
|-
| style='text-align:right'| 5791
| ''[[:d:Q58892217|Thomas Frederick Worrall]]''
| [[Coadan:Worrall 1899.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5792
| ''[[:d:Q58894968|Jim Atherton]]''
|
|
|
|-
| style='text-align:right'| 5793
| ''[[:d:Q58895039|Griff Norman]]''
|
|
|
|-
| style='text-align:right'| 5794
| ''[[:d:Q58895046|Ken Oakley]]''
|
|
|
|-
| style='text-align:right'| 5795
| ''[[:d:Q58928487|Tommy Paget]]''
|
|
|
|-
| style='text-align:right'| 5796
| ''[[:d:Q58973187|Terry Gooding]]''
|
|
|
|-
| style='text-align:right'| 5797
| ''[[:d:Q59132436|Harry Parfitt]]''
|
|
|
|-
| style='text-align:right'| 5798
| ''[[:d:Q59180819|Tony Pickrell]]''
|
|
|
|-
| style='text-align:right'| 5799
| ''[[:d:Q59205109|Cecil Pritchard]]''
|
|
|
|-
| style='text-align:right'| 5800
| ''[[:d:Q59305320|Flora Forster]]''
|
|
|
|-
| style='text-align:right'| 5801
| ''[[:d:Q59347218|Mary Bevan]]''
| [[Coadan:Mary Bevan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5802
| ''[[:d:Q59463318|Owen Francis]]''
|
|
|
|-
| style='text-align:right'| 5803
| ''[[:d:Q59529059|Pamela Bacarisse]]''
|
|
|
|-
| style='text-align:right'| 5804
| ''[[:d:Q59588469|William Mars-Jones]]''
|
|
|
|-
| style='text-align:right'| 5805
| ''[[:d:Q59588707|Len Richards]]''
|
|
|
|-
| style='text-align:right'| 5806
| ''[[:d:Q59588770|Bernard Ross]]''
|
|
|
|-
| style='text-align:right'| 5807
| ''[[:d:Q59628016|George Pickard]]''
|
|
|
|-
| style='text-align:right'| 5808
| ''[[:d:Q59629779|Arthur Cecil Bining]]''
|
|
|
|-
| style='text-align:right'| 5809
| ''[[:d:Q59656412|Len Edwards]]''
|
|
|
|-
| style='text-align:right'| 5810
| ''[[:d:Q59781515|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5811
| ''[[:d:Q60050765|Terry Parsons]]''
|
|
|
|-
| style='text-align:right'| 5812
| ''[[:d:Q60198015|David Gwynne-James]]''
|
|
|
|-
| style='text-align:right'| 5813
| ''[[:d:Q60429542|Olivia Frances Tonge]]''
|
|
|
|-
| style='text-align:right'| 5814
| ''[[:d:Q60429570|Eric Richards]]''
|
|
|
|-
| style='text-align:right'| 5815
| ''[[:d:Q60580685|James Parry]]''
| [[Coadan:Portrait of Mr. James Parry (4671748).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5816
| ''[[:d:Q60632790|Thyrza Anne Leyshon]]''
|
|
|
|-
| style='text-align:right'| 5817
| ''[[:d:Q60663044|Len Hewitt]]''
|
|
|
|-
| style='text-align:right'| 5818
| ''[[:d:Q60684771|Dave Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5819
| ''[[:d:Q60684870|Bryn Davies]]''
|
|
|
|-
| style='text-align:right'| 5820
| ''[[:d:Q60685583|Vince Jones]]''
|
|
|
|-
| style='text-align:right'| 5821
| ''[[:d:Q60685999|Billy Morris]]''
|
|
|
|-
| style='text-align:right'| 5822
| ''[[:d:Q60686009|Jerry Murphy]]''
|
|
|
|-
| style='text-align:right'| 5823
| ''[[:d:Q60686073|Cecil Price]]''
|
|
|
|-
| style='text-align:right'| 5824
| ''[[:d:Q60693753|Rees Thomas]]''
|
|
|
|-
| style='text-align:right'| 5825
| ''[[:d:Q60693826|Dave Campbell]]''
|
|
|
|-
| style='text-align:right'| 5826
| ''[[:d:Q60694079|Ray Williams]]''
|
|
|
|-
| style='text-align:right'| 5827
| ''[[:d:Q60694076|Billy Lewis]]''
|
|
|
|-
| style='text-align:right'| 5828
| ''[[:d:Q60694141|Ted Morris]]''
|
|
|
|-
| style='text-align:right'| 5829
| ''[[:d:Q60733888|Peter Bishop]]''
| [[Coadan:MOMA exhibition.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5830
| ''[[:d:Q60734943|Danny McCarthy]]''
|
|
|
|-
| style='text-align:right'| 5831
| ''[[:d:Q60744121|Roger Ashton]]''
|
|
|
|-
| style='text-align:right'| 5832
| ''[[:d:Q60746170|William Morgan]]''
|
|
|
|-
| style='text-align:right'| 5833
| ''[[:d:Q60750706|Charlie Hill]]''
|
|
|
|-
| style='text-align:right'| 5834
| ''[[:d:Q60752582|Lyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 5835
| ''[[:d:Q60761614|William John Philpin Jones]]''
|
|
|
|-
| style='text-align:right'| 5836
| ''[[:d:Q60764058|Harold Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5837
| ''[[:d:Q60764297|Edward Phillips]]''
|
|
|
|-
| style='text-align:right'| 5838
| ''[[:d:Q60842075|Grace Roberts]]''
|
|
|
|-
| style='text-align:right'| 5839
| ''[[:d:Q61107860|Andrew Thomas]]''
|
|
|
|-
| style='text-align:right'| 5840
| ''[[:d:Q61107892|O. M. Lloyd]]''
|
|
|
|-
| style='text-align:right'| 5841
| ''[[:d:Q61107977|Guto Roberts]]''
|
|
|
|-
| style='text-align:right'| 5842
| ''[[:d:Q61107990|Meurig ap Ynyr Fechan]]''
| [[Coadan:Corffddelw - effigy of Meurig ap Ynyr Fychan, Nannau 14.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5843
| ''[[:d:Q61122449|Henry Baird]]''
|
|
|
|-
| style='text-align:right'| 5844
| ''[[:d:Q61341106|Joseph Herbert Morcom]]''
|
|
|
|-
| style='text-align:right'| 5845
| ''[[:d:Q61473813|John David Spillane]]''
|
|
|
|-
| style='text-align:right'| 5846
| ''[[:d:Q61595023|Haydn Jones]]''
|
|
|
|-
| style='text-align:right'| 5847
| ''[[:d:Q61607699|Morgan Nicholas]]''
|
|
|
|-
| style='text-align:right'| 5848
| ''[[:d:Q61697219|Helena Jones]]''
|
|
|
|-
| style='text-align:right'| 5849
| ''[[:d:Q61698489|Denys Jones]]''
|
|
|
|-
| style='text-align:right'| 5850
| ''[[:d:Q61739647|Ian Sutherland]]''
|
|
|
|-
| style='text-align:right'| 5851
| ''[[:d:Q61742592|Joe Price]]''
|
|
|
|-
| style='text-align:right'| 5852
| ''[[:d:Q61781833|David B. Barrett]]''
|
|
|
|-
| style='text-align:right'| 5853
| ''[[:d:Q61842520|Llewellyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 5854
| ''[[:d:Q61855944|William Dickinson]]''
|
|
|
|-
| style='text-align:right'| 5855
| ''[[:d:Q61857237|Jimmy Jones]]''
|
|
|
|-
| style='text-align:right'| 5856
| ''[[:d:Q61868466|Ruth Price]]''
|
|
|
|-
| style='text-align:right'| 5857
| ''[[:d:Q61882790|Herbert Jones]]''
|
|
|
|-
| style='text-align:right'| 5858
| ''[[:d:Q61890333|Albert Hawkins]]''
|
|
|
|-
| style='text-align:right'| 5859
| ''[[:d:Q61964521|Denis John Williams]]''
|
|
|
|-
| style='text-align:right'| 5860
| ''[[:d:Q62006906|Selwyn Pemberton]]''
|
|
|
|-
| style='text-align:right'| 5861
| ''[[:d:Q62084118|Irving Davies]]''
|
|
|
|-
| style='text-align:right'| 5862
| ''[[:d:Q62102936|Pryce Hughes]]''
|
|
|
|-
| style='text-align:right'| 5863
| ''[[:d:Q62359670|David Edwards]]''
|
|
|
|-
| style='text-align:right'| 5864
| ''[[:d:Q62514794|Dorothea Eliza Smith]]''
| [[Coadan:Fruits of the Lima Market Folding Watercolor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5865
| ''[[:d:Q62567115|Reg Turnell]]''
|
|
|
|-
| style='text-align:right'| 5866
| ''[[:d:Q62588463|Stan Weaver]]''
|
|
|
|-
| style='text-align:right'| 5867
| ''[[:d:Q62648180|David Roberts]]''
|
|
|
|-
| style='text-align:right'| 5868
| ''[[:d:Q62655912|Harry Hollis]]''
|
|
|
|-
| style='text-align:right'| 5869
| ''[[:d:Q62689812|Donald Webley]]''
|
|
|
|-
| style='text-align:right'| 5870
| ''[[:d:Q62847549|Mal Rees]]''
|
|
|
|-
| style='text-align:right'| 5871
| ''[[:d:Q62857954|David Lambert]]''
|
|
|
|-
| style='text-align:right'| 5872
| ''[[:d:Q62923789|Margarette "Peggy" Golding]]''
|
|
|
|-
| style='text-align:right'| 5873
| ''[[:d:Q20734229|Rhisiart Parry]]''
|
|
|
|-
| style='text-align:right'| 5874
| ''[[:d:Q20734240|Rhys Davies]]''
|
|
|
|-
| style='text-align:right'| 5875
| ''[[:d:Q20734250|Rhys Jones Huws]]''
| [[Coadan:Rhys Jones Huws.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5876
| ''[[:d:Q20734248|Rhys Gwesyn Jones]]''
|
|
|
|-
| style='text-align:right'| 5877
| ''[[:d:Q20734255|Rhys Price]]''
|
|
|
|-
| style='text-align:right'| 5878
| ''[[:d:Q20734256|Rhys Prydderch]]''
|
|
|
|-
| style='text-align:right'| 5879
| ''[[:d:Q20734263|Richard Bennett]]''
|
|
|
|-
| style='text-align:right'| 5880
| ''[[:d:Q20734261|Rice Pryce Buckley Williames]]''
|
|
|
|-
| style='text-align:right'| 5881
| ''[[:d:Q20734270|Richard Davies Griffith]]''
|
|
|
|-
| style='text-align:right'| 5882
| ''[[:d:Q20734269|Richard Davies]]''
| [[Coadan:Portrait of Richard (Tafolog) Davies (4673089).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5883
| ''[[:d:Q20734636|William Howells]]''
|
|
|
|-
| style='text-align:right'| 5884
| ''[[:d:Q20734637|William Hubert Davies]]''
|
|
|
|-
| style='text-align:right'| 5885
| ''[[:d:Q20734274|Richard Ellis]]''
|
|
|
|-
| style='text-align:right'| 5886
| ''[[:d:Q20734275|Richard Foulkes Edwards]]''
| [[Coadan:Risiart Ddu o Wynedd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5887
| ''[[:d:Q20734273|Richard Ellis]]''
|
|
|
|-
| style='text-align:right'| 5888
| ''[[:d:Q20734282|Richard Humphreys Morgan]]''
|
|
|
|-
| style='text-align:right'| 5889
| ''[[:d:Q20734283|Richard Jones]]''
| [[Coadan:Portrait of Richard Jones, Llwyngwril (4673766) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5890
| ''[[:d:Q20734280|Richard Hughes]]''
|
|
|
|-
| style='text-align:right'| 5891
| ''[[:d:Q20734281|Richard Humphreys]]''
| [[Coadan:Richd. Humphreys, Dyffryn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5892
| ''[[:d:Q20734284|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 5893
| ''[[:d:Q20734290|Richard Lloyd]]''
| [[Coadan:Rhamant Bywyd Lloyd George (page 70 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5894
| ''[[:d:Q20734291|Richard Lowe]]''
|
|
|
|-
| style='text-align:right'| 5895
| ''[[:d:Q20734288|Richard Lewis]]''
|
|
|
|-
| style='text-align:right'| 5896
| ''[[:d:Q20734292|Richard Lumley]]''
| [[Coadan:Portrait of R Lumley (4673791).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5897
| ''[[:d:Q20734298|Richard Morris Lewis]]''
|
|
|
|-
| style='text-align:right'| 5898
| ''[[:d:Q20734299|Richard Newcome]]''
| [[Coadan:Portrait of Richard Newcome (4674540).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5899
| ''[[:d:Q20734296|Richard Morgan]]''
|
|
|
|-
| style='text-align:right'| 5900
| ''[[:d:Q20734297|Richard Morgan]]''
|
|
|
|-
| style='text-align:right'| 5901
| ''[[:d:Q20734303|Richard Rees]]''
|
|
|
|-
| style='text-align:right'| 5902
| ''[[:d:Q20734304|Richard Roberts]]''
| [[Coadan:Richard Roberts profile.png|center|128px]]
|
|
|-
| style='text-align:right'| 5903
| ''[[:d:Q20734305|Richard Samuel Hughes]]''
|
|
|
|-
| style='text-align:right'| 5904
| ''[[:d:Q20734311|Robert Albert Jones]]''
|
|
|
|-
| style='text-align:right'| 5905
| ''[[:d:Q20734308|Richard Williams]]''
| [[Coadan:Richard Williams, 'Celynog' (5254841).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5906
| ''[[:d:Q20734314|Robert Dafydd]]''
| [[Coadan:Robert Dafydd, Brynengan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5907
| ''[[:d:Q20734313|Robert Baugh]]''
|
|
|
|-
| style='text-align:right'| 5908
| ''[[:d:Q20734318|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 5909
| ''[[:d:Q20734316|Robert David Roberts]]''
| [[Coadan:Revd Robert David Roberts, Llwynhendy (1820-93) NLW3364306.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5910
| ''[[:d:Q20734320|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 5911
| ''[[:d:Q20734321|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 5912
| ''[[:d:Q20734326|Robert Ellis]]''
| [[Coadan:Robert Ellis, Ysgoldy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5913
| ''[[:d:Q20734325|Robert Edwards]]''
|
|
|
|-
| style='text-align:right'| 5914
| ''[[:d:Q20734331|Robert Foulkes]]''
|
|
|
|-
| style='text-align:right'| 5915
| ''[[:d:Q20734334|Robert Griffiths]]''
| [[Coadan:Portrait of Robert Griffiths (4670251).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5916
| ''[[:d:Q20734335|Robert Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 5917
| ''[[:d:Q20734332|Robert Griffith]]''
| [[Coadan:Robert Griffith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5918
| ''[[:d:Q20734333|Robert Griffith Roberts]]''
|
|
|
|-
| style='text-align:right'| 5919
| ''[[:d:Q20734339|Robert James]]''
|
|
|
|-
| style='text-align:right'| 5920
| ''[[:d:Q20734336|Robert Hughes]]''
| [[Coadan:Self portrait (4703026).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5921
| ''[[:d:Q20734337|Robert Humphreys]]''
|
|
|
|-
| style='text-align:right'| 5922
| ''[[:d:Q20734342|Robert Jones]]''
| [[Coadan:Robert Jones, Llanllyfni.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5923
| ''[[:d:Q20734343|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 5924
| ''[[:d:Q20734341|Robert Jones]]''
| [[Coadan:Portrait of Revd. Robert G. Jones (4672941).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5925
| ''[[:d:Q20734346|Robert Llwyd]]''
|
|
|
|-
| style='text-align:right'| 5926
| ''[[:d:Q20734344|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 5927
| ''[[:d:Q20734348|Robert Meredith]]''
|
|
|
|-
| style='text-align:right'| 5928
| ''[[:d:Q20734349|Robert Morgan]]''
|
|
|
|-
| style='text-align:right'| 5929
| ''[[:d:Q20734354|Robert Owen]]''
| [[Coadan:Robert Owen, Pennal.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5930
| ''[[:d:Q20734355|Robert Owen]]''
| [[Coadan:Robert Owen (Bardd y Môr).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5931
| ''[[:d:Q20734352|Robert Oliver Rees]]''
|
|
|
|-
| style='text-align:right'| 5932
| ''[[:d:Q20734362|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 5933
| ''[[:d:Q20734363|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 5934
| ''[[:d:Q20734360|Robert Pugh Rowlands]]''
| [[Coadan:Robert Pugh Rowlands. Photograph by Lafayette Ltd. Wellcome V0027109.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5935
| ''[[:d:Q20734361|Robert Richard Hughes]]''
|
|
|
|-
| style='text-align:right'| 5936
| ''[[:d:Q20734365|Robert Roberts]]''
| [[Coadan:Portrait of Robert Roberts, Y Sgolor Mawr (4671120).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5937
| ''[[:d:Q20734368|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 5938
| ''[[:d:Q20734374|Rolant Huw]]''
|
|
|
|-
| style='text-align:right'| 5939
| ''[[:d:Q20734375|Ronald James Tree]]''
|
|
|
|-
| style='text-align:right'| 5940
| ''[[:d:Q20734378|Rowland Hughes]]''
| [[Coadan:Portrait of Rev. Rowland Hughes, Wesleyan Minister (4670927) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5941
| ''[[:d:Q20734376|Rosser Beynon]]''
|
|
|
|-
| style='text-align:right'| 5942
| ''[[:d:Q20734383|Samuel Davies]]''
|
|
|
|-
| style='text-align:right'| 5943
| ''[[:d:Q20734381|Samuel Bowen]]''
| [[Coadan:Samuel Bowen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5944
| ''[[:d:Q20734386|Samuel Evans]]''
| [[Coadan:Portrait of Samuel Evans, Zoar, Merthyr Tydfil, South Wales (4674125).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5945
| ''[[:d:Q20734387|Samuel Evans]]''
| [[Coadan:Dr. Samuel Evans (5349058) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5946
| ''[[:d:Q20734384|Samuel Davies]]''
| [[Coadan:Portrait of Samuel Davies (4673074).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5947
| ''[[:d:Q20734385|Samuel Ellis]]''
|
|
|
|-
| style='text-align:right'| 5948
| ''[[:d:Q20734390|Samuel James Evans]]''
|
|
|
|-
| style='text-align:right'| 5949
| ''[[:d:Q20734388|Samuel Evans]]''
|
|
|
|-
| style='text-align:right'| 5950
| ''[[:d:Q20734389|Samuel Griffiths]]''
| [[Coadan:Portrait of Parchedig Samuel Griffiths, Horeb Llandysul 1855 (4670806).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5951
| ''[[:d:Q20734392|Samuel Maurice Jones]]''
| [[Coadan:Portrait of Samuel Morris Jones (4674452).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5952
| ''[[:d:Q20734393|Sarah Winifred Parry]]''
| [[Coadan:Winnie Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5953
| ''[[:d:Q20734396|Siencyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 5954
| ''[[:d:Q20734397|Silas Morris]]''
| [[Coadan:Prifathro Silas Morris, Coleg y Bedyddwyr, Bangor (5254799).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5955
| ''[[:d:Q20734403|Thomas David Slingsby-Jenkins]]''
|
|
|
|-
| style='text-align:right'| 5956
| ''[[:d:Q20734407|Stanley Howard Hedley Perry]]''
|
|
|
|-
| style='text-align:right'| 5957
| ''[[:d:Q20734404|Solomon Harris]]''
|
|
|
|-
| style='text-align:right'| 5958
| ''[[:d:Q20734405|Sorobabel Davies]]''
|
|
|
|-
| style='text-align:right'| 5959
| ''[[:d:Q20734410|Stephen Davies]]''
|
|
|
|-
| style='text-align:right'| 5960
| ''[[:d:Q20734411|Stephen Evans]]''
| [[Coadan:William Oliver (1823-1901) - Stephen Evans, Esq. (1818–1905), JP - OP76 - Aberystwyth University, School of Art Museum and Galleries.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5961
| ''[[:d:Q20734408|Stanley Bligh]]''
|
|
|
|-
| style='text-align:right'| 5962
| ''[[:d:Q20734414|Thomas (Jeremy) Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5963
| ''[[:d:Q20734412|Stephen Llwyd]]''
|
|
|
|-
| style='text-align:right'| 5964
| ''[[:d:Q20734417|Thomas Aubrey]]''
| [[Coadan:Portrait of Thomas Aubrey (4674307).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5965
| ''[[:d:Q20734420|Thomas Beynon]]''
|
|
|
|-
| style='text-align:right'| 5966
| ''[[:d:Q20734427|Thomas David Llewelyn]]''
| [[Coadan:Unknown artist - Thomas David Llewelyn (1828–1879) - OP00304 - Bangor University.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5967
| ''[[:d:Q20734430|Thomas Davies]]''
| [[Coadan:Thomas Davies, Llandeilo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5968
| ''[[:d:Q20734431|Thomas Davies]]''
| [[Coadan:Revd Thomas Davies, Llanelli (1823-98) (Cong) NLW3364508.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5969
| ''[[:d:Q20734429|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 5970
| ''[[:d:Q20734432|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 5971
| ''[[:d:Q20734433|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 5972
| ''[[:d:Q20734438|Thomas Edwards]]''
|
|
|
|-
| style='text-align:right'| 5973
| ''[[:d:Q20734439|Thomas Edwards]]''
| [[Coadan:Portrait of Cynonfardd (4673939).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5974
| ''[[:d:Q20734633|William Hope]]''
|
|
|
|-
| style='text-align:right'| 5975
| ''[[:d:Q20734626|William Griffiths]]''
| [[Coadan:William Griffiths, Pontypridd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5976
| ''[[:d:Q20734627|William Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5977
| ''[[:d:Q20734624|William Griffiths]]''
|
|
|
|-
| style='text-align:right'| 5978
| ''[[:d:Q20734625|William Griffiths]]''
| [[Coadan:Portrait of William Griffiths (4672537).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5979
| ''[[:d:Q20734630|William Henry Roberts]]''
|
|
|
|-
| style='text-align:right'| 5980
| ''[[:d:Q20734631|William Hobley]]''
| [[Coadan:Parch William Hobley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5981
| ''[[:d:Q20734628|William Haines]]''
|
|
|
|-
| style='text-align:right'| 5982
| ''[[:d:Q20734634|William Hopkyn Rees]]''
|
|
|
|-
| style='text-align:right'| 5983
| ''[[:d:Q20734638|William Hugh Evans]]''
| [[Coadan:Gwyllt y Mynydd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5984
| ''[[:d:Q20734639|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 5985
| ''[[:d:Q105344677|Rowland James Williams]]''
|
|
|
|-
| style='text-align:right'| 5986
| ''[[:d:Q105514757|C. R. Jones]]''
| [[Coadan:C. R. Jones, Ysw., Y.H., Llanfyllin (5236452).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 5987
| ''[[:d:Q105549362|Michael Roberts]]''
|
|
|
|-
| style='text-align:right'| 5988
| ''[[:d:Q105554307|Harry Thomas Owen, Quaker]]''
|
|
|
|-
| style='text-align:right'| 5989
| ''[[:d:Q105803185|Donald Hoskins]]''
|
|
|
|-
| style='text-align:right'| 5990
| ''[[:d:Q105824928|Ivan Dale Owen]]''
|
|
|
|-
| style='text-align:right'| 5991
| ''[[:d:Q105883342|Cyril Glyndwr Williams]]''
|
|
|
|-
| style='text-align:right'| 5992
| ''[[:d:Q105887434|Cliff Tamplin]]''
|
|
|
|-
| style='text-align:right'| 5993
| ''[[:d:Q105946804|William Henry Davies]]''
|
|
|
|-
| style='text-align:right'| 5994
| ''[[:d:Q105993903|William George Conley]]''
|
|
|
|-
| style='text-align:right'| 5995
| ''[[:d:Q106166812|Vernon Stanley Jones]]''
|
|
|
|-
| style='text-align:right'| 5996
| ''[[:d:Q106193079|Byron Wozencraft]]''
|
|
|
|-
| style='text-align:right'| 5997
| ''[[:d:Q106193220|Dyfri Jones]]''
|
|
|
|-
| style='text-align:right'| 5998
| ''[[:d:Q106204551|Kenneth Crook]]''
|
|
|
|-
| style='text-align:right'| 5999
| ''[[:d:Q106243608|Arthur Walter Powell]]''
|
|
|
|-
| style='text-align:right'| 6000
| ''[[:d:Q106369503|Eleanor Daniels]]''
| [[Coadan:EleanorDaniels1914.tif|center|128px]]
|
|
|-
| style='text-align:right'| 6001
| ''[[:d:Q106393535|Amy Noel Morfydd Ballinger]]''
| [[Coadan:Amy Noel Morfydd Ballinger (5449693).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6002
| ''[[:d:Q106418087|James Hughes]]''
| [[Coadan:James Hughes (Glanrheidol) first Mayor reformed corporation of Aberystwyth, A.D. 1836 (5349083).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6003
| ''[[:d:Q106418333|William Jones]]''
| [[Coadan:William Jones, 'Monfa' (of Bootle) (5349085).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6004
| ''[[:d:Q106418847|John Lloyd Griffith]]''
| [[Coadan:The late J. Lloyd Griffith Esq., M.A (5348993).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6005
| ''[[:d:Q106421024|Dai Games]]''
|
|
|
|-
| style='text-align:right'| 6006
| ''[[:d:Q106465233|Cornelius Griffiths]]''
| [[Coadan:Rev. Cornelius Griffiths born Feb 25th 1829 ; died Nov 6th 1905 (5293977).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6007
| ''[[:d:Q106465424|May John]]''
| [[Coadan:Miss May John (5294079) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6008
| ''[[:d:Q106467715|David Charles Davies]]''
| [[Coadan:David Charles Davies at Palm Beach, Florida, 1908 (5449735).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6009
| ''[[:d:Q106468578|Rosamund Colman]]''
| [[Coadan:Miss Salusbury (daughter of the late Major Salusbury, owner of the Bachygraig Estate) (5449764) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6010
| ''[[:d:Q106472293|Catherine Miriam Anwyl]]''
| [[Coadan:Catherine Miriam Anwyl (5449774) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6011
| ''[[:d:Q106501654|Chris Riley]]''
|
|
|
|-
| style='text-align:right'| 6012
| ''[[:d:Q106518337|Rachel Howell-Evans]]''
|
|
|
|-
| style='text-align:right'| 6013
| ''[[:d:Q106574374|Hugh Harrison]]''
|
|
|
|-
| style='text-align:right'| 6014
| ''[[:d:Q106588660|Kenneth Davies]]''
|
|
|
|-
| style='text-align:right'| 6015
| ''[[:d:Q106602538|Joan M. Eyles]]''
|
|
|
|-
| style='text-align:right'| 6016
| ''[[:d:Q106635128|Benjamin Thomas]]''
|
|
|
|-
| style='text-align:right'| 6017
| ''[[:d:Q106636382|Owen E. Evans]]''
| [[Coadan:Reverend Owen Ellis Evans, director of the new translation of the Welsh Bible from 1974 to 1977 (1548083).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6018
| ''[[:d:Q106637558|Frank Robinson Brown]]''
|
|
|
|-
| style='text-align:right'| 6019
| ''[[:d:Q106638464|Alwyn Owens]]''
|
|
|
|-
| style='text-align:right'| 6020
| ''[[:d:Q106669233|Herbert Forsdike]]''
|
|
|
|-
| style='text-align:right'| 6021
| ''[[:d:Q106697312|Patricia Bellotti]]''
|
|
|
|-
| style='text-align:right'| 6022
| ''[[:d:Q106705757|Emma Packe]]''
| [[Coadan:Mrs Packe c1875.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6023
| ''[[:d:Q106716134|Caroline Orr]]''
|
|
|
|-
| style='text-align:right'| 6024
| ''[[:d:Q106763028|Mervyn Davies]]''
|
|
|
|-
| style='text-align:right'| 6025
| ''[[:d:Q106823039|Gwynfryn Morgan Daniel]]''
|
|
|
|-
| style='text-align:right'| 6026
| ''[[:d:Q106827606|John Geoffrey Jones]]''
|
|
|
|-
| style='text-align:right'| 6027
| ''[[:d:Q106959770|Samuel Islwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 6028
| ''[[:d:Q107127836|Nick Laughland]]''
|
|
|
|-
| style='text-align:right'| 6029
| ''[[:d:Q107182198|Frederick George Albert Stuckey]]''
|
|
|
|-
| style='text-align:right'| 6030
| ''[[:d:Q107182592|Elizabeth Jones-Sifford]]''
|
|
|
|-
| style='text-align:right'| 6031
| ''[[:d:Q107207795|Gerald Williams]]''
| [[Coadan:Gerald Williams, nai Hedd Wyn, y tu allan i'r Ysgwrn (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6032
| ''[[:d:Q107220523|Philip Harrhy Jones]]''
|
|
|
|-
| style='text-align:right'| 6033
| ''[[:d:Q107242293|John T. Davies]]''
|
|
|
|-
| style='text-align:right'| 6034
| ''[[:d:Q107341053|Morris Baron Cohen]]''
|
|
|
|-
| style='text-align:right'| 6035
| ''[[:d:Q107363545|Wyndham Edwards]]''
|
|
|
|-
| style='text-align:right'| 6036
| ''[[:d:Q107366865|Evan Pierce]]''
| [[Coadan:Evan Pierce. Mezzotint by S. W. Reynolds, junior, 1849, afte Wellcome V0006595.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6037
| ''[[:d:Q107368806|Percy Baker]]''
|
|
|
|-
| style='text-align:right'| 6038
| ''[[:d:Q107370884|Wyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6039
| ''[[:d:Q107394161|Daniel Tudor]]''
|
|
|
|-
| style='text-align:right'| 6040
| ''[[:d:Q107407076|William Lloyd Phillips]]''
|
|
|
|-
| style='text-align:right'| 6041
| ''[[:d:Q107411765|Albert Hawkins]]''
|
|
|
|-
| style='text-align:right'| 6042
| ''[[:d:Q107464879|Billy Poyntz]]''
|
|
|
|-
| style='text-align:right'| 6043
| ''[[:d:Q107485959|Edward Robarts]]''
|
|
|
|-
| style='text-align:right'| 6044
| ''[[:d:Q107500567|Douglas C. Fox]]''
|
|
|
|-
| style='text-align:right'| 6045
| ''[[:d:Q107504366|Gordon K. Lewis]]''
|
|
|
|-
| style='text-align:right'| 6046
| ''[[:d:Q107582050|George Brinley Evans]]''
|
|
|
|-
| style='text-align:right'| 6047
| ''[[:d:Q107661809|Sir David Nicholas]]''
|
|
|
|-
| style='text-align:right'| 6048
| ''[[:d:Q107691517|Taffy Owen]]''
|
|
|
|-
| style='text-align:right'| 6049
| ''[[:d:Q107697068|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 6050
| ''[[:d:Q108114994|Benjamin Baynton]]''
|
|
|
|-
| style='text-align:right'| 6051
| ''[[:d:Q108136770|Robert Roberts]]''
|
|
|
|-
| style='text-align:right'| 6052
| ''[[:d:Q108217230|David Vaughan Davies]]''
|
|
|
|-
| style='text-align:right'| 6053
| ''[[:d:Q108224262|Henry Foxall]]''
| [[Coadan:Profile Portrait of Henry Foxall.png|center|128px]]
|
|
|-
| style='text-align:right'| 6054
| ''[[:d:Q108243277|Ezzelina Jones]]''
|
|
|
|-
| style='text-align:right'| 6055
| ''[[:d:Q108300147|Derrick Pritchard Webley]]''
|
|
|
|-
| style='text-align:right'| 6056
| ''[[:d:Q108308472|Garnet Rees]]''
|
|
|
|-
| style='text-align:right'| 6057
| ''[[:d:Q108386688|Doris Lindner]]''
|
|
|
|-
| style='text-align:right'| 6058
| ''[[:d:Q108416183|John Fletcher Owen]]''
| [[Coadan:John Fletcher Owen (4050606421).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6059
| ''[[:d:Q108525988|John Charles McLean]]''
|
|
|
|-
| style='text-align:right'| 6060
| ''[[:d:Q108531511|Alun Gibbard]]''
|
|
|
|-
| style='text-align:right'| 6061
| ''[[:d:Q108601753|David Rogers Jones]]''
|
|
|
|-
| style='text-align:right'| 6062
| ''[[:d:Q108610241|Annie Florence Evans]]''
| [[Coadan:Florrie Evans missionary.png|center|128px]]
|
|
|-
| style='text-align:right'| 6063
| ''[[:d:Q108678888|Thomas William Jones]]''
| [[Coadan:Thomas William Jones.webp|center|128px]]
|
|
|-
| style='text-align:right'| 6064
| ''[[:d:Q108686833|Thomas Gruffydd Davies]]''
|
|
|
|-
| style='text-align:right'| 6065
| ''[[:d:Q108753145|Robert Morris Evans]]''
|
|
|
|-
| style='text-align:right'| 6066
| ''[[:d:Q108753677|Judith Hockaday]]''
|
|
|
|-
| style='text-align:right'| 6067
| ''[[:d:Q108753852|John Glyn Penrhyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6068
| ''[[:d:Q108754117|Hywel Geoffrey Lloyd Lloyd-Thomas]]''
|
|
|
|-
| style='text-align:right'| 6069
| ''[[:d:Q108754201|Arthur Griffith Maitland-Jones]]''
|
|
|
|-
| style='text-align:right'| 6070
| ''[[:d:Q108754941|Eirwyn Norman Rowlands]]''
|
|
|
|-
| style='text-align:right'| 6071
| ''[[:d:Q108755272|Reginald Norman Tattersall]]''
|
|
|
|-
| style='text-align:right'| 6072
| ''[[:d:Q108885058|Evan Cambria Thomas]]''
|
|
|
|-
| style='text-align:right'| 6073
| ''[[:d:Q109037476|George Bowen]]''
|
|
|
|-
| style='text-align:right'| 6074
| ''[[:d:Q109062193|Ann Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6075
| ''[[:d:Q109276106|Helen Mackay]]''
|
|
|
|-
| style='text-align:right'| 6076
| ''[[:d:Q109278982|Dewi Arwel Hughes]]''
|
|
|
|-
| style='text-align:right'| 6077
| ''[[:d:Q109339963|Gerard Dynevor]]''
|
|
|
|-
| style='text-align:right'| 6078
| ''[[:d:Q109381288|Shirley Dynevor]]''
|
|
|
|-
| style='text-align:right'| 6079
| ''[[:d:Q109479497|Thomas Fisher]]''
| [[Coadan:Portrait of NX17395 Warrant-Officer Thomas Fisher, Official Photographer with the Military History and Information Section.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6080
| ''[[:d:Q109479931|David Morgan]]''
|
|
|
|-
| style='text-align:right'| 6081
| ''[[:d:Q109606512|David Roberts Sr.]]''
|
|
|
|-
| style='text-align:right'| 6082
| ''[[:d:Q109615124|William H. Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6083
| ''[[:d:Q109630143|Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 6084
| ''[[:d:Q109630370|J Gwyndud Jones]]''
|
|
|
|-
| style='text-align:right'| 6085
| ''[[:d:Q53870939|Gwyn Morgans]]''
|
|
|
|-
| style='text-align:right'| 6086
| ''[[:d:Q54005453|Wally Roberts]]''
|
|
|
|-
| style='text-align:right'| 6087
| ''[[:d:Q54670107|Richard Trygarn Griffith]]''
| [[Coadan:Portrait of Mr. Trygarn Griffith ; Mrs. Trygarn Griffith (4671009).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6088
| ''[[:d:Q54800979|Henry Evans]]''
| [[Coadan:Portrait of Henry Evans (born 1606) (4674118).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6089
| ''[[:d:Q54869232|Rees Alfred Davis]]''
|
|
|
|-
| style='text-align:right'| 6090
| ''[[:d:Q54957569|Ray Davies]]''
|
|
|
|-
| style='text-align:right'| 6091
| ''[[:d:Q54982366|Neil Jones]]''
|
|
|
|-
| style='text-align:right'| 6092
| ''[[:d:Q55048184|Melville Hocken]]''
|
|
|
|-
| style='text-align:right'| 6093
| ''[[:d:Q55232067|Beverley Collins]]''
|
|
|
|-
| style='text-align:right'| 6094
| ''[[:d:Q55237277|Terry Dyddgen-Jones]]''
|
|
|
|-
| style='text-align:right'| 6095
| ''[[:d:Q55310397|Bridget Chetwynd]]''
|
|
|
|-
| style='text-align:right'| 6096
| ''[[:d:Q55350891|Les Speed]]''
|
|
|
|-
| style='text-align:right'| 6097
| ''[[:d:Q55363774|Stan Roberts]]''
|
|
|
|-
| style='text-align:right'| 6098
| ''[[:d:Q55363992|Ken Morgan]]''
|
|
|
|-
| style='text-align:right'| 6099
| ''[[:d:Q55587858|Thomas Merthyr Guest]]''
| [[Coadan:Thomas Merthyr Guest Vanity Fair 1897-11-11.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6100
| ''[[:d:Q55607911|Colin Hudson]]''
|
|
|
|-
| style='text-align:right'| 6101
| ''[[:d:Q55610492|Eddie Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6102
| ''[[:d:Q55618848|William Williams]]''
| [[Coadan:William Williams on a railway jigger, rabbit hunting in Otago, ca 1900 (3056669963) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6103
| ''[[:d:Q55618934|William Williams]]''
|
|
|
|-
| style='text-align:right'| 6104
| ''[[:d:Q55642700|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 6105
| ''[[:d:Q55683438|Jimmy Mesene]]''
|
|
|
|-
| style='text-align:right'| 6106
| ''[[:d:Q55713686|Helena Jones]]''
|
|
|
|-
| style='text-align:right'| 6107
| ''[[:d:Q55721395|Abram Reese]]''
| [[Coadan:Abram Reese (1829–1908).png|center|128px]]
|
|
|-
| style='text-align:right'| 6108
| ''[[:d:Q55739150|Arnold Hill Payne]]''
|
|
|
|-
| style='text-align:right'| 6109
| ''[[:d:Q55767256|David James Llewelfryn Davies]]''
|
|
|
|-
| style='text-align:right'| 6110
| ''[[:d:Q55825490|Jack Jones]]''
|
|
|
|-
| style='text-align:right'| 6111
| ''[[:d:Q55825492|Brian Jarvis]]''
|
|
|
|-
| style='text-align:right'| 6112
| ''[[:d:Q55978975|Neil O'Halloran]]''
|
|
|
|-
| style='text-align:right'| 6113
| ''[[:d:Q55979165|Iorwerth Herbert]]''
|
|
|
|-
| style='text-align:right'| 6114
| ''[[:d:Q56000479|Peter Bailey]]''
|
|
|
|-
| style='text-align:right'| 6115
| ''[[:d:Q56173874|Rose Mabel Durham]]''
|
|
|
|-
| style='text-align:right'| 6116
| ''[[:d:Q56173890|Rees Arthur]]''
|
|
|
|-
| style='text-align:right'| 6117
| ''[[:d:Q56173931|Ivor Astle]]''
|
|
|
|-
| style='text-align:right'| 6118
| ''[[:d:Q56173975|Elizabeth Mabel Bailey]]''
|
|
|
|-
| style='text-align:right'| 6119
| ''[[:d:Q56174075|William Barrow]]''
|
|
|
|-
| style='text-align:right'| 6120
| ''[[:d:Q56174123|Edward Bebb]]''
|
|
|
|-
| style='text-align:right'| 6121
| ''[[:d:Q56174136|Jane Belk]]''
|
|
|
|-
| style='text-align:right'| 6122
| ''[[:d:Q56174215|George Bettiss]]''
|
|
|
|-
| style='text-align:right'| 6123
| ''[[:d:Q56174242|John Thomas Beynon]]''
|
|
|
|-
| style='text-align:right'| 6124
| ''[[:d:Q56174350|John George William Bonsall]]''
|
|
|
|-
| style='text-align:right'| 6125
| ''[[:d:Q56174397|Gwynne Vaughan Bowen]]''
|
|
|
|-
| style='text-align:right'| 6126
| ''[[:d:Q56174521|Arthur Brook]]''
|
|
|
|-
| style='text-align:right'| 6127
| ''[[:d:Q56174569|James Brynker]]''
|
|
|
|-
| style='text-align:right'| 6128
| ''[[:d:Q56174632|John Burrell]]''
|
|
|
|-
| style='text-align:right'| 6129
| ''[[:d:Q56174713|David Arthur Callard]]''
|
|
|
|-
| style='text-align:right'| 6130
| ''[[:d:Q56174916|Gerard Casey]]''
|
|
|
|-
| style='text-align:right'| 6131
| ''[[:d:Q56175058|Sarah Charles]]''
|
|
|
|-
| style='text-align:right'| 6132
| ''[[:d:Q56175082|Charles Charman]]''
|
|
|
|-
| style='text-align:right'| 6133
| ''[[:d:Q56175321|Alfred Butler Clough]]''
|
|
|
|-
| style='text-align:right'| 6134
| ''[[:d:Q56175456|Athelstan Corbet]]''
|
|
|
|-
| style='text-align:right'| 6135
| ''[[:d:Q56175528|Sarah Jane Rees]]''
| [[Coadan:Cranogwen (5292147).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6136
| ''[[:d:Q56175743|Thomas Dalton]]''
|
|
|
|-
| style='text-align:right'| 6137
| ''[[:d:Q56175777|Evan David]]''
|
|
|
|-
| style='text-align:right'| 6138
| ''[[:d:Q56175831|Arthur Stanley Davies]]''
|
|
|
|-
| style='text-align:right'| 6139
| ''[[:d:Q56175842|Benjamin Davies]]''
|
|
|
|-
| style='text-align:right'| 6140
| ''[[:d:Q56175850|David Griffith Davies]]''
|
|
|
|-
| style='text-align:right'| 6141
| ''[[:d:Q56175852|David Oswald Davies]]''
|
|
|
|-
| style='text-align:right'| 6142
| ''[[:d:Q56175860|Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 6143
| ''[[:d:Q56175866|David Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 6144
| ''[[:d:Q56175868|David Rees Davies]]''
|
|
|
|-
| style='text-align:right'| 6145
| ''[[:d:Q56175873|David Davies]]''
|
|
|
|-
| style='text-align:right'| 6146
| ''[[:d:Q56175876|David Davies]]''
|
|
|
|-
| style='text-align:right'| 6147
| ''[[:d:Q56175916|Edward Davies]]''
|
|
|
|-
| style='text-align:right'| 6148
| ''[[:d:Q56175931|Frances Davies]]''
|
|
|
|-
| style='text-align:right'| 6149
| ''[[:d:Q56175961|Humphrey Jones Davies]]''
|
|
|
|-
| style='text-align:right'| 6150
| ''[[:d:Q56175968|Idwal Davies]]''
|
|
|
|-
| style='text-align:right'| 6151
| ''[[:d:Q56176004|John Davies]]''
|
|
|
|-
| style='text-align:right'| 6152
| ''[[:d:Q56176026|Kate Davies]]''
|
|
|
|-
| style='text-align:right'| 6153
| ''[[:d:Q56176024|Jonathan Davies]]''
|
|
|
|-
| style='text-align:right'| 6154
| ''[[:d:Q56176082|Samuel Davies]]''
|
|
|
|-
| style='text-align:right'| 6155
| ''[[:d:Q56176086|Thomas George Davies]]''
|
|
|
|-
| style='text-align:right'| 6156
| ''[[:d:Q56176089|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 6157
| ''[[:d:Q56176101|Walter Cecil Davies]]''
|
|
|
|-
| style='text-align:right'| 6158
| ''[[:d:Q56176152|Rhys Lewis Davis]]''
|
|
|
|-
| style='text-align:right'| 6159
| ''[[:d:Q56176183|Wilfred Seymour De Winton]]''
|
|
|
|-
| style='text-align:right'| 6160
| ''[[:d:Q56176227|David J. Owen]]''
|
|
|
|-
| style='text-align:right'| 6161
| ''[[:d:Q56176497|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 6162
| ''[[:d:Q56176621|Siôn Eirian]]''
|
|
|
|-
| style='text-align:right'| 6163
| ''[[:d:Q56176675|Richard Elias]]''
|
|
|
|-
| style='text-align:right'| 6164
| ''[[:d:Q56176704|Annie Jane Ellis]]''
| [[Coadan:Annie Jane Hughes-Griffiths (5227587).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6165
| ''[[:d:Q56176713|Hugh Ellis]]''
|
|
|
|-
| style='text-align:right'| 6166
| ''[[:d:Q56176894|David Arthen Evans]]''
|
|
|
|-
| style='text-align:right'| 6167
| ''[[:d:Q56176898|David Evans]]''
|
|
|
|-
| style='text-align:right'| 6168
| ''[[:d:Q56176902|David Evans]]''
|
|
|
|-
| style='text-align:right'| 6169
| ''[[:d:Q56176909|David Evans]]''
|
|
|
|-
| style='text-align:right'| 6170
| ''[[:d:Q56176920|Ebenezer Evans]]''
| [[Coadan:Revd Ebenezer Evans (Bodedern, CM?) NLW3365083.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6171
| ''[[:d:Q56176943|Foulk Evans]]''
| [[Coadan:Er cof am y Parch Foulk Evans, Machynlleth.. NLW3365216.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6172
| ''[[:d:Q56176950|Thomas Evans Griffith]]''
|
|
|
|-
| style='text-align:right'| 6173
| ''[[:d:Q56176960|William Howell Evans]]''
|
|
|
|-
| style='text-align:right'| 6174
| ''[[:d:Q56176970|John Owain Evans]]''
|
|
|
|-
| style='text-align:right'| 6175
| ''[[:d:Q56176995|Josiah Daniel Evans]]''
|
|
|
|-
| style='text-align:right'| 6176
| ''[[:d:Q56176992|Jonah Bowen Evans]]''
|
|
|
|-
| style='text-align:right'| 6177
| ''[[:d:Q56176998|Lewis Evans]]''
|
|
|
|-
| style='text-align:right'| 6178
| ''[[:d:Q56177000|Mali Evans]]''
|
|
|
|-
| style='text-align:right'| 6179
| ''[[:d:Q56177009|Olwen Caradoc Evans]]''
|
|
|
|-
| style='text-align:right'| 6180
| ''[[:d:Q56177012|Olwen Elizabeth Lloyd George]]''
| [[Coadan:Olwen Lloyd George a Capt T J Carey Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6181
| ''[[:d:Q56177037|Simon Evans]]''
|
|
|
|-
| style='text-align:right'| 6182
| ''[[:d:Q56177069|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6183
| ''[[:d:Q56177096|Hope Wynne Eyton]]''
|
|
|
|-
| style='text-align:right'| 6184
| ''[[:d:Q56177160|John Jocelyn Ffoulkes]]''
|
|
|
|-
| style='text-align:right'| 6185
| ''[[:d:Q110961740|Ted Regan]]''
|
|
|
|-
| style='text-align:right'| 6186
| ''[[:d:Q20734446|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 6187
| ''[[:d:Q20734447|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 6188
| ''[[:d:Q20734450|Thomas Frimston]]''
|
|
|
|-
| style='text-align:right'| 6189
| ''[[:d:Q20734449|Thomas Evans]]''
|
|
|
|-
| style='text-align:right'| 6190
| ''[[:d:Q20734455|Thomas Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6191
| ''[[:d:Q20734453|Thomas Grey]]''
|
|
|
|-
| style='text-align:right'| 6192
| ''[[:d:Q20734458|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 6193
| ''[[:d:Q20734459|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 6194
| ''[[:d:Q20734456|Thomas Gruffydd Jones]]''
|
|
|
|-
| style='text-align:right'| 6195
| ''[[:d:Q20734457|Thomas Harris]]''
|
|
|
|-
| style='text-align:right'| 6196
| ''[[:d:Q20734460|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 6197
| ''[[:d:Q20734461|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 6198
| ''[[:d:Q20734466|Thomas Hywel Hughes]]''
|
|
|
|-
| style='text-align:right'| 6199
| ''[[:d:Q20734467|Thomas Isfryn Hughes]]''
|
|
|
|-
| style='text-align:right'| 6200
| ''[[:d:Q20734464|Thomas Huws Davies]]''
|
|
|
|-
| style='text-align:right'| 6201
| ''[[:d:Q20734465|Thomas Huxley]]''
|
|
|
|-
| style='text-align:right'| 6202
| ''[[:d:Q20734470|Thomas James]]''
| [[Coadan:Portrait of Thomas James M.A (4673953).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6203
| ''[[:d:Q20734471|Thomas James]]''
|
|
|
|-
| style='text-align:right'| 6204
| ''[[:d:Q20734475|Thomas John Evans]]''
|
|
|
|-
| style='text-align:right'| 6205
| ''[[:d:Q20734472|Thomas Jerman Jones]]''
| [[Coadan:Portrait of Thomas Jerman Jones and his family (4670364).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6206
| ''[[:d:Q20734473|Thomas John]]''
|
|
|
|-
| style='text-align:right'| 6207
| ''[[:d:Q20734482|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6208
| ''[[:d:Q20734480|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6209
| ''[[:d:Q20734486|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6210
| ''[[:d:Q20734487|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6211
| ''[[:d:Q20734490|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6212
| ''[[:d:Q20734491|Thomas Jones Hughes]]''
|
|
|
|-
| style='text-align:right'| 6213
| ''[[:d:Q20734488|Thomas Jones]]''
| [[Coadan:Portrait of Thomas Jones 'Taliesin o Eifion' (4670540) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6214
| ''[[:d:Q20734489|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6215
| ''[[:d:Q20734492|Thomas Jones Humphreys]]''
| [[Coadan:Thomas Jones Humphreys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6216
| ''[[:d:Q20734498|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 6217
| ''[[:d:Q20734499|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 6218
| ''[[:d:Q20734496|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 6219
| ''[[:d:Q20734497|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 6220
| ''[[:d:Q20734503|Thomas Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 6221
| ''[[:d:Q20734501|Thomas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6222
| ''[[:d:Q20734506|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 6223
| ''[[:d:Q20734507|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 6224
| ''[[:d:Q20734508|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 6225
| ''[[:d:Q20734509|Thomas Morris]]''
|
|
|
|-
| style='text-align:right'| 6226
| ''[[:d:Q20734518|Thomas Powell]]''
|
|
|
|-
| style='text-align:right'| 6227
| ''[[:d:Q20734519|Thomas Price]]''
|
|
|
|-
| style='text-align:right'| 6228
| ''[[:d:Q20734516|Thomas Phillips]]''
| [[Coadan:Portrait of Parch Thos. Phillips D. D (4673602).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6229
| ''[[:d:Q20734523|Thomas Rees]]''
| [[Coadan:Reverend Thomas Rees (1825–1908) (gcf10118).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6230
| ''[[:d:Q20734520|Thomas Prichard]]''
|
|
|
|-
| style='text-align:right'| 6231
| ''[[:d:Q20734521|Thomas Pryce]]''
|
|
|
|-
| style='text-align:right'| 6232
| ''[[:d:Q20734526|Thomas Richard]]''
| [[Coadan:Er cof am y diweddar Barch Thomas Richards, Abergwaen .. NLW3364476.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6233
| ''[[:d:Q20734527|Thomas Rocyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6234
| ''[[:d:Q20734524|Thomas Rees Morgan]]''
|
|
|
|-
| style='text-align:right'| 6235
| ''[[:d:Q20734525|Thomas Rhys Davies]]''
|
|
|
|-
| style='text-align:right'| 6236
| ''[[:d:Q20734528|Thomas Saunders]]''
|
|
|
|-
| style='text-align:right'| 6237
| ''[[:d:Q20734529|Thomas Sheen]]''
|
|
|
|-
| style='text-align:right'| 6238
| ''[[:d:Q20734535|Thomas Twynog Jeffries]]''
|
|
|
|-
| style='text-align:right'| 6239
| ''[[:d:Q20734533|Thomas Thomas]]''
| [[Coadan:Portrait of Revd. Thomas Thomas, D.D (4672354).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6240
| ''[[:d:Q20734539|Thomas William Barker]]''
|
|
|
|-
| style='text-align:right'| 6241
| ''[[:d:Q20734536|Thomas Wallace Fagan]]''
|
|
|
|-
| style='text-align:right'| 6242
| ''[[:d:Q20734537|Thomas Waterhouse]]''
|
|
|
|-
| style='text-align:right'| 6243
| ''[[:d:Q20734540|Thomas William Jenkyn]]''
| [[Coadan:Portrait of T. W. Jenkyn, D.D (4673322) (cropped 3).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6244
| ''[[:d:Q20734547|Tom Eirug Davies]]''
|
|
|
|-
| style='text-align:right'| 6245
| ''[[:d:Q20734544|Timothy Eynon Davies]]''
| [[Coadan:Timothy Eynon Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6246
| ''[[:d:Q20734545|Titus Evans]]''
|
|
|
|-
| style='text-align:right'| 6247
| ''[[:d:Q20734550|Trefor Richard Morgan]]''
|
|
|
|-
| style='text-align:right'| 6248
| ''[[:d:Q20734548|Tom Pugh Williams]]''
|
|
|
|-
| style='text-align:right'| 6249
| ''[[:d:Q20734552|Vaughan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6250
| ''[[:d:Q20734556|Walter David Jeremy]]''
|
|
|
|-
| style='text-align:right'| 6251
| ''[[:d:Q20734562|Watcyn Clywedog]]''
|
|
|
|-
| style='text-align:right'| 6252
| ''[[:d:Q20734563|Watkin Jones]]''
|
|
|
|-
| style='text-align:right'| 6253
| ''[[:d:Q20734561|Walter Phillips John]]''
|
|
|
|-
| style='text-align:right'| 6254
| ''[[:d:Q20734564|Watkin William Price]]''
|
|
|
|-
| style='text-align:right'| 6255
| ''[[:d:Q20734565|John Webber]]''
|
|
|
|-
| style='text-align:right'| 6256
| ''[[:d:Q20734570|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 6257
| ''[[:d:Q20734571|William Adams]]''
| [[Coadan:Bust of William Adams, National Museum Cardiff 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6258
| ''[[:d:Q20734575|William Beynon]]''
|
|
|
|-
| style='text-align:right'| 6259
| ''[[:d:Q20734572|William Alonzo Griffiths]]''
| [[Coadan:William Alonzo Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6260
| ''[[:d:Q20734579|William Cadwaladr Davies]]''
| [[Coadan:William Cadwaladr Davies (1849-1905) NLW3364074.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6261
| ''[[:d:Q20734583|William Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 6262
| ''[[:d:Q20734586|William Davies]]''
| [[Coadan:Portrait of William Davies (4674071).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6263
| ''[[:d:Q20734587|William Davies]]''
| [[Coadan:William Davies, Ffrwd-y-fâl (1805-1859).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6264
| ''[[:d:Q20734584|William Davies]]''
|
|
|
|-
| style='text-align:right'| 6265
| ''[[:d:Q20734591|William Dykins]]''
|
|
|
|-
| style='text-align:right'| 6266
| ''[[:d:Q20734588|William Davies]]''
|
|
|
|-
| style='text-align:right'| 6267
| ''[[:d:Q20734595|William Edward Cecil Tregoning]]''
|
|
|
|-
| style='text-align:right'| 6268
| ''[[:d:Q20734593|William Edmunds]]''
|
|
|
|-
| style='text-align:right'| 6269
| ''[[:d:Q20734598|William Edwards]]''
|
|
|
|-
| style='text-align:right'| 6270
| ''[[:d:Q20734603|William Elias]]''
|
|
|
|-
| style='text-align:right'| 6271
| ''[[:d:Q20734600|William Edwards Davies]]''
|
|
|
|-
| style='text-align:right'| 6272
| ''[[:d:Q20734601|William Eilir Evans]]''
|
|
|
|-
| style='text-align:right'| 6273
| ''[[:d:Q20734607|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6274
| ''[[:d:Q20734604|William Ellis]]''
|
|
|
|-
| style='text-align:right'| 6275
| ''[[:d:Q20734610|William Evans]]''
| [[Coadan:Portrait of The Reverend William Evans (4670714).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6276
| ''[[:d:Q20734611|William Evans]]''
| [[Coadan:Canon William Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6277
| ''[[:d:Q20734608|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6278
| ''[[:d:Q20734609|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6279
| ''[[:d:Q20734614|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6280
| ''[[:d:Q20734615|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6281
| ''[[:d:Q20734613|William Evans]]''
|
|
|
|-
| style='text-align:right'| 6282
| ''[[:d:Q20734616|William Frederick Frost]]''
|
|
|
|-
| style='text-align:right'| 6283
| ''[[:d:Q20734620|William Griffith]]''
|
|
|
|-
| style='text-align:right'| 6284
| ''[[:d:Q20734621|William Griffith]]''
| [[Coadan:Portrait of W. Griffith, Caergybi (4672889).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6285
| ''[[:d:Q109654305|Edmund J. Baillie]]''
| [[Coadan:Edmund J. Baillie.png|center|128px]]
|
|
|-
| style='text-align:right'| 6286
| ''[[:d:Q109669301|Rowland Thomas]]''
|
|
|
|-
| style='text-align:right'| 6287
| ''[[:d:Q109669500|Edward Foulkes]]''
|
|
|
|-
| style='text-align:right'| 6288
| ''[[:d:Q109676105|David Hooson]]''
|
|
|
|-
| style='text-align:right'| 6289
| ''[[:d:Q109681025|Arthur Beacham]]''
|
|
|
|-
| style='text-align:right'| 6290
| ''[[:d:Q109700497|Tim Wilkinson]]''
|
|
|
|-
| style='text-align:right'| 6291
| ''[[:d:Q109732636|Peter A. Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6292
| ''[[:d:Q109735696|Frances Althea Trevor]]''
|
|
|
|-
| style='text-align:right'| 6293
| ''[[:d:Q109769748|Robert Gwyneddon Davies]]''
|
|
|
|-
| style='text-align:right'| 6294
| ''[[:d:Q109811832|Edgar Williams Parry]]''
|
|
|
|-
| style='text-align:right'| 6295
| ''[[:d:Q109824414|Garibaldi Tyler]]''
| [[Coadan:Portrait of Garibaldi Tyler ca. 1907.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6296
| ''[[:d:Q109859950|John Richards]]''
|
|
|
|-
| style='text-align:right'| 6297
| ''[[:d:Q109894727|Edward Williams]]''
|
|
|
|-
| style='text-align:right'| 6298
| ''[[:d:Q110086719|Dafydd Gwilym Davies]]''
|
|
|
|-
| style='text-align:right'| 6299
| ''[[:d:Q110103399|David Edmondes Owen]]''
| [[Coadan:"Elwedd" (Rev. D Edmondes-Owen as Elwedd) (4541053364).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6300
| ''[[:d:Q110107533|Ignatius Williams]]''
|
|
|
|-
| style='text-align:right'| 6301
| ''[[:d:Q110160973|Islwyn Morgan Lake]]''
|
|
|
|-
| style='text-align:right'| 6302
| ''[[:d:Q110182617|Rosalie Gertrude Bray]]''
|
|
|
|-
| style='text-align:right'| 6303
| ''[[:d:Q110183271|Winifred Marian Chambers]]''
|
|
|
|-
| style='text-align:right'| 6304
| ''[[:d:Q110214233|Cyril Hodges]]''
|
|
|
|-
| style='text-align:right'| 6305
| ''[[:d:Q110214251|Llew Morgan]]''
|
|
|
|-
| style='text-align:right'| 6306
| ''[[:d:Q110214277|David Silyn Evans]]''
| [[Coadan:Y Parch. D. Silyn Evans (5292108).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6307
| ''[[:d:Q110214284|John Owen Williams]]''
|
|
|
|-
| style='text-align:right'| 6308
| ''[[:d:Q110214288|Leslie Wynne Evans]]''
|
|
|
|-
| style='text-align:right'| 6309
| ''[[:d:Q110214393|Leonard Charles Evetts]]''
|
|
|
|-
| style='text-align:right'| 6310
| ''[[:d:Q110292435|Frank Davies]]''
|
|
|
|-
| style='text-align:right'| 6311
| ''[[:d:Q110323565|John Timothy Lewis]]''
|
|
|
|-
| style='text-align:right'| 6312
| ''[[:d:Q110424746|Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 6313
| ''[[:d:Q110437612|Donald Alister Griffiths]]''
| [[Coadan:Donald Alister Griffiths.png|center|128px]]
|
|
|-
| style='text-align:right'| 6314
| ''[[:d:Q110439012|Helene Elizabeth Leach]]''
|
|
|
|-
| style='text-align:right'| 6315
| ''[[:d:Q110439382|John Maddocks]]''
|
|
|
|-
| style='text-align:right'| 6316
| ''[[:d:Q110442060|William Jones]]''
|
|
|
|-
| style='text-align:right'| 6317
| ''[[:d:Q110442214|Baldwyn Lloyd Roberts]]''
|
|
|
|-
| style='text-align:right'| 6318
| ''[[:d:Q110458257|Samuel Williams]]''
|
|
|
|-
| style='text-align:right'| 6319
| ''[[:d:Q110458597|Ivan Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 6320
| ''[[:d:Q110476831|Ian Price]]''
|
|
|
|-
| style='text-align:right'| 6321
| ''[[:d:Q110621082|Taliesin Rees]]''
|
|
|
|-
| style='text-align:right'| 6322
| ''[[:d:Q110621616|Thomas Lewis Old]]''
|
|
|
|-
| style='text-align:right'| 6323
| ''[[:d:Q110621944|John Mortimer Green]]''
|
|
|
|-
| style='text-align:right'| 6324
| ''[[:d:Q110626749|Ben Morus]]''
| [[Coadan:Ben Morus, of Lampeter (5349014).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6325
| ''[[:d:Q110627723|David Owen Thomas]]''
| [[Coadan:David Owen Thomas (1852–1925).png|center|128px]]
|
|
|-
| style='text-align:right'| 6326
| ''[[:d:Q110627807|Evan Penllyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6327
| ''[[:d:Q110628094|William Saunders Davies]]''
|
|
|
|-
| style='text-align:right'| 6328
| ''[[:d:Q110636999|William Pierce Elwy Jones]]''
|
|
|
|-
| style='text-align:right'| 6329
| ''[[:d:Q110654328|Jabez Evans]]''
|
|
|
|-
| style='text-align:right'| 6330
| ''[[:d:Q110663533|William Lewes]]''
|
|
|
|-
| style='text-align:right'| 6331
| ''[[:d:Q110663635|John Lias Davies]]''
|
|
|
|-
| style='text-align:right'| 6332
| ''[[:d:Q110722956|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 6333
| ''[[:d:Q110724403|Thomas Gwernogle Evans]]''
| [[Coadan:Thomas David Evans (Gwernogle 1853-1940).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6334
| ''[[:d:Q110726419|Elizabeth Giffard]]''
|
|
|
|-
| style='text-align:right'| 6335
| ''[[:d:Q110767143|Arthur Foulkes-Roberts]]''
|
|
|
|-
| style='text-align:right'| 6336
| ''[[:d:Q110767602|James Ronald Williams]]''
|
|
|
|-
| style='text-align:right'| 6337
| ''[[:d:Q110768012|David Thomas Salathiel]]''
|
|
|
|-
| style='text-align:right'| 6338
| ''[[:d:Q110768355|William Evans Jones]]''
|
|
|
|-
| style='text-align:right'| 6339
| ''[[:d:Q110802439|Benjamin Menai Francis]]''
|
|
|
|-
| style='text-align:right'| 6340
| ''[[:d:Q110805638|John Williams]]''
|
|
|
|-
| style='text-align:right'| 6341
| ''[[:d:Q110812845|Thomas Bowen]]''
|
|
|
|-
| style='text-align:right'| 6342
| ''[[:d:Q110827530|John Tudor]]''
|
|
|
|-
| style='text-align:right'| 6343
| ''[[:d:Q110863526|Jennifer Toye]]''
| [[Coadan:Jennifer Toye.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6344
| ''[[:d:Q110897698|George Holmes]]''
|
|
|
|-
| style='text-align:right'| 6345
| ''[[:d:Q110935652|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 6346
| ''[[:d:Q110952047|John Daniel Evans]]''
|
|
|
|-
| style='text-align:right'| 6347
| ''[[:d:Q110952071|Peter Felix]]''
|
|
|
|-
| style='text-align:right'| 6348
| ''[[:d:Q110952124|John Lewis Butler]]''
|
|
|
|-
| style='text-align:right'| 6349
| ''[[:d:Q110962956|Robert J. Jones]]''
|
|
|
|-
| style='text-align:right'| 6350
| ''[[:d:Q110979469|John Evans]]''
|
|
|
|-
| style='text-align:right'| 6351
| ''[[:d:Q110979531|Hugh Charles Howells]]''
|
|
|
|-
| style='text-align:right'| 6352
| ''[[:d:Q110979757|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 6353
| ''[[:d:Q110979932|Richard Rhys Hughes]]''
|
|
|
|-
| style='text-align:right'| 6354
| ''[[:d:Q111016369|Griffith Griffiths]]''
| [[Coadan:Gutyn Ebrill (Griffith Griffiths) (1828-1909).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6355
| ''[[:d:Q111016496|Isaac Cheshire]]''
|
|
|
|-
| style='text-align:right'| 6356
| ''[[:d:Q111022163|Mary Ann Finn]]''
|
|
|
|-
| style='text-align:right'| 6357
| ''[[:d:Q111040774|Elizabeth Myrtle Evans]]''
|
|
|
|-
| style='text-align:right'| 6358
| ''[[:d:Q111088055|John Hughes Williams]]''
|
|
|
|-
| style='text-align:right'| 6359
| ''[[:d:Q111103618|Helen Muscat]]''
|
|
|
|-
| style='text-align:right'| 6360
| ''[[:d:Q111137021|William Thomas Parry]]''
|
|
|
|-
| style='text-align:right'| 6361
| ''[[:d:Q111177108|Charles Evans]]''
|
|
|
|-
| style='text-align:right'| 6362
| ''[[:d:Q111226701|Thomas M. Pugh]]''
|
|
|
|-
| style='text-align:right'| 6363
| ''[[:d:Q111227982|Daniel T. Davies]]''
|
|
|
|-
| style='text-align:right'| 6364
| ''[[:d:Q111228164|Richard Hamer]]''
|
|
|
|-
| style='text-align:right'| 6365
| ''[[:d:Q111228303|David C. Evans]]''
|
|
|
|-
| style='text-align:right'| 6366
| ''[[:d:Q111230005|Owen Morris]]''
|
|
|
|-
| style='text-align:right'| 6367
| ''[[:d:Q111230239|Richard Wigley]]''
|
|
|
|-
| style='text-align:right'| 6368
| ''[[:d:Q111272370|Gomer Llewellyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6369
| ''[[:d:Q111272947|David John Jones]]''
|
|
|
|-
| style='text-align:right'| 6370
| ''[[:d:Q111273858|Mary Tharesa Talbot]]''
|
|
|
|-
| style='text-align:right'| 6371
| ''[[:d:Q111274052|Evan Festin Jones]]''
|
|
|
|-
| style='text-align:right'| 6372
| ''[[:d:Q111311358|David Hancock]]''
|
|
|
|-
| style='text-align:right'| 6373
| ''[[:d:Q111425052|Florence Hannah Williams]]''
|
|
|
|-
| style='text-align:right'| 6374
| ''[[:d:Q111540079|William Henry Allen]]''
| [[Coadan:WH Allen Portrait by CH Parker 1905.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6375
| ''[[:d:Q111577701|George Stephen Evans]]''
| [[Coadan:George Stephen Evans (5292083).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6376
| ''[[:d:Q111586572|Rees Powell]]''
|
|
|
|-
| style='text-align:right'| 6377
| ''[[:d:Q111589348|Gwilym Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6378
| ''[[:d:Q111593054|Owen Morris Williams]]''
|
|
|
|-
| style='text-align:right'| 6379
| ''[[:d:Q111594316|Griffith Robert Pierce]]''
|
|
|
|-
| style='text-align:right'| 6380
| ''[[:d:Q111604675|Daniel Steinhauer]]''
|
|
|
|-
| style='text-align:right'| 6381
| ''[[:d:Q111718598|Rhys Davies]]''
|
|
|
|-
| style='text-align:right'| 6382
| ''[[:d:Q111721885|Francis Llewelyn Lowther]]''
|
|
|
|-
| style='text-align:right'| 6383
| ''[[:d:Q111722158|Rees Jones]]''
|
|
|
|-
| style='text-align:right'| 6384
| ''[[:d:Q21069708|David James]]''
| [[Coadan:David James MHA.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6385
| ''[[:d:Q21078463|Eddie Dowdall]]''
|
|
|
|-
| style='text-align:right'| 6386
| ''[[:d:Q21078465|Edward Enoch Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6387
| ''[[:d:Q21079008|Doug Morgan]]''
|
|
|
|-
| style='text-align:right'| 6388
| ''[[:d:Q21104246|Peter Molan]]''
|
|
|
|-
| style='text-align:right'| 6389
| ''[[:d:Q21155105|Charles Cullum]]''
|
|
|
|-
| style='text-align:right'| 6390
| ''[[:d:Q21165076|Hubert Rees]]''
|
|
|
|-
| style='text-align:right'| 6391
| ''[[:d:Q21165253|Anthony Trafford James]]''
| [[Coadan:Anthony Trafford James.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6392
| ''[[:d:Q21165886|John Herbert Beynon]]''
|
|
|
|-
| style='text-align:right'| 6393
| ''[[:d:Q21165890|David Roger Jones Owen]]''
|
|
|
|-
| style='text-align:right'| 6394
| ''[[:d:Q21166454|Trevor Evans]]''
|
|
|
|-
| style='text-align:right'| 6395
| ''[[:d:Q21176250|Les Pearce]]''
|
|
|
|-
| style='text-align:right'| 6396
| ''[[:d:Q21176559|Reg Davies]]''
|
|
|
|-
| style='text-align:right'| 6397
| ''[[:d:Q21176942|Richard Methuen Greaves]]''
|
|
|
|-
| style='text-align:right'| 6398
| ''[[:d:Q21246048|Sarah Savage]]''
|
|
|
|-
| style='text-align:right'| 6399
| ''[[:d:Q21296968|John Evans]]''
| [[Coadan:John Evans, astrologer 02354.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6400
| ''[[:d:Q21338129|Everard Baldwin Britton]]''
|
|
|
|-
| style='text-align:right'| 6401
| ''[[:d:Q21345541|Jack Godderis]]''
|
|
|
|-
| style='text-align:right'| 6402
| ''[[:d:Q21387484|David Allen Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 6403
| ''[[:d:Q21389901|Stanley John Hughes]]''
|
|
|
|-
| style='text-align:right'| 6404
| ''[[:d:Q21452756|Alfred Henry Morgan-Hall]]''
|
|
|
|-
| style='text-align:right'| 6405
| ''[[:d:Q21454369|Howard J. Morgan]]''
|
|
|
|-
| style='text-align:right'| 6406
| ''[[:d:Q21454373|Howard Lloyd Roberts]]''
| [[Coadan:Self Portrait (gcf02842).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6407
| ''[[:d:Q21454550|Hugh Douglas Williams]]''
|
|
|
|-
| style='text-align:right'| 6408
| ''[[:d:Q21455047|Rose Dempster Bonnor]]''
|
|
|
|-
| style='text-align:right'| 6409
| ''[[:d:Q21455263|Alfred Oliver]]''
|
|
|
|-
| style='text-align:right'| 6410
| ''[[:d:Q21455741|Iwan Gwyn Parry]]''
|
|
|
|-
| style='text-align:right'| 6411
| ''[[:d:Q21456839|James Flewitt Mullock]]''
| [[Coadan:James Flewitt Mullock (1818-1892) - Self Portrait - LOAN.1995.232 - Newport Museum and Art Gallery.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6412
| ''[[:d:Q21457022|Elis Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6413
| ''[[:d:Q21457633|Elwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 6414
| ''[[:d:Q21458149|William Williams]]''
| [[Coadan:Ap Caledfryn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6415
| ''[[:d:Q21458256|Archie Rhys Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6416
| ''[[:d:Q21458479|Arthur C. Michael]]''
|
|
|
|-
| style='text-align:right'| 6417
| ''[[:d:Q21458708|Esther Grainger]]''
|
|
|
|-
| style='text-align:right'| 6418
| ''[[:d:Q21458912|Arthur Trevethin Nowell]]''
|
|
|
|-
| style='text-align:right'| 6419
| ''[[:d:Q21459585|Joan Baker]]''
|
|
|
|-
| style='text-align:right'| 6420
| ''[[:d:Q21459667|Joan Oxland]]''
|
|
|
|-
| style='text-align:right'| 6421
| ''[[:d:Q21460388|Nerys Ann Johnson]]''
|
|
|
|-
| style='text-align:right'| 6422
| ''[[:d:Q21460680|John Cambrian Rowland]]''
|
|
|
|-
| style='text-align:right'| 6423
| ''[[:d:Q21460963|John Dafydd Evans]]''
|
|
|
|-
| style='text-align:right'| 6424
| ''[[:d:Q21461259|John Elwyn]]''
| [[Coadan:JE painting RM.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6425
| ''[[:d:Q21462370|Vera Bassett]]''
|
|
|
|-
| style='text-align:right'| 6426
| ''[[:d:Q21462512|Charles Byrd]]''
|
|
|
|-
| style='text-align:right'| 6427
| ''[[:d:Q21462817|Vincent Evans]]''
|
|
|
|-
| style='text-align:right'| 6428
| ''[[:d:Q21463303|George Little]]''
|
|
|
|-
| style='text-align:right'| 6429
| ''[[:d:Q21463897|Wil Jones]]''
|
|
|
|-
| style='text-align:right'| 6430
| ''[[:d:Q21463908|Wilf Roberts]]''
|
|
|
|-
| style='text-align:right'| 6431
| ''[[:d:Q21464054|Peter Markey]]''
|
|
|
|-
| style='text-align:right'| 6432
| ''[[:d:Q21464720|William Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 6433
| ''[[:d:Q21464853|Glyn Baines]]''
|
|
|
|-
| style='text-align:right'| 6434
| ''[[:d:Q21464876|Glyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 6435
| ''[[:d:Q21464885|Phillida Nicholson]]''
|
|
|
|-
| style='text-align:right'| 6436
| ''[[:d:Q21465300|Graham Bevan]]''
|
|
|
|-
| style='text-align:right'| 6437
| ''[[:d:Q21465817|Gwenny Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6438
| ''[[:d:Q21465999|Reginald Edgar James Bush]]''
|
|
|
|-
| style='text-align:right'| 6439
| ''[[:d:Q21466560|Harry Hughes Williams]]''
|
|
|
|-
| style='text-align:right'| 6440
| ''[[:d:Q21467261|David Mainwaring]]''
|
|
|
|-
| style='text-align:right'| 6441
| ''[[:d:Q21469892|Edward Boulden]]''
| [[Coadan:Edward Boulden 1913.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6442
| ''[[:d:Q21470102|Frank Cox]]''
|
|
|
|-
| style='text-align:right'| 6443
| ''[[:d:Q21470103|Fred Cox]]''
|
|
|
|-
| style='text-align:right'| 6444
| ''[[:d:Q21479992|Edwin Tanner]]''
|
|
|
|-
| style='text-align:right'| 6445
| ''[[:d:Q21480955|John Pughe]]''
| [[Coadan:John Pughe (1815-1874).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6446
| ''[[:d:Q21513430|Graham C. D. Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6447
| ''[[:d:Q21516459|Richard Henry Roberts]]''
|
|
|
|-
| style='text-align:right'| 6448
| ''[[:d:Q21516789|William Edwyn Isaac]]''
|
|
|
|-
| style='text-align:right'| 6449
| ''[[:d:Q21524435|John F. C. Richards]]''
|
|
|
|-
| style='text-align:right'| 6450
| ''[[:d:Q21524668|Peter K. Marshall]]''
|
|
|
|-
| style='text-align:right'| 6451
| ''[[:d:Q21536459|Margaret Jane Gordon]]''
| [[Coadan:Lady Margaret Jane Gordon (1880-1962), singer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6452
| ''[[:d:Q21544278|Thomas Howell]]''
|
|
|
|-
| style='text-align:right'| 6453
| ''[[:d:Q21548870|Wilson Jones]]''
|
|
|
|-
| style='text-align:right'| 6454
| ''[[:d:Q21597973|Ray Jessel]]''
|
|
|
|-
| style='text-align:right'| 6455
| ''[[:d:Q21598040|Ray Weigh]]''
|
|
|
|-
| style='text-align:right'| 6456
| ''[[:d:Q21604647|Helen Johnson Houghton]]''
|
|
|
|-
| style='text-align:right'| 6457
| ''[[:d:Q21605189|Lloyd Robinson]]''
|
|
|
|-
| style='text-align:right'| 6458
| ''[[:d:Q21610975|Albert Howard Trow]]''
| [[Coadan:Albert Howard Trow (2c).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6459
| ''[[:d:Q21612711|Caroline Catharine Wilkinson]]''
|
|
|
|-
| style='text-align:right'| 6460
| ''[[:d:Q21664555|Edwin Hughes]]''
|
|
|
|-
| style='text-align:right'| 6461
| ''[[:d:Q21686810|Mick McLaughlin]]''
|
|
|
|-
| style='text-align:right'| 6462
| ''[[:d:Q21727807|John Ingleby]]''
| [[Coadan:Crucifiction found in the wall of the old church at Halkin, c.1795.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6463
| ''[[:d:Q21745459|Ernest Vaughan, 7th Earl of Lisburne]]''
|
|
|
|-
| style='text-align:right'| 6464
| ''[[:d:Q21751004|Hadyn Ellis]]''
|
|
|
|-
| style='text-align:right'| 6465
| ''[[:d:Q21856725|Edward Stanley]]''
|
|
|
|-
| style='text-align:right'| 6466
| ''[[:d:Q21997796|Ida Gaskin]]''
|
|
|
|-
| style='text-align:right'| 6467
| ''[[:d:Q21998348|Arthur Davies]]''
| [[Coadan:Arthur Davies (tenor).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6468
| ''[[:d:Q21999647|Ivor Davies]]''
|
|
|
|-
| style='text-align:right'| 6469
| ''[[:d:Q21999673|Jack Hurrell]]''
|
|
|
|-
| style='text-align:right'| 6470
| ''[[:d:Q21999704|Trefor Owen]]''
|
|
|
|-
| style='text-align:right'| 6471
| ''[[:d:Q21999728|Hugh Roberts]]''
|
|
|
|-
| style='text-align:right'| 6472
| ''[[:d:Q22003001|William Dyke]]''
|
|
|
|-
| style='text-align:right'| 6473
| ''[[:d:Q22018134|Gertrude Eaton]]''
|
|
|
|-
| style='text-align:right'| 6474
| ''[[:d:Q22018632|Job Harris]]''
|
|
|
|-
| style='text-align:right'| 6475
| ''[[:d:Q22019199|William Owen]]''
| [[Coadan:William Owen.png|center|128px]]
|
|
|-
| style='text-align:right'| 6476
| ''[[:d:Q22038991|Sampson Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6477
| ''[[:d:Q22098316|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 6478
| ''[[:d:Q22117202|Margaret Tisdale]]''
|
|
|
|-
| style='text-align:right'| 6479
| ''[[:d:Q22234320|Mary Dilys Glynne]]''
|
|
|
|-
| style='text-align:right'| 6480
| ''[[:d:Q22271913|James Murphy]]''
|
|
|
|-
| style='text-align:right'| 6481
| ''[[:d:Q22278271|Dafydd Hywel]]''
|
|
|
|-
| style='text-align:right'| 6482
| ''[[:d:Q75262431|Morgan Lindsay]]''
| [[Coadan:Morgan Lindsay (IWM).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6483
| ''[[:d:Q75267643|Capel Hanbury-Leigh]]''
|
|
|
|-
| style='text-align:right'| 6484
| ''[[:d:Q75296912|Morys Lloyd-Mostyn]]''
|
|
|
|-
| style='text-align:right'| 6485
| ''[[:d:Q75297073|Eva Douglas-Pennant]]''
|
|
|
|-
| style='text-align:right'| 6486
| ''[[:d:Q75303015|Robert Charles Herbert]]''
|
|
|
|-
| style='text-align:right'| 6487
| ''[[:d:Q75312234|Daniel Radcliffe]]''
|
|
|
|-
| style='text-align:right'| 6488
| ''[[:d:Q75315040|Edward Wynne-Finch]]''
|
|
|
|-
| style='text-align:right'| 6489
| ''[[:d:Q75316050|Eryl Smith]]''
|
|
|
|-
| style='text-align:right'| 6490
| ''[[:d:Q75358236|Robert Michael FitzHugh]]''
|
|
|
|-
| style='text-align:right'| 6491
| ''[[:d:Q75386990|Lady Emily Cadogan]]''
|
|
|
|-
| style='text-align:right'| 6492
| ''[[:d:Q75418359|Hugh Maurice Carstairs Jones-Mortimer]]''
|
|
|
|-
| style='text-align:right'| 6493
| ''[[:d:Q75420061|George Brooke Meares]]''
|
|
|
|-
| style='text-align:right'| 6494
| ''[[:d:Q75442343|Elaine Bathurst, Lady Bledisloe]]''
| [[Coadan:Elaine Bathurst, Lady Bledisloe (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6495
| ''[[:d:Q75445238|Wilberforce Ernest Hazell]]''
|
|
|
|-
| style='text-align:right'| 6496
| ''[[:d:Q75514713|John Sibbering]]''
|
|
|
|-
| style='text-align:right'| 6497
| ''[[:d:Q75544284|Edward Robert Wood]]''
|
|
|
|-
| style='text-align:right'| 6498
| ''[[:d:Q75569765|Richard Owen]]''
|
|
|
|-
| style='text-align:right'| 6499
| ''[[:d:Q75597041|George Prothero]]''
|
|
|
|-
| style='text-align:right'| 6500
| ''[[:d:Q75613587|E. Hanbury Williams]]''
|
|
|
|-
| style='text-align:right'| 6501
| ''[[:d:Q75616092|John Hubert Emlyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6502
| ''[[:d:Q75616428|Francis Henry Wolryche-Whitmore]]''
|
|
|
|-
| style='text-align:right'| 6503
| ''[[:d:Q75651054|Jeffrey O'Riordan]]''
|
|
|
|-
| style='text-align:right'| 6504
| ''[[:d:Q75758932|Harriet Anne Jones]]''
|
|
|
|-
| style='text-align:right'| 6505
| ''[[:d:Q75817873|Archibald Bellairs Higgon]]''
|
|
|
|-
| style='text-align:right'| 6506
| ''[[:d:Q75844853|Seán Sáirséal Ó hÉigeartaigh]]''
|
|
|
|-
| style='text-align:right'| 6507
| ''[[:d:Q75846128|William Quick]]''
|
|
|
|-
| style='text-align:right'| 6508
| ''[[:d:Q75903180|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6509
| ''[[:d:Q75924261|John Naylor]]''
|
|
|
|-
| style='text-align:right'| 6510
| ''[[:d:Q75933413|Richard Quintin Hoare]]''
|
|
|
|-
| style='text-align:right'| 6511
| ''[[:d:Q75946239|Sir Richard Puleston, 2nd Bt.]]''
|
|
|
|-
| style='text-align:right'| 6512
| ''[[:d:Q75947093|Dorothy Glynne]]''
|
|
|
|-
| style='text-align:right'| 6513
| ''[[:d:Q75976071|George Leader Owen]]''
|
|
|
|-
| style='text-align:right'| 6514
| ''[[:d:Q75981979|Cecil Aspinall]]''
|
|
|
|-
| style='text-align:right'| 6515
| ''[[:d:Q76002585|R. D. Evans]]''
|
|
|
|-
| style='text-align:right'| 6516
| ''[[:d:Q76004065|Basil Grosvenor Williams]]''
| [[Coadan:Grosvenor Basil Williams (2a).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6517
| ''[[:d:Q76025828|John Awbrey]]''
|
|
|
|-
| style='text-align:right'| 6518
| ''[[:d:Q76082157|Essex Lloyd-Mostyn]]''
|
|
|
|-
| style='text-align:right'| 6519
| ''[[:d:Q76082884|John Homfray]]''
|
|
|
|-
| style='text-align:right'| 6520
| ''[[:d:Q76104067|Rees Lloyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 6521
| ''[[:d:Q76104674|Sir George Hamer]]''
|
|
|
|-
| style='text-align:right'| 6522
| ''[[:d:Q76152669|Laetitia Trelawny]]''
|
|
|
|-
| style='text-align:right'| 6523
| ''[[:d:Q76163827|Richard Bowen Woosnam]]''
|
|
|
|-
| style='text-align:right'| 6524
| ''[[:d:Q76175070|Elizabeth Owen]]''
|
|
|
|-
| style='text-align:right'| 6525
| ''[[:d:Q76178241|R. W. Brigstocke]]''
|
|
|
|-
| style='text-align:right'| 6526
| ''[[:d:Q76188083|Owen Putland Meyrick]]''
|
|
|
|-
| style='text-align:right'| 6527
| ''[[:d:Q76188379|Thomas Gee]]''
|
|
|
|-
| style='text-align:right'| 6528
| ''[[:d:Q76198610|Nadolig Ximenes Gwynne]]''
|
|
|
|-
| style='text-align:right'| 6529
| ''[[:d:Q76201785|Thomas Fanning-Evans]]''
|
|
|
|-
| style='text-align:right'| 6530
| ''[[:d:Q76214792|William Wynne]]''
|
|
|
|-
| style='text-align:right'| 6531
| ''[[:d:Q76228063|Edward Arthur Bonnor-Maurice]]''
|
|
|
|-
| style='text-align:right'| 6532
| ''[[:d:Q76341833|David Harrison-Allen]]''
|
|
|
|-
| style='text-align:right'| 6533
| ''[[:d:Q76365516|Thomas Morgan Llewellin]]''
|
|
|
|-
| style='text-align:right'| 6534
| ''[[:d:Q76439584|James James]]''
|
|
|
|-
| style='text-align:right'| 6535
| ''[[:d:Q76449783|Michael T. Ridout]]''
|
|
|
|-
| style='text-align:right'| 6536
| ''[[:d:Q76537664|John C. Waymouth]]''
|
|
|
|-
| style='text-align:right'| 6537
| ''[[:d:Q76836405|David Edwardes]]''
| [[Coadan:Parchedig David Edwardes (1836–1916), MA (gcf03776).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6538
| ''[[:d:Q76837507|Arthur Erskine Owen Humphreys-Owen]]''
| [[Coadan:Arthur Erskine Owen Humphreys-Owen (1876–1928) (gcf06357).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6539
| ''[[:d:Q77719226|Nigel W. John]]''
|
|
|
|-
| style='text-align:right'| 6540
| ''[[:d:Q78674851|Henry Landor]]''
|
|
|
|-
| style='text-align:right'| 6541
| ''[[:d:Q78902170|Robert Stanley Gorrell Dent]]''
|
|
|
|-
| style='text-align:right'| 6542
| ''[[:d:Q79478098|Eveline Annie Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6543
| ''[[:d:Q79765222|Edward Keynes Purchase]]''
| [[Coadan:Edward Keynes Purchase in WT Pike London (83a).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6544
| ''[[:d:Q79843548|Doug Curtin]]''
|
|
|
|-
| style='text-align:right'| 6545
| ''[[:d:Q80314802|Ioan Roberts]]''
|
|
|
|-
| style='text-align:right'| 6546
| ''[[:d:Q80358433|Caroline Lowder Downing]]''
|
|
|
|-
| style='text-align:right'| 6547
| ''[[:d:Q80478275|Ruth van Heyningen]]''
|
|
|
|-
| style='text-align:right'| 6548
| ''[[:d:Q80549688|Lillian Griffith]]''
|
|
|
|-
| style='text-align:right'| 6549
| ''[[:d:Q80832360|Terry Perdue]]''
|
|
|
|-
| style='text-align:right'| 6550
| ''[[:d:Q81145749|Charles Evan-Thomas]]''
|
|
|
|-
| style='text-align:right'| 6551
| ''[[:d:Q82201529|Edith Lovell Andrews]]''
|
|
|
|-
| style='text-align:right'| 6552
| ''[[:d:Q82211696|Elizabeth Everett]]''
|
|
|
|-
| style='text-align:right'| 6553
| ''[[:d:Q83744439|Ieuan Rees]]''
|
|
|
|-
| style='text-align:right'| 6554
| ''[[:d:Q83986618|Ralph Granger Watkin]]''
|
|
|
|-
| style='text-align:right'| 6555
| ''[[:d:Q84320766|Tom Whittington]]''
|
|
|
|-
| style='text-align:right'| 6556
| ''[[:d:Q84436572|Ted Robbins]]''
|
|
|
|-
| style='text-align:right'| 6557
| ''[[:d:Q84592655|Charles Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6558
| ''[[:d:Q85411541|Colwyn Edward Vulliamy]]''
| [[Coadan:Percy Elizabeth Flora Thomas (1846-1922) - Colwyn Edward Vulliamy (1886–1971) - NMW A 5081 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6559
| ''[[:d:Q85431450|Ron Ainge]]''
|
|
|
|-
| style='text-align:right'| 6560
| ''[[:d:Q85689895|Edward Loyd]]''
|
|
|
|-
| style='text-align:right'| 6561
| ''[[:d:Q85764603|Griffith Griffith]]''
|
|
|
|-
| style='text-align:right'| 6562
| ''[[:d:Q85771711|John Rea]]''
|
|
|
|-
| style='text-align:right'| 6563
| ''[[:d:Q85796162|Ray Powell]]''
|
|
|
|-
| style='text-align:right'| 6564
| ''[[:d:Q85810650|Trevor Lewis]]''
|
|
|
|-
| style='text-align:right'| 6565
| ''[[:d:Q85815681|William Hudson]]''
|
|
|
|-
| style='text-align:right'| 6566
| ''[[:d:Q85815731|William Randall]]''
|
|
|
|-
| style='text-align:right'| 6567
| ''[[:d:Q85841208|William Glynn Williams]]''
|
|
|
|-
| style='text-align:right'| 6568
| ''[[:d:Q85859937|Arthur William Davies]]''
|
|
|
|-
| style='text-align:right'| 6569
| ''[[:d:Q85951426|Simon Warr]]''
|
|
|
|-
| style='text-align:right'| 6570
| ''[[:d:Q86970456|Rakel Harbitz]]''
|
|
|
|-
| style='text-align:right'| 6571
| ''[[:d:Q87344165|Henry Price]]''
|
|
|
|-
| style='text-align:right'| 6572
| ''[[:d:Q87455769|Andy Pollitt]]''
|
|
|
|-
| style='text-align:right'| 6573
| ''[[:d:Q87474632|Evan Roberts]]''
|
|
|
|-
| style='text-align:right'| 6574
| ''[[:d:Q87499051|Frances Anne Jane Collier]]''
|
|
|
|-
| style='text-align:right'| 6575
| ''[[:d:Q87617078|Thomas Henry Blythe]]''
|
|
|
|-
| style='text-align:right'| 6576
| ''[[:d:Q87748575|Lady James]]''
|
|
|
|-
| style='text-align:right'| 6577
| ''[[:d:Q87758340|David Archard Williams]]''
|
|
|
|-
| style='text-align:right'| 6578
| ''[[:d:Q87758558|Francis Evelyn]]''
|
|
|
|-
| style='text-align:right'| 6579
| ''[[:d:Q87855425|Henry Bowen]]''
|
|
|
|-
| style='text-align:right'| 6580
| ''[[:d:Q87894273|John Stevenson]]''
|
|
|
|-
| style='text-align:right'| 6581
| ''[[:d:Q56177351|Richard Garnons]]''
|
|
|
|-
| style='text-align:right'| 6582
| ''[[:d:Q56177409|William George]]''
|
|
|
|-
| style='text-align:right'| 6583
| ''[[:d:Q56177484|William Glasnant Jones]]''
|
|
|
|-
| style='text-align:right'| 6584
| ''[[:d:Q56177501|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 6585
| ''[[:d:Q56177812|George Griffith]]''
|
|
|
|-
| style='text-align:right'| 6586
| ''[[:d:Q56177827|John Griffith]]''
|
|
|
|-
| style='text-align:right'| 6587
| ''[[:d:Q56177836|John Griffith]]''
|
|
|
|-
| style='text-align:right'| 6588
| ''[[:d:Q56177851|R.E. Griffith]]''
|
|
|
|-
| style='text-align:right'| 6589
| ''[[:d:Q56177887|William Griffith]]''
|
|
|
|-
| style='text-align:right'| 6590
| ''[[:d:Q56178037|David Thomas Guy]]''
|
|
|
|-
| style='text-align:right'| 6591
| ''[[:d:Q56178145|Alban Thomas Jones Gwynne]]''
| [[Coadan:Mather Brown (1761-1831) - The Reverend Alban Thomas Gwynne (1751–1819) - 864495 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6592
| ''[[:d:Q56178177|Benjamin Hall]]''
|
|
|
|-
| style='text-align:right'| 6593
| ''[[:d:Q56178195|Florrie Hamer]]''
|
|
|
|-
| style='text-align:right'| 6594
| ''[[:d:Q56178202|Victor Hampson-Jones]]''
|
|
|
|-
| style='text-align:right'| 6595
| ''[[:d:Q56178200|Nina Hammett]]''
|
|
|
|-
| style='text-align:right'| 6596
| ''[[:d:Q56178351|Mary Elizabeth Hedley]]''
|
|
|
|-
| style='text-align:right'| 6597
| ''[[:d:Q56178357|Pete Hellings]]''
|
|
|
|-
| style='text-align:right'| 6598
| ''[[:d:Q56178468|Isaac Herriman]]''
|
|
|
|-
| style='text-align:right'| 6599
| ''[[:d:Q56178498|Elizabeth Lady Hills-Johnes]]''
|
|
|
|-
| style='text-align:right'| 6600
| ''[[:d:Q56178642|Robert Howard]]''
|
|
|
|-
| style='text-align:right'| 6601
| ''[[:d:Q56178666|Abraham Howell]]''
|
|
|
|-
| style='text-align:right'| 6602
| ''[[:d:Q56178704|William Howell]]''
|
|
|
|-
| style='text-align:right'| 6603
| ''[[:d:Q56178705|William Howell]]''
|
|
|
|-
| style='text-align:right'| 6604
| ''[[:d:Q56178760|Benjamin Hughes]]''
|
|
|
|-
| style='text-align:right'| 6605
| ''[[:d:Q56178790|Harold Rhys Hughes]]''
|
|
|
|-
| style='text-align:right'| 6606
| ''[[:d:Q56178805|John Henry Hughes]]''
|
|
|
|-
| style='text-align:right'| 6607
| ''[[:d:Q56178865|Roderick Humphreys]]''
|
|
|
|-
| style='text-align:right'| 6608
| ''[[:d:Q56178885|David Hussey]]''
|
|
|
|-
| style='text-align:right'| 6609
| ''[[:d:Q56179080|John Jayne]]''
|
|
|
|-
| style='text-align:right'| 6610
| ''[[:d:Q56179107|Anne Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6611
| ''[[:d:Q56179139|Richard Iwan Jenkyn]]''
|
|
|
|-
| style='text-align:right'| 6612
| ''[[:d:Q56179144|Herbert Noel Jerman]]''
|
|
|
|-
| style='text-align:right'| 6613
| ''[[:d:Q56179197|Edwin William John]]''
|
|
|
|-
| style='text-align:right'| 6614
| ''[[:d:Q56179219|Charlotte Anna Maria Johnes]]''
|
|
|
|-
| style='text-align:right'| 6615
| ''[[:d:Q56179386|Charles Jones]]''
|
|
|
|-
| style='text-align:right'| 6616
| ''[[:d:Q56179396|David Elwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6617
| ''[[:d:Q56179400|David Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 6618
| ''[[:d:Q56179414|Daniel Jones]]''
|
|
|
|-
| style='text-align:right'| 6619
| ''[[:d:Q56179423|David Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 6620
| ''[[:d:Q56179420|David Ivon Jones]]''
| [[Coadan:David Ivon Jones 001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6621
| ''[[:d:Q56179431|David Jones]]''
|
|
|
|-
| style='text-align:right'| 6622
| ''[[:d:Q56179463|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 6623
| ''[[:d:Q56179473|Edwin Jones]]''
|
|
|
|-
| style='text-align:right'| 6624
| ''[[:d:Q56179489|Esther Anne Davies]]''
|
|
|
|-
| style='text-align:right'| 6625
| ''[[:d:Q56179498|Francis Ernest Llewellyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6626
| ''[[:d:Q56179504|Griffith Jones]]''
|
|
|
|-
| style='text-align:right'| 6627
| ''[[:d:Q56179510|Gwen Jones]]''
| [[Coadan:Portrait of Mother of John Jones, 'Talhaiarn' (4670569).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6628
| ''[[:d:Q56179519|Henry Francis Jones]]''
|
|
|
|-
| style='text-align:right'| 6629
| ''[[:d:Q56179526|Henry Jones]]''
|
|
|
|-
| style='text-align:right'| 6630
| ''[[:d:Q56179538|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 6631
| ''[[:d:Q56179544|Humphrey Jones]]''
| [[Coadan:Humphrey Jones a Diwygiad 1859 (page 57 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6632
| ''[[:d:Q56179545|Humphrey Jones]]''
|
|
|
|-
| style='text-align:right'| 6633
| ''[[:d:Q56179551|Edward Iorwerth Jones]]''
|
|
|
|-
| style='text-align:right'| 6634
| ''[[:d:Q56179548|Ifor Ceredig Jones]]''
|
|
|
|-
| style='text-align:right'| 6635
| ''[[:d:Q56179555|James Celty Jones]]''
|
|
|
|-
| style='text-align:right'| 6636
| ''[[:d:Q56179559|John David Jones]]''
|
|
|
|-
| style='text-align:right'| 6637
| ''[[:d:Q56179562|John Meredith Jones]]''
|
|
|
|-
| style='text-align:right'| 6638
| ''[[:d:Q56179587|John David Jones]]''
|
|
|
|-
| style='text-align:right'| 6639
| ''[[:d:Q56179591|John Griffith Jones]]''
|
|
|
|-
| style='text-align:right'| 6640
| ''[[:d:Q56179593|John Henry Jones]]''
|
|
|
|-
| style='text-align:right'| 6641
| ''[[:d:Q56179598|John Washington Jones]]''
|
|
|
|-
| style='text-align:right'| 6642
| ''[[:d:Q56179596|John Morris Jones]]''
|
|
|
|-
| style='text-align:right'| 6643
| ''[[:d:Q56179597|John Reginald Jones]]''
|
|
|
|-
| style='text-align:right'| 6644
| ''[[:d:Q56179623|John Jones]]''
|
|
|
|-
| style='text-align:right'| 6645
| ''[[:d:Q56179660|Lewis Jones]]''
| [[Coadan:Lewis Jones, Rhyl (5349002).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6646
| ''[[:d:Q56179677|Margaret Mostyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6647
| ''[[:d:Q56179689|Mary Jones]]''
|
|
|
|-
| style='text-align:right'| 6648
| ''[[:d:Q56179702|Morris Jones]]''
|
|
|
|-
| style='text-align:right'| 6649
| ''[[:d:Q56179703|Morris Jones]]''
|
|
|
|-
| style='text-align:right'| 6650
| ''[[:d:Q56179705|Moses Jones]]''
|
|
|
|-
| style='text-align:right'| 6651
| ''[[:d:Q56179714|Owen Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 6652
| ''[[:d:Q56179728|Rhys Bevan Jones]]''
|
|
|
|-
| style='text-align:right'| 6653
| ''[[:d:Q56179739|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 6654
| ''[[:d:Q56179770|Selwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6655
| ''[[:d:Q56179793|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 6656
| ''[[:d:Q56179845|Walter Sylvanus Jones]]''
|
|
|
|-
| style='text-align:right'| 6657
| ''[[:d:Q56179865|William Jones]]''
|
|
|
|-
| style='text-align:right'| 6658
| ''[[:d:Q56179904|Thomas Mann Keene]]''
|
|
|
|-
| style='text-align:right'| 6659
| ''[[:d:Q56180082|John Leach]]''
|
|
|
|-
| style='text-align:right'| 6660
| ''[[:d:Q56180095|Henry Herbert Lee]]''
|
|
|
|-
| style='text-align:right'| 6661
| ''[[:d:Q56180201|Daniel Lewis]]''
|
|
|
|-
| style='text-align:right'| 6662
| ''[[:d:Q56180238|Lewis Lewis]]''
|
|
|
|-
| style='text-align:right'| 6663
| ''[[:d:Q56180457|John Meredith Lloyd Jones]]''
|
|
|
|-
| style='text-align:right'| 6664
| ''[[:d:Q56180589|David Francis Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6665
| ''[[:d:Q56180621|George Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6666
| ''[[:d:Q56180686|Thomas Lloyd]]''
| [[Coadan:Revd T Lloyd, Abergele (a copy) NLW3364132.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6667
| ''[[:d:Q56180685|Thomas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6668
| ''[[:d:Q56180917|Roderick Lumley]]''
|
|
|
|-
| style='text-align:right'| 6669
| ''[[:d:Q56180942|Mary Lyttelton]]''
|
|
|
|-
| style='text-align:right'| 6670
| ''[[:d:Q56181019|Charles Salusbury Mainwaring]]''
|
|
|
|-
| style='text-align:right'| 6671
| ''[[:d:Q56181099|Thomas Edmund Marsh]]''
| [[Coadan:Thomas Edmund Marsh.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6672
| ''[[:d:Q56181177|William Maurice]]''
|
|
|
|-
| style='text-align:right'| 6673
| ''[[:d:Q56181275|Mihangel ap Iwan]]''
| [[Coadan:AP IWAN Mihagel HJ61 001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6674
| ''[[:d:Q56181301|Caradoc Mills]]''
|
|
|
|-
| style='text-align:right'| 6675
| ''[[:d:Q56181404|William Morgan]]''
| [[Coadan:William Morgan(?), vicar of Llandderfel NLW3363792.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6676
| ''[[:d:Q56181427|Rhys Morgan]]''
|
|
|
|-
| style='text-align:right'| 6677
| ''[[:d:Q56181484|Hugh Morris]]''
|
|
|
|-
| style='text-align:right'| 6678
| ''[[:d:Q56181485|Hugh Morris]]''
|
|
|
|-
| style='text-align:right'| 6679
| ''[[:d:Q56181525|Robert Owen Morris]]''
|
|
|
|-
| style='text-align:right'| 6680
| ''[[:d:Q63036264|David Arthur Davies]]''
|
|
|
|-
| style='text-align:right'| 6681
| ''[[:d:Q63041675|Howell Moore-Gwyn]]''
|
|
|
|-
| style='text-align:right'| 6682
| ''[[:d:Q63155536|Samuel Aston]]''
|
|
|
|-
| style='text-align:right'| 6683
| ''[[:d:Q63160970|Alfred Ernest Owen]]''
|
|
|
|-
| style='text-align:right'| 6684
| ''[[:d:Q63242185|Hugh Eyton-Jones]]''
| [[Coadan:Hugh Mortimer Eyton-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6685
| ''[[:d:Q63341983|Nancie Colling]]''
|
|
|
|-
| style='text-align:right'| 6686
| ''[[:d:Q63351722|John Blatchly]]''
|
|
|
|-
| style='text-align:right'| 6687
| ''[[:d:Q63376732|Graham J. Durant]]''
|
|
|
|-
| style='text-align:right'| 6688
| ''[[:d:Q63384576|Agnes Charlotte Gude]]''
| [[Coadan:Konfirmasjonsbilde av Agnes Gude - Theodor Schuhmann & Sohn - Gudesamlingen - Norsk Folkemuseum - NF.27080-051.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6689
| ''[[:d:Q63827261|Mari Griffith]]''
|
|
|
|-
| style='text-align:right'| 6690
| ''[[:d:Q63869654|Allan Watson]]''
|
|
|
|-
| style='text-align:right'| 6691
| ''[[:d:Q63871177|Mably Owen]]''
|
|
|
|-
| style='text-align:right'| 6692
| ''[[:d:Q64005542|Kate Williams Evans]]''
| [[Coadan:Kate Williams Evans c1890.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6693
| ''[[:d:Q64006439|Ronald Niebour]]''
|
|
|
|-
| style='text-align:right'| 6694
| ''[[:d:Q64374426|Jimmy Ithell]]''
|
|
|
|-
| style='text-align:right'| 6695
| ''[[:d:Q64485247|William Davies]]''
|
|
|
|-
| style='text-align:right'| 6696
| ''[[:d:Q64624167|Ray Williams]]''
|
|
|
|-
| style='text-align:right'| 6697
| ''[[:d:Q64685572|Josephine Campbell]]''
|
|
|
|-
| style='text-align:right'| 6698
| ''[[:d:Q64685648|Naunton Wingfield Davies]]''
|
|
|
|-
| style='text-align:right'| 6699
| ''[[:d:Q64685707|Clotworthy Gillmor]]''
|
|
|
|-
| style='text-align:right'| 6700
| ''[[:d:Q64685864|Caroline Phillipson]]''
| [[Coadan:Caroline-Gifford-Phillipson-ne-Lethbridge-Mrs-CG-Phillipson (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6701
| ''[[:d:Q64685882|Daisy Hugh Pryce]]''
|
|
|
|-
| style='text-align:right'| 6702
| ''[[:d:Q64685883|Gwendolen Pryce]]''
|
|
|
|-
| style='text-align:right'| 6703
| ''[[:d:Q64685888|Catherine Randolph]]''
|
|
|
|-
| style='text-align:right'| 6704
| ''[[:d:Q64685923|Henry Sturkey]]''
|
|
|
|-
| style='text-align:right'| 6705
| ''[[:d:Q64685943|John Montmorency Tucker]]''
|
|
|
|-
| style='text-align:right'| 6706
| ''[[:d:Q64705104|Ifan Prys Edwards]]''
|
|
|
|-
| style='text-align:right'| 6707
| ''[[:d:Q64795912|George W. Harris]]''
| [[Coadan:George William Harris (1872-1964) in 1918.png|center|128px]]
|
|
|-
| style='text-align:right'| 6708
| ''[[:d:Q64814802|Barbara M. Middlehurst]]''
|
|
|
|-
| style='text-align:right'| 6709
| ''[[:d:Q64876104|Percy James]]''
|
|
|
|-
| style='text-align:right'| 6710
| ''[[:d:Q64919712|George Brooke]]''
|
|
|
|-
| style='text-align:right'| 6711
| ''[[:d:Q64986130|Chris Reynolds]]''
|
|
|
|-
| style='text-align:right'| 6712
| ''[[:d:Q65031279|Keith Matthews]]''
|
|
|
|-
| style='text-align:right'| 6713
| ''[[:d:Q65041352|Robert Stanley]]''
| [[Coadan:Final 1mb Robert for book mayor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6714
| ''[[:d:Q65044903|Charles Jones]]''
|
|
|
|-
| style='text-align:right'| 6715
| ''[[:d:Q65058631|Richard Davies]]''
|
|
|
|-
| style='text-align:right'| 6716
| ''[[:d:Q65122752|William Ingram]]''
|
|
|
|-
| style='text-align:right'| 6717
| ''[[:d:Q65295002|Tim Morgan]]''
|
|
|
|-
| style='text-align:right'| 6718
| ''[[:d:Q65297132|John Peter]]''
| [[Coadan:Portrait of Ioan Pedr (4670577).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6719
| ''[[:d:Q65517696|Gwilym Owen]]''
|
|
|
|-
| style='text-align:right'| 6720
| ''[[:d:Q65550443|James Crisp]]''
|
|
|
|-
| style='text-align:right'| 6721
| ''[[:d:Q65557110|Edgar Watkins]]''
|
|
|
|-
| style='text-align:right'| 6722
| ''[[:d:Q65593860|Stanley Leigh]]''
|
|
|
|-
| style='text-align:right'| 6723
| ''[[:d:Q65642051|Ernest Leigh]]''
|
|
|
|-
| style='text-align:right'| 6724
| ''[[:d:Q65705995|Jackie Pottinger]]''
|
|
|
|-
| style='text-align:right'| 6725
| ''[[:d:Q65735824|Ivor Vice]]''
|
|
|
|-
| style='text-align:right'| 6726
| ''[[:d:Q65735847|Glyn Hopkins]]''
|
|
|
|-
| style='text-align:right'| 6727
| ''[[:d:Q65745228|Percy May]]''
|
|
|
|-
| style='text-align:right'| 6728
| ''[[:d:Q65786419|Cissy Davies]]''
|
|
|
|-
| style='text-align:right'| 6729
| ''[[:d:Q65786800|Pat Evans]]''
|
|
|
|-
| style='text-align:right'| 6730
| ''[[:d:Q65920326|Bruce Godfrey Hyde]]''
|
|
|
|-
| style='text-align:right'| 6731
| ''[[:d:Q65929278|Lew Evans]]''
|
|
|
|-
| style='text-align:right'| 6732
| ''[[:d:Q65929299|Joseph Barnett]]''
|
|
|
|-
| style='text-align:right'| 6733
| ''[[:d:Q65948591|Agnes Davies]]''
|
|
|
|-
| style='text-align:right'| 6734
| ''[[:d:Q65969957|John Mulhall]]''
|
|
|
|-
| style='text-align:right'| 6735
| ''[[:d:Q66023521|Pat Perks]]''
|
|
|
|-
| style='text-align:right'| 6736
| ''[[:d:Q66108081|Howell Davies]]''
|
|
|
|-
| style='text-align:right'| 6737
| ''[[:d:Q66124299|Edith Parnell]]''
|
|
|
|-
| style='text-align:right'| 6738
| ''[[:d:Q66125144|Ossie Evans]]''
|
|
|
|-
| style='text-align:right'| 6739
| ''[[:d:Q66133297|Agnes Twiston Hughes]]''
|
|
|
|-
| style='text-align:right'| 6740
| ''[[:d:Q66198004|Graham Bent]]''
|
|
|
|-
| style='text-align:right'| 6741
| ''[[:d:Q66289592|Edward Battiscombe]]''
|
|
|
|-
| style='text-align:right'| 6742
| ''[[:d:Q66305732|Ron Wynn]]''
|
|
|
|-
| style='text-align:right'| 6743
| ''[[:d:Q66310007|Ifor Morris Thomas]]''
|
|
|
|-
| style='text-align:right'| 6744
| ''[[:d:Q66311283|Ethel Mary Hartland]]''
|
|
|
|-
| style='text-align:right'| 6745
| ''[[:d:Q66317458|Pender Chalmers]]''
| [[Coadan:Maysie Burlingham 1915.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6746
| ''[[:d:Q66360802|Michael Lea Thomas]]''
|
|
|
|-
| style='text-align:right'| 6747
| ''[[:d:Q66360907|William James "Bill" Rees]]''
|
|
|
|-
| style='text-align:right'| 6748
| ''[[:d:Q66441769|Esmé Dodderidge]]''
|
|
|
|-
| style='text-align:right'| 6749
| ''[[:d:Q66606917|Willie Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 6750
| ''[[:d:Q66660980|Veronica Milligan]]''
|
|
|
|-
| style='text-align:right'| 6751
| ''[[:d:Q66692898|William Collins]]''
|
|
|
|-
| style='text-align:right'| 6752
| ''[[:d:Q66694580|Nora M. Finn]]''
| [[Coadan:Nora M. Finn (1866-1898) circa 1895.png|center|128px]]
|
|
|-
| style='text-align:right'| 6753
| ''[[:d:Q66738023|Cyril Jones]]''
|
|
|
|-
| style='text-align:right'| 6754
| ''[[:d:Q66779535|Emyr Currie-Jones]]''
|
|
|
|-
| style='text-align:right'| 6755
| ''[[:d:Q66819461|Owen Elias Roberts]]''
|
|
|
|-
| style='text-align:right'| 6756
| ''[[:d:Q67185184|The Vivienne]]''
| [[Coadan:RuPaul with All Stars 7 Contestants at LA DragCon 2022 by dvsross (crop - The Vivienne).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6757
| ''[[:d:Q67198301|Enid Layard]]''
|
|
|
|-
| style='text-align:right'| 6758
| ''[[:d:Q67454699|Beaumont Wilson Bowen Dixie]]''
|
|
|
|-
| style='text-align:right'| 6759
| ''[[:d:Q67651447|William Jones]]''
|
|
|
|-
| style='text-align:right'| 6760
| ''[[:d:Q67656962|Tom Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6761
| ''[[:d:Q67782102|John Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 6762
| ''[[:d:Q67907384|Betty Davies]]''
|
|
|
|-
| style='text-align:right'| 6763
| ''[[:d:Q69998002|Austin Savage]]''
|
|
|
|-
| style='text-align:right'| 6764
| ''[[:d:Q70022333|Wyn George]]''
|
|
|
|-
| style='text-align:right'| 6765
| ''[[:d:Q70111934|Keith Morris]]''
|
|
|
|-
| style='text-align:right'| 6766
| ''[[:d:Q123018814|Charles Dawe]]''
|
|
|
|-
| style='text-align:right'| 6767
| ''[[:d:Q123118389|Marion Welchman]]''
|
|
|
|-
| style='text-align:right'| 6768
| ''[[:d:Q123197640|Alun Carter]]''
|
|
|
|-
| style='text-align:right'| 6769
| ''[[:d:Q123236090|Chris Boss]]''
|
|
|
|-
| style='text-align:right'| 6770
| ''[[:d:Q123252729|Henry Tristram]]''
|
|
|
|-
| style='text-align:right'| 6771
| ''[[:d:Q123415348|Graham Drury]]''
|
|
|
|-
| style='text-align:right'| 6772
| ''[[:d:Q123643783|Richard Flower]]''
|
|
|
|-
| style='text-align:right'| 6773
| ''[[:d:Q123689931|Syd Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6774
| ''[[:d:Q123735311|Charles Sargeant]]''
|
|
|
|-
| style='text-align:right'| 6775
| ''[[:d:Q123743053|Louisa M. Spooner]]''
|
|
|
|-
| style='text-align:right'| 6776
| ''[[:d:Q123744657|Don Evans]]''
|
|
|
|-
| style='text-align:right'| 6777
| ''[[:d:Q70430408|David Morgan]]''
|
|
|
|-
| style='text-align:right'| 6778
| ''[[:d:Q70623703|Florence Tunks]]''
|
|
|
|-
| style='text-align:right'| 6779
| ''[[:d:Q71334330|John Cule]]''
|
|
|
|-
| style='text-align:right'| 6780
| ''[[:d:Q72342996|Baroness Matilda von Lachmann]]''
|
|
|
|-
| style='text-align:right'| 6781
| ''[[:d:Q73276230|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 6782
| ''[[:d:Q73516034|Margaret Auld]]''
|
|
|
|-
| style='text-align:right'| 6783
| ''[[:d:Q73700067|Thomas Gronow]]''
|
|
|
|-
| style='text-align:right'| 6784
| ''[[:d:Q73855381|Hazel Walford Davies]]''
|
|
|
|-
| style='text-align:right'| 6785
| ''[[:d:Q75253752|Vera Edyth Griffith-Boscawen]]''
| [[Coadan:Sir D. Broughton LCCN2014718668.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6786
| ''[[:d:Q75257649|Lady Anne Somerset]]''
| [[Coadan:John Michael Wright (1617-1694) - Lady Anne Somerset (1631–1662), Lady Howard - 1180957 - National Trust.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6787
| ''[[:d:Q75259915|Walter de Winton]]''
|
|
|
|-
| style='text-align:right'| 6788
| ''[[:d:Q114529460|Percival Edward Thacker]]''
| [[Coadan:William Newzam Prior Nicholson - Canadian Headquarters Staff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6789
| ''[[:d:Q114571030|Amy Laugharne]]''
|
|
|
|-
| style='text-align:right'| 6790
| ''[[:d:Q114608980|Griffith Vaughan Williams]]''
| [[Coadan:Griff Vaughan Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6791
| ''[[:d:Q114866371|Beatrice Green]]''
| [[Coadan:Beatrice Green (Bruley).png|center|128px]]
|
|
|-
| style='text-align:right'| 6792
| ''[[:d:Q115254921|Alun G. Jones]]''
|
|
|
|-
| style='text-align:right'| 6793
| ''[[:d:Q115256986|Edgar Hitchman]]''
|
|
|
|-
| style='text-align:right'| 6794
| ''[[:d:Q115257191|Sydney Jenkins]]''
| [[Coadan:(Portrait du coureur cycliste gallois Syd) Jenkins - btv1b53217294r.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6795
| ''[[:d:Q115381177|Eric Hywel Roberts]]''
|
|
|
|-
| style='text-align:right'| 6796
| ''[[:d:Q115616673|Elizabeth May Watkin Jones]]''
|
|
|
|-
| style='text-align:right'| 6797
| ''[[:d:Q115652166|David Bevan]]''
|
|
|
|-
| style='text-align:right'| 6798
| ''[[:d:Q115662147|Steven Jones]]''
| [[Coadan:The Chief Constable (5236540).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6799
| ''[[:d:Q115687459|William Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 6800
| ''[[:d:Q115687922|Frances Williams]]''
|
|
|
|-
| style='text-align:right'| 6801
| ''[[:d:Q115688322|Geoffrey Bilson]]''
|
|
|
|-
| style='text-align:right'| 6802
| ''[[:d:Q115747841|Alec Allen]]''
|
|
|
|-
| style='text-align:right'| 6803
| ''[[:d:Q115780417|Bryn Thomas]]''
|
|
|
|-
| style='text-align:right'| 6804
| ''[[:d:Q115803662|Brian Woodward]]''
| [[Coadan:Brian Woodward.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6805
| ''[[:d:Q115830694|James Horgan]]''
|
|
|
|-
| style='text-align:right'| 6806
| ''[[:d:Q115839842|Mary Goff Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6807
| ''[[:d:Q115926343|Geraint Vaughan-Jones]]''
|
|
|
|-
| style='text-align:right'| 6808
| ''[[:d:Q115930521|William Henry Hughes]]''
|
|
|
|-
| style='text-align:right'| 6809
| ''[[:d:Q116199583|Helena Braithwaite]]''
|
|
|
|-
| style='text-align:right'| 6810
| ''[[:d:Q116451856|W. Gwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 6811
| ''[[:d:Q116739631|James Jones]]''
|
|
|
|-
| style='text-align:right'| 6812
| ''[[:d:Q116768200|J. Kerry Thomas]]''
|
|
|
|-
| style='text-align:right'| 6813
| ''[[:d:Q116770788|Thomas Prichard]]''
|
|
|
|-
| style='text-align:right'| 6814
| ''[[:d:Q116783944|Edward Hamilton Acton]]''
|
|
|
|-
| style='text-align:right'| 6815
| ''[[:d:Q116785463|Paul Gyngell]]''
|
|
|
|-
| style='text-align:right'| 6816
| ''[[:d:Q116880496|David R. Davies]]''
| [[Coadan:David R. Davies 1927-2016 (32199158336).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6817
| ''[[:d:Q116883186|David Elias]]''
|
|
|
|-
| style='text-align:right'| 6818
| ''[[:d:Q116922937|Mary Knibb]]''
|
|
|
|-
| style='text-align:right'| 6819
| ''[[:d:Q116994784|Eileen Mary Rees]]''
|
|
|
|-
| style='text-align:right'| 6820
| ''[[:d:Q117251092|George Brown Naysmith]]''
|
|
|
|-
| style='text-align:right'| 6821
| ''[[:d:Q117286666|Arnold Alonzo Sheppard]]''
|
|
|
|-
| style='text-align:right'| 6822
| ''[[:d:Q117286914|Morgan Rice Morgan]]''
|
|
|
|-
| style='text-align:right'| 6823
| ''[[:d:Q117286952|David Rhagfyr Jones]]''
|
|
|
|-
| style='text-align:right'| 6824
| ''[[:d:Q117286967|Abraham Williams]]''
|
|
|
|-
| style='text-align:right'| 6825
| ''[[:d:Q117287364|Charles Henry Glascodine]]''
|
|
|
|-
| style='text-align:right'| 6826
| ''[[:d:Q117306933|Gawen Goodman]]''
| [[Coadan:British School - Gawen Goodman of Ruthin (1526–1604) - NMW A 3453 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6827
| ''[[:d:Q117313621|Ellis Owen Roberts]]''
|
|
|
|-
| style='text-align:right'| 6828
| ''[[:d:Q117313781|John Watkin Jones]]''
|
|
|
|-
| style='text-align:right'| 6829
| ''[[:d:Q117314501|David Davies]]''
| [[Coadan:Portrait of David Davies (4672726).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6830
| ''[[:d:Q117314527|William Leigh Morgan]]''
|
|
|
|-
| style='text-align:right'| 6831
| ''[[:d:Q117383847|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 6832
| ''[[:d:Q117465300|Nicola Heywood-Thomas]]''
|
|
|
|-
| style='text-align:right'| 6833
| ''[[:d:Q117600065|Gustavus Charles Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 6834
| ''[[:d:Q117600963|Henry Inglis Wynne Williams]]''
|
|
|
|-
| style='text-align:right'| 6835
| ''[[:d:Q117760287|William Headley]]''
|
|
|
|-
| style='text-align:right'| 6836
| ''[[:d:Q117760674|Alice Jane Jones]]''
|
|
|
|-
| style='text-align:right'| 6837
| ''[[:d:Q117804037|Sarah Williams]]''
|
|
|
|-
| style='text-align:right'| 6838
| ''[[:d:Q117804079|Mary Williams]]''
|
|
|
|-
| style='text-align:right'| 6839
| ''[[:d:Q117804180|Morvydd Monica Williams]]''
|
|
|
|-
| style='text-align:right'| 6840
| ''[[:d:Q117804269|David Dalis Davies]]''
|
|
|
|-
| style='text-align:right'| 6841
| ''[[:d:Q117815356|Bramwell James Leonard Pearce]]''
|
|
|
|-
| style='text-align:right'| 6842
| ''[[:d:Q117832601|Thomas Fanning-Evans]]''
|
|
|
|-
| style='text-align:right'| 6843
| ''[[:d:Q117834659|William Williams]]''
|
|
|
|-
| style='text-align:right'| 6844
| ''[[:d:Q117834694|John Jones]]''
|
|
|
|-
| style='text-align:right'| 6845
| ''[[:d:Q117834799|Geoffrey Woolley]]''
|
|
|
|-
| style='text-align:right'| 6846
| ''[[:d:Q117945973|Morris Jones]]''
|
|
|
|-
| style='text-align:right'| 6847
| ''[[:d:Q118067079|Fannie Margaret Thomas]]''
|
|
|
|-
| style='text-align:right'| 6848
| ''[[:d:Q118109189|John Owen]]''
|
|
|
|-
| style='text-align:right'| 6849
| ''[[:d:Q118164946|David William Jones]]''
|
|
|
|-
| style='text-align:right'| 6850
| ''[[:d:Q118169494|John Mayor]]''
|
|
|
|-
| style='text-align:right'| 6851
| ''[[:d:Q118258969|Jen Wilson]]''
|
|
|
|-
| style='text-align:right'| 6852
| ''[[:d:Q118383328|Arthur Jones]]''
|
|
|
|-
| style='text-align:right'| 6853
| ''[[:d:Q118399149|John Raymond Williams]]''
|
|
|
|-
| style='text-align:right'| 6854
| ''[[:d:Q118399238|John Naish]]''
|
|
|
|-
| style='text-align:right'| 6855
| ''[[:d:Q118430298|Louisa Traherne]]''
|
|
|
|-
| style='text-align:right'| 6856
| ''[[:d:Q118727707|Alwen Hughes]]''
|
|
|
|-
| style='text-align:right'| 6857
| ''[[:d:Q118869337|Benjamin Evans]]''
|
|
|
|-
| style='text-align:right'| 6858
| ''[[:d:Q118900764|Evan Evans]]''
|
|
|
|-
| style='text-align:right'| 6859
| ''[[:d:Q118903180|William Griffith]]''
|
|
|
|-
| style='text-align:right'| 6860
| ''[[:d:Q119521816|David Evans]]''
| [[Coadan:W.T. Pike Contemporary Biographies N & E Ridings of Yorkshire 1903 (43aa).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6861
| ''[[:d:Q119997064|Desmond Healy]]''
|
|
|
|-
| style='text-align:right'| 6862
| ''[[:d:Q120069320|Huldah Charles Bassett]]''
|
|
|
|-
| style='text-align:right'| 6863
| ''[[:d:Q120135075|David Aitken]]''
|
|
|
|-
| style='text-align:right'| 6864
| ''[[:d:Q120164850|Arthur Robinson]]''
|
|
|
|-
| style='text-align:right'| 6865
| ''[[:d:Q120394226|Alan Williams]]''
|
|
|
|-
| style='text-align:right'| 6866
| ''[[:d:Q120538514|Stella Musulin]]''
| [[Coadan:Stella Musulin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6867
| ''[[:d:Q120754310|John Brown]]''
|
|
|
|-
| style='text-align:right'| 6868
| ''[[:d:Q120835093|Erica M. Frank]]''
|
|
|
|-
| style='text-align:right'| 6869
| ''[[:d:Q120854861|Gainor Hughes]]''
|
|
|
|-
| style='text-align:right'| 6870
| ''[[:d:Q121092322|Robert Brinley Jones]]''
|
|
|
|-
| style='text-align:right'| 6871
| ''[[:d:Q121918481|Thomas Hutchinson]]''
|
|
|
|-
| style='text-align:right'| 6872
| ''[[:d:Q122750045|Clara Thomas]]''
|
|
|
|-
| style='text-align:right'| 6873
| ''[[:d:Q122831816|Glanmor Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6874
| ''[[:d:Q122900265|Jenny James]]''
|
|
|
|-
| style='text-align:right'| 6875
| ''[[:d:Q122932453|David John Lewis]]''
|
|
|
|-
| style='text-align:right'| 6876
| ''[[:d:Q123004882|John McLaggan]]''
|
|
|
|-
| style='text-align:right'| 6877
| ''[[:d:Q135002486|Abel Evans]]''
|
|
|
|-
| style='text-align:right'| 6878
| ''[[:d:Q135012658|William Grey Hughes]]''
|
|
|
|-
| style='text-align:right'| 6879
| ''[[:d:Q135012693|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 6880
| ''[[:d:Q135016810|John David Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6881
| ''[[:d:Q135034025|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 6882
| ''[[:d:Q135209813|David Wilfred Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6883
| ''[[:d:Q135255806|Colin Allen]]''
|
|
|
|-
| style='text-align:right'| 6884
| ''[[:d:Q135255805|Frank Alford]]''
|
|
|
|-
| style='text-align:right'| 6885
| ''[[:d:Q135255809|Charles Vivian Appleton]]''
|
|
|
|-
| style='text-align:right'| 6886
| ''[[:d:Q135255827|Thomas Boydell]]''
|
|
|
|-
| style='text-align:right'| 6887
| ''[[:d:Q135255825|Richard Emrys Bonsall]]''
|
|
|
|-
| style='text-align:right'| 6888
| ''[[:d:Q135255850|Ronald Cour]]''
|
|
|
|-
| style='text-align:right'| 6889
| ''[[:d:Q135255858|David Davies]]''
|
|
|
|-
| style='text-align:right'| 6890
| ''[[:d:Q135255861|Dudley Garnet Davies]]''
|
|
|
|-
| style='text-align:right'| 6891
| ''[[:d:Q135255866|Haydn Wyn Davies]]''
|
|
|
|-
| style='text-align:right'| 6892
| ''[[:d:Q135255875|Arthur Lewis Davies]]''
|
|
|
|-
| style='text-align:right'| 6893
| ''[[:d:Q135255872|John Davies]]''
|
|
|
|-
| style='text-align:right'| 6894
| ''[[:d:Q135255887|William Davies]]''
|
|
|
|-
| style='text-align:right'| 6895
| ''[[:d:Q135255895|Lewis Edmunds]]''
|
|
|
|-
| style='text-align:right'| 6896
| ''[[:d:Q135255912|David Llewelyn Jones]]''
|
|
|
|-
| style='text-align:right'| 6897
| ''[[:d:Q135255923|Henry Jones]]''
|
|
|
|-
| style='text-align:right'| 6898
| ''[[:d:Q135255926|John Jones]]''
|
|
|
|-
| style='text-align:right'| 6899
| ''[[:d:Q135255924|Humphrey Bradley Jones]]''
|
|
|
|-
| style='text-align:right'| 6900
| ''[[:d:Q135255931|John Maethlu Jones]]''
|
|
|
|-
| style='text-align:right'| 6901
| ''[[:d:Q135255958|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 6902
| ''[[:d:Q135255956|Jenkin Lewis]]''
|
|
|
|-
| style='text-align:right'| 6903
| ''[[:d:Q135255963|Guy Ynyr Llewelyn Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6904
| ''[[:d:Q135255967|Robert Lloyd]]''
|
|
|
|-
| style='text-align:right'| 6905
| ''[[:d:Q135255982|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 6906
| ''[[:d:Q135255987|Edward Edwards]]''
|
|
|
|-
| style='text-align:right'| 6907
| ''[[:d:Q135256023|Michael Tillert]]''
|
|
|
|-
| style='text-align:right'| 6908
| ''[[:d:Q135256024|Albert Leslie Tusler]]''
|
|
|
|-
| style='text-align:right'| 6909
| ''[[:d:Q135256045|Robert Arthur Williams]]''
|
|
|
|-
| style='text-align:right'| 6910
| ''[[:d:Q135256066|William Williams]]''
|
|
|
|-
| style='text-align:right'| 6911
| ''[[:d:Q135256064|William Williams]]''
|
|
|
|-
| style='text-align:right'| 6912
| ''[[:d:Q135256091|Ellis Henry Ellis]]''
|
|
|
|-
| style='text-align:right'| 6913
| ''[[:d:Q135256094|William Ellis]]''
|
|
|
|-
| style='text-align:right'| 6914
| ''[[:d:Q135256092|Henry Ellis]]''
|
|
|
|-
| style='text-align:right'| 6915
| ''[[:d:Q135256100|Edward Evans]]''
|
|
|
|-
| style='text-align:right'| 6916
| ''[[:d:Q135256107|John Caradoc Evans]]''
|
|
|
|-
| style='text-align:right'| 6917
| ''[[:d:Q135256114|William Downing Evans]]''
|
|
|
|-
| style='text-align:right'| 6918
| ''[[:d:Q135256118|John Kyrle Fletcher]]''
|
|
|
|-
| style='text-align:right'| 6919
| ''[[:d:Q135256134|David Griffiths]]''
|
|
|
|-
| style='text-align:right'| 6920
| ''[[:d:Q135256133|John Griffith]]''
|
|
|
|-
| style='text-align:right'| 6921
| ''[[:d:Q135256156|Richard Llewelyn Headley]]''
|
|
|
|-
| style='text-align:right'| 6922
| ''[[:d:Q135256180|Alexandra Octavia Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6923
| ''[[:d:Q135256198|Richard David Jenkins]]''
|
|
|
|-
| style='text-align:right'| 6924
| ''[[:d:Q135256223|Dorothy Taunton Raikes]]''
|
|
|
|-
| style='text-align:right'| 6925
| ''[[:d:Q135256246|Mary Silyn Roberts]]''
|
|
|
|-
| style='text-align:right'| 6926
| ''[[:d:Q135256268|George Henry Strick]]''
|
|
|
|-
| style='text-align:right'| 6927
| ''[[:d:Q135256272|Francis Taynton]]''
|
|
|
|-
| style='text-align:right'| 6928
| ''[[:d:Q135256288|Richard Waklein]]''
|
|
|
|-
| style='text-align:right'| 6929
| ''[[:d:Q135436691|Thomas Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 6930
| ''[[:d:Q135485976|Dorothy Shelagh Leighton Garland]]''
|
|
|
|-
| style='text-align:right'| 6931
| ''[[:d:Q135524659|Thomas Ellis]]''
|
|
|
|-
| style='text-align:right'| 6932
| ''[[:d:Q135524690|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 6933
| ''[[:d:Q135642490|Nesta Dorrance]]''
|
|
|
|-
| style='text-align:right'| 6934
| ''[[:d:Q135736786|Martha Sealy]]''
|
|
|
|-
| style='text-align:right'| 6935
| ''[[:d:Q135757395|Frank Owen]]''
|
|
|
|-
| style='text-align:right'| 6936
| ''[[:d:Q135854981|Tom Earley]]''
|
|
|
|-
| style='text-align:right'| 6937
| ''[[:d:Q135903811|Lady Paula Howard]]''
|
|
|
|-
| style='text-align:right'| 6938
| ''[[:d:Q135916709|Trader Hughes]]''
|
|
|
|-
| style='text-align:right'| 6939
| ''[[:d:Q135921464|Eddie Wilcox]]''
|
|
|
|-
| style='text-align:right'| 6940
| ''[[:d:Q135942883|Noel Williams]]''
| [[Coadan:Yr actor Noel Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6941
| ''[[:d:Q136027925|David Miles]]''
|
|
|
|-
| style='text-align:right'| 6942
| ''[[:d:Q136032765|Islwyn Winwaeloc Jones]]''
|
|
|
|-
| style='text-align:right'| 6943
| ''[[:d:Q136084148|Beryl Hall]]''
|
|
|
|-
| style='text-align:right'| 6944
| ''[[:d:Q136140612|J. T. Jones]]''
|
|
|
|-
| style='text-align:right'| 6945
| ''[[:d:Q136159835|Edward David Darelan Davis]]''
| [[Coadan:Edward David Darelan Davis. Portrait, 1904. Wellcome V0029071 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6946
| ''[[:d:Q136165406|Kathleen Thomas]]''
|
|
|
|-
| style='text-align:right'| 6947
| ''[[:d:Q136296816|Howell John Thomas]]''
|
|
|
|-
| style='text-align:right'| 6948
| ''[[:d:Q136307309|Nicholas John Dunn]]''
|
|
|
|-
| style='text-align:right'| 6949
| ''[[:d:Q136316026|Olive Salaman]]''
|
|
|
|-
| style='text-align:right'| 6950
| ''[[:d:Q136340252|Huw Davies]]''
|
|
|
|-
| style='text-align:right'| 6951
| ''[[:d:Q136340660|Lyn Evans]]''
|
|
|
|-
| style='text-align:right'| 6952
| ''[[:d:Q136360348|John Forsyth]]''
|
|
|
|-
| style='text-align:right'| 6953
| ''[[:d:Q136369298|John Francis]]''
|
|
|
|-
| style='text-align:right'| 6954
| ''[[:d:Q136408528|Ivor Wynne]]''
|
|
|
|-
| style='text-align:right'| 6955
| ''[[:d:Q136433221|Rhys Davies]]''
|
|
|
|-
| style='text-align:right'| 6956
| ''[[:d:Q136444533|Elwyn Wilson Jones]]''
|
|
|
|-
| style='text-align:right'| 6957
| ''[[:d:Q136444591|Gari Melville]]''
|
|
|
|-
| style='text-align:right'| 6958
| ''[[:d:Q136461525|Gareth Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 6959
| ''[[:d:Q136487593|William John Owen]]''
| [[Coadan:Parch. W. J. OWEN (Afallon),Bangor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6960
| ''[[:d:Q136536183|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 6961
| ''[[:d:Q136553598|Suzanne Chapman]]''
|
|
|
|-
| style='text-align:right'| 6962
| ''[[:d:Q136555236|Pamela Duncan]]''
|
|
|
|-
| style='text-align:right'| 6963
| ''[[:d:Q136562470|Edward Ash]]''
|
|
|
|-
| style='text-align:right'| 6964
| ''[[:d:Q136564872|Evan Morris]]''
|
|
|
|-
| style='text-align:right'| 6965
| ''[[:d:Q136565128|Thomas Myddfai Jones]]''
|
|
|
|-
| style='text-align:right'| 6966
| ''[[:d:Q136604281|John Cledan Davies]]''
|
|
|
|-
| style='text-align:right'| 6967
| ''[[:d:Q136644376|Edward Rees]]''
|
|
|
|-
| style='text-align:right'| 6968
| ''[[:d:Q136644413|D. W. Morgan]]''
|
|
|
|-
| style='text-align:right'| 6969
| ''[[:d:Q136646119|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 6970
| ''[[:d:Q136651407|Jennie Williams]]''
|
|
|
|-
| style='text-align:right'| 6971
| ''[[:d:Q136664120|Katherine Susan Wolf]]''
|
|
|
|-
| style='text-align:right'| 6972
| ''[[:d:Q136689395|Maisie Hurley]]''
|
|
|
|-
| style='text-align:right'| 6973
| ''[[:d:Q136698893|Rowland Hugh Jones (Rolant o Fôn)]]''
|
|
|
|-
| style='text-align:right'| 6974
| ''[[:d:Q136914153|Emrys Cleaver]]''
|
|
|
|-
| style='text-align:right'| 6975
| ''[[:d:Q136914169|Owen Huw Roberts]]''
|
|
|
|-
| style='text-align:right'| 6976
| ''[[:d:Q136914180|J. O. Jones (actor)]]''
|
|
|
|-
| style='text-align:right'| 6977
| ''[[:d:Q139755129|John Hampson]]''
|
|
|
|-
| style='text-align:right'| 6978
| ''[[:d:Q139755242|Joseph Wickland]]''
| [[Coadan:Joseph Wickland (5294061).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6979
| ''[[:d:Q139755323|George Ratford Woods]]''
| [[Coadan:Joseph Wickland (5294061).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6980
| ''[[:d:Q139765491|John Hunter Humphreys]]''
| [[Coadan:Portrait of John Hunter Humphreys (4669839).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6981
| ''[[:d:Q139782245|John Edward Poundley]]''
| [[Coadan:Portrait of John Edward Poundley, Black Hall, Kerry Montgomeryshire (4671811).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6982
| ''[[:d:Q139782970|James Rowland]]''
| [[Coadan:Portrait of James Rowlands (4669929).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6983
| ''[[:d:Q139795794|James Rowe]]''
| [[Coadan:Portrait of James Rowe, Fishguard, Pembrokeshire (4673458).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6984
| ''[[:d:Q139796630|Mary Griffith Cox]]''
|
|
|
|-
| style='text-align:right'| 6985
| ''[[:d:Q139796683|Daniel Pryse Jones]]''
|
|
|
|-
| style='text-align:right'| 6986
| ''[[:d:Q139796869|Ferdinand Capel Hanbury-Williams]]''
| [[Coadan:Portrait of Mr. Capel Hanbury Williams (4672177).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 6987
| ''[[:d:Q25206988|Ralph Jones]]''
|
|
|
|-
| style='text-align:right'| 6988
| ''[[:d:Q25207077|Thomas Vaughan]]''
|
|
|
|-
| style='text-align:right'| 6989
| ''[[:d:Q136914249|Elin Mair Jones]]''
|
|
|
|-
| style='text-align:right'| 6990
| ''[[:d:Q136914260|Richard Morris (Hogia'r Wyddfa)]]''
|
|
|
|-
| style='text-align:right'| 6991
| ''[[:d:Q136914380|Alan Clayton]]''
|
|
|
|-
| style='text-align:right'| 6992
| ''[[:d:Q136914468|Dilys Price (actores)]]''
|
|
|
|-
| style='text-align:right'| 6993
| ''[[:d:Q136914501|Ernest Evans (actor)]]''
|
|
|
|-
| style='text-align:right'| 6994
| ''[[:d:Q136914544|William David Williams (W. D. Williams)]]''
|
|
|
|-
| style='text-align:right'| 6995
| ''[[:d:Q137039486|Wyn Jones (actor)]]''
|
|
|
|-
| style='text-align:right'| 6996
| ''[[:d:Q137040619|Geraint Owen (actor)]]''
|
|
|
|-
| style='text-align:right'| 6997
| ''[[:d:Q137040632|Morien Philips]]''
|
|
|
|-
| style='text-align:right'| 6998
| ''[[:d:Q137040714|Gwynne D. Evans]]''
|
|
|
|-
| style='text-align:right'| 6999
| ''[[:d:Q137040720|Edwin williams]]''
|
|
|
|-
| style='text-align:right'| 7000
| ''[[:d:Q137040734|Morris Jones (actor a chyfarwyddwr)]]''
|
|
|
|-
| style='text-align:right'| 7001
| ''[[:d:Q137166061|Llewellyn Gordon Owen]]''
|
|
|
|-
| style='text-align:right'| 7002
| ''[[:d:Q137451439|Jack Griffith]]''
|
|
|
|-
| style='text-align:right'| 7003
| ''[[:d:Q137601569|Frank Llewellyn-Jones]]''
|
|
|
|-
| style='text-align:right'| 7004
| ''[[:d:Q137631785|Robert Hughes (Glan Collen)]]''
| [[Coadan:Robert Hughes (Glan Collen, 1832?- ) NLW3364239.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7005
| ''[[:d:Q137641007|Morgan John Rees]]''
|
|
|
|-
| style='text-align:right'| 7006
| ''[[:d:Q137719956|Ernest Howard Harris]]''
|
|
|
|-
| style='text-align:right'| 7007
| ''[[:d:Q137973089|Tony Jones]]''
| [[Coadan:Portrayal of Aloma and Tony Jones ,the popular duet Tony and Aloma (1539576).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7008
| ''[[:d:Q138028809|Mabel Perowne]]''
|
|
|
|-
| style='text-align:right'| 7009
| ''[[:d:Q138047039|Elizabeth Kent]]''
|
|
|
|-
| style='text-align:right'| 7010
| ''[[:d:Q138189165|Robert Perry]]''
|
|
|
|-
| style='text-align:right'| 7011
| ''[[:d:Q138189219|Leah Morris]]''
|
|
|
|-
| style='text-align:right'| 7012
| ''[[:d:Q138338362|John Idris Jones]]''
|
|
|
|-
| style='text-align:right'| 7013
| ''[[:d:Q138338735|Ivor Eustis]]''
|
|
|
|-
| style='text-align:right'| 7014
| ''[[:d:Q138339199|Marian Ann Goronwy-Roberts]]''
|
|
|
|-
| style='text-align:right'| 7015
| ''[[:d:Q138349362|Samuel Evans]]''
|
|
|
|-
| style='text-align:right'| 7016
| ''[[:d:Q138448286|John Daniel Marsh]]''
| [[Coadan:The Newark Star (1909-05-07). John D. Marsh.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7017
| ''[[:d:Q138456592|Martyn Butler]]''
|
|
|
|-
| style='text-align:right'| 7018
| ''[[:d:Q138458247|Guy Rawson Trafford]]''
|
|
|
|-
| style='text-align:right'| 7019
| ''[[:d:Q138535331|John Humphreys]]''
| [[Coadan:John Humphreys (Wmffra Cyfeiliog).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7020
| ''[[:d:Q138701765|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 7021
| ''[[:d:Q138702006|Gweno Lewis]]''
|
|
|
|-
| style='text-align:right'| 7022
| ''[[:d:Q138702031|Gwladys Elizabeth Lewis]]''
|
|
|
|-
| style='text-align:right'| 7023
| ''[[:d:Q138708501|Sianed Elin Jones]]''
|
|
|
|-
| style='text-align:right'| 7024
| ''[[:d:Q138779988|John Williams]]''
|
|
|
|-
| style='text-align:right'| 7025
| ''[[:d:Q139071081|Thomas Joseph Morris]]''
|
|
|
|-
| style='text-align:right'| 7026
| ''[[:d:Q139071102|William Ross Hughes]]''
|
|
|
|-
| style='text-align:right'| 7027
| ''[[:d:Q139071191|John C. Roberts]]''
|
|
|
|-
| style='text-align:right'| 7028
| ''[[:d:Q139071284|John Richard Roberts]]''
|
|
|
|-
| style='text-align:right'| 7029
| ''[[:d:Q139088980|Edward Goodman]]''
| [[Coadan:Portrait of Brass of Edward Goodman in Ruthin Church, Denbighshire (4670777).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7030
| ''[[:d:Q139089502|Abel Anthony Gower]]''
| [[Coadan:Portrait of Abel Anthony Gower, Esquire, of Glandovan, County of Pembroke (4670781).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7031
| ''[[:d:Q139104913|William Owen]]''
|
|
|
|-
| style='text-align:right'| 7032
| ''[[:d:Q139178689|Trevor Evans]]''
|
|
|
|-
| style='text-align:right'| 7033
| ''[[:d:Q139178994|John Warnaby]]''
|
|
|
|-
| style='text-align:right'| 7034
| ''[[:d:Q139190014|Eric Roberts]]''
|
|
|
|-
| style='text-align:right'| 7035
| ''[[:d:Q139197773|Bruce Dargavel]]''
|
|
|
|-
| style='text-align:right'| 7036
| ''[[:d:Q139198124|William Vaughan Lewis]]''
|
|
|
|-
| style='text-align:right'| 7037
| ''[[:d:Q139255770|Walter Young Armstrong]]''
| [[Coadan:Walter Young Armstrong in WT Pike Biographies Berks Bucks & Beds (32a) (6).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7038
| ''[[:d:Q139256119|George Albert Ash]]''
|
|
|
|-
| style='text-align:right'| 7039
| ''[[:d:Q139256146|George Hugh Ash]]''
|
|
|
|-
| style='text-align:right'| 7040
| ''[[:d:Q139305674|Thomas Owen]]''
|
|
|
|-
| style='text-align:right'| 7041
| ''[[:d:Q139308619|William Owen II]]''
|
|
|
|-
| style='text-align:right'| 7042
| ''[[:d:Q139373509|Hilda Mary Smyth]]''
|
|
|
|-
| style='text-align:right'| 7043
| ''[[:d:Q139597332|Alicia Graciana Jones]]''
|
|
|
|-
| style='text-align:right'| 7044
| ''[[:d:Q139618604|William Warlow]]''
|
|
|
|-
| style='text-align:right'| 7045
| ''[[:d:Q139618744|Alicia Gratiana Gower Jones]]''
|
|
|
|-
| style='text-align:right'| 7046
| ''[[:d:Q139618987|Timothy Richard Morgan]]''
|
|
|
|-
| style='text-align:right'| 7047
| ''[[:d:Q139661873|Edward Wynne Lloyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 7048
| ''[[:d:Q139665474|Isaac Hopkins]]''
|
|
|
|-
| style='text-align:right'| 7049
| ''[[:d:Q139670585|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 7050
| ''[[:d:Q139672188|Thomas Glasfryn Jones]]''
|
|
|
|-
| style='text-align:right'| 7051
| ''[[:d:Q139672435|Mary Ellen Hume Humphreys]]''
|
|
|
|-
| style='text-align:right'| 7052
| ''[[:d:Q139678406|William Jones Penny]]''
|
|
|
|-
| style='text-align:right'| 7053
| ''[[:d:Q139678416|Jane Penny]]''
|
|
|
|-
| style='text-align:right'| 7054
| ''[[:d:Q139679389|Dorothy Hermon Hughes]]''
|
|
|
|-
| style='text-align:right'| 7055
| ''[[:d:Q139679452|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 7056
| ''[[:d:Q139679486|John Hywel Parry]]''
|
|
|
|-
| style='text-align:right'| 7057
| ''[[:d:Q139691537|Peter Bremmer Loveday]]''
|
|
|
|-
| style='text-align:right'| 7058
| ''[[:d:Q139710015|Anthony Montonnier Hawkins]]''
| [[Coadan:Portrait of Anthony Montonnier Hawkins Esqre. M.D (4672294).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7059
| ''[[:d:Q139710214|Robert Thomas Carreg]]''
| [[Coadan:Portrait of Robt. Thos. Carreg, Esqr (4672236).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7060
| ''[[:d:Q139710500|Daniel Leonard Jones]]''
|
|
|
|-
| style='text-align:right'| 7061
| ''[[:d:Q139711000|Charles Frederick Haycock]]''
|
|
|
|-
| style='text-align:right'| 7062
| ''[[:d:Q139711028|Edward Haycock]]''
|
|
|
|-
| style='text-align:right'| 7063
| ''[[:d:Q139711160|Edward Hugh Millward]]''
|
|
|
|-
| style='text-align:right'| 7064
| ''[[:d:Q139711212|Evan Lewis]]''
|
|
|
|-
| style='text-align:right'| 7065
| ''[[:d:Q139711468|Mary Ann Howells]]''
|
|
|
|-
| style='text-align:right'| 7066
| ''[[:d:Q139713545|Hopcyn Howe]]''
|
|
|
|-
| style='text-align:right'| 7067
| ''[[:d:Q139713632|Edward Hughes]]''
| [[Coadan:Revd Edward Hughes, Aberystwyth (1867) NLW3365208.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7068
| ''[[:d:Q139718048|John Roberts]]''
| [[Coadan:Portrait of John Roberts Esq (4670510).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7069
| ''[[:d:Q139718153|Ellis Roberts]]''
| [[Coadan:Portrait of Mr. Ellis Roberts (from Bala) (4670500).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7070
| ''[[:d:Q139718599|Griffith Owen]]''
| [[Coadan:Benjamin Marshall (1768-1835) - Griffith Owen (1750–1833), Harpist to the Corbet Family of Ynysymaengwyn - NMW A 14301 - National Museum Cardiff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7071
| ''[[:d:Q139719070|Gwladys Gwendoline Miers]]''
| [[Coadan:Portrait of Gwladis Gwendoline Miers at 15 weeks (4670407).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7072
| ''[[:d:Q139739724|Joan Swan]]''
|
|
|
|-
| style='text-align:right'| 7073
| ''[[:d:Q139744446|William Samuel Roberts]]''
| [[Coadan:Parch W. S. Roberts Gweinidog Saron, Bodedern, Ynys Môn (5292148).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7074
| ''[[:d:Q139745666|David Watkins]]''
| [[Coadan:David Watkins (of Aberystwyth) (5292149).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7075
| ''[[:d:Q139749560|David Richards]]''
|
|
|
|-
| style='text-align:right'| 7076
| ''[[:d:Q139750110|David Ajax]]''
| [[Coadan:Deio Ajax, Blaencothi (5293995).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7077
| ''[[:d:Q5236|Edward II of England]]''
| [[Coadan:King Edward II of England.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7078
| ''[[:d:Q8287|Elmer Gethin Rees]]''
| [[Coadan:Elmer Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7079
| ''[[:d:Q22742|George Edward Luckman Gauntlett]]''
| [[Coadan:Edward and Tsuneko Gauntlett in 1949 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7080
| ''[[:d:Q25161|Roald Dahl]]''
| [[Coadan:Roald Dahl.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7081
| ''[[:d:Q26207|Hugh Dalton]]''
| [[Coadan:Hugh Dalton.png|center|128px]]
|
|
|-
| style='text-align:right'| 7082
| ''[[:d:Q29092|Desmond Llewelyn]]''
| [[Coadan:Desmond Llewelyn 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7083
| ''[[:d:Q29738|Rod Thomas]]''
|
|
|
|-
| style='text-align:right'| 7084
| ''[[:d:Q30518|Fred Keenor]]''
| [[Coadan:Fred Keenor statue.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7085
| ''[[:d:Q31362|Martyn Lloyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 7086
| ''[[:d:Q33760|Bertrand Russell]]''
| [[Coadan:Bertrand Russell photo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7087
| ''[[:d:Q56170|Hugh Davies]]''
| [[Coadan:Y botanegwr Hugh Davies (1739 – 1821) Welsh botanist.png|center|128px]]
|
|
|-
| style='text-align:right'| 7088
| ''[[:d:Q58331|Kenny Morgans]]''
|
|
|
|-
| style='text-align:right'| 7089
| ''[[:d:Q24004694|Oliver Taylor]]''
|
|
|
|-
| style='text-align:right'| 7090
| ''[[:d:Q24004695|Charles Thomas]]''
|
|
|
|-
| style='text-align:right'| 7091
| ''[[:d:Q24004698|Ronnie Williams]]''
|
|
|
|-
| style='text-align:right'| 7092
| ''[[:d:Q24004699|William Wynn]]''
|
|
|
|-
| style='text-align:right'| 7093
| ''[[:d:Q24004697|John Vaughan]]''
|
|
|
|-
| style='text-align:right'| 7094
| ''[[:d:Q24005345|Walter Neumann]]''
| [[Coadan:Walter Neumann 1973 (portion B).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7095
| ''[[:d:Q24007287|Hywel Davies]]''
|
|
|
|-
| style='text-align:right'| 7096
| ''[[:d:Q24007285|Wynne Crompton]]''
|
|
|
|-
| style='text-align:right'| 7097
| ''[[:d:Q24007295|Tom Edwards]]''
|
|
|
|-
| style='text-align:right'| 7098
| ''[[:d:Q24007296|Emrys Ellis]]''
|
|
|
|-
| style='text-align:right'| 7099
| ''[[:d:Q24007303|George Green]]''
|
|
|
|-
| style='text-align:right'| 7100
| ''[[:d:Q24007300|Tom Evans]]''
|
|
|
|-
| style='text-align:right'| 7101
| ''[[:d:Q24007311|Alan Jarvis]]''
|
|
|
|-
| style='text-align:right'| 7102
| ''[[:d:Q24007314|Jimmy Jones]]''
| [[Coadan:Screenshot 20220606-130821 Gallery.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7103
| ''[[:d:Q24007312|David Jones]]''
|
|
|
|-
| style='text-align:right'| 7104
| ''[[:d:Q24007316|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 7105
| ''[[:d:Q24007429|Billy Richards]]''
|
|
|
|-
| style='text-align:right'| 7106
| ''[[:d:Q24007432|Billy Rogers]]''
| [[Coadan:Billy Rogers (footballer).png|center|128px]]
|
|
|-
| style='text-align:right'| 7107
| ''[[:d:Q24007439|Dai Thomas]]''
|
|
|
|-
| style='text-align:right'| 7108
| ''[[:d:Q24007448|Ephraim Williams]]''
|
|
|
|-
| style='text-align:right'| 7109
| ''[[:d:Q24007449|Jesse Williams]]''
|
|
|
|-
| style='text-align:right'| 7110
| ''[[:d:Q24033907|James Davies]]''
|
|
|
|-
| style='text-align:right'| 7111
| ''[[:d:Q24034988|Rosa Lee]]''
| [[Coadan:Rosa Mabel Lee while working in Lowestoft.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7112
| ''[[:d:Q24036579|John Rogers Rees]]''
|
|
|
|-
| style='text-align:right'| 7113
| ''[[:d:Q24040034|Hefin David]]''
| [[Coadan:Hefin David AM (28170811245).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7114
| ''[[:d:Q24069516|Marwood Marchant]]''
|
|
|
|-
| style='text-align:right'| 7115
| ''[[:d:Q24080983|Francis Xavier Gaffney]]''
|
|
|
|-
| style='text-align:right'| 7116
| ''[[:d:Q24175038|Geoffrey Dhenin]]''
|
|
|
|-
| style='text-align:right'| 7117
| ''[[:d:Q24181959|David James]]''
|
|
|
|-
| style='text-align:right'| 7118
| ''[[:d:Q24183311|Margaret Bevan]]''
| [[Coadan:MargaretBevanGealy1916.png|center|128px]]
|
|
|-
| style='text-align:right'| 7119
| ''[[:d:Q24183384|Watkin George]]''
|
|
|
|-
| style='text-align:right'| 7120
| ''[[:d:Q24183454|Arthur Drabble]]''
|
|
|
|-
| style='text-align:right'| 7121
| ''[[:d:Q24195073|William Bridge]]''
|
|
|
|-
| style='text-align:right'| 7122
| ''[[:d:Q24203440|Reese J. Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 7123
| ''[[:d:Q24203499|Owen Daniel]]''
|
|
|
|-
| style='text-align:right'| 7124
| ''[[:d:Q24218750|Charlie Oliver]]''
|
|
|
|-
| style='text-align:right'| 7125
| ''[[:d:Q24234002|Muriel Jones]]''
| [[Coadan:Muriel Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7126
| ''[[:d:Q24249604|D. LL. Lewis]]''
|
|
|
|-
| style='text-align:right'| 7127
| ''[[:d:Q24250356|Edward David Williams]]''
|
|
|
|-
| style='text-align:right'| 7128
| ''[[:d:Q24250594|May Marsden]]''
|
|
|
|-
| style='text-align:right'| 7129
| ''[[:d:Q24250749|William Jones]]''
|
|
|
|-
| style='text-align:right'| 7130
| ''[[:d:Q24266615|William Waters]]''
|
|
|
|-
| style='text-align:right'| 7131
| ''[[:d:Q24287035|Sian Pari Huws]]''
|
|
|
|-
| style='text-align:right'| 7132
| ''[[:d:Q24287039|Derec Williams]]''
|
|
|
|-
| style='text-align:right'| 7133
| ''[[:d:Q24287037|Dafydd Parri]]''
|
|
|
|-
| style='text-align:right'| 7134
| ''[[:d:Q24287040|Alvis Richards]]''
|
|
|
|-
| style='text-align:right'| 7135
| ''[[:d:Q24287250|Richard Owens]]''
| [[Coadan:Mr Owen NLW3364287.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7136
| ''[[:d:Q24292009|Sir James Hamlyn-Williams, 3rd Baronet]]''
|
|
|
|-
| style='text-align:right'| 7137
| ''[[:d:Q24300868|Ellis Powell Jones]]''
|
|
|
|-
| style='text-align:right'| 7138
| ''[[:d:Q24334379|Thomas Aneurin Roberts]]''
|
|
|
|-
| style='text-align:right'| 7139
| ''[[:d:Q24339521|Mark Ormrod]]''
|
|
|
|-
| style='text-align:right'| 7140
| ''[[:d:Q24405255|Steffan Lewis]]''
| [[Coadan:Steffan Lewis AM (27555190473).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7141
| ''[[:d:Q24565981|George Poland]]''
|
|
|
|-
| style='text-align:right'| 7142
| ''[[:d:Q24566004|David Jacob Davies]]''
|
|
|
|-
| style='text-align:right'| 7143
| ''[[:d:Q24573112|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 7144
| ''[[:d:Q24578824|William Leonard Baker]]''
|
|
|
|-
| style='text-align:right'| 7145
| ''[[:d:Q24579303|Trevor Grierson]]''
|
|
|
|-
| style='text-align:right'| 7146
| ''[[:d:Q24635388|Gwen ferch Cynyr]]''
|
|
|
|-
| style='text-align:right'| 7147
| ''[[:d:Q24716959|Charlotte Louisa Traherne]]''
|
|
|
|-
| style='text-align:right'| 7148
| ''[[:d:Q24718677|James William Webb-Jones]]''
|
|
|
|-
| style='text-align:right'| 7149
| ''[[:d:Q24735292|Judith Ann Tucker]]''
|
|
|
|-
| style='text-align:right'| 7150
| ''[[:d:Q24845234|Thora Silverthorne]]''
|
|
|
|-
| style='text-align:right'| 7151
| ''[[:d:Q24845632|William Owen]]''
|
|
|
|-
| style='text-align:right'| 7152
| ''[[:d:Q24845633|Bill Parry]]''
|
|
|
|-
| style='text-align:right'| 7153
| ''[[:d:Q24845756|John Williams]]''
|
|
|
|-
| style='text-align:right'| 7154
| ''[[:d:Q24845844|Thomas Foley]]''
| [[Coadan:Thomas Foley - Queensland politician.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7155
| ''[[:d:Q24845876|John Fowke]]''
|
|
|
|-
| style='text-align:right'| 7156
| ''[[:d:Q24963158|Sydney Darvell]]''
|
|
|
|-
| style='text-align:right'| 7157
| ''[[:d:Q24963161|Llewelyn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 7158
| ''[[:d:Q25138514|Johnny Baynham]]''
|
|
|
|-
| style='text-align:right'| 7159
| ''[[:d:Q25171822|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 7160
| ''[[:d:Q25171969|David Evans]]''
|
|
|
|-
| style='text-align:right'| 7161
| ''[[:d:Q25184178|William Hughes]]''
|
|
|
|-
| style='text-align:right'| 7162
| ''[[:d:Q25206942|William Butler]]''
|
|
|
|-
| style='text-align:right'| 7163
| ''[[:d:Q25206940|Arthur Davies]]''
|
|
|
|-
| style='text-align:right'| 7164
| ''[[:d:Q25206941|Jack Butler]]''
|
|
|
|-
| style='text-align:right'| 7165
| ''[[:d:Q25206956|Edward Evelyn]]''
|
|
|
|-
| style='text-align:right'| 7166
| ''[[:d:Q25206962|George Griffiths]]''
| [[Coadan:GeorgeGriffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7167
| ''[[:d:Q25206961|William Green]]''
|
|
|
|-
| style='text-align:right'| 7168
| ''[[:d:Q25206970|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 7169
| ''[[:d:Q25206973|Jack Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7170
| ''[[:d:Q25206987|Gordon Jones]]''
|
|
|
|-
| style='text-align:right'| 7171
| ''[[:d:Q25207019|Arthur Lloyd]]''
|
|
|
|-
| style='text-align:right'| 7172
| ''[[:d:Q25207027|Billy Matthews]]''
|
|
|
|-
| style='text-align:right'| 7173
| ''[[:d:Q25207038|John Neal]]''
|
|
|
|-
| style='text-align:right'| 7174
| ''[[:d:Q25207082|George Williams]]''
|
|
|
|-
| style='text-align:right'| 7175
| ''[[:d:Q25207081|Edwin Williams]]''
|
|
|
|-
| style='text-align:right'| 7176
| ''[[:d:Q25209820|Thomas Lynch]]''
|
|
|
|-
| style='text-align:right'| 7177
| ''[[:d:Q25342380|Mitch Fenner]]''
|
|
|
|-
| style='text-align:right'| 7178
| ''[[:d:Q25353794|Henry Folland]]''
|
|
|
|-
| style='text-align:right'| 7179
| ''[[:d:Q25558258|R. Alun Evans]]''
|
|
|
|-
| style='text-align:right'| 7180
| ''[[:d:Q25558366|Owen Jones Ellis Nanney]]''
|
|
|
|-
| style='text-align:right'| 7181
| ''[[:d:Q25558390|Thomas Pryse]]''
|
|
|
|-
| style='text-align:right'| 7182
| ''[[:d:Q25558389|Dafydd ap Llewelyn Llwyd]]''
|
|
|
|-
| style='text-align:right'| 7183
| ''[[:d:Q25559009|Richard Richards]]''
| [[Coadan:Portrait of Richard Richards (4674581) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7184
| ''[[:d:Q25559026|Tony Lewis]]''
|
|
|
|-
| style='text-align:right'| 7185
| ''[[:d:Q25559048|Richard Vaughan]]''
|
|
|
|-
| style='text-align:right'| 7186
| ''[[:d:Q56181644|Cynric Mytton-Davies]]''
|
|
|
|-
| style='text-align:right'| 7187
| ''[[:d:Q56181657|Robert Richards Nancarrow]]''
|
|
|
|-
| style='text-align:right'| 7188
| ''[[:d:Q56181981|Ann Corbet]]''
|
|
|
|-
| style='text-align:right'| 7189
| ''[[:d:Q56181991|Bryn Owen]]''
|
|
|
|-
| style='text-align:right'| 7190
| ''[[:d:Q56181995|Dillwyn Owen]]''
|
|
|
|-
| style='text-align:right'| 7191
| ''[[:d:Q56182000|Elizabeth Glaslyn Owen]]''
|
|
|
|-
| style='text-align:right'| 7192
| ''[[:d:Q56182032|John Owen]]''
|
|
|
|-
| style='text-align:right'| 7193
| ''[[:d:Q56182063|Morris Owen]]''
|
|
|
|-
| style='text-align:right'| 7194
| ''[[:d:Q56182074|Richard Owen]]''
|
|
|
|-
| style='text-align:right'| 7195
| ''[[:d:Q56182092|Thomas Owen]]''
|
|
|
|-
| style='text-align:right'| 7196
| ''[[:d:Q56182104|William Washington Owen]]''
|
|
|
|-
| style='text-align:right'| 7197
| ''[[:d:Q56182206|Thomas Parker]]''
|
|
|
|-
| style='text-align:right'| 7198
| ''[[:d:Q56182218|John Parry de Winton]]''
|
|
|
|-
| style='text-align:right'| 7199
| ''[[:d:Q56182245|John Parry]]''
|
|
|
|-
| style='text-align:right'| 7200
| ''[[:d:Q56182500|Griffith Phillips]]''
|
|
|
|-
| style='text-align:right'| 7201
| ''[[:d:Q56182741|Gomer Powell]]''
|
|
|
|-
| style='text-align:right'| 7202
| ''[[:d:Q56182952|Richard Watkin Price]]''
| [[Coadan:R. W. Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7203
| ''[[:d:Q56182975|Thomas Lewis Prichard]]''
|
|
|
|-
| style='text-align:right'| 7204
| ''[[:d:Q56182977|Thomas Prichard]]''
|
|
|
|-
| style='text-align:right'| 7205
| ''[[:d:Q56182995|Christine Pritchard]]''
|
|
|
|-
| style='text-align:right'| 7206
| ''[[:d:Q56183029|Gwynydd Pryce]]''
|
|
|
|-
| style='text-align:right'| 7207
| ''[[:d:Q56183042|Absalom Prys]]''
|
|
|
|-
| style='text-align:right'| 7208
| ''[[:d:Q56183051|Arthur Glyn Prys-Jones]]''
|
|
|
|-
| style='text-align:right'| 7209
| ''[[:d:Q56183083|Arthur Pugh]]''
|
|
|
|-
| style='text-align:right'| 7210
| ''[[:d:Q56183088|Idwal Pugh]]''
|
|
|
|-
| style='text-align:right'| 7211
| ''[[:d:Q56183099|David William Pughe]]''
|
|
|
|-
| style='text-align:right'| 7212
| ''[[:d:Q56183116|William Pughe]]''
|
|
|
|-
| style='text-align:right'| 7213
| ''[[:d:Q56183241|Benjamin George Rees]]''
|
|
|
|-
| style='text-align:right'| 7214
| ''[[:d:Q56183249|Enoch Howell Rees]]''
|
|
|
|-
| style='text-align:right'| 7215
| ''[[:d:Q56183264|John Rees]]''
|
|
|
|-
| style='text-align:right'| 7216
| ''[[:d:Q56183286|Richard Rees]]''
|
|
|
|-
| style='text-align:right'| 7217
| ''[[:d:Q56183300|William Rees]]''
|
|
|
|-
| style='text-align:right'| 7218
| ''[[:d:Q56183306|William Rees]]''
|
|
|
|-
| style='text-align:right'| 7219
| ''[[:d:Q56183416|Glyn Rhys]]''
|
|
|
|-
| style='text-align:right'| 7220
| ''[[:d:Q56183496|Jacob Richards]]''
|
|
|
|-
| style='text-align:right'| 7221
| ''[[:d:Q56183503|John Lloyd Richards]]''
|
|
|
|-
| style='text-align:right'| 7222
| ''[[:d:Q56183501|John Dyer Richards]]''
|
|
|
|-
| style='text-align:right'| 7223
| ''[[:d:Q56183513|Owen Richards]]''
|
|
|
|-
| style='text-align:right'| 7224
| ''[[:d:Q56183522|Thomas Richards]]''
|
|
|
|-
| style='text-align:right'| 7225
| ''[[:d:Q56183529|Peter Rickards]]''
|
|
|
|-
| style='text-align:right'| 7226
| ''[[:d:Q56183569|Charles Benson Roberts]]''
|
|
|
|-
| style='text-align:right'| 7227
| ''[[:d:Q56183572|Clive Roberts]]''
|
|
|
|-
| style='text-align:right'| 7228
| ''[[:d:Q56183595|Evan Roberts]]''
|
|
|
|-
| style='text-align:right'| 7229
| ''[[:d:Q56183593|Evan Roberts]]''
| [[Coadan:Evan Roberts, Llandderfel, in his library (1504783).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7230
| ''[[:d:Q56183607|Gwen Rees Roberts]]''
|
|
|
|-
| style='text-align:right'| 7231
| ''[[:d:Q56183604|Griffith Roberts]]''
|
|
|
|-
| style='text-align:right'| 7232
| ''[[:d:Q56183655|Peter Roberts]]''
|
|
|
|-
| style='text-align:right'| 7233
| ''[[:d:Q56183688|Wilbert Lloyd Roberts]]''
|
|
|
|-
| style='text-align:right'| 7234
| ''[[:d:Q56183769|John Rowland]]''
|
|
|
|-
| style='text-align:right'| 7235
| ''[[:d:Q56183866|Richard Ruck]]''
| [[Coadan:RM Ruck standing.png|center|128px]]
|
|
|-
| style='text-align:right'| 7236
| ''[[:d:Q56183864|Mary Anne Ruck]]''
|
|
|
|-
| style='text-align:right'| 7237
| ''[[:d:Q56183978|Roderick Urwick Sayce]]''
|
|
|
|-
| style='text-align:right'| 7238
| ''[[:d:Q56184140|Percy Eynon Smart]]''
|
|
|
|-
| style='text-align:right'| 7239
| ''[[:d:Q56184269|Walter Spurrell]]''
|
|
|
|-
| style='text-align:right'| 7240
| ''[[:d:Q56184489|Henry Studt]]''
|
|
|
|-
| style='text-align:right'| 7241
| ''[[:d:Q56184657|Dora Thatcher]]''
|
|
|
|-
| style='text-align:right'| 7242
| ''[[:d:Q56184743|Benjamin F. Thomas]]''
|
|
|
|-
| style='text-align:right'| 7243
| ''[[:d:Q56184779|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 7244
| ''[[:d:Q56184788|Eddie Thomas]]''
|
|
|
|-
| style='text-align:right'| 7245
| ''[[:d:Q56184810|Hugh Thomas]]''
|
|
|
|-
| style='text-align:right'| 7246
| ''[[:d:Q56184827|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 7247
| ''[[:d:Q56184830|John Thomas]]''
|
|
|
|-
| style='text-align:right'| 7248
| ''[[:d:Q56184856|Nancy Thomas]]''
|
|
|
|-
| style='text-align:right'| 7249
| ''[[:d:Q56184865|Philip Thomas]]''
|
|
|
|-
| style='text-align:right'| 7250
| ''[[:d:Q56184886|Thomas Thomas]]''
|
|
|
|-
| style='text-align:right'| 7251
| ''[[:d:Q56184888|Thomas Thomas]]''
|
|
|
|-
| style='text-align:right'| 7252
| ''[[:d:Q56184894|William Gwynne Stedman Thomas]]''
|
|
|
|-
| style='text-align:right'| 7253
| ''[[:d:Q56185032|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 7254
| ''[[:d:Q56185117|Evan Ungoed-Thomas]]''
|
|
|
|-
| style='text-align:right'| 7255
| ''[[:d:Q56185314|Robert Williams Vaughan]]''
| [[Coadan:Robert Williams Vaughan (1803–1859), Bt (gcf070601).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7256
| ''[[:d:Q56185359|Henry James Vincent]]''
|
|
|
|-
| style='text-align:right'| 7257
| ''[[:d:Q56185440|Daniel Walters]]''
|
|
|
|-
| style='text-align:right'| 7258
| ''[[:d:Q56185447|Moses Walters]]''
|
|
|
|-
| style='text-align:right'| 7259
| ''[[:d:Q56185516|Sarah Watkins]]''
|
|
|
|-
| style='text-align:right'| 7260
| ''[[:d:Q56185761|Thomas Wigley]]''
|
|
|
|-
| style='text-align:right'| 7261
| ''[[:d:Q56185924|David Williams]]''
|
|
|
|-
| style='text-align:right'| 7262
| ''[[:d:Q56186093|Henry Rumsey Williams]]''
|
|
|
|-
| style='text-align:right'| 7263
| ''[[:d:Q56186102|Henry Williams]]''
|
|
|
|-
| style='text-align:right'| 7264
| ''[[:d:Q56186119|Isaac Williams]]''
|
|
|
|-
| style='text-align:right'| 7265
| ''[[:d:Q56186125|John Digain Williams]]''
|
|
|
|-
| style='text-align:right'| 7266
| ''[[:d:Q56186139|John Rhosydd Williams]]''
|
|
|
|-
| style='text-align:right'| 7267
| ''[[:d:Q56186155|John Williams]]''
|
|
|
|-
| style='text-align:right'| 7268
| ''[[:d:Q56186166|Lewis Ambrose Williams]]''
|
|
|
|-
| style='text-align:right'| 7269
| ''[[:d:Q56186189|Morris Thomas Williams]]''
|
|
|
|-
| style='text-align:right'| 7270
| ''[[:d:Q56186223|Richard Williams]]''
|
|
|
|-
| style='text-align:right'| 7271
| ''[[:d:Q56186220|Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 7272
| ''[[:d:Q56186231|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 7273
| ''[[:d:Q56186265|Thomas Wiliems]]''
|
|
|
|-
| style='text-align:right'| 7274
| ''[[:d:Q56186282|William Sylvanus Williams]]''
|
|
|
|-
| style='text-align:right'| 7275
| ''[[:d:Q88468482|Abby Meehan]]''
|
|
|
|-
| style='text-align:right'| 7276
| ''[[:d:Q88471261|Martha Whiteside Williams]]''
|
|
|
|-
| style='text-align:right'| 7277
| ''[[:d:Q89688629|Daniel Jarrett]]''
| [[Coadan:Daniel Jarett Sullivan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7278
| ''[[:d:Q89839749|Robert Knight]]''
|
|
|
|-
| style='text-align:right'| 7279
| ''[[:d:Q89842872|Morgan Jones]]''
|
|
|
|-
| style='text-align:right'| 7280
| ''[[:d:Q89891226|John Downing]]''
|
|
|
|-
| style='text-align:right'| 7281
| ''[[:d:Q90688233|Keith Harrhy Ruddock]]''
|
|
|
|-
| style='text-align:right'| 7282
| ''[[:d:Q90908939|Marjorie Mallik]]''
|
|
|
|-
| style='text-align:right'| 7283
| ''[[:d:Q91350809|Gwyn Rowley]]''
|
|
|
|-
| style='text-align:right'| 7284
| ''[[:d:Q92026186|John Hughes (Idanfryn)]]''
|
|
|
|-
| style='text-align:right'| 7285
| ''[[:d:Q93130781|Percy Farrant]]''
|
|
|
|-
| style='text-align:right'| 7286
| ''[[:d:Q93148214|Barrie Rees]]''
|
|
|
|-
| style='text-align:right'| 7287
| ''[[:d:Q93231829|J. Heywood Thomas]]''
|
|
|
|-
| style='text-align:right'| 7288
| ''[[:d:Q93232204|James Stanley McQuade]]''
|
|
|
|-
| style='text-align:right'| 7289
| ''[[:d:Q93372127|Martin J. Haigh]]''
|
|
|
|-
| style='text-align:right'| 7290
| ''[[:d:Q93413854|Glyn O. Phillips]]''
|
|
|
|-
| style='text-align:right'| 7291
| ''[[:d:Q93450444|George A. Jeffrey]]''
|
|
|
|-
| style='text-align:right'| 7292
| ''[[:d:Q93462296|Benjamin Watkins]]''
|
|
|
|-
| style='text-align:right'| 7293
| ''[[:d:Q94102329|Valerie Miles]]''
|
|
|
|-
| style='text-align:right'| 7294
| ''[[:d:Q94349890|Keith Lyons]]''
| [[Coadan:Keith Lyons.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7295
| ''[[:d:Q94379750|Edith Massey]]''
|
|
|
|-
| style='text-align:right'| 7296
| ''[[:d:Q94379751|Gwenddolen Massey]]''
|
|
|
|-
| style='text-align:right'| 7297
| ''[[:d:Q94407795|Ivor Griffith]]''
|
|
|
|-
| style='text-align:right'| 7298
| ''[[:d:Q94502283|Caradoc Jones]]''
|
|
|
|-
| style='text-align:right'| 7299
| ''[[:d:Q94518563|W. Evans Darby]]''
|
|
|
|-
| style='text-align:right'| 7300
| ''[[:d:Q94534761|Fred Jones]]''
|
|
|
|-
| style='text-align:right'| 7301
| ''[[:d:Q94641829|David Edwards]]''
|
|
|
|-
| style='text-align:right'| 7302
| ''[[:d:Q94665402|William Cooper Howells]]''
|
|
|
|-
| style='text-align:right'| 7303
| ''[[:d:Q94813036|Thomas Job]]''
|
|
|
|-
| style='text-align:right'| 7304
| ''[[:d:Q94831390|Wilhelm Körner]]''
|
|
|
|-
| style='text-align:right'| 7305
| ''[[:d:Q95000156|Eliza Harris]]''
|
|
|
|-
| style='text-align:right'| 7306
| ''[[:d:Q95466885|Sadie Allen]]''
|
|
|
|-
| style='text-align:right'| 7307
| ''[[:d:Q95636791|Cen Williams]]''
| [[Coadan:Cen Williams (Dylunydd).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7308
| ''[[:d:Q95676245|Myriel Irfona Davies]]''
|
|
|
|-
| style='text-align:right'| 7309
| ''[[:d:Q95778606|Ernest Walter]]''
|
|
|
|-
| style='text-align:right'| 7310
| ''[[:d:Q95838349|J. M. W. Bean]]''
|
|
|
|-
| style='text-align:right'| 7311
| ''[[:d:Q95850874|Timothy Moores]]''
|
|
|
|-
| style='text-align:right'| 7312
| ''[[:d:Q96004521|Elizabeth Stack]]''
| [[Coadan:Elizabeth Stack nee Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7313
| ''[[:d:Q96016290|Humphrey Stanley Herbert Jones]]''
|
|
|
|-
| style='text-align:right'| 7314
| ''[[:d:Q96021277|John Scarrott]]''
| [[Coadan:'Jack Scarrott' Boxing promoter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7315
| ''[[:d:Q96050319|Stephen Carkeek]]''
| [[Coadan:Stephen James Carkeek c 1865.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7316
| ''[[:d:Q96064938|Eric Sixsmith]]''
|
|
|
|-
| style='text-align:right'| 7317
| ''[[:d:Q96066729|Leslie Shepherd]]''
|
|
|
|-
| style='text-align:right'| 7318
| ''[[:d:Q96083035|Richard Morris]]''
|
|
|
|-
| style='text-align:right'| 7319
| ''[[:d:Q96196503|Thomas Craven]]''
|
|
|
|-
| style='text-align:right'| 7320
| ''[[:d:Q96199382|Griffith Bowen]]''
|
|
|
|-
| style='text-align:right'| 7321
| ''[[:d:Q96202788|Thomas Bowen Rees]]''
|
|
|
|-
| style='text-align:right'| 7322
| ''[[:d:Q96204787|William Thomas]]''
| [[Coadan:William Thomas statue, Swansea.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7323
| ''[[:d:Q96244279|Captain Thomas Yale]]''
|
|
|
|-
| style='text-align:right'| 7324
| ''[[:d:Q96349090|Ethel Saxon]]''
|
|
|
|-
| style='text-align:right'| 7325
| ''[[:d:Q96603547|John Cadwalader]]''
|
|
|
|-
| style='text-align:right'| 7326
| ''[[:d:Q96655359|Myrddin John]]''
| [[Coadan:Llun MJ.png|center|128px]]
|
|
|-
| style='text-align:right'| 7327
| ''[[:d:Q96686922|Cyril Edward Hughes Davies]]''
|
|
|
|-
| style='text-align:right'| 7328
| ''[[:d:Q96754122|Martha Griffith Tallman]]''
|
|
|
|-
| style='text-align:right'| 7329
| ''[[:d:Q96886219|Ian Willmore]]''
| [[Coadan:Ian Willmore portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7330
| ''[[:d:Q97002354|Jeannette Lowrie]]''
| [[Coadan:Jeannette Lowrie, stage and vaudeville actress (SAYRE 5507) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7331
| ''[[:d:Q97047137|David A. Evans]]''
|
|
|
|-
| style='text-align:right'| 7332
| ''[[:d:Q97065347|Garth Lean]]''
|
|
|
|-
| style='text-align:right'| 7333
| ''[[:d:Q97066423|Watkin Lewis Griffies-Williams, 3rd Baronet]]''
|
|
|
|-
| style='text-align:right'| 7334
| ''[[:d:Q97192335|James Williams]]''
|
|
|
|-
| style='text-align:right'| 7335
| ''[[:d:Q97302253|John Edward Walker]]''
|
|
|
|-
| style='text-align:right'| 7336
| ''[[:d:Q97307833|Paul Grist]]''
|
|
|
|-
| style='text-align:right'| 7337
| ''[[:d:Q97361474|Reginald Ford]]''
|
|
|
|-
| style='text-align:right'| 7338
| ''[[:d:Q97453097|Derek Boote]]''
|
|
|
|-
| style='text-align:right'| 7339
| ''[[:d:Q97453295|William Thomas David]]''
|
|
|
|-
| style='text-align:right'| 7340
| ''[[:d:Q97500250|Ralph Turner]]''
|
|
|
|-
| style='text-align:right'| 7341
| ''[[:d:Q97515198|William Henry Smith]]''
| [[Coadan:William Henry Sedley-Smith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7342
| ''[[:d:Q97516507|Paul du Feu]]''
|
|
|
|-
| style='text-align:right'| 7343
| ''[[:d:Q97531979|Mary Bowen]]''
|
|
|
|-
| style='text-align:right'| 7344
| ''[[:d:Q97564245|Dafydd Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 7345
| ''[[:d:Q97579262|Peter Hope Jones]]''
|
|
|
|-
| style='text-align:right'| 7346
| ''[[:d:Q97628029|Jacob Rees]]''
|
|
|
|-
| style='text-align:right'| 7347
| ''[[:d:Q97657068|Albert Powell]]''
|
|
|
|-
| style='text-align:right'| 7348
| ''[[:d:Q97657108|Fred Jones]]''
|
|
|
|-
| style='text-align:right'| 7349
| ''[[:d:Q97696565|John Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 7350
| ''[[:d:Q97817249|H. Harford Williams]]''
|
|
|
|-
| style='text-align:right'| 7351
| ''[[:d:Q97837328|Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 7352
| ''[[:d:Q97860783|Charlie Smith]]''
|
|
|
|-
| style='text-align:right'| 7353
| ''[[:d:Q97949525|Rod Williams]]''
|
|
|
|-
| style='text-align:right'| 7354
| ''[[:d:Q98078703|Hilda Wilson]]''
| [[Coadan:Hilda Wilson.png|center|128px]]
|
|
|-
| style='text-align:right'| 7355
| ''[[:d:Q98185610|Richard Charles]]''
|
|
|
|-
| style='text-align:right'| 7356
| ''[[:d:Q98208516|Gwyn Jones Francis]]''
|
|
|
|-
| style='text-align:right'| 7357
| ''[[:d:Q98380225|Claire Robertson]]''
|
|
|
|-
| style='text-align:right'| 7358
| ''[[:d:Q98399836|Rebecca Owen]]''
|
|
|
|-
| style='text-align:right'| 7359
| ''[[:d:Q98479345|John Crandon Gridley]]''
|
|
|
|-
| style='text-align:right'| 7360
| ''[[:d:Q98707343|R. Mansell Prothero]]''
|
|
|
|-
| style='text-align:right'| 7361
| ''[[:d:Q98803946|Emrys Jones]]''
| [[Coadan:Emrys Jones aboard 'Canadusa' at Waterways -- Jones INS-331 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7362
| ''[[:d:Q98899882|Richie Thomas]]''
| [[Coadan:Tenor Richie Thomas (1464767).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7363
| ''[[:d:Q98917019|Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 7364
| ''[[:d:Q98926499|Vashon Baker]]''
|
|
|
|-
| style='text-align:right'| 7365
| ''[[:d:Q98926785|Joseph Baker]]''
|
|
|
|-
| style='text-align:right'| 7366
| ''[[:d:Q98930729|Brian Bluck]]''
| [[Coadan:Brian Bluck.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7367
| ''[[:d:Q99308880|Stewart Buckle Carne Ross]]''
|
|
|
|-
| style='text-align:right'| 7368
| ''[[:d:Q99335237|Stephen Banister]]''
|
|
|
|-
| style='text-align:right'| 7369
| ''[[:d:Q100285075|W. H. Sherwood Roberts]]''
|
|
|
|-
| style='text-align:right'| 7370
| ''[[:d:Q100396308|Ken Messer]]''
|
|
|
|-
| style='text-align:right'| 7371
| ''[[:d:Q100605823|Harry Ridley]]''
|
|
|
|-
| style='text-align:right'| 7372
| ''[[:d:Q100805872|Allen Phillips Griffiths]]''
|
|
|
|-
| style='text-align:right'| 7373
| ''[[:d:Q100809426|Archibald Sparke]]''
|
|
|
|-
| style='text-align:right'| 7374
| ''[[:d:Q111722537|Roland Thorne]]''
|
|
|
|-
| style='text-align:right'| 7375
| ''[[:d:Q111737125|Thomas William Llynfi Davies]]''
|
|
|
|-
| style='text-align:right'| 7376
| ''[[:d:Q111746342|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 7377
| ''[[:d:Q111746468|Timothy Thomas]]''
|
|
|
|-
| style='text-align:right'| 7378
| ''[[:d:Q111746490|William Harris]]''
|
|
|
|-
| style='text-align:right'| 7379
| ''[[:d:Q111746832|David Bateman]]''
|
|
|
|-
| style='text-align:right'| 7380
| ''[[:d:Q111746897|Thomas Edwardes]]''
|
|
|
|-
| style='text-align:right'| 7381
| ''[[:d:Q111747123|Lewis Thomas Rowland]]''
|
|
|
|-
| style='text-align:right'| 7382
| ''[[:d:Q111747463|Richard Abbott Jones]]''
|
|
|
|-
| style='text-align:right'| 7383
| ''[[:d:Q111751380|Peter Gordon Watson]]''
|
|
|
|-
| style='text-align:right'| 7384
| ''[[:d:Q111819745|John Gwyddno Williams]]''
| [[Coadan:J Gwyddno Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7385
| ''[[:d:Q111832054|Morgan Rice James]]''
|
|
|
|-
| style='text-align:right'| 7386
| ''[[:d:Q111832613|Eliphaz Watkin Morgan]]''
|
|
|
|-
| style='text-align:right'| 7387
| ''[[:d:Q111832695|Effie Spurrell]]''
|
|
|
|-
| style='text-align:right'| 7388
| ''[[:d:Q111859674|Andrew Bond Phipson]]''
|
|
|
|-
| style='text-align:right'| 7389
| ''[[:d:Q111869544|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 7390
| ''[[:d:Q111912514|Edward David James]]''
|
|
|
|-
| style='text-align:right'| 7391
| ''[[:d:Q111913876|John Albert Alexander Williams]]''
|
|
|
|-
| style='text-align:right'| 7392
| ''[[:d:Q111914446|Laura Parry]]''
|
|
|
|-
| style='text-align:right'| 7393
| ''[[:d:Q111916128|John Evans]]''
|
|
|
|-
| style='text-align:right'| 7394
| ''[[:d:Q111916310|Morgan Lewis]]''
|
|
|
|-
| style='text-align:right'| 7395
| ''[[:d:Q111936538|Thomas Woodward]]''
|
|
|
|-
| style='text-align:right'| 7396
| ''[[:d:Q111956292|Jude Howell]]''
|
|
|
|-
| style='text-align:right'| 7397
| ''[[:d:Q111972996|William Wynn Jones]]''
|
|
|
|-
| style='text-align:right'| 7398
| ''[[:d:Q111974082|Edward Rumsey Williams]]''
|
|
|
|-
| style='text-align:right'| 7399
| ''[[:d:Q111975531|John Hathren Davies]]''
|
|
|
|-
| style='text-align:right'| 7400
| ''[[:d:Q111975864|John Bevan Jones]]''
|
|
|
|-
| style='text-align:right'| 7401
| ''[[:d:Q111976039|William Pugh]]''
|
|
|
|-
| style='text-align:right'| 7402
| ''[[:d:Q111976622|Charles Lloyd]]''
|
|
|
|-
| style='text-align:right'| 7403
| ''[[:d:Q111983251|John Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7404
| ''[[:d:Q111983824|F. W. Dunning]]''
|
|
|
|-
| style='text-align:right'| 7405
| ''[[:d:Q111985983|Thomas Hevin Williams]]''
|
|
|
|-
| style='text-align:right'| 7406
| ''[[:d:Q111986142|Henry Wynne Jones]]''
|
|
|
|-
| style='text-align:right'| 7407
| ''[[:d:Q111986753|William Rees]]''
|
|
|
|-
| style='text-align:right'| 7408
| ''[[:d:Q111995663|Francis Gordon Baker]]''
|
|
|
|-
| style='text-align:right'| 7409
| ''[[:d:Q112041592|David Goronwy Griffiths]]''
|
|
|
|-
| style='text-align:right'| 7410
| ''[[:d:Q112041644|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 7411
| ''[[:d:Q112063783|David Henry Williams]]''
|
|
|
|-
| style='text-align:right'| 7412
| ''[[:d:Q112064153|Morgan Evans Davies]]''
|
|
|
|-
| style='text-align:right'| 7413
| ''[[:d:Q112064238|Thomas Hubert John Rees]]''
|
|
|
|-
| style='text-align:right'| 7414
| ''[[:d:Q112065060|William Hibbs Bevan]]''
|
|
|
|-
| style='text-align:right'| 7415
| ''[[:d:Q112065107|Griffith Williams Jones]]''
|
|
|
|-
| style='text-align:right'| 7416
| ''[[:d:Q112074369|Gwilym Pugh]]''
|
|
|
|-
| style='text-align:right'| 7417
| ''[[:d:Q112078599|John Owen]]''
|
|
|
|-
| style='text-align:right'| 7418
| ''[[:d:Q112079324|Lewis Griffith Roberts]]''
|
|
|
|-
| style='text-align:right'| 7419
| ''[[:d:Q112080083|John Lloyd Nuttall]]''
|
|
|
|-
| style='text-align:right'| 7420
| ''[[:d:Q112080160|Oswald Rees Owen]]''
|
|
|
|-
| style='text-align:right'| 7421
| ''[[:d:Q112080183|Owen Davies Thomas]]''
|
|
|
|-
| style='text-align:right'| 7422
| ''[[:d:Q112080194|John Davies]]''
|
|
|
|-
| style='text-align:right'| 7423
| ''[[:d:Q112080260|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 7424
| ''[[:d:Q112115299|Arthur Rhys Roberts]]''
|
|
|
|-
| style='text-align:right'| 7425
| ''[[:d:Q112116356|George Baker]]''
|
|
|
|-
| style='text-align:right'| 7426
| ''[[:d:Q112119470|John Williams]]''
|
|
|
|-
| style='text-align:right'| 7427
| ''[[:d:Q112119851|Abel Edmunds]]''
|
|
|
|-
| style='text-align:right'| 7428
| ''[[:d:Q112126488|Caradog Tegid Rowlands]]''
|
|
|
|-
| style='text-align:right'| 7429
| ''[[:d:Q112127551|William Jones]]''
|
|
|
|-
| style='text-align:right'| 7430
| ''[[:d:Q112127710|Robert Cadwaladr Evans]]''
|
|
|
|-
| style='text-align:right'| 7431
| ''[[:d:Q112127814|Hugh Edwards]]''
|
|
|
|-
| style='text-align:right'| 7432
| ''[[:d:Q112127857|Abednego Jenkin]]''
|
|
|
|-
| style='text-align:right'| 7433
| ''[[:d:Q112128015|William Caradog Evans]]''
|
|
|
|-
| style='text-align:right'| 7434
| ''[[:d:Q112128209|John Saunders]]''
|
|
|
|-
| style='text-align:right'| 7435
| ''[[:d:Q112132303|Walter Hugh James]]''
|
|
|
|-
| style='text-align:right'| 7436
| ''[[:d:Q112132334|David William Bateman]]''
|
|
|
|-
| style='text-align:right'| 7437
| ''[[:d:Q112132378|Job Richards]]''
|
|
|
|-
| style='text-align:right'| 7438
| ''[[:d:Q112132441|Henry Howard Evans]]''
|
|
|
|-
| style='text-align:right'| 7439
| ''[[:d:Q112132478|Evan Isaac Thomas]]''
|
|
|
|-
| style='text-align:right'| 7440
| ''[[:d:Q112132605|David Davies]]''
|
|
|
|-
| style='text-align:right'| 7441
| ''[[:d:Q112135582|Dyfrig Evans]]''
|
|
|
|-
| style='text-align:right'| 7442
| ''[[:d:Q112147144|Thomas John Williams]]''
|
|
|
|-
| style='text-align:right'| 7443
| ''[[:d:Q112224866|Abram Owen Thomas]]''
|
|
|
|-
| style='text-align:right'| 7444
| ''[[:d:Q112355680|Huw Roland Jones]]''
|
|
|
|-
| style='text-align:right'| 7445
| ''[[:d:Q112359830|Mark Sproule-Jones]]''
|
|
|
|-
| style='text-align:right'| 7446
| ''[[:d:Q112384154|Peter Lowe]]''
|
|
|
|-
| style='text-align:right'| 7447
| ''[[:d:Q112471825|Clifford Naunton Morgan]]''
|
|
|
|-
| style='text-align:right'| 7448
| ''[[:d:Q112474545|Robin Okey]]''
|
|
|
|-
| style='text-align:right'| 7449
| ''[[:d:Q112518439|Jeffrey Huw Williams]]''
|
|
|
|-
| style='text-align:right'| 7450
| ''[[:d:Q112519032|John C. Rodda]]''
|
|
|
|-
| style='text-align:right'| 7451
| ''[[:d:Q112552665|David Burns Moffat]]''
|
|
|
|-
| style='text-align:right'| 7452
| ''[[:d:Q112615363|Gwilym Roberts]]''
| [[Coadan:Gwilym Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7453
| ''[[:d:Q112672989|Evan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7454
| ''[[:d:Q112686378|Hugh Beaver Roberts]]''
|
|
|
|-
| style='text-align:right'| 7455
| ''[[:d:Q112947395|William M. Protheroe]]''
|
|
|
|-
| style='text-align:right'| 7456
| ''[[:d:Q112961957|T. W. Allen]]''
|
|
|
|-
| style='text-align:right'| 7457
| ''[[:d:Q113026138|John Davies Thomas]]''
|
|
|
|-
| style='text-align:right'| 7458
| ''[[:d:Q113112197|M. Rosalind Morris]]''
| [[Coadan:Rosalindmorris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7459
| ''[[:d:Q113137714|Harry Owen Roe]]''
|
|
|
|-
| style='text-align:right'| 7460
| ''[[:d:Q113459737|Howard Johns]]''
|
|
|
|-
| style='text-align:right'| 7461
| ''[[:d:Q113510481|Kathleen Mary Williams]]''
|
|
|
|-
| style='text-align:right'| 7462
| ''[[:d:Q113551771|John Prytherch]]''
| [[Coadan:Portrait of John Prytherch (4672676).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7463
| ''[[:d:Q113587569|Arnold Stanley Meara]]''
|
|
|
|-
| style='text-align:right'| 7464
| ''[[:d:Q113660811|John Malcom Cherrett]]''
|
|
|
|-
| style='text-align:right'| 7465
| ''[[:d:Q113680486|John Morgan Edwards]]''
|
|
|
|-
| style='text-align:right'| 7466
| ''[[:d:Q113724684|Thomas Morton]]''
| [[Coadan:Thomas Morton (1829-1887).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7467
| ''[[:d:Q113805746|Dervis Ward]]''
|
|
|
|-
| style='text-align:right'| 7468
| ''[[:d:Q113808080|Colin Cross]]''
|
|
|
|-
| style='text-align:right'| 7469
| ''[[:d:Q113861465|John Davies Bryan]]''
| [[Coadan:John Davies Bryan from O'r Aifft.png|center|128px]]
|
|
|-
| style='text-align:right'| 7470
| ''[[:d:Q114261259|Ceridwen Lloyd Davies]]''
|
|
|
|-
| style='text-align:right'| 7471
| ''[[:d:Q114458166|Rowland Rowland]]''
|
|
|
|-
| style='text-align:right'| 7472
| ''[[:d:Q123762847|Carol Byrne Jones]]''
|
|
|
|-
| style='text-align:right'| 7473
| ''[[:d:Q123974804|Marie Hutcheson]]''
|
|
|
|-
| style='text-align:right'| 7474
| ''[[:d:Q124063038|Frederick Tymms]]''
|
|
|
|-
| style='text-align:right'| 7475
| ''[[:d:Q124219459|Leonard Bailey]]''
|
|
|
|-
| style='text-align:right'| 7476
| ''[[:d:Q124311563|Thomas John Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 7477
| ''[[:d:Q124316906|Gerald Jones]]''
|
|
|
|-
| style='text-align:right'| 7478
| ''[[:d:Q124351152|Terry Adams]]''
|
|
|
|-
| style='text-align:right'| 7479
| ''[[:d:Q124372795|George Francis Evans]]''
|
|
|
|-
| style='text-align:right'| 7480
| ''[[:d:Q124424654|Joshua Philip Turner]]''
|
|
|
|-
| style='text-align:right'| 7481
| ''[[:d:Q124515975|Louisa Beatrice Simmonds]]''
|
|
|
|-
| style='text-align:right'| 7482
| ''[[:d:Q124729090|Dewi Myrddin Hughes]]''
| [[Coadan:Dewi Myrddin Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7483
| ''[[:d:Q124784741|Sir Cecil Day]]''
| [[Coadan:Cecil Day 1925.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7484
| ''[[:d:Q124851999|Lyn Léwis Dafis]]''
|
|
|
|-
| style='text-align:right'| 7485
| ''[[:d:Q124855174|Charles William Jones]]''
| [[Coadan:C. W. Jones portrait.png|center|128px]]
|
|
|-
| style='text-align:right'| 7486
| ''[[:d:Q124864171|John Belle]]''
|
|
|
|-
| style='text-align:right'| 7487
| ''[[:d:Q124986479|John David Francis Jones]]''
|
|
|
|-
| style='text-align:right'| 7488
| ''[[:d:Q125025293|Thomas D. Evans]]''
|
|
|
|-
| style='text-align:right'| 7489
| ''[[:d:Q125121773|Sydney Kingston Gore]]''
| [[Coadan:Lieut Sydney Kingston GORE, 1st Bn Royal West Kent Regiment - geograph.org.uk - 5252748.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7490
| ''[[:d:Q125145904|Thomas George John]]''
|
|
|
|-
| style='text-align:right'| 7491
| ''[[:d:Q125324061|George Rudd Thompson]]''
|
|
|
|-
| style='text-align:right'| 7492
| ''[[:d:Q125398598|Austin Anthony]]''
|
|
|
|-
| style='text-align:right'| 7493
| ''[[:d:Q125510592|Diana Edwards-Jones]]''
|
|
|
|-
| style='text-align:right'| 7494
| ''[[:d:Q125536673|Elizabeth Rhŷs]]''
|
|
|
|-
| style='text-align:right'| 7495
| ''[[:d:Q125575112|Edgar Spooner]]''
|
|
|
|-
| style='text-align:right'| 7496
| ''[[:d:Q125581918|Myra Evans]]''
|
|
|
|-
| style='text-align:right'| 7497
| ''[[:d:Q125593574|Eirian Short]]''
|
|
|
|-
| style='text-align:right'| 7498
| ''[[:d:Q125620979|Muriel Lavender]]''
|
|
|
|-
| style='text-align:right'| 7499
| ''[[:d:Q125621885|Iris Thomas]]''
|
|
|
|-
| style='text-align:right'| 7500
| ''[[:d:Q125622230|J. H. Matthews]]''
|
|
|
|-
| style='text-align:right'| 7501
| ''[[:d:Q125662553|Dave Thomas]]''
|
|
|
|-
| style='text-align:right'| 7502
| ''[[:d:Q125792254|Elvira Gwenllian Payne]]''
|
|
|
|-
| style='text-align:right'| 7503
| ''[[:d:Q125792255|Cyril George Cupid]]''
|
|
|
|-
| style='text-align:right'| 7504
| ''[[:d:Q125792258|John Darwin Hinds]]''
|
|
|
|-
| style='text-align:right'| 7505
| ''[[:d:Q125792263|Ernest Burton]]''
|
|
|
|-
| style='text-align:right'| 7506
| ''[[:d:Q125792267|Myer Cohen]]''
|
|
|
|-
| style='text-align:right'| 7507
| ''[[:d:Q125792264|Neil Sinclair]]''
|
|
|
|-
| style='text-align:right'| 7508
| ''[[:d:Q125792270|Montague Black]]''
|
|
|
|-
| style='text-align:right'| 7509
| ''[[:d:Q125792273|Gene Latter]]''
|
|
|
|-
| style='text-align:right'| 7510
| ''[[:d:Q125792287|James Sapoe John Mannay]]''
|
|
|
|-
| style='text-align:right'| 7511
| ''[[:d:Q125792284|Robert Owen Pugh]]''
|
|
|
|-
| style='text-align:right'| 7512
| ''[[:d:Q125792285|David Rosser-Owen]]''
|
|
|
|-
| style='text-align:right'| 7513
| ''[[:d:Q125792294|Olwen Watkins]]''
|
|
|
|-
| style='text-align:right'| 7514
| ''[[:d:Q125792292|Harold Smart]]''
|
|
|
|-
| style='text-align:right'| 7515
| ''[[:d:Q125792297|Henry Joseph Ernest]]''
|
|
|
|-
| style='text-align:right'| 7516
| ''[[:d:Q125792302|Jane Leonard]]''
|
|
|
|-
| style='text-align:right'| 7517
| ''[[:d:Q125792310|Eliza Pughe]]''
|
|
|
|-
| style='text-align:right'| 7518
| ''[[:d:Q125792314|Manikam Susheela Lourie]]''
|
|
|
|-
| style='text-align:right'| 7519
| ''[[:d:Q125792318|Thomas Charles Jacobsen]]''
|
|
|
|-
| style='text-align:right'| 7520
| ''[[:d:Q125792320|Mavis Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 7521
| ''[[:d:Q125792321|Ceridwen Brown]]''
|
|
|
|-
| style='text-align:right'| 7522
| ''[[:d:Q125792325|Caroline Elizabeth Williams]]''
|
|
|
|-
| style='text-align:right'| 7523
| ''[[:d:Q125948678|David Davies]]''
|
|
|
|-
| style='text-align:right'| 7524
| ''[[:d:Q126010568|Richard Jenkin Ellis]]''
|
|
|
|-
| style='text-align:right'| 7525
| ''[[:d:Q126011056|June Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 7526
| ''[[:d:Q126083187|Hugh Royston Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7527
| ''[[:d:Q126947966|Elined Prys]]''
|
|
|
|-
| style='text-align:right'| 7528
| ''[[:d:Q126993139|John Powell]]''
|
|
|
|-
| style='text-align:right'| 7529
| ''[[:d:Q126993374|John Powell]]''
|
|
|
|-
| style='text-align:right'| 7530
| ''[[:d:Q127684880|David Read]]''
|
|
|
|-
| style='text-align:right'| 7531
| ''[[:d:Q128506365|Oliver Thomas]]''
|
|
|
|-
| style='text-align:right'| 7532
| ''[[:d:Q128847459|Anita Bronson]]''
|
|
|
|-
| style='text-align:right'| 7533
| ''[[:d:Q128934347|Hugh Trollope]]''
|
|
|
|-
| style='text-align:right'| 7534
| ''[[:d:Q128995758|Lilian Jane Mason]]''
|
|
|
|-
| style='text-align:right'| 7535
| ''[[:d:Q129312859|Huw Roberts]]''
|
|
|
|-
| style='text-align:right'| 7536
| ''[[:d:Q129400724|Ian Hamilton Burton]]''
|
|
|
|-
| style='text-align:right'| 7537
| ''[[:d:Q130238909|Charles Herbert George Martin]]''
|
|
|
|-
| style='text-align:right'| 7538
| ''[[:d:Q130259502|Elias Phillips Jones]]''
|
|
|
|-
| style='text-align:right'| 7539
| ''[[:d:Q130259511|Edith Frances Hopkins]]''
|
|
|
|-
| style='text-align:right'| 7540
| ''[[:d:Q130321930|Alfred Seymour Bankart]]''
| [[Coadan:Sir Alfred Bankart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7541
| ''[[:d:Q130327532|Mary Jordan]]''
|
|
|
|-
| style='text-align:right'| 7542
| ''[[:d:Q130355895|John Sutherland]]''
| [[Coadan:John Sutherland ONZM (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7543
| ''[[:d:Q130367283|Edward Davies]]''
|
|
|
|-
| style='text-align:right'| 7544
| ''[[:d:Q130367508|Mary Brittill]]''
| [[Coadan:Portrait of Dame Brettell (4672793).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7545
| ''[[:d:Q130409503|Thomas Foulkes]]''
|
|
|
|-
| style='text-align:right'| 7546
| ''[[:d:Q130453759|Claude Isaac Lewis]]''
|
|
|
|-
| style='text-align:right'| 7547
| ''[[:d:Q130736389|Josey Pillon]]''
|
|
|
|-
| style='text-align:right'| 7548
| ''[[:d:Q130743648|Moss Williams]]''
|
|
|
|-
| style='text-align:right'| 7549
| ''[[:d:Q130921889|Thomas Dempster Jones]]''
|
|
|
|-
| style='text-align:right'| 7550
| ''[[:d:Q130994182|Verlie Blanch George]]''
|
|
|
|-
| style='text-align:right'| 7551
| ''[[:d:Q130994444|John Charles]]''
|
|
|
|-
| style='text-align:right'| 7552
| ''[[:d:Q131142307|Rakhi Singh]]''
|
|
|
|-
| style='text-align:right'| 7553
| ''[[:d:Q131154389|Ifor Bowen Griffith]]''
|
|
|
|-
| style='text-align:right'| 7554
| ''[[:d:Q131278513|James Arthur Davies]]''
|
|
|
|-
| style='text-align:right'| 7555
| ''[[:d:Q131288412|Eleanor Dwyryd]]''
|
|
|
|-
| style='text-align:right'| 7556
| ''[[:d:Q131310255|Arthur John]]''
|
|
|
|-
| style='text-align:right'| 7557
| ''[[:d:Q131323970|Aaron Rees]]''
|
|
|
|-
| style='text-align:right'| 7558
| ''[[:d:Q131323971|Bill Morris]]''
|
|
|
|-
| style='text-align:right'| 7559
| ''[[:d:Q131323969|Trevor Nicholas]]''
|
|
|
|-
| style='text-align:right'| 7560
| ''[[:d:Q131327721|Jim Jones]]''
|
|
|
|-
| style='text-align:right'| 7561
| ''[[:d:Q131342512|Thomas Stanley Thomas]]''
|
|
|
|-
| style='text-align:right'| 7562
| ''[[:d:Q131358247|Diane Tammes]]''
|
|
|
|-
| style='text-align:right'| 7563
| ''[[:d:Q24004668|Tom Hewitt]]''
| [[Coadan:Tom Hewitt Wales International.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7564
| ''[[:d:Q24004669|Arthur Hughes]]''
|
|
|
|-
| style='text-align:right'| 7565
| ''[[:d:Q24004675|John Jones]]''
|
|
|
|-
| style='text-align:right'| 7566
| ''[[:d:Q24004673|Jeffrey Jones]]''
|
|
|
|-
| style='text-align:right'| 7567
| ''[[:d:Q24004678|Tom Williams]]''
|
|
|
|-
| style='text-align:right'| 7568
| ''[[:d:Q24004679|Harold Thomas]]''
|
|
|
|-
| style='text-align:right'| 7569
| ''[[:d:Q24004676|Billy Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7570
| ''[[:d:Q24004680|William Evans]]''
|
|
|
|-
| style='text-align:right'| 7571
| ''[[:d:Q24004693|George Richards]]''
| [[Coadan:George Richards (Welsh Footballer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7572
| ''[[:d:Q131444573|Robert John Davies]]''
| [[Coadan:Caniadau Barlwydon Llyfr 1 (page 4 crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7573
| ''[[:d:Q131538921|Laurie Webb]]''
|
|
|
|-
| style='text-align:right'| 7574
| ''[[:d:Q131546145|Mary Keir]]''
|
|
|
|-
| style='text-align:right'| 7575
| ''[[:d:Q131628715|Harry Douglas Blessley]]''
| [[Coadan:Harry Douglass Blessley (3a).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7576
| ''[[:d:Q131631312|Edward Jenkin Williams]]''
| [[Coadan:Edward Jenkin Williams (2a).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7577
| ''[[:d:Q131685576|Joseph Eaton]]''
|
|
|
|-
| style='text-align:right'| 7578
| ''[[:d:Q131700949|Alice Margaret Evans]]''
|
|
|
|-
| style='text-align:right'| 7579
| ''[[:d:Q22280472|Kingsley Whiffen]]''
|
|
|
|-
| style='text-align:right'| 7580
| ''[[:d:Q22312863|Alfred Daniell]]''
| [[Coadan:Alfred Daniell (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7581
| ''[[:d:Q22443210|Ruth Frankenberg]]''
|
|
|
|-
| style='text-align:right'| 7582
| ''[[:d:Q22583546|Margaret Courtenay]]''
|
|
|
|-
| style='text-align:right'| 7583
| ''[[:d:Q22683128|Tomos Efans]]''
| [[Coadan:Tomos Efans (Cyndelyn).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7584
| ''[[:d:Q22687967|Thomas Thomas]]''
| [[Coadan:Revd Thomas, Landore, Swansea NLW3365348.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7585
| ''[[:d:Q22696572|Owen John]]''
|
|
|
|-
| style='text-align:right'| 7586
| ''[[:d:Q22696579|Gari Williams]]''
| [[Coadan:Rehersals for the pantomime Madog (1544855).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7587
| ''[[:d:Q22696576|Harriet Lewis]]''
|
|
|
|-
| style='text-align:right'| 7588
| ''[[:d:Q22950515|Eirian Llwyd]]''
|
|
|
|-
| style='text-align:right'| 7589
| ''[[:d:Q22958000|Lily Tobias]]''
|
|
|
|-
| style='text-align:right'| 7590
| ''[[:d:Q22962608|Frances Elizabeth Wynne]]''
| [[Coadan:DV307 no.12 On board the Prince Frederick William, Ostend to Dover 25 Aug 1858 detail.png|center|128px]]
|
|
|-
| style='text-align:right'| 7591
| ''[[:d:Q23001673|Thereza Dillwyn Llewelyn]]''
| [[Coadan:Thereza Dillwyn Llewelyn wearing a Bernese (Swiss) Peasant dress (4032154032).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7592
| ''[[:d:Q23002068|Louie Myfanwy Thomas]]''
|
|
|
|-
| style='text-align:right'| 7593
| ''[[:d:Q23020660|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 7594
| ''[[:d:Q23022369|Barbara Hardy]]''
|
|
|
|-
| style='text-align:right'| 7595
| ''[[:d:Q23023009|Ursula Masson]]''
| [[Coadan:Ursula Masson, International Women's Day 2003.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7596
| ''[[:d:Q23047441|Hugh Morgan-Owen]]''
|
|
|
|-
| style='text-align:right'| 7597
| ''[[:d:Q23296584|Michael Farmer]]''
|
|
|
|-
| style='text-align:right'| 7598
| ''[[:d:Q23511510|Catherine Glyn Davies]]''
|
|
|
|-
| style='text-align:right'| 7599
| ''[[:d:Q23582802|William Bowen]]''
| [[Coadan:J. W. Bowen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7600
| ''[[:d:Q23615727|William Field Lloyd]]''
|
|
|
|-
| style='text-align:right'| 7601
| ''[[:d:Q23681098|Llewela Davies]]''
| [[Coadan:Llewela Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7602
| ''[[:d:Q23681122|Mary Wynne Warner]]''
|
|
|
|-
| style='text-align:right'| 7603
| ''[[:d:Q23691969|Louis Hunt]]''
|
|
|
|-
| style='text-align:right'| 7604
| ''[[:d:Q23708558|Elen Egryn]]''
|
|
|
|-
| style='text-align:right'| 7605
| ''[[:d:Q23752368|John Rowlands]]''
| [[Coadan:John Rowlands (Giraldus).png|center|128px]]
|
|
|-
| style='text-align:right'| 7606
| ''[[:d:Q23766046|Mary Elizabeth Phillips]]''
| [[Coadan:THE SCOTTISH WOMEN'S HOSPITALS IN THE MACEDONIAN CAMPAIGN, 1915-1918 Q108186.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7607
| ''[[:d:Q23806561|Mary Penry]]''
|
|
|
|-
| style='text-align:right'| 7608
| ''[[:d:Q23806567|Robert Francis Jenner]]''
|
|
|
|-
| style='text-align:right'| 7609
| ''[[:d:Q23806569|William Aubrey Williams]]''
| [[Coadan:Gwilym Gwent, aka William Aubrey Williams.tiff|center|128px]]
|
|
|-
| style='text-align:right'| 7610
| ''[[:d:Q23822310|Jane Helen Rowlands]]''
|
|
|
|-
| style='text-align:right'| 7611
| ''[[:d:Q23822716|William Bassett]]''
|
|
|
|-
| style='text-align:right'| 7612
| ''[[:d:Q23833023|Lowri Gwilym]]''
|
|
|
|-
| style='text-align:right'| 7613
| ''[[:d:Q23856670|Ellis Pierce]]''
|
|
|
|-
| style='text-align:right'| 7614
| ''[[:d:Q23900939|Ellen Hughes]]''
| [[Coadan:Miss Ellen Hughes, Llanengan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7615
| ''[[:d:Q23900940|Emilia Baeyertz]]''
| [[Coadan:Emilia Baeyertz.png|center|128px]]
|
|
|-
| style='text-align:right'| 7616
| ''[[:d:Q23901617|Tali Esen Morgan]]''
| [[Coadan:TaliEsenMorgan.tiff|center|128px]]
|
|
|-
| style='text-align:right'| 7617
| ''[[:d:Q23913585|Joseph Arthur Hamilton Beresford]]''
|
|
|
|-
| style='text-align:right'| 7618
| ''[[:d:Q23924666|Thomas Roberts]]''
|
|
|
|-
| style='text-align:right'| 7619
| ''[[:d:Q23945387|Brian Andrew Hills]]''
|
|
|
|-
| style='text-align:right'| 7620
| ''[[:d:Q23948107|Richard James Thomas]]''
|
|
|
|-
| style='text-align:right'| 7621
| ''[[:d:Q23948108|George Percival Spooner]]''
|
|
|
|-
| style='text-align:right'| 7622
| ''[[:d:Q23988324|Alfred Weeks Szlumper]]''
| [[Coadan:Alfred Week Szlumper.png|center|128px]]
|
|
|-
| style='text-align:right'| 7623
| ''[[:d:Q23988325|Sara Maria Saunders]]''
|
|
|
|-
| style='text-align:right'| 7624
| ''[[:d:Q23988345|Margaret Townsend Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7625
| ''[[:d:Q23988354|Richard Hersee]]''
|
|
|
|-
| style='text-align:right'| 7626
| ''[[:d:Q23988353|John Edward Davies]]''
|
|
|
|-
| style='text-align:right'| 7627
| ''[[:d:Q23988358|William Roberts Jones]]''
|
|
|
|-
| style='text-align:right'| 7628
| ''[[:d:Q23988356|Richard Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 7629
| ''[[:d:Q23988357|William P. Jones]]''
|
|
|
|-
| style='text-align:right'| 7630
| ''[[:d:Q23988363|Anne Ceridwen Rees]]''
| [[Coadan:Anne Ceridwen Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7631
| ''[[:d:Q23988364|David Morral Lewis]]''
|
|
|
|-
| style='text-align:right'| 7632
| ''[[:d:Q23988390|John Owen Vaughan]]''
|
|
|
|-
| style='text-align:right'| 7633
| ''[[:d:Q23988391|Price White]]''
|
|
|
|-
| style='text-align:right'| 7634
| ''[[:d:Q23988388|Joseph Hudson Turner]]''
|
|
|
|-
| style='text-align:right'| 7635
| ''[[:d:Q23991131|Elvet Collins]]''
|
|
|
|-
| style='text-align:right'| 7636
| ''[[:d:Q23991128|Dai Collier]]''
|
|
|
|-
| style='text-align:right'| 7637
| ''[[:d:Q23991142|John Arthur Eyton-Jones]]''
| [[Coadan:Dr John Arthur Eyton-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7638
| ''[[:d:Q23991140|Fred Dewey]]''
|
|
|
|-
| style='text-align:right'| 7639
| ''[[:d:Q23991147|George Godding]]''
|
|
|
|-
| style='text-align:right'| 7640
| ''[[:d:Q23991144|William Tanat Foulkes]]''
|
|
|
|-
| style='text-align:right'| 7641
| ''[[:d:Q23991152|Uriah Goodwin]]''
|
|
|
|-
| style='text-align:right'| 7642
| ''[[:d:Q23991193|Malcolm Hersee]]''
|
|
|
|-
| style='text-align:right'| 7643
| ''[[:d:Q23991269|Billy Hole]]''
|
|
|
|-
| style='text-align:right'| 7644
| ''[[:d:Q23991334|Abel Hughes]]''
| [[Coadan:Abel-hughes-1894.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7645
| ''[[:d:Q23991354|Iorwerth Hughes]]''
|
|
|
|-
| style='text-align:right'| 7646
| ''[[:d:Q23991373|John Iorweth Hughes]]''
|
|
|
|-
| style='text-align:right'| 7647
| ''[[:d:Q23991396|Jack Humphreys]]''
|
|
|
|-
| style='text-align:right'| 7648
| ''[[:d:Q23991430|Reuben Humphreys]]''
|
|
|
|-
| style='text-align:right'| 7649
| ''[[:d:Q23991651|Mal Lucas]]''
|
|
|
|-
| style='text-align:right'| 7650
| ''[[:d:Q23991663|Tudor Martin]]''
|
|
|
|-
| style='text-align:right'| 7651
| ''[[:d:Q23991660|Bert Lumberg]]''
|
|
|
|-
| style='text-align:right'| 7652
| ''[[:d:Q23991670|Ernie Morley]]''
|
|
|
|-
| style='text-align:right'| 7653
| ''[[:d:Q23991668|Harry Millership]]''
|
|
|
|-
| style='text-align:right'| 7654
| ''[[:d:Q23991674|Albert Pryce-Jones]]''
|
|
|
|-
| style='text-align:right'| 7655
| ''[[:d:Q23991675|William Pryce-Jones]]''
| [[Coadan:W E Pryce-Jones Newtown 1895.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7656
| ''[[:d:Q23991682|Herbert Sisson]]''
|
|
|
|-
| style='text-align:right'| 7657
| ''[[:d:Q23991683|Sid Thomas]]''
|
|
|
|-
| style='text-align:right'| 7658
| ''[[:d:Q23991681|Frank Scrine]]''
|
|
|
|-
| style='text-align:right'| 7659
| ''[[:d:Q23991687|Harry Trainer]]''
| [[Coadan:Harry Trainer in 1896.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7660
| ''[[:d:Q23991688|Jim Vaughan]]''
|
|
|
|-
| style='text-align:right'| 7661
| ''[[:d:Q23991689|Alfred Ernest Watkins]]''
|
|
|
|-
| style='text-align:right'| 7662
| ''[[:d:Q23991695|George Woosnam]]''
|
|
|
|-
| style='text-align:right'| 7663
| ''[[:d:Q24004546|Wendy Williams]]''
|
|
|
|-
| style='text-align:right'| 7664
| ''[[:d:Q24004608|Margaret Phillips]]''
| [[Coadan:Margaret Phillips in Tales of Tomorrow (The Evil Within).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7665
| ''[[:d:Q24004662|Fred Cook]]''
|
|
|
|-
| style='text-align:right'| 7666
| ''[[:d:Q24004663|Charles Edwards]]''
|
|
|
|-
| style='text-align:right'| 7667
| ''[[:d:Q24004660|Edward Bowen]]''
|
|
|
|-
| style='text-align:right'| 7668
| ''[[:d:Q24004664|Henry Edwards]]''
|
|
|
|-
| style='text-align:right'| 7669
| ''[[:d:Q24004671|Albert Jones]]''
|
|
|
|-
| style='text-align:right'| 7670
| ''[[:d:Q65923146|Charles H. Williams]]''
|
|
|
|-
| style='text-align:right'| 7671
| ''[[:d:Q25753062|Reginald Wynn Owen]]''
|
|
|
|-
| style='text-align:right'| 7672
| ''[[:d:Q25824295|John S. Davies]]''
| [[Coadan:P1040167 crop (cropped) - John S. Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7673
| ''[[:d:Q26000446|Sir Edward Pryce-Jones, 1st Baronet]]''
| [[Coadan:Edward-Pryce-Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7674
| ''[[:d:Q26156061|Tecwyn Ellis]]''
|
|
|
|-
| style='text-align:right'| 7675
| ''[[:d:Q26208288|Evan Richards]]''
| [[Coadan:Evan Mathew Richards AS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7676
| ''[[:d:Q26213540|Sioned James]]''
|
|
|
|-
| style='text-align:right'| 7677
| ''[[:d:Q26265397|David Morris]]''
|
|
|
|-
| style='text-align:right'| 7678
| ''[[:d:Q26271764|William Morris]]''
|
|
|
|-
| style='text-align:right'| 7679
| ''[[:d:Q26289884|James Price William Gwynne-Holford]]''
|
|
|
|-
| style='text-align:right'| 7680
| ''[[:d:Q26696072|John Evans]]''
|
|
|
|-
| style='text-align:right'| 7681
| ''[[:d:Q26702229|Cecily Mackworth]]''
|
|
|
|-
| style='text-align:right'| 7682
| ''[[:d:Q26702755|Richard Squance]]''
|
|
|
|-
| style='text-align:right'| 7683
| ''[[:d:Q26727497|Olwen Brogan]]''
|
|
|
|-
| style='text-align:right'| 7684
| ''[[:d:Q26754461|Arthur Davies]]''
|
|
|
|-
| style='text-align:right'| 7685
| ''[[:d:Q26769421|John Henry Williams]]''
|
|
|
|-
| style='text-align:right'| 7686
| ''[[:d:Q26809927|Pryce Lewis]]''
| [[Coadan:Pryce Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7687
| ''[[:d:Q26818595|Gwenllian Davies]]''
|
|
|
|-
| style='text-align:right'| 7688
| ''[[:d:Q26838630|David Baynham]]''
|
|
|
|-
| style='text-align:right'| 7689
| ''[[:d:Q26882238|Peter Edwards]]''
|
|
|
|-
| style='text-align:right'| 7690
| ''[[:d:Q26970843|William Trevor Anthony]]''
|
|
|
|-
| style='text-align:right'| 7691
| ''[[:d:Q26985252|Frederick Kynaston Barnes]]''
|
|
|
|-
| style='text-align:right'| 7692
| ''[[:d:Q27044313|Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 7693
| ''[[:d:Q27062496|Audrey Williams]]''
|
|
|
|-
| style='text-align:right'| 7694
| ''[[:d:Q27064081|Phyllis Linton]]''
|
|
|
|-
| style='text-align:right'| 7695
| ''[[:d:Q27106535|Gerard Storm]]''
| [[Coadan:Gerard Storm (1974).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7696
| ''[[:d:Q27460689|Cyril Percival]]''
|
|
|
|-
| style='text-align:right'| 7697
| ''[[:d:Q27491504|T. Rees Thomas]]''
|
|
|
|-
| style='text-align:right'| 7698
| ''[[:d:Q27553597|Elen Roger Jones]]''
| [[Coadan:Elen Roger Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7699
| ''[[:d:Q27661910|Harry Toft]]''
|
|
|
|-
| style='text-align:right'| 7700
| ''[[:d:Q27824216|Thomas Buckland]]''
|
|
|
|-
| style='text-align:right'| 7701
| ''[[:d:Q27825483|Sir Richard Price Puleston, 1st Baronet]]''
|
|
|
|-
| style='text-align:right'| 7702
| ''[[:d:Q27861839|Gareth Powell]]''
| [[Coadan:Gareth Powell, British-born Australian publisher, journalist, author, and editor, 1967.png|center|128px]]
|
|
|-
| style='text-align:right'| 7703
| ''[[:d:Q27861969|Henry Morris Pryce-Jones]]''
|
|
|
|-
| style='text-align:right'| 7704
| ''[[:d:Q27876622|Frances Môn Jones]]''
|
|
|
|-
| style='text-align:right'| 7705
| ''[[:d:Q27876643|Dora Herbert Jones]]''
|
|
|
|-
| style='text-align:right'| 7706
| ''[[:d:Q27922155|Ernest William Jones]]''
|
|
|
|-
| style='text-align:right'| 7707
| ''[[:d:Q27922515|Michael Forrest]]''
|
|
|
|-
| style='text-align:right'| 7708
| ''[[:d:Q27967959|William Roberts]]''
| [[Coadan:Nefydd (William Roberts).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7709
| ''[[:d:Q27970129|Owen John Owen]]''
|
|
|
|-
| style='text-align:right'| 7710
| ''[[:d:Q27971201|John Phillips]]''
|
|
|
|-
| style='text-align:right'| 7711
| ''[[:d:Q27971230|John Pugh]]''
|
|
|
|-
| style='text-align:right'| 7712
| ''[[:d:Q27972098|Hugh Williams]]''
| [[Coadan:Portrait of Cadfan (4671203).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7713
| ''[[:d:Q27972899|Roger Howells]]''
|
|
|
|-
| style='text-align:right'| 7714
| ''[[:d:Q27972897|Rosemary Barrow]]''
|
|
|
|-
| style='text-align:right'| 7715
| ''[[:d:Q27982248|Billy James]]''
|
|
|
|-
| style='text-align:right'| 7716
| ''[[:d:Q27995652|Philip Archibald Gibbs]]''
|
|
|
|-
| style='text-align:right'| 7717
| ''[[:d:Q28003067|Betty Campbell]]''
| [[Coadan:Betty Campbell head 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7718
| ''[[:d:Q28011841|John Ralph Michell]]''
|
|
|
|-
| style='text-align:right'| 7719
| ''[[:d:Q28024777|John Price]]''
| [[Coadan:Jack Price BC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7720
| ''[[:d:Q28026597|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 7721
| ''[[:d:Q28028557|Paul Panton]]''
|
|
|
|-
| style='text-align:right'| 7722
| ''[[:d:Q28035448|Cecil Smith]]''
|
|
|
|-
| style='text-align:right'| 7723
| ''[[:d:Q28043251|Rachel Owen]]''
|
|
|
|-
| style='text-align:right'| 7724
| ''[[:d:Q28044426|Mary Grierson]]''
|
|
|
|-
| style='text-align:right'| 7725
| ''[[:d:Q28045011|Terry James]]''
|
|
|
|-
| style='text-align:right'| 7726
| ''[[:d:Q131740105|George Ellis]]''
|
|
|
|-
| style='text-align:right'| 7727
| ''[[:d:Q131749206|Walter Vaughan]]''
|
|
|
|-
| style='text-align:right'| 7728
| ''[[:d:Q131915214|John Matthew Jones]]''
|
|
|
|-
| style='text-align:right'| 7729
| ''[[:d:Q131915215|Zoe Hunter]]''
|
|
|
|-
| style='text-align:right'| 7730
| ''[[:d:Q132052207|Sylvia Gyde]]''
|
|
|
|-
| style='text-align:right'| 7731
| ''[[:d:Q132175478|Roger Hopkins]]''
|
|
|
|-
| style='text-align:right'| 7732
| ''[[:d:Q132179728|Ainsleigh Davies]]''
|
|
|
|-
| style='text-align:right'| 7733
| ''[[:d:Q132467967|Thomas J. Egan]]''
|
|
|
|-
| style='text-align:right'| 7734
| ''[[:d:Q133056096|Hirwen Jones]]''
|
|
|
|-
| style='text-align:right'| 7735
| ''[[:d:Q133215137|William P. Hutchins]]''
|
|
|
|-
| style='text-align:right'| 7736
| ''[[:d:Q133269721|Selwyn Williams]]''
| [[Coadan:Selwyn Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7737
| ''[[:d:Q133289691|Maggie Eisner]]''
|
|
|
|-
| style='text-align:right'| 7738
| ''[[:d:Q133460164|Lucy Dickenson]]''
|
|
|
|-
| style='text-align:right'| 7739
| ''[[:d:Q133592243|Charles Stuart Murrell]]''
|
|
|
|-
| style='text-align:right'| 7740
| ''[[:d:Q133771731|Timothy Lewis]]''
|
|
|
|-
| style='text-align:right'| 7741
| ''[[:d:Q133836929|Joseph Abraham Douglas]]''
|
|
|
|-
| style='text-align:right'| 7742
| ''[[:d:Q133932953|John Evans]]''
|
|
|
|-
| style='text-align:right'| 7743
| ''[[:d:Q133933489|David Jones]]''
| [[Coadan:Revd David Jones (Druisyn, 1840-1902) NLW3363086.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7744
| ''[[:d:Q133933910|Methuselah Thomas]]''
|
|
|
|-
| style='text-align:right'| 7745
| ''[[:d:Q134008614|Edith Penissa Wills]]''
|
|
|
|-
| style='text-align:right'| 7746
| ''[[:d:Q134028629|Jonah Roberts]]''
|
|
|
|-
| style='text-align:right'| 7747
| ''[[:d:Q134028852|Richard Mawddwy Jones]]''
| [[Coadan:Revd R Mawddwy Jones NLW3365332.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7748
| ''[[:d:Q134029200|Hugh James]]''
| [[Coadan:Revd Hugh James, Llansanffraid-ym-Mechain (1809-75) NLW3365290.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7749
| ''[[:d:Q134029286|David Cadfwlch Davies]]''
| [[Coadan:Revd Cadfwlch Davies, St Clears NLW3365286.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7750
| ''[[:d:Q134041160|Samuel Edwards]]''
| [[Coadan:Revd S Edwards, Machynlleth (1867) NLW3365285.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7751
| ''[[:d:Q134043914|David Oliver]]''
| [[Coadan:Revd D Oliver, Twrgwyn (CM) NLW3365257.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7752
| ''[[:d:Q134045431|John Charles Evans]]''
| [[Coadan:Revd J C Evans, Lampeter (CM) NLW3365256.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7753
| ''[[:d:Q134046625|Hugh Morgans]]''
| [[Coadan:Revd H Morgans, Sammah (Cwmlline, A) NLW3365073.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7754
| ''[[:d:Q134049818|Rebeccah Morgans]]''
| [[Coadan:Mrs Morgans, Sammah (Cwmlline) NLW3365072.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7755
| ''[[:d:Q134060407|John Elias]]''
| [[Coadan:John Elias, Tre'r-gof NLW3364434.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7756
| ''[[:d:Q134061511|Robert Hughes]]''
| [[Coadan:Robert Hughes (Glan Collen, 1832?- ) NLW3364240.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7757
| ''[[:d:Q134061758|David C Harris]]''
| [[Coadan:Revd David C Harris (Caeronwy, 1846-85) NLW3364223.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7758
| ''[[:d:Q134062771|John Davies]]''
| [[Coadan:John Davies (Einion Ddu, 1819-1906) NLW3364236.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7759
| ''[[:d:Q134063673|William Jones]]''
| [[Coadan:William Jones (Ffestinfab, fl 1872-1915) NLW3364230.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7760
| ''[[:d:Q134065079|William Tudor ap Madock]]''
| [[Coadan:Ab Madoc (William Tudor ap Madock, 1844?-1916) NLW3364225.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7761
| ''[[:d:Q134066009|James Richard Walker]]''
| [[Coadan:Dr Walker, Corwen NLW3364175.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7762
| ''[[:d:Q134066578|Henry Jones Williams]]''
| [[Coadan:Henry Jones Williams (Plenydd, 1844-1926) NLW3364264.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7763
| ''[[:d:Q134086517|John Williams]]''
| [[Coadan:Portrait of John Williams, 'Llenor o'r Llwyni' (4671208).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7764
| ''[[:d:Q134100282|William Selwyn Davies]]''
| [[Coadan:Revd Selwyn Davies, Swansea NLW3365250.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7765
| ''[[:d:Q134100413|John Lewis]]''
| [[Coadan:In memory of the Rev John Lewis, Birmingham.. NLW3365213.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7766
| ''[[:d:Q134100492|Evan Peter]]''
| [[Coadan:Revd Evan Peter, Y Bala (MC) NLW3360974.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7767
| ''[[:d:Q134100779|Thomas Briwnant Evans]]''
| [[Coadan:Revd Briwnant Evans, Llangurig (CM) NLW3365158.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7768
| ''[[:d:Q134103132|Lydia Jones]]''
| [[Coadan:Lydia Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7769
| ''[[:d:Q134308667|Janet Richardson Armstrong]]''
|
|
|
|-
| style='text-align:right'| 7770
| ''[[:d:Q134308678|Charlotte Bacon]]''
|
|
|
|-
| style='text-align:right'| 7771
| ''[[:d:Q134346679|John Pengwern Jones]]''
| [[Coadan:Mr Pengwern Jones NLW3363693.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7772
| ''[[:d:Q134346718|Jane Powell]]''
| [[Coadan:Miss Powell (later Mrs Pengwern Jones) NLW3363695.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7773
| ''[[:d:Q134354116|John Hughes Symonds]]''
| [[Coadan:Revd J H Symond, Tywyn (CM) NLW3365104.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7774
| ''[[:d:Q134355524|Richard William Roberts]]''
| [[Coadan:Revd Roberts, Pentrefoelas NLW3365059.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7775
| ''[[:d:Q134370749|Rhys Harries]]''
| [[Coadan:Revd Rhys Harries, Narberth NLW3364519.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7776
| ''[[:d:Q134371396|David Daniel Walters]]''
| [[Coadan:Revd David Daniel Walters (Gwallter Ddu, 1862-1934)(Cong) NLW3362429.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7777
| ''[[:d:Q134373523|Noah Stephens]]''
| [[Coadan:Revd Noah Stephens, Liverpool NLW3362440.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7778
| ''[[:d:Q134373878|Francis Jones]]''
| [[Coadan:Revd Francis Jones, Abergele NLW3363287.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7779
| ''[[:d:Q134385487|George Talalun Newton]]''
| [[Coadan:Revd Newton, Eglwys-bach (W) NLW3362938.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7780
| ''[[:d:Q134394942|Ellis Hughes]]''
| [[Coadan:Revd Ellis Hughes, Pen-maen (Cong) NLW3364489.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7781
| ''[[:d:Q134395364|William Rees Williams]]''
| [[Coadan:Revd William Rees Williams, vicar of Gyffylliog and family NLW3364466.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7782
| ''[[:d:Q134395517|William George Jenkins]]''
| [[Coadan:Revd William George Jenkins, vicar of Llandysul (Cer) NLW3364456.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7783
| ''[[:d:Q134395634|John Robinson]]''
| [[Coadan:Revd J Robinson, Llansilin NLW3364364.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7784
| ''[[:d:Q134395716|Humphrey Gwerfyl James]]''
| [[Coadan:Revd H Gwerfyl James (Spinther's brother) NLW3364319.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7785
| ''[[:d:Q134395805|John Myfenydd Morgan]]''
| [[Coadan:Revd Myfenydd Morgan, Llandudoch NLW3364094.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7786
| ''[[:d:Q134444485|Jane Thomas]]''
| [[Coadan:My mother (sitting) Shan y Lliwdy and Bontfaen maid (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7787
| ''[[:d:Q134444853|John Mathews]]''
| [[Coadan:Revd John Matthews, Neath NLW3364302.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7788
| ''[[:d:Q134444947|Humphrey Ellis]]''
| [[Coadan:Revd H Ellis (1868) (Llangwm, Cong?) NLW3364083.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7789
| ''[[:d:Q134445081|Ishmael Evans]]''
| [[Coadan:Revd Ishmael Evans (W) NLW3362932.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7790
| ''[[:d:Q134445102|Richard Bonner]]''
| [[Coadan:Er cof am y diweddar Barch R Bonner .. NLW3362875.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7791
| ''[[:d:Q134445155|Robert Thomas Owen]]''
| [[Coadan:Rev R T Owen (W) NLW3362941.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7792
| ''[[:d:Q134476090|William Emlyn Jones]]''
| [[Coadan:Revd W Emlyn Jones (Cong) (?) NLW3364048.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7793
| ''[[:d:Q134477425|John Bartley]]''
| [[Coadan:Revd John Bartley (W) NLW3362841.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7794
| ''[[:d:Q134481562|John Wyndham Lewis]]''
|
|
|
|-
| style='text-align:right'| 7795
| ''[[:d:Q134481728|James Donne]]''
|
|
|
|-
| style='text-align:right'| 7796
| ''[[:d:Q134487387|Daniel Jenkyns]]''
| [[Coadan:Revd. Daniel Jenkyns (1815?-1884), Capel y Babell, Cwmfelinfach NLW3362548.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7797
| ''[[:d:Q134487580|Abel Green]]''
| [[Coadan:Revd Abel Green (copy) NLW3362180.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7798
| ''[[:d:Q134488243|William Morris]]''
| [[Coadan:Revd William Morris, Rhuddlan (CM) NLW3361068.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7799
| ''[[:d:Q134644535|William J Richards]]''
| [[Coadan:William J Richards, Glandyfi (1901-1951).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7800
| ''[[:d:Q134649880|Valmai Jones]]''
|
|
|
|-
| style='text-align:right'| 7801
| ''[[:d:Q134706818|Katherine Charis Davies]]''
|
|
|
|-
| style='text-align:right'| 7802
| ''[[:d:Q134706819|Laura Katharine Davies]]''
|
|
|
|-
| style='text-align:right'| 7803
| ''[[:d:Q134709314|John Penry Hyde 'Luxor' Price]]''
|
|
|
|-
| style='text-align:right'| 7804
| ''[[:d:Q134713674|Islwyn Beynon]]''
|
|
|
|-
| style='text-align:right'| 7805
| ''[[:d:Q134786484|John Jones]]''
|
|
|
|-
| style='text-align:right'| 7806
| ''[[:d:Q134808292|Ebenezer Curig Davies]]''
|
|
|
|-
| style='text-align:right'| 7807
| ''[[:d:Q134958650|Florence Margaret Sarah Price]]''
|
|
|
|-
| style='text-align:right'| 7808
| ''[[:d:Q134958653|Laura Williams Pugh]]''
|
|
|
|-
| style='text-align:right'| 7809
| ''[[:d:Q134958658|Myfanwy Dyfed Rees]]''
|
|
|
|-
| style='text-align:right'| 7810
| ''[[:d:Q134959079|Frances Edwards]]''
|
|
|
|-
| style='text-align:right'| 7811
| ''[[:d:Q134972267|Jane Jones]]''
|
|
|
|-
| style='text-align:right'| 7812
| ''[[:d:Q134978997|Morgan Davies]]''
|
|
|
|-
| style='text-align:right'| 7813
| ''[[:d:Q135000709|Linda Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 7814
| ''[[:d:Q135000917|Mary Enid Williams]]''
|
|
|
|-
| style='text-align:right'| 7815
| ''[[:d:Q135001041|Levi Williams]]''
|
|
|
|-
| style='text-align:right'| 7816
| ''[[:d:Q135001989|William Davies]]''
|
|
|
|-
| style='text-align:right'| 7817
| ''[[:d:Q100998829|Robert William Evans]]''
| [[Coadan:Robert William Evans mayor of Rockhampton.png|center|128px]]
|
|
|-
| style='text-align:right'| 7818
| ''[[:d:Q101079978|Thomas North]]''
|
|
|
|-
| style='text-align:right'| 7819
| ''[[:d:Q101417476|Eric Roberts]]''
|
|
|
|-
| style='text-align:right'| 7820
| ''[[:d:Q101443431|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 7821
| ''[[:d:Q102079613|Rosa M. Morris]]''
| [[Coadan:Rosa Morris.png|center|128px]]
|
|
|-
| style='text-align:right'| 7822
| ''[[:d:Q102114729|Peter W. M. John]]''
|
|
|
|-
| style='text-align:right'| 7823
| ''[[:d:Q102161876|Henry Chapman]]''
|
|
|
|-
| style='text-align:right'| 7824
| ''[[:d:Q102182387|Arthur John Capel]]''
|
|
|
|-
| style='text-align:right'| 7825
| ''[[:d:Q102184605|Harold Horton]]''
|
|
|
|-
| style='text-align:right'| 7826
| ''[[:d:Q102188216|Paul H. Roberts]]''
|
|
|
|-
| style='text-align:right'| 7827
| ''[[:d:Q102247988|Cadwaladr Roberts]]''
| [[Coadan:Mr. Cadwaladr Roberts arweinydd adnabyddus Cor Meibion y Moelwyn a Chor Mawr Ffestiniog (5449681).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7828
| ''[[:d:Q102304689|Barrie Vernon-Roberts]]''
|
|
|
|-
| style='text-align:right'| 7829
| ''[[:d:Q102331169|John James]]''
|
|
|
|-
| style='text-align:right'| 7830
| ''[[:d:Q102432298|Robert Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 7831
| ''[[:d:Q102819062|Ivor John Thomas]]''
|
|
|
|-
| style='text-align:right'| 7832
| ''[[:d:Q103811325|Owen Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 7833
| ''[[:d:Q103976474|Anne Briar Riddall]]''
|
|
|
|-
| style='text-align:right'| 7834
| ''[[:d:Q103996099|Tom Broster]]''
|
|
|
|-
| style='text-align:right'| 7835
| ''[[:d:Q104094371|Winston Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7836
| ''[[:d:Q104234346|David McKinley Williams]]''
|
|
|
|-
| style='text-align:right'| 7837
| ''[[:d:Q104286266|Albert Edward Ashcroft]]''
|
|
|
|-
| style='text-align:right'| 7838
| ''[[:d:Q104286274|James Daniel Baird]]''
|
|
|
|-
| style='text-align:right'| 7839
| ''[[:d:Q104286445|Charles Davy]]''
|
|
|
|-
| style='text-align:right'| 7840
| ''[[:d:Q104286719|William Charles Kensington]]''
|
|
|
|-
| style='text-align:right'| 7841
| ''[[:d:Q104286775|Thomas Snow Miller]]''
|
|
|
|-
| style='text-align:right'| 7842
| ''[[:d:Q104369841|Edwin Davy]]''
|
|
|
|-
| style='text-align:right'| 7843
| ''[[:d:Q104544505|Eric Williams]]''
|
|
|
|-
| style='text-align:right'| 7844
| ''[[:d:Q104586821|John Bale]]''
|
|
|
|-
| style='text-align:right'| 7845
| ''[[:d:Q104758912|Kelvin Thomas]]''
|
|
|
|-
| style='text-align:right'| 7846
| ''[[:d:Q104761592|Nansi Williams]]''
|
|
|
|-
| style='text-align:right'| 7847
| ''[[:d:Q104821881|Charles Lewis]]''
|
|
|
|-
| style='text-align:right'| 7848
| ''[[:d:Q104839512|Mirain Llwyd Owen]]''
|
|
|
|-
| style='text-align:right'| 7849
| ''[[:d:Q104945292|Adelaide Eyre]]''
|
|
|
|-
| style='text-align:right'| 7850
| ''[[:d:Q105047935|John Howell]]''
|
|
|
|-
| style='text-align:right'| 7851
| ''[[:d:Q105077276|Evan Prosser]]''
|
|
|
|-
| style='text-align:right'| 7852
| ''[[:d:Q105134303|Alan Wynne-Thomas]]''
|
|
|
|-
| style='text-align:right'| 7853
| ''[[:d:Q105155076|David Graham Jenkins]]''
|
|
|
|-
| style='text-align:right'| 7854
| ''[[:d:Q105295044|Henry Troadec]]''
|
|
|
|-
| style='text-align:right'| 7855
| ''[[:d:Q105302139|Richard Nicklin Hall]]''
|
|
|
|-
| style='text-align:right'| 7856
| ''[[:d:Q65932|Anthony Hopkins]]''
| [[Coadan:Anthony Hopkins Red Sea Festival 2025 Portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7857
| ''[[:d:Q93555|Ben Davies]]''
| [[Coadan:Ben Davies in Austria vs. Wales 2016-10-06 (118) 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7858
| ''[[:d:Q93657|Kenneth O. Morgan]]''
| [[Coadan:Official portrait of Lord Morgan crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7859
| ''[[:d:Q93828|Jermaine Easter]]''
| [[Coadan:Easter at Bristol Rovers in October 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7860
| ''[[:d:Q111840|Carwyn Jones]]''
| [[Coadan:Official portrait of Lord Jones of Penybont crop 2, 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7861
| ''[[:d:Q115870|Sally Hodge]]''
|
|
|
|-
| style='text-align:right'| 7862
| ''[[:d:Q117720|Gwenda Thomas]]''
| [[Coadan:Gwenda Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7863
| ''[[:d:Q117756|Phil Mills]]''
| [[Coadan:Petter Solberg - 2009 Cyprus Rally 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7864
| ''[[:d:Q118542|Nicholas A'Hern]]''
|
|
|
|-
| style='text-align:right'| 7865
| ''[[:d:Q122122|Karl Johnson]]''
|
|
|
|-
| style='text-align:right'| 7866
| ''[[:d:Q126360|Carl Robinson]]''
| [[Coadan:2015-03-02 Carl Robinson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7867
| ''[[:d:Q126444|David Vaughan]]''
| [[Coadan:David Vaughan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7868
| ''[[:d:Q138839|Wayne Hennessey]]''
| [[Coadan:AUT vs. WAL 2016-10-06 (108).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7869
| ''[[:d:Q142319|Julian Hodgson]]''
| [[Coadan:Julian Hodgson 2001 Solingen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7870
| ''[[:d:Q143120|Michael Sadler]]''
| [[Coadan:Michael sadler saga2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7871
| ''[[:d:Q156491|Bonnie Tyler]]''
| [[Coadan:Bonnie Tyler in Moscow 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7872
| ''[[:d:Q158980|James Collins]]''
| [[Coadan:James Collins 2023 (cropped).jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 7873
| ''[[:d:Q163452|Tom James]]''
|
|
|
|-
| style='text-align:right'| 7874
| ''[[:d:Q166910|Lucy Owen]]''
| [[Coadan:Lucy Cohen-Owen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7875
| ''[[:d:Q180850|Tom Jones]]''
| [[Coadan:Sir Tom Jones at The Queen's Birthday Party (cropped-2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7876
| ''[[:d:Q181363|Brian David Josephson]]''
| [[Coadan:Brian Josephson, March 2004.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7877
| ''[[:d:Q184586|Gareth Bale]]''
| [[Coadan:2022 FIFA World Cup United States 1–1 Wales - (32) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7878
| ''[[:d:Q190515|Craig Bellamy]]''
| [[Coadan:Craig Bellamy 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7879
| ''[[:d:Q192587|Duffy]]''
| [[Coadan:Duffy 2010 erdoedy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7880
| ''[[:d:Q204537|Justin Kerrigan]]''
|
|
|
|-
| style='text-align:right'| 7881
| ''[[:d:Q210669|Ken Follett]]''
| [[Coadan:Ken Follett official.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7882
| ''[[:d:Q213427|Aaron Ramsey]]''
| [[Coadan:Aaron Ramsey 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7883
| ''[[:d:Q214513|Mark Hughes]]''
| [[Coadan:1 mark hughes 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7884
| ''[[:d:Q215017|Rhys Ifans]]''
| [[Coadan:Rhys Ifans 2011 cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7885
| ''[[:d:Q216700|Roger Glover]]''
| [[Coadan:Deep Purple - MN Gredos - 03.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7886
| ''[[:d:Q218245|Siwan Morris]]''
|
|
|
|-
| style='text-align:right'| 7887
| ''[[:d:Q219354|Ian Rush]]''
| [[Coadan:Ian Rush in Singapore.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7888
| ''[[:d:Q221876|Chris Bell]]''
|
|
|
|-
| style='text-align:right'| 7889
| ''[[:d:Q230594|Mary Hopkin]]''
| [[Coadan:Mary Hopkin 1969.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7890
| ''[[:d:Q230996|Nicole Cooke]]''
| [[Coadan:Nicole Cooke Geelong World Cup 2007 podium 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7891
| ''[[:d:Q231207|Charlotte Church]]''
| [[Coadan:Charlotte Church by Law Keven.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7892
| ''[[:d:Q234174|Marina Diamandis]]''
| [[Coadan:Marina Diamandis (14091068631) (cropped) at Fendi close crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7893
| ''[[:d:Q234754|Shirley Bassey]]''
| [[Coadan:Shirley Bassey (1971).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7894
| ''[[:d:Q236309|Dawn French]]''
| [[Coadan:Dawn French 4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7895
| ''[[:d:Q237182|Jem]]''
| [[Coadan:Jem Walking 2005.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7896
| ''[[:d:Q237555|Sarah Waters]]''
| [[Coadan:Sarah Waters.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7897
| ''[[:d:Q237778|Siân Phillips]]''
| [[Coadan:Siân Phillips in "Crossing Borders".jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7898
| ''[[:d:Q246379|Mark Delaney]]''
| [[Coadan:Mark Delaney in 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7899
| ''[[:d:Q248414|Gary Jones]]''
| [[Coadan:Gary Jones stargate cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7900
| ''[[:d:Q251436|Michael White]]''
|
|
|
|-
| style='text-align:right'| 7901
| ''[[:d:Q253495|Shefali Chowdhury]]''
| [[Coadan:Shefali Chowdhury.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7902
| ''[[:d:Q254876|Eve Myles]]''
| [[Coadan:Eve Myles 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7903
| ''[[:d:Q259707|Stuart Andrew]]''
| [[Coadan:Official portrait of Stuart Andrew crop 2, 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7904
| ''[[:d:Q260772|Guto Bebb]]''
| [[Coadan:Official portrait of Guto Bebb crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7905
| ''[[:d:Q261477|Gareth Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 7906
| ''[[:d:Q261571|Gwyneth Jones]]''
| [[Coadan:Gwyneth Jones.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7907
| ''[[:d:Q262177|Colin Pascoe]]''
| [[Coadan:Colin Pascoe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7908
| ''[[:d:Q263532|Robert Walter]]''
| [[Coadan:Robert Walter, president European security and Defence Assembly. Session 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7909
| ''[[:d:Q264964|Kevin Brennan]]''
| [[Coadan:Official portrait of Lord Brennan of Canton crop 2, 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7910
| ''[[:d:Q266062|Gareth John Williams]]''
|
|
|
|-
| style='text-align:right'| 7911
| ''[[:d:Q266146|Chris Bryant]]''
| [[Coadan:Chris Bryant MP July 2024 Official portrait 2 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7912
| ''[[:d:Q266189|Hywel Williams]]''
| [[Coadan:Official portrait of Hywel Williams crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7913
| ''[[:d:Q266434|Roger Williams]]''
| [[Coadan:Roger Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7914
| ''[[:d:Q266548|Stephen Williams]]''
| [[Coadan:Stephen Williams MP.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7915
| ''[[:d:Q268030|Alun Cairns]]''
| [[Coadan:Official portrait of Rt Hon Alun Cairns MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7916
| ''[[:d:Q269853|Robert Buckland]]''
| [[Coadan:Official portrait of Rt Hon Robert Buckland MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7917
| ''[[:d:Q272522|Jill Evans]]''
| [[Coadan:Evans, Jill-1665.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7918
| ''[[:d:Q272570|Jade Jones]]''
| [[Coadan:Jade Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7919
| ''[[:d:Q272578|Donna Lewis]]''
| [[Coadan:Donna Lewis (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7920
| ''[[:d:Q272581|Katherine Jenkins]]''
| [[Coadan:Katherine Jenkins in 2022 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7921
| ''[[:d:Q272592|Aimee-Ffion Edwards]]''
|
|
|
|-
| style='text-align:right'| 7922
| ''[[:d:Q275421|Emma]]''
|
|
|
|-
| style='text-align:right'| 7923
| ''[[:d:Q285258|Ron Waldron]]''
|
|
|
|-
| style='text-align:right'| 7924
| ''[[:d:Q287292|Andrew Selby]]''
|
|
|
|-
| style='text-align:right'| 7925
| ''[[:d:Q291300|Cerys Matthews]]''
| [[Coadan:Cerys Matthews Glastonbury 2008 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7926
| ''[[:d:Q291686|Lindy Hemming]]''
|
|
|
|-
| style='text-align:right'| 7927
| ''[[:d:Q295974|Ioan Gruffudd]]''
| [[Coadan:Ioan Gruffudd at the 2011 Comic-Con International.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7928
| ''[[:d:Q296716|Wayne David]]''
| [[Coadan:Official portrait of Wayne David MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7929
| ''[[:d:Q296920|Glyn Davies]]''
| [[Coadan:Glyn Davies (Welsh Politician) profile photo.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7930
| ''[[:d:Q298276|Michael Sheen]]''
| [[Coadan:Michael Sheen crop n2 Good Omens panel at NYCC (61104).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7931
| ''[[:d:Q302892|Jonathan Edwards]]''
| [[Coadan:Official portrait of Jonathan Edwards crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7932
| ''[[:d:Q303577|Chris Evans]]''
| [[Coadan:Official portrait of Chris Evans crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7933
| ''[[:d:Q303716|Jonathan Evans]]''
| [[Coadan:Evans, Jonathan (crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7934
| ''[[:d:Q303814|Nigel Evans]]''
| [[Coadan:Official portrait of Mr Nigel Evans crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7935
| ''[[:d:Q310733|Simon Davies]]''
| [[Coadan:Simon Davies Wales October 2006.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7936
| ''[[:d:Q311300|Colin Jackson]]''
| [[Coadan:Athletissima 2012 - Colin Jackson (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7937
| ''[[:d:Q312067|Danny Gabbidon]]''
| [[Coadan:Danny Gabbidon 04052025 (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7938
| ''[[:d:Q312702|Jonathan Pryce]]''
| [[Coadan:Jonathan Pryce 2016 (28577280662) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7939
| ''[[:d:Q313250|Joe Allen]]''
| [[Coadan:AUT vs. WAL 2016-10-06 (135) 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7940
| ''[[:d:Q314920|Mason Ryan]]''
| [[Coadan:Mason Ryan Cropped.png|center|128px]]
|
|
|-
| style='text-align:right'| 7941
| ''[[:d:Q316155|John Holloway]]''
|
|
|
|-
| style='text-align:right'| 7942
| ''[[:d:Q317258|Neil Kinnock]]''
| [[Coadan:Start campagne voor Europese verkiezingen van PvdA (Rotterdam) Neal Kinnoch , k, Bestanddeelnr 932-9811.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7943
| ''[[:d:Q317265|Mark Williams]]''
| [[Coadan:MarkWilliams2025Masters.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7944
| ''[[:d:Q322031|John Weathers]]''
| [[Coadan:John Weathers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7945
| ''[[:d:Q322211|Bryn Terfel]]''
| [[Coadan:Bryn Terfel in Stockholm 2013-22.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7946
| ''[[:d:Q325381|Michael Howard]]''
| [[Coadan:Official portrait of Lord Howard of Lympne crop 2, 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7947
| ''[[:d:Q327187|Mark Pembridge]]''
|
|
|
|-
| style='text-align:right'| 7948
| ''[[:d:Q332314|Michael Heseltine]]''
| [[Coadan:Lord Heseltine, Deputy Prime Minister, UK (1995-97) (10559130986).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7949
| ''[[:d:Q333168|Karl Jenkins]]''
| [[Coadan:Karl Jenkins - St David Awards 2017.png|center|128px]]
|
|
|-
| style='text-align:right'| 7950
| ''[[:d:Q333390|Kenneth Baker, Baron Baker of Dorking]]''
| [[Coadan:Official portrait of Lord Baker of Dorking 2020 crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7951
| ''[[:d:Q333590|Elfyn Llwyd]]''
| [[Coadan:Elfyn Llwyd MP in 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7952
| ''[[:d:Q333828|Paul Murphy]]''
| [[Coadan:Official portrait of Lord Murphy of Torfaen 2020 crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7953
| ''[[:d:Q333869|Ron Davies]]''
| [[Coadan:Rondavies1998.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7954
| ''[[:d:Q334278|Don Touhig]]''
| [[Coadan:Official portrait of Lord Touhig crop 2, 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7955
| ''[[:d:Q334411|Donald Anderson, Baron Anderson of Swansea]]''
| [[Coadan:Official portrait of Lord Anderson of Swansea crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7956
| ''[[:d:Q334541|Tony Pulis]]''
| [[Coadan:Tony pulis 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7957
| ''[[:d:Q336521|Eluned Morgan]]''
| [[Coadan:Official portrait of Eluned Morgan (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7958
| ''[[:d:Q336526|Mike German, Baron German]]''
| [[Coadan:Official portrait of Lord German crop 2, 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7959
| ''[[:d:Q336543|Tanni Grey-Thompson]]''
| [[Coadan:Official portrait of Baroness Grey-Thompson crop 2, 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7960
| ''[[:d:Q339786|Chico Slimani]]''
| [[Coadan:Chico Slimani May 07.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7961
| ''[[:d:Q342784|Matthew Rhys]]''
| [[Coadan:Matthew Rhys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7962
| ''[[:d:Q342989|John Toshack]]''
| [[Coadan:John Toshack 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7963
| ''[[:d:Q346480|Dave Evans]]''
| [[Coadan:Dave Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7964
| ''[[:d:Q348704|Chris Slade]]''
| [[Coadan:Chris Slade.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7965
| ''[[:d:Q350383|Adam Matthews]]''
| [[Coadan:Adam Matthews.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7966
| ''[[:d:Q350686|Adam Rhys Jones]]''
| [[Coadan:Adam Jones (rugby player).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7967
| ''[[:d:Q350799|Robbie Savage]]''
| [[Coadan:RobbieSavage01.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 7968
| ''[[:d:Q353388|Andy Bell]]''
| [[Coadan:Beady Eye Andy Bell (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7969
| ''[[:d:Q355049|Owain Yeoman]]''
|
|
|
|-
| style='text-align:right'| 7970
| ''[[:d:Q356091|Max Boyce]]''
|
|
|
|-
| style='text-align:right'| 7971
| ''[[:d:Q356108|Rhodri Meilir]]''
| [[Coadan:Rhodri Meilir 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7972
| ''[[:d:Q356327|Geraint Thomas]]''
| [[Coadan:Geraint Thomas 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7973
| ''[[:d:Q356392|John Hartson]]''
| [[Coadan:Hartson, John.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7974
| ''[[:d:Q361465|Gerran Howell]]''
|
|
|
|-
| style='text-align:right'| 7975
| ''[[:d:Q361536|Owen Teale]]''
| [[Coadan:Owen Teale 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7976
| ''[[:d:Q361981|Russell T Davies]]''
| [[Coadan:Russell T. Davies (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7977
| ''[[:d:Q370527|Joe Ledley]]''
| [[Coadan:AUT vs. WAL 2016-10-06 (172).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7978
| ''[[:d:Q373061|Adrian Goldsworthy]]''
| [[Coadan:Adrian Goldsworthy-2 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7979
| ''[[:d:Q378678|Sophie Dee]]''
| [[Coadan:Sophie Dee 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7980
| ''[[:d:Q380859|Rob Partridge]]''
| [[Coadan:Robert Partridge.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7981
| ''[[:d:Q380869|Alastair Reynolds]]''
| [[Coadan:Alastair Reynolds.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7982
| ''[[:d:Q381649|Gareth Cooper]]''
|
|
|
|-
| style='text-align:right'| 7983
| ''[[:d:Q381664|Vincent Regan]]''
| [[Coadan:Stuttgart 2023 -Comic Con Germany- Vincent Regan- by-RaBoe 023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7984
| ''[[:d:Q381769|Chris Coleman]]''
| [[Coadan:AUT vs. WAL 2016-10-06 (097).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7985
| ''[[:d:Q382676|John Greaves]]''
| [[Coadan:John Greaves (musician).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7986
| ''[[:d:Q382731|John Warlow]]''
|
|
|
|-
| style='text-align:right'| 7987
| ''[[:d:Q390440|Jacut]]''
| [[Coadan:St-jacut.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7988
| ''[[:d:Q390760|Nick Smith]]''
| [[Coadan:Official portrait of Nick Smith MP crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7989
| ''[[:d:Q391960|Damian Green]]''
| [[Coadan:Official portrait of Damian Green crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7990
| ''[[:d:Q402985|Ryan Day]]''
| [[Coadan:Ryan Day at Snooker German Masters (DerHexer) 2015-02-05 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7991
| ''[[:d:Q434154|Henry Spinetti]]''
|
|
|
|-
| style='text-align:right'| 7992
| ''[[:d:Q435411|Marilyn Strathern]]''
| [[Coadan:Marilyn Strathern speaking at SOAS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7993
| ''[[:d:Q436650|Neville Southall]]''
| [[Coadan:NevilleSouthall.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7994
| ''[[:d:Q438330|Jo Walton]]''
| [[Coadan:Jo Walton (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7995
| ''[[:d:Q438506|John Yapp]]''
|
|
|
|-
| style='text-align:right'| 7996
| ''[[:d:Q438515|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 7997
| ''[[:d:Q438832|Michael Jones]]''
| [[Coadan:Michael Jones (Fête de la musique, Vitrolles, Bouches-du-Rhône, France).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7998
| ''[[:d:Q440206|Honeysuckle Weeks]]''
| [[Coadan:Honeysuckle weeks november 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 7999
| ''[[:d:Q440786|Amanda Levete]]''
| [[Coadan:Amanda Levete.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8000
| ''[[:d:Q444638|Sharon Maguire]]''
|
|
|
|-
| style='text-align:right'| 8001
| ''[[:d:Q446140|Jon Brown]]''
|
|
|
|-
| style='text-align:right'| 8002
| ''[[:d:Q446789|Dai Young]]''
|
|
|
|-
| style='text-align:right'| 8003
| ''[[:d:Q447949|Bryn Meredith]]''
|
|
|
|-
| style='text-align:right'| 8004
| ''[[:d:Q447961|Alun Wyn Jones]]''
| [[Coadan:Alun Wyn Jones 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8005
| ''[[:d:Q448212|Bobby Windsor]]''
|
|
|
|-
| style='text-align:right'| 8006
| ''[[:d:Q449012|Jamie Roberts]]''
| [[Coadan:Jamie Roberts cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8007
| ''[[:d:Q449100|Rebecca James]]''
| [[Coadan:Rebecca James 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8008
| ''[[:d:Q449108|Barry Morgan]]''
| [[Coadan:Barry Morgan (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8009
| ''[[:d:Q455094|Hayley Tullett]]''
|
|
|
|-
| style='text-align:right'| 8010
| ''[[:d:Q456444|G. E. R. Lloyd]]''
|
|
|
|-
| style='text-align:right'| 8011
| ''[[:d:Q460627|Sam Warburton]]''
| [[Coadan:Sam Warburton cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8012
| ''[[:d:Q460672|Mark Webster]]''
| [[Coadan:2025-04-03 Premier League Darts Berlin 2025 by Sandro Halank–138.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8013
| ''[[:d:Q460929|Dai Greene]]''
| [[Coadan:David Greene Barcelona 2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8014
| ''[[:d:Q460934|Morgan Stoddart]]''
|
|
|
|-
| style='text-align:right'| 8015
| ''[[:d:Q463870|Jon Lilygreen]]''
| [[Coadan:Jon Lilygreen ESC 2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8016
| ''[[:d:Q465457|Kelle Marie]]''
| [[Coadan:Kelle Marie at 2006 AEE Friday 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8017
| ''[[:d:Q465547|Matthew Elias]]''
| [[Coadan:EM Finale 4x400m München 2002.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8018
| ''[[:d:Q466837|Hywel Lloyd]]''
|
|
|
|-
| style='text-align:right'| 8019
| ''[[:d:Q466878|Kelly Sotherton]]''
| [[Coadan:Kelly Sotherton (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8020
| ''[[:d:Q467749|Joanna Page]]''
|
|
|
|-
| style='text-align:right'| 8021
| ''[[:d:Q468023|Kay Swinburne]]''
| [[Coadan:Swinburne, Kay-2652.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8022
| ''[[:d:Q470751|Chris Gunter]]''
| [[Coadan:Chrisgunter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8023
| ''[[:d:Q474788|Matthew Rees]]''
| [[Coadan:Wales and British and Irish Lions Hooker, Matthew Rees. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8024
| ''[[:d:Q478565|Dai Havard]]''
|
|
|
|-
| style='text-align:right'| 8025
| ''[[:d:Q479115|Joan Ruddock]]''
| [[Coadan:Joan Ruddock.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8026
| ''[[:d:Q479188|Chris Ruane]]''
| [[Coadan:Official portrait of Chris Ruane crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8027
| ''[[:d:Q503776|Andrew Bishop]]''
| [[Coadan:ST vs Ospreys 08-12-120075.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8028
| ''[[:d:Q504430|Andrew Davies]]''
| [[Coadan:Andrew Davies (writer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8029
| ''[[:d:Q505190|Andrew Hourmont]]''
|
|
|
|-
| style='text-align:right'| 8030
| ''[[:d:Q506650|Andrew Pagett]]''
| [[Coadan:Andrew Pagett PHC 2011-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8031
| ''[[:d:Q511364|Rosemary Joshua]]''
|
|
|
|-
| style='text-align:right'| 8032
| ''[[:d:Q512659|Laura Ford]]''
| [[Coadan:LauraFord.ChinaCats.2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8033
| ''[[:d:Q514831|Lyn Evans]]''
| [[Coadan:Lyn Evans - pictures donated by CERN-7.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8034
| ''[[:d:Q515207|Perdita Weeks]]''
|
|
|
|-
| style='text-align:right'| 8035
| ''[[:d:Q518290|Kelly Morgan]]''
|
|
|
|-
| style='text-align:right'| 8036
| ''[[:d:Q519589|Mike Phillips]]''
| [[Coadan:Mike Phillips 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8037
| ''[[:d:Q522134|Stuart Urban]]''
|
|
|
|-
| style='text-align:right'| 8038
| ''[[:d:Q522373|Matt Ryan]]''
| [[Coadan:Matt Ryan At Wales Comic-Con Homecoming Wrexham 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8039
| ''[[:d:Q523810|Richard Deacon]]''
| [[Coadan:Richard Deacon II (2017).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8040
| ''[[:d:Q525714|Andy Fairweather Low]]''
| [[Coadan:Andy Fairweather-Low, July 02 2006.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8041
| ''[[:d:Q525873|Shane Williams]]''
| [[Coadan:Shane Williams 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8042
| ''[[:d:Q526714|Andy Melville]]''
|
|
|
|-
| style='text-align:right'| 8043
| ''[[:d:Q527084|Andy Powell]]''
| [[Coadan:Andy Powell zoonabar london wasps.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8044
| ''[[:d:Q527532|Andy Scott]]''
| [[Coadan:Andy Scott - Wacken Open Air 2018 03.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8045
| ''[[:d:Q530256|Edwin Regan]]''
|
|
|
|-
| style='text-align:right'| 8046
| ''[[:d:Q531221|Emyr Wyn Lewis]]''
|
|
|
|-
| style='text-align:right'| 8047
| ''[[:d:Q531350|Bethan Huws]]''
|
|
|
|-
| style='text-align:right'| 8048
| ''[[:d:Q533245|Jayne Ludlow]]''
| [[Coadan:Jayne Ludlow.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8049
| ''[[:d:Q533743|Owain Tudur Jones]]''
|
|
|
|-
| style='text-align:right'| 8050
| ''[[:d:Q537531|Michael White]]''
| [[Coadan:Michael White PHC 2016-2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8051
| ''[[:d:Q538289|High Contrast]]''
| [[Coadan:High Contrast AKA Lincoln Barrett.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8052
| ''[[:d:Q539583|Rachel Rice]]''
|
|
|
|-
| style='text-align:right'| 8053
| ''[[:d:Q544101|Sandra Gidley]]''
| [[Coadan:Sandra Gidley, September 2009 1 rotated and cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8054
| ''[[:d:Q545186|Dave Edmunds]]''
| [[Coadan:DaveEdmunds1980crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8055
| ''[[:d:Q545198|Julian Winn]]''
|
|
|
|-
| style='text-align:right'| 8056
| ''[[:d:Q545242|Sam Harrison]]''
| [[Coadan:Samuel Harrison TA 2013 (Cropping).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8057
| ''[[:d:Q545303|Dean Saunders]]''
| [[Coadan:Saunders, Dean 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8058
| ''[[:d:Q545328|Tom Ward]]''
|
|
|
|-
| style='text-align:right'| 8059
| ''[[:d:Q546364|Della Jones]]''
|
|
|
|-
| style='text-align:right'| 8060
| ''[[:d:Q549519|Jak Jones]]''
| [[Coadan:Jak Jones PHC 2016-3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8061
| ''[[:d:Q551261|Matthew Stevens]]''
| [[Coadan:Matthew Stevens PHC 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8062
| ''[[:d:Q552881|Les Davies]]''
|
|
|
|-
| style='text-align:right'| 8063
| ''[[:d:Q553549|Jason Koumas]]''
| [[Coadan:Jason Koumas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8064
| ''[[:d:Q556024|Sasha]]''
| [[Coadan:Sashaspooky (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8065
| ''[[:d:Q561356|Kevin Allen]]''
|
|
|
|-
| style='text-align:right'| 8066
| ''[[:d:Q561374|Christian Malcolm]]''
| [[Coadan:Christian Malcolm Barcelona 2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8067
| ''[[:d:Q573143|Ross Lovegrove]]''
| [[Coadan:Portrait of Ross Lovegrove.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8068
| ''[[:d:Q576121|Albert Owen]]''
| [[Coadan:Official portrait of Albert Owen crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8069
| ''[[:d:Q578107|Paul Collier]]''
| [[Coadan:Snooker German Masters (DerHexer) 2013-02-03 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8070
| ''[[:d:Q579550|Peter Biziou]]''
|
|
|
|-
| style='text-align:right'| 8071
| ''[[:d:Q587649|Percy Jones]]''
| [[Coadan:Up percy jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 8072
| ''[[:d:Q590142|Jamie Jones]]''
| [[Coadan:Jamie Jones PHC 2015-2.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8073
| ''[[:d:Q618515|Aphrodite]]''
|
|
|
|-
| style='text-align:right'| 8074
| ''[[:d:Q631339|Nicky Grist]]''
| [[Coadan:Nicky Grist.png|center|128px]]
|
|
|-
| style='text-align:right'| 8075
| ''[[:d:Q642981|Richard Duffy]]''
| [[Coadan:Richard Duffy.png|center|128px]]
|
|
|-
| style='text-align:right'| 8076
| ''[[:d:Q648341|Thighpaulsandra]]''
| [[Coadan:Tighpaul.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8077
| ''[[:d:Q662951|Roy Mathias]]''
|
|
|
|-
| style='text-align:right'| 8078
| ''[[:d:Q685402|Gavin Williams]]''
|
|
|
|-
| style='text-align:right'| 8079
| ''[[:d:Q691388|Huw Irranca-Davies]]''
| [[Coadan:Huw-irranca-davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8080
| ''[[:d:Q694996|Anne Main]]''
| [[Coadan:Anne Main (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8081
| ''[[:d:Q704897|Alan Woods]]''
| [[Coadan:Alan Woods RCP 2nd Congress May 2025 DSCF2406 (54532185577) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8082
| ''[[:d:Q713720|Kevin Sheedy]]''
|
|
|
|-
| style='text-align:right'| 8083
| ''[[:d:Q718057|Jeffrey Weeks]]''
| [[Coadan:Jeffrey Weeks by Mark McNestry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8084
| ''[[:d:Q720491|Steve Jones]]''
| [[Coadan:Steve Jones Boston 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8085
| ''[[:d:Q720787|David Langford]]''
| [[Coadan:DavidLangford.01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8086
| ''[[:d:Q721273|Richard Ian Cox]]''
|
|
|
|-
| style='text-align:right'| 8087
| ''[[:d:Q722001|Luke Evans]]''
| [[Coadan:Luke Evans in 2018 (cropped 4).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8088
| ''[[:d:Q725365|Lynn Davies]]''
| [[Coadan:Lynn Davies 1964.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8089
| ''[[:d:Q725519|Keith Allen]]''
| [[Coadan:Kieth Allen (7323203024) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8090
| ''[[:d:Q725516|Kelly Jones]]''
| [[Coadan:Kelly jones cardiff 2005.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8091
| ''[[:d:Q725567|Rob Terry]]''
| [[Coadan:Rob Terry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8092
| ''[[:d:Q725572|Bradley Dredge]]''
| [[Coadan:Bradley Dredge KLM Open 2010.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8093
| ''[[:d:Q727410|Siân James]]''
| [[Coadan:Siân James at Canal Parade Amsterdam - EuroPride 2016 - PvdA (28225698514) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8094
| ''[[:d:Q727494|Terry Williams]]''
|
|
|
|-
| style='text-align:right'| 8095
| ''[[:d:Q730648|Steve Upton]]''
|
|
|
|-
| style='text-align:right'| 8096
| ''[[:d:Q731353|Ian Flanagan]]''
|
|
|
|-
| style='text-align:right'| 8097
| ''[[:d:Q736160|Kim Howells]]''
| [[Coadan:Kim Howells 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8098
| ''[[:d:Q736226|Clive Thomas]]''
|
|
|
|-
| style='text-align:right'| 8099
| ''[[:d:Q741112|Ieuan Evans]]''
| [[Coadan:Ieuan Evans (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8100
| ''[[:d:Q746440|Wethenoc]]''
|
|
|
|-
| style='text-align:right'| 8101
| ''[[:d:Q747672|Mark Titley]]''
|
|
|
|-
| style='text-align:right'| 8102
| ''[[:d:Q749612|Julian Lewis]]''
| [[Coadan:Official portrait of Dr Julian Lewis crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8103
| ''[[:d:Q750381|Susan Elan Jones]]''
| [[Coadan:Official portrait of Susan Elan Jones crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8104
| ''[[:d:Q751510|Lloyd Burns]]''
|
|
|
|-
| style='text-align:right'| 8105
| ''[[:d:Q761573|Catherine Fisher]]''
|
|
|
|-
| style='text-align:right'| 8106
| ''[[:d:Q771149|James Wilson]]''
| [[Coadan:JAMES WILSON BRFC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8107
| ''[[:d:Q780432|John Bach]]''
|
|
|
|-
| style='text-align:right'| 8108
| ''[[:d:Q781211|Ian Gough]]''
| [[Coadan:Ian Gough 2008 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8109
| ''[[:d:Q786362|Nicky Robinson]]''
| [[Coadan:USO - ASM - 20150905 - Nicky Robinson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8110
| ''[[:d:Q787209|Chloe-Beth Morgan]]''
| [[Coadan:Miss Wales 08 Chloe Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8111
| ''[[:d:Q855207|Matthew Tuck]]''
| [[Coadan:Bullet for My Valentine - Rock am Ring 2018-4319.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8112
| ''[[:d:Q863024|Billy Boston]]''
| [[Coadan:Cardiff Bay Rugby Codebreakers (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8113
| ''[[:d:Q885939|Blue Weaver]]''
| [[Coadan:BlueWiki.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8114
| ''[[:d:Q888143|Bob Morgan]]''
|
|
|
|-
| style='text-align:right'| 8115
| ''[[:d:Q892605|Alex Thomson]]''
| [[Coadan:Alex Thomson VG2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8116
| ''[[:d:Q897007|Bradley Davies]]''
|
|
|
|-
| style='text-align:right'| 8117
| ''[[:d:Q901131|Dafydd Ifans]]''
| [[Coadan:Bro Myrddin National Eisteddfod, 1974 (1551217).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8118
| ''[[:d:Q914227|Justin Tipuric]]''
| [[Coadan:Justin Tipuric. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8119
| ''[[:d:Q919013|Gwilym Simcock]]''
| [[Coadan:Gwilym Simcock IBK.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8120
| ''[[:d:Q922252|Pino Palladino]]''
| [[Coadan:The Who Philadelphia PA Oct. 26, 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8121
| ''[[:d:Q928194|Enzo Maccarinelli]]''
| [[Coadan:Enzo Maccarinelli.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8122
| ''[[:d:Q929476|Richard Barrett]]''
| [[Coadan:Richard Barrett in June 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8123
| ''[[:d:Q930461|Duncan Jones]]''
| [[Coadan:ST vs Ospreys 08-12-120009.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8124
| ''[[:d:Q934120|Jonathan Thomas]]''
| [[Coadan:Jonathan Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8125
| ''[[:d:Q934461|Gareth David-Lloyd]]''
| [[Coadan:Gareth David-Lloyd by Gage Skidmore.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8126
| ''[[:d:Q934472|Dwayne Peel]]''
| [[Coadan:Dwayne Peel (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8127
| ''[[:d:Q934488|Fred Evans]]''
|
|
|
|-
| style='text-align:right'| 8128
| ''[[:d:Q934531|Martyn Williams]]''
| [[Coadan:Martyn Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8129
| ''[[:d:Q934587|Mark Jones]]''
|
|
|
|-
| style='text-align:right'| 8130
| ''[[:d:Q934631|Gethin Jenkins]]''
| [[Coadan:Gethin Jenkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8131
| ''[[:d:Q934769|Huw Bennett]]''
| [[Coadan:Huw Bennett - Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8132
| ''[[:d:Q935347|Simon Richardson]]''
| [[Coadan:Simon Richardson London 2012 Paralympic Games torch relay.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8133
| ''[[:d:Q945352|Richie Collins]]''
|
|
|
|-
| style='text-align:right'| 8134
| ''[[:d:Q949204|Gareth Thomas]]''
| [[Coadan:Gareth Thomas (rugby player).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8135
| ''[[:d:Q953257|Robert Pugh]]''
|
|
|
|-
| style='text-align:right'| 8136
| ''[[:d:Q955586|Matt Rees]]''
|
|
|
|-
| style='text-align:right'| 8137
| ''[[:d:Q958043|Isabel Ice]]''
| [[Coadan:Isabel Ice adjusted.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8138
| ''[[:d:Q965304|Gareth Wyatt]]''
|
|
|
|-
| style='text-align:right'| 8139
| ''[[:d:Q970221|Daniel Wells]]''
| [[Coadan:Daniel Wells at Snooker German Masters (DerHexer) 2013-01-30 03.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8140
| ''[[:d:Q971539|David Cotterill]]''
| [[Coadan:David Cotterill.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8141
| ''[[:d:Q975917|Neal Eardley]]''
| [[Coadan:Neal Eardley BCFC 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8142
| ''[[:d:Q976254|Paul Davies]]''
|
|
|
|-
| style='text-align:right'| 8143
| ''[[:d:Q978793|Shakin' Stevens]]''
| [[Coadan:Shakin' Stevens.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8144
| ''[[:d:Q979114|Paul Rhys]]''
| [[Coadan:Paul Rhys coat crop'24.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8145
| ''[[:d:Q979204|Gerald Davies]]''
|
|
|
|-
| style='text-align:right'| 8146
| ''[[:d:Q979276|Jason Hughes]]''
|
|
|
|-
| style='text-align:right'| 8147
| ''[[:d:Q979336|Delme Thomas]]''
| [[Coadan:Delme Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8148
| ''[[:d:Q981330|Grace Coddington]]''
| [[Coadan:Grace Coddington.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8149
| ''[[:d:Q981527|Nick Evans]]''
|
|
|
|-
| style='text-align:right'| 8150
| ''[[:d:Q981688|Ryan Bevington]]''
| [[Coadan:Ryan Bevington. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8151
| ''[[:d:Q981948|Rob Howley]]''
| [[Coadan:Robert Howley Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8152
| ''[[:d:Q983336|Howard Stringer]]''
| [[Coadan:Sir Howard Stringer Shankbone Metropolitan Opera 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8153
| ''[[:d:Q984365|Nathan Walker]]''
| [[Coadan:Nathan Walker.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8154
| ''[[:d:Q994769|Robin Llwyd ab Owain]]''
| [[Coadan:EduWiki 2013 Day 1 (57).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8155
| ''[[:d:Q995315|Bryony Worthington, Baroness Worthington]]''
| [[Coadan:Bryony Worthington, Baroness Worthington (born 1971) at World Economic Forum Davos 2021.png|center|128px]]
|
|
|-
| style='text-align:right'| 8156
| ''[[:d:Q1003578|Franklin Saunders]]''
|
|
|
|-
| style='text-align:right'| 8157
| ''[[:d:Q1029131|Camille Butcher]]''
|
|
|
|-
| style='text-align:right'| 8158
| ''[[:d:Q1036305|Carissa Turner]]''
|
|
|
|-
| style='text-align:right'| 8159
| ''[[:d:Q1046824|David Sullivan]]''
| [[Coadan:David Sullivan co-owner West Ham United F.C..jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8160
| ''[[:d:Q1055273|Cerith Wyn Evans]]''
|
|
|
|-
| style='text-align:right'| 8161
| ''[[:d:Q1056022|Howard King]]''
|
|
|
|-
| style='text-align:right'| 8162
| ''[[:d:Q1058973|Jessica Sula]]''
| [[Coadan:Jessica Sula (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8163
| ''[[:d:Q1061908|Michael Owen]]''
|
|
|
|-
| style='text-align:right'| 8164
| ''[[:d:Q1076979|Chris Bartley]]''
| [[Coadan:Chris Bartley2.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8165
| ''[[:d:Q1077147|Chris Czekaj]]''
|
|
|
|-
| style='text-align:right'| 8166
| ''[[:d:Q1077808|Chris Type]]''
|
|
|
|-
| style='text-align:right'| 8167
| ''[[:d:Q1082835|Peter Wingfield]]''
| [[Coadan:Peter Wingfield 20100701 Japan Expo 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8168
| ''[[:d:Q1087011|Christopher Timothy]]''
| [[Coadan:Christopher Timothy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8169
| ''[[:d:Q1092611|Mark Bowen]]''
|
|
|
|-
| style='text-align:right'| 8170
| ''[[:d:Q1099281|Clayton Blackmore]]''
| [[Coadan:Clayton Blackmore juli 1991.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8171
| ''[[:d:Q1101163|Cliff Jones]]''
| [[Coadan:Cliff Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8172
| ''[[:d:Q1103587|Gareth Roberts]]''
| [[Coadan:Gareth Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8173
| ''[[:d:Q1106063|Keith Cooper]]''
|
|
|
|-
| style='text-align:right'| 8174
| ''[[:d:Q1106064|Keith Burge]]''
|
|
|
|-
| style='text-align:right'| 8175
| ''[[:d:Q1115849|Jonathan Davies]]''
|
|
|
|-
| style='text-align:right'| 8176
| ''[[:d:Q1118742|James Brewerton]]''
|
|
|
|-
| style='text-align:right'| 8177
| ''[[:d:Q1138615|Craig Mitchell]]''
|
|
|
|-
| style='text-align:right'| 8178
| ''[[:d:Q1148937|Iwan Rheon]]''
| [[Coadan:Iwan Rheon by Gage Skidmore.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8179
| ''[[:d:Q1153445|Richard Ellis]]''
| [[Coadan:Richard Ellis recipient of the 2023 Gruber Cosmology Prize (iau2302).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8180
| ''[[:d:Q1153763|Robin McBryde]]''
|
|
|
|-
| style='text-align:right'| 8181
| ''[[:d:Q1157150|Dafydd Iwan]]''
| [[Coadan:Dafydd Iwan from Emynau album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8182
| ''[[:d:Q1157833|Dale Appleby]]''
| [[Coadan:Dale Appleby - Sachsentour.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8183
| ''[[:d:Q1157836|Dale Campbell-Savours]]''
| [[Coadan:Official portrait of Lord Campbell-Savours crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8184
| ''[[:d:Q1158997|Dan Biggar]]''
| [[Coadan:Dan Biggar 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8185
| ''[[:d:Q1166651|Darren Morgan]]''
| [[Coadan:Darren Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8186
| ''[[:d:Q1173795|David Bower]]''
|
|
|
|-
| style='text-align:right'| 8187
| ''[[:d:Q1174338|David Emanuel]]''
|
|
|
|-
| style='text-align:right'| 8188
| ''[[:d:Q1176766|David Broucher]]''
|
|
|
|-
| style='text-align:right'| 8189
| ''[[:d:Q1177203|David Williams]]''
| [[Coadan:David Williams (mathematician).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8190
| ''[[:d:Q1179039|Rob Jones]]''
| [[Coadan:Rob Jones.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8191
| ''[[:d:Q1181577|Deborah Kay Davies]]''
|
|
|
|-
| style='text-align:right'| 8192
| ''[[:d:Q1183309|Deiniol Jones]]''
|
|
|
|-
| style='text-align:right'| 8193
| ''[[:d:Q1189996|James Fox]]''
| [[Coadan:James Fox.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8194
| ''[[:d:Q1191188|Neil Taylor]]''
| [[Coadan:Neil Taylor vs Arsenal (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8195
| ''[[:d:Q1200134|Derek Vaughan]]''
| [[Coadan:Visit of Derek Vaughan to the European Commission - 2023 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8196
| ''[[:d:Q1247700|Clive Merrison]]''
|
|
|
|-
| style='text-align:right'| 8197
| ''[[:d:Q1257097|Mark Rowlands]]''
| [[Coadan:Mark Rowlands at National Book Festival 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8198
| ''[[:d:Q1267203|Gwyneth Glyn]]''
| [[Coadan:Gwyneth Glyn5638.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8199
| ''[[:d:Q1282921|Eddie Niedzwiecki]]''
|
|
|
|-
| style='text-align:right'| 8201
| ''[[:d:Q1302969|Eifion Lewis-Roberts]]''
| [[Coadan:Eifion Lewis Roberts (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8202
| ''[[:d:Q1310059|Richard Wilson, Baron Wilson of Dinton]]''
| [[Coadan:Official portrait of Lord Wilson of Dinton crop 2, 2026.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8203
| ''[[:d:Q1310576|Eirian Williams]]''
| [[Coadan:Eirian Williams at Snooker German Masters (DerHexer) 2013-01-30 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8204
| ''[[:d:Q1329543|Elinor Barker]]''
| [[Coadan:UCI Track World Championships 2020 154.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8205
| ''[[:d:Q1331208|Elizabeth Grünbaum]]''
|
|
|
|-
| style='text-align:right'| 8206
| ''[[:d:Q1333178|Neil Sloane]]''
| [[Coadan:N. J. A. Sloane.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8207
| ''[[:d:Q1343140|Paul Whitehouse]]''
| [[Coadan:Paul Whitehouse in 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8208
| ''[[:d:Q1343564|Tom Ellis]]''
| [[Coadan:Tom Ellis - IGN Live 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8209
| ''[[:d:Q1361619|Rhys Taylor]]''
| [[Coadan:Taylor, Rhys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8210
| ''[[:d:Q1368597|David Taylor]]''
|
|
|
|-
| style='text-align:right'| 8211
| ''[[:d:Q1371735|Julian Cope]]''
| [[Coadan:Lunar Festival - Julian Cope (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8212
| ''[[:d:Q1380259|Lee Byrne]]''
|
|
|
|-
| style='text-align:right'| 8213
| ''[[:d:Q1380938|Stephen Jones]]''
| [[Coadan:Stephen Jones 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8214
| ''[[:d:Q1380953|John Bufton]]''
| [[Coadan:John Bufton UKIP MEP for Wales.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8215
| ''[[:d:Q1381089|Gareth Edwards]]''
| [[Coadan:Gareth Edwards 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8216
| ''[[:d:Q1381114|Tom James]]''
| [[Coadan:Tom James MBE.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8217
| ''[[:d:Q1381233|Neil Jenkins]]''
| [[Coadan:Neil Jenkins. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8218
| ''[[:d:Q1381454|Gomer Edwin Evans]]''
|
|
|
|-
| style='text-align:right'| 8219
| ''[[:d:Q1386825|Ryan Jones]]''
| [[Coadan:Ryan Jones. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8220
| ''[[:d:Q1391397|Steve Jones]]''
| [[Coadan:Steve Jones.png|center|128px]]
|
|
|-
| style='text-align:right'| 8221
| ''[[:d:Q1396040|Sue Jones-Davies]]''
|
|
|
|-
| style='text-align:right'| 8222
| ''[[:d:Q1397897|Rhys Williams]]''
| [[Coadan:Rhys Williams 2006.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8223
| ''[[:d:Q1398346|Leigh Halfpenny]]''
| [[Coadan:Leigh Halfpenny. Wales Grand Slam Celebration, Senedd 19 March 2012 Leigh Halfpenny. Dathliadau Camp Lawn Cymru, Senedd 19 Mawrth 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8224
| ''[[:d:Q1403150|Derek Quinnell]]''
|
|
|
|-
| style='text-align:right'| 8225
| ''[[:d:Q1404569|Gareth Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8226
| ''[[:d:Q1404576|Mike Ruddock]]''
|
|
|
|-
| style='text-align:right'| 8227
| ''[[:d:Q1405258|Jamie Oliver]]''
| [[Coadan:Jamie Oliver - Lostprophets in Pontypridd, 2007 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8228
| ''[[:d:Q1405477|Robert Griffiths]]''
| [[Coadan:Robert Griffiths, Britain Needs Socialism, 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8229
| ''[[:d:Q1407544|Stuart Richardson]]''
| [[Coadan:Stu Richardson - Lostprophets (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8230
| ''[[:d:Q1423384|Matt Crowell]]''
|
|
|
|-
| style='text-align:right'| 8231
| ''[[:d:Q1423984|Lee Williams]]''
|
|
|
|-
| style='text-align:right'| 8232
| ''[[:d:Q1427818|Kai Owen]]''
| [[Coadan:Kai Owen Fedcon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8233
| ''[[:d:Q1428289|Steve Speirs]]''
|
|
|
|-
| style='text-align:right'| 8234
| ''[[:d:Q1428717|Matthew Rowe]]''
|
|
|
|-
| style='text-align:right'| 8235
| ''[[:d:Q1475708|Michael Kerstgens]]''
|
|
|
|-
| style='text-align:right'| 8236
| ''[[:d:Q1494329|Mika Chunuonsee]]''
| [[Coadan:Mika Chunuonsee 20180316.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8237
| ''[[:d:Q1496438|Gavin Henson]]''
| [[Coadan:Gavin Henson.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8238
| ''[[:d:Q1507413|Mary Fulbrook]]''
|
|
|
|-
| style='text-align:right'| 8239
| ''[[:d:Q1533250|Jonathan Neil Morgan]]''
|
|
|
|-
| style='text-align:right'| 8240
| ''[[:d:Q1546589|Griff Rhys Jones]]''
| [[Coadan:Griff Rhys Jones 2019.png|center|128px]]
|
|
|-
| style='text-align:right'| 8241
| ''[[:d:Q1555434|Kevin Ratcliffe]]''
|
|
|
|-
| style='text-align:right'| 8242
| ''[[:d:Q1557923|Gwyn Ashton]]''
| [[Coadan:Gwyn Ashton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8243
| ''[[:d:Q1557927|Gwyn Prosser]]''
|
|
|
|-
| style='text-align:right'| 8244
| ''[[:d:Q1558855|Paul James]]''
| [[Coadan:Paul James. Wales Grand Slam Celebration, Senedd 19 March 2012 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8245
| ''[[:d:Q1562304|Tony Cowell]]''
|
|
|
|-
| style='text-align:right'| 8246
| ''[[:d:Q1601789|Heledd ferch Cyndrwyn]]''
|
|
|
|-
| style='text-align:right'| 8247
| ''[[:d:Q1633006|Darcy Blake]]''
| [[Coadan:Darcy Blake Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8248
| ''[[:d:Q1637205|Rachel Trezise]]''
|
|
|
|-
| style='text-align:right'| 8249
| ''[[:d:Q1639396|Huw Warren]]''
| [[Coadan:Huw warren high res.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8250
| ''[[:d:Q1645638|Lyndon Williams]]''
|
|
|
|-
| style='text-align:right'| 8251
| ''[[:d:Q1646990|Matthew Williams]]''
| [[Coadan:Williams, Matthew.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8252
| ''[[:d:Q1649429|Owen Morris]]''
|
|
|
|-
| style='text-align:right'| 8253
| ''[[:d:Q1655550|Ian Hislop]]''
| [[Coadan:Ian Hislop - 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8254
| ''[[:d:Q1655630|Ian Simmonds]]''
| [[Coadan:Ian simmonds 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8255
| ''[[:d:Q1655632|Ian Shaw]]''
|
|
|
|-
| style='text-align:right'| 8256
| ''[[:d:Q1655682|Ian Whyte]]''
| [[Coadan:Stuttgart 2024 - ComicCon - Ian Whyte - by-RaBoe 007.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8257
| ''[[:d:Q1663616|Roger Roberts, Baron Roberts of Llandudno]]''
| [[Coadan:Roger Roberts at Bournemouth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8258
| ''[[:d:Q1665252|Lewis Oliva]]''
| [[Coadan:2015 UEC Track Elite European Championships 174.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8259
| ''[[:d:Q1677227|Nathan Cleverly]]''
| [[Coadan:Nathan Cleverly.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8260
| ''[[:d:Q1680270|James Dean Bradfield]]''
| [[Coadan:Manic Street Preachers in London2005-4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8261
| ''[[:d:Q1680577|James Hook]]''
| [[Coadan:Rugby World Cup 2007 James Hook.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8262
| ''[[:d:Q1686156|Sian Evans]]''
| [[Coadan:Kosheen Sian Evans Wien2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8263
| ''[[:d:Q1686451|Jeffrey John]]''
| [[Coadan:Passio 2010 (5340704340) (Jeffrey John cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8264
| ''[[:d:Q1700866|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 8265
| ''[[:d:Q1701334|John Parsons]]''
| [[Coadan:John Parsons..jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8266
| ''[[:d:Q1706931|Timothy Clement-Jones, Baron Clement-Jones]]''
| [[Coadan:Official portrait of Lord Clement-Jones crop 2, 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8267
| ''[[:d:Q1720081|Scott Quinnell]]''
|
|
|
|-
| style='text-align:right'| 8268
| ''[[:d:Q1739190|Alex Carlile, Baron Carlile of Berriew]]''
| [[Coadan:Official portrait of Lord Carlile of Berriew crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8269
| ''[[:d:Q1757629|Tim Wright]]''
| [[Coadan:Tim Wright aka CoLD SToRAGE Circa 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8270
| ''[[:d:Q1770354|Christian Ribeiro]]''
| [[Coadan:Christian Ribeiro 28-02-2015 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8271
| ''[[:d:Q1770803|John Humphrys]]''
| [[Coadan:JohnHumphrys.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8272
| [[Craig Morgan (bluckaneyr)|Craig Morgan]]
| [[Coadan:Morgan, Craig.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8273
| ''[[:d:Q1778676|Rhys Day]]''
|
|
|
|-
| style='text-align:right'| 8274
| ''[[:d:Q1799438|Michael Thomas]]''
| [[Coadan:MichaelThomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8275
| ''[[:d:Q1800397|Julie Gardner]]''
| [[Coadan:Julie Gardner at Comic Con 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8276
| ''[[:d:Q1801939|Gary Taylor]]''
|
|
|
|-
| style='text-align:right'| 8277
| ''[[:d:Q1807733|Laura Deas]]''
| [[Coadan:2021-02-13 IBSF World Championships Bobsleigh and Skeleton Altenberg 1DX 4145 by Stepro.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8278
| ''[[:d:Q1807932|Lauren Francis]]''
|
|
|
|-
| style='text-align:right'| 8279
| ''[[:d:Q1808384|Becky Brewerton]]''
| [[Coadan:2009 Women's British Open - Becky Brewerton (3).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8280
| ''[[:d:Q1820758|Mark Lewis Jones]]''
| [[Coadan:Mark Lewis Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8281
| ''[[:d:Q1820785|Leslie Griffiths]]''
| [[Coadan:The Reverend the Lord Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8282
| ''[[:d:Q1827777|Lisa Palfrey]]''
| [[Coadan:Lisa Palfrey, Tanjimei.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8283
| ''[[:d:Q1849841|Rhydian Roberts]]''
|
|
|
|-
| style='text-align:right'| 8284
| ''[[:d:Q1849861|Aled Jones]]''
| [[Coadan:Aled Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8285
| ''[[:d:Q1859256|Richard Brake]]''
| [[Coadan:Richard Brake Comic Con Brussels 2018 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8286
| ''[[:d:Q1866867|Llin Golding, Baroness Golding]]''
| [[Coadan:Official portrait of Baroness Golding crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8287
| ''[[:d:Q1871528|Rhodri Giggs]]''
|
|
|
|-
| style='text-align:right'| 8288
| ''[[:d:Q1877075|Luke Rowe]]''
| [[Coadan:Luke Rowe - 2023 UCI Road World Championships (Men's road race).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8289
| ''[[:d:Q1886336|Ben Johnson]]''
| [[Coadan:Ben Johnson Liverpool.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8290
| ''[[:d:Q1886591|Mal Ryder]]''
| [[Coadan:Mal (singer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8291
| ''[[:d:Q1892607|Marc Evans]]''
| [[Coadan:Marc Evans at JDIFF 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8292
| ''[[:d:Q1903320|Martin Allen]]''
|
|
|
|-
| style='text-align:right'| 8293
| ''[[:d:Q1904830|Martin Roberts]]''
|
|
|
|-
| style='text-align:right'| 8294
| ''[[:d:Q1905135|Martin Thomas, Baron Thomas of Gresford]]''
| [[Coadan:Official portrait of Lord Thomas of Gresford crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8295
| ''[[:d:Q1905841|Martyn Lewis]]''
|
|
|
|-
| style='text-align:right'| 8296
| ''[[:d:Q1909528|Matthew Hughes]]''
| [[Coadan:MatthewHughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8297
| ''[[:d:Q1914627|Richie Burnett]]''
|
|
|
|-
| style='text-align:right'| 8298
| ''[[:d:Q1918215|M. J. Trow]]''
|
|
|
|-
| style='text-align:right'| 8299
| ''[[:d:Q1931375|Mickey Thomas]]''
|
|
|
|-
| style='text-align:right'| 8300
| ''[[:d:Q1933580|Mike Walker]]''
|
|
|
|-
| style='text-align:right'| 8301
| ''[[:d:Q1933591|Mike Zaworotko]]''
|
|
|
|-
| style='text-align:right'| 8302
| ''[[:d:Q1950162|Stuart Manley]]''
| [[Coadan:Stuart Manley.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8303
| ''[[:d:Q1969415|Timothy Benjamin]]''
|
|
|
|-
| style='text-align:right'| 8304
| ''[[:d:Q1974867|Neil Roberts]]''
|
|
|
|-
| style='text-align:right'| 8305
| ''[[:d:Q1985492|Nick Reilly]]''
| [[Coadan:Nick Reilly 2010.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8306
| ''[[:d:Q1987718|Peredur ap Gwynedd]]''
| [[Coadan:Peredur ap Gwynedd.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 8307
| ''[[:d:Q1996125|Shaun MacDonald]]''
| [[Coadan:Shaun MacDonald.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8308
| ''[[:d:Q1996147|Non Stanford]]''
| [[Coadan:2022-08-12 European Championships 2022 – Triathlon Elite Women by Sandro Halank–291.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8309
| ''[[:d:Q1997219|Eleri Earnshaw]]''
| [[Coadan:NC Courage vs Angel City (Oct 2024) 062.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8310
| ''[[:d:Q1999688|Norman Solomon]]''
|
|
|
|-
| style='text-align:right'| 8311
| ''[[:d:Q2020469|Kyron Sullivan]]''
| [[Coadan:Kyron Sullivan.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8312
| ''[[:d:Q2047547|Lewis Robling]]''
| [[Coadan:Steph Elwood & Lewis Robling at Avatar fire and ash premiere London 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8313
| ''[[:d:Q2047865|Mathew Pritchard]]''
| [[Coadan:Matthew Pritchard 2015 -2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8314
| ''[[:d:Q2048628|Garry Houston]]''
| [[Coadan:Garry Houston.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8315
| ''[[:d:Q2057711|Patrick Jones]]''
| [[Coadan:Patrick Jones, Welsh Poet.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8316
| ''[[:d:Q2064266|Baruc]]''
|
|
|
|-
| style='text-align:right'| 8317
| ''[[:d:Q2070562|Lee Walker]]''
| [[Coadan:Lee Walker PHC 2015-3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8318
| ''[[:d:Q2086251|Philip Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8319
| ''[[:d:Q2086471|Philip Sutton]]''
|
|
|
|-
| style='text-align:right'| 8320
| ''[[:d:Q2099688|Mike Lewis]]''
| [[Coadan:Mike Lewis (Welsh musician) Lostprophets in Pontypridd, 2007.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8321
| ''[[:d:Q2102183|Ritchie Davies]]''
|
|
|
|-
| style='text-align:right'| 8322
| ''[[:d:Q2114948|Alex Gough]]''
|
|
|
|-
| style='text-align:right'| 8323
| ''[[:d:Q2116510|Malcolm Davies]]''
|
|
|
|-
| style='text-align:right'| 8324
| ''[[:d:Q2120207|Jeffrey Thomas]]''
| [[Coadan:Jeffrey Thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8325
| ''[[:d:Q2133288|Jamie Donaldson]]''
| [[Coadan:James Donaldson.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8326
| ''[[:d:Q2135567|Barrie Bates]]''
|
|
|
|-
| style='text-align:right'| 8327
| ''[[:d:Q2142612|Martin Phillips]]''
|
|
|
|-
| style='text-align:right'| 8328
| ''[[:d:Q2149806|Richard Hibbard]]''
| [[Coadan:USO-Gloucester Rugby - 20141025 - Richard Hibbard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8329
| ''[[:d:Q2150807|Richard Vaughan]]''
|
|
|
|-
| style='text-align:right'| 8330
| ''[[:d:Q2156106|Rob Wainwright]]''
| [[Coadan:Rob Wainwright cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8331
| ''[[:d:Q2159914|Robin Sowden-Taylor]]''
|
|
|
|-
| style='text-align:right'| 8332
| ''[[:d:Q2163367|Jan Robbins]]''
|
|
|
|-
| style='text-align:right'| 8333
| ''[[:d:Q2165437|Ron Griffiths]]''
| [[Coadan:Badfinger 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8334
| ''[[:d:Q2183770|Marc Lloyd Williams]]''
|
|
|
|-
| style='text-align:right'| 8335
| ''[[:d:Q2210169|Marshall James]]''
|
|
|
|-
| style='text-align:right'| 8336
| ''[[:d:Q2223400|Imogen Thomas]]''
|
|
|
|-
| style='text-align:right'| 8337
| ''[[:d:Q2224511|Sarah Thomas]]''
|
|
|
|-
| style='text-align:right'| 8338
| ''[[:d:Q2227475|Saul David]]''
|
|
|
|-
| style='text-align:right'| 8339
| ''[[:d:Q2235810|Evin Crowley]]''
|
|
|
|-
| style='text-align:right'| 8340
| ''[[:d:Q2245403|Paul Jones]]''
|
|
|
|-
| style='text-align:right'| 8341
| ''[[:d:Q2250384|Nick Deacy]]''
| [[Coadan:PSV tegen Go Ahead 1-1, Nick Deacy scoort langs doelman Van Zoghel, Bestanddeelnr 929-5477.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8342
| ''[[:d:Q2251359|Chaz Davies]]''
| [[Coadan:Chaz Daytona 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8343
| ''[[:d:Q2255749|Sean Moore]]''
| [[Coadan:Sean Moore 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8344
| ''[[:d:Q2262221|Sean Mathias]]''
| [[Coadan:9.24.13WaitingForGodot-NoMansLandPressJunketByLuigiNovi4.2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8345
| ''[[:d:Q2265631|David Barry]]''
|
|
|
|-
| style='text-align:right'| 8346
| ''[[:d:Q2276821|Shane Clash]]''
|
|
|
|-
| style='text-align:right'| 8347
| ''[[:d:Q2277114|Ched Evans]]''
| [[Coadan:Ched Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8348
| ''[[:d:Q2279901|Mark Mouland]]''
| [[Coadan:KLM 2009 Mark Mouland.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8349
| ''[[:d:Q2304861|Rhys Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8350
| ''[[:d:Q2318784|Jess Fishlock]]''
| [[Coadan:NC Courage vs Seattle Reign (Apr 2024) 032.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8351
| ''[[:d:Q2322261|Rob Brydon]]''
| [[Coadan:Brydon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8352
| ''[[:d:Q2344657|Stephen Dodd]]''
| [[Coadan:Stephen Dodd (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8353
| ''[[:d:Q2346871|Steve Brace]]''
|
|
|
|-
| style='text-align:right'| 8354
| ''[[:d:Q2353120|Paul Parry]]''
| [[Coadan:Parry, Paul.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8355
| ''[[:d:Q2421928|Geraint Lewis]]''
|
|
|
|-
| style='text-align:right'| 8356
| ''[[:d:Q2429227|Sion Bebb]]''
|
|
|
|-
| style='text-align:right'| 8357
| ''[[:d:Q2442492|Tony Chappel]]''
|
|
|
|-
| style='text-align:right'| 8358
| ''[[:d:Q2446658|Nicky Wire]]''
| [[Coadan:Nicky Wire in Budapest in 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8359
| ''[[:d:Q2449206|Gwladys]]''
| [[Coadan:St Gwladus in Gwladus.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8360
| ''[[:d:Q2458875|Tim Wylton]]''
|
|
|
|-
| style='text-align:right'| 8361
| ''[[:d:Q2463858|Jazz Richards]]''
| [[Coadan:Jazz Richards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8362
| ''[[:d:Q2476368|Harry Wilson]]''
| [[Coadan:Harry Wilson 2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8364
| ''[[:d:Q2487274|David Davies]]''
| [[Coadan:Rhodri Morgan and David Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8365
| ''[[:d:Q2500792|Morwenna]]''
| [[Coadan:Saint Morwenna of Morwenstow. Fresco in Saint Morwenna of Morwenstow church, England.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8366
| ''[[:d:Q2523538|Marc Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8367
| ''[[:d:Q2527728|Laurence Cottle]]''
| [[Coadan:Laurence Cottle.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8368
| ''[[:d:Q2530628|Hywel Simons]]''
|
|
|
|-
| style='text-align:right'| 8369
| ''[[:d:Q2545239|Alan Durban]]''
|
|
|
|-
| style='text-align:right'| 8371
| ''[[:d:Q2563910|Saint Lunaire]]''
| [[Coadan:Statue de saint Lunaire.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8372
| ''[[:d:Q2567288|John Williams]]''
| [[Coadan:John Williams (snooker referee) 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8373
| ''[[:d:Q2587487|Ryan Valentine]]''
| [[Coadan:Valentine, Ryan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8374
| ''[[:d:Q2596210|Carl Harris]]''
|
|
|
|-
| style='text-align:right'| 8375
| ''[[:d:Q2596530|Tara Bethan]]''
|
|
|
|-
| style='text-align:right'| 8376
| ''[[:d:Q2599561|Yanto Barker]]''
| [[Coadan:Yanto Barker 2015.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8377
| ''[[:d:Q2603027|Iwan Roberts]]''
|
|
|
|-
| style='text-align:right'| 8378
| ''[[:d:Q2603439|Alan Davies]]''
|
|
|
|-
| style='text-align:right'| 8379
| ''[[:d:Q2605051|Brian Flynn]]''
|
|
|
|-
| style='text-align:right'| 8380
| ''[[:d:Q2605207|Paulinus]]''
|
|
|
|-
| style='text-align:right'| 8381
| ''[[:d:Q2609520|Nigel Owens]]''
| [[Coadan:Nigel Owens Pro 12 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8382
| ''[[:d:Q2631222|Jason James]]''
| [[Coadan:Jay-bfmv.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8383
| ''[[:d:Q2663889|Euros Lyn]]''
| [[Coadan:Euros Lyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8384
| ''[[:d:Q2693197|Phillip Price]]''
| [[Coadan:KLM 2009 Phillip Price.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8385
| ''[[:d:Q2696817|Peter Nicholas]]''
|
|
|
|-
| style='text-align:right'| 8386
| ''[[:d:Q2706947|Grant Nicholas]]''
| [[Coadan:Grant Nicholas performing with Feeder 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8387
| ''[[:d:Q2736121|Jon Groom]]''
| [[Coadan:Jongroom.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8388
| ''[[:d:Q2742666|Andy Secombe]]''
| [[Coadan:Andy Secombe (7283016042).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8389
| ''[[:d:Q2745954|Jim Burns]]''
| [[Coadan:Jim Burns 2005.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8390
| ''[[:d:Q2755519|Nigel Walker]]''
|
|
|
|-
| style='text-align:right'| 8391
| ''[[:d:Q2756320|Trezza Azzopardi]]''
|
|
|
|-
| style='text-align:right'| 8392
| ''[[:d:Q2758802|Carantoc]]''
| [[Coadan:Statue of St Carannog, Llangrannog, Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8393
| ''[[:d:Q2780562|Amy Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8394
| ''[[:d:Q2782424|Lisa Scott-Lee]]''
| [[Coadan:Nottingham Pride MMB 11c Lisa Scott-Lee.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8395
| ''[[:d:Q2792014|Jamie Robinson]]''
|
|
|
|-
| style='text-align:right'| 8396
| ''[[:d:Q2825023|Adrian Durston]]''
|
|
|
|-
| style='text-align:right'| 8397
| ''[[:d:Q2825031|Adrian Hadley]]''
|
|
|
|-
| style='text-align:right'| 8398
| ''[[:d:Q2825645|Aeron Edwards]]''
|
|
|
|-
| style='text-align:right'| 8399
| ''[[:d:Q2830489|Alan Doss]]''
| [[Coadan:Alan Doss close.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8400
| ''[[:d:Q2830554|Alan Llwyd]]''
| [[Coadan:Celebrating Alan Llwyd's double win victory in winning the chair and crown at Eisteddfod Rhuthun, 1973 (1526176).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8401
| ''[[:d:Q2830572|Alan Phillips]]''
|
|
|
|-
| style='text-align:right'| 8402
| ''[[:d:Q2832399|Aled Brew]]''
| [[Coadan:Aled Brew 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8403
| ''[[:d:Q2832925|Alex Darlington]]''
|
|
|
|-
| style='text-align:right'| 8404
| ''[[:d:Q2833520|Eric Burden]]''
|
|
|
|-
| style='text-align:right'| 8405
| ''[[:d:Q2837292|Alix Popham]]''
|
|
|
|-
| style='text-align:right'| 8406
| ''[[:d:Q2837676|Allan Bateman]]''
|
|
|
|-
| style='text-align:right'| 8407
| ''[[:d:Q2837744|Allan Martin]]''
|
|
|
|-
| style='text-align:right'| 8408
| ''[[:d:Q2846618|Andrew Grieve]]''
|
|
|
|-
| style='text-align:right'| 8409
| ''[[:d:Q2846634|Andrew House]]''
|
|
|
|-
| style='text-align:right'| 8410
| ''[[:d:Q2849138|Andy Legg]]''
|
|
|
|-
| style='text-align:right'| 8411
| ''[[:d:Q2849189|Andy Williams]]''
|
|
|
|-
| style='text-align:right'| 8412
| ''[[:d:Q2852820|Anthony Buchanan]]''
|
|
|
|-
| style='text-align:right'| 8413
| ''[[:d:Q2857635|Paul Amos]]''
| [[Coadan:Paul Amos Animate Florida 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8414
| ''[[:d:Q2865205|Arthur Lewis]]''
|
|
|
|-
| style='text-align:right'| 8415
| ''[[:d:Q2866086|Arwel Thomas]]''
|
|
|
|-
| style='text-align:right'| 8416
| ''[[:d:Q2866538|Ashley Evans]]''
|
|
|
|-
| style='text-align:right'| 8417
| ''[[:d:Q2866548|Ashley Morris]]''
|
|
|
|-
| style='text-align:right'| 8418
| ''[[:d:Q2866557|Ashley Smith]]''
|
|
|
|-
| style='text-align:right'| 8419
| ''[[:d:Q2867035|Paul Bodin]]''
|
|
|
|-
| style='text-align:right'| 8420
| ''[[:d:Q2885721|Barry Davies]]''
|
|
|
|-
| style='text-align:right'| 8421
| ''[[:d:Q2885748|Barry Horne]]''
|
|
|
|-
| style='text-align:right'| 8422
| ''[[:d:Q2885757|Barry Jones]]''
|
|
|
|-
| style='text-align:right'| 8423
| ''[[:d:Q2885809|Barry Williams]]''
|
|
|
|-
| style='text-align:right'| 8424
| ''[[:d:Q2899803|Berwyn Price]]''
|
|
|
|-
| style='text-align:right'| 8425
| ''[[:d:Q2903706|Billy Raybould]]''
|
|
|
|-
| style='text-align:right'| 8426
| ''[[:d:Q2907786|Bob Norster]]''
|
|
|
|-
| style='text-align:right'| 8427
| ''[[:d:Q2913295|David Evans]]''
|
|
|
|-
| style='text-align:right'| 8428
| ''[[:d:Q2927242|Elvira Out]]''
|
|
|
|-
| style='text-align:right'| 8429
| ''[[:d:Q2946643|Ceri Sherlock]]''
|
|
|
|-
| style='text-align:right'| 8430
| ''[[:d:Q2946640|Ceri Jones]]''
|
|
|
|-
| style='text-align:right'| 8431
| ''[[:d:Q2946644|Ceri Sweeney]]''
|
|
|
|-
| style='text-align:right'| 8432
| ''[[:d:Q2946682|Cerith Rees]]''
|
|
|
|-
| style='text-align:right'| 8433
| ''[[:d:Q2964639|Chris Addison]]''
| [[Coadan:Chris Addison cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8434
| ''[[:d:Q2964643|Chris Anthony]]''
|
|
|
|-
| style='text-align:right'| 8435
| ''[[:d:Q2964739|Chris Holloway]]''
|
|
|
|-
| style='text-align:right'| 8436
| ''[[:d:Q2964749|Chris Jones]]''
|
|
|
|-
| style='text-align:right'| 8437
| ''[[:d:Q2964792|Chris Marriott]]''
|
|
|
|-
| style='text-align:right'| 8438
| ''[[:d:Q2964844|Chris Roberts]]''
|
|
|
|-
| style='text-align:right'| 8439
| ''[[:d:Q2964900|Chris Wyatt]]''
|
|
|
|-
| style='text-align:right'| 8440
| ''[[:d:Q2965430|Christian Loader]]''
|
|
|
|-
| style='text-align:right'| 8441
| ''[[:d:Q2966604|Chris Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8442
| ''[[:d:Q2966638|Christopher Pugsley]]''
| [[Coadan:Christopher Pugsley (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8443
| ''[[:d:Q2978734|Clayton Thomas]]''
|
|
|
|-
| style='text-align:right'| 8444
| ''[[:d:Q2979442|Clive Williams]]''
|
|
|
|-
| style='text-align:right'| 8445
| ''[[:d:Q2979449|Clive Williams]]''
|
|
|
|-
| style='text-align:right'| 8446
| ''[[:d:Q2982642|Colin Noon]]''
|
|
|
|-
| style='text-align:right'| 8447
| ''[[:d:Q2989336|Shaheen Jafargholi]]''
| [[Coadan:Shaheen Jafargholi 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8448
| ''[[:d:Q2993447|Connell Rawlinson]]''
|
|
|
|-
| style='text-align:right'| 8449
| ''[[:d:Q2993516|Conogan]]''
| [[Coadan:Quimper 12 Cathédrale Saint Conogan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8450
| ''[[:d:Q3002042|Craig Morgan]]''
|
|
|
|-
| style='text-align:right'| 8451
| ''[[:d:Q3002041|Craig Moses]]''
|
|
|
|-
| style='text-align:right'| 8452
| ''[[:d:Q3002051|Craig Quinnell]]''
|
|
|
|-
| style='text-align:right'| 8453
| ''[[:d:Q3012016|Dai Morris]]''
|
|
|
|-
| style='text-align:right'| 8454
| ''[[:d:Q3014013|Daniel Evans]]''
| [[Coadan:Daniel Evans Ospreys 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8455
| ''[[:d:Q3015228|Danny Coyne]]''
| [[Coadan:Danny Coyne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8456
| ''[[:d:Q3016531|Darren Moss]]''
|
|
|
|-
| style='text-align:right'| 8457
| ''[[:d:Q3016529|Darren Morris]]''
| [[Coadan:Darren.Morris.Rugby.png|center|128px]]
|
|
|-
| style='text-align:right'| 8458
| ''[[:d:Q3018627|David Pipe]]''
| [[Coadan:David Pipe 12-05-2012 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8459
| ''[[:d:Q3018684|David Richards]]''
|
|
|
|-
| style='text-align:right'| 8460
| ''[[:d:Q3023438|Denzil Williams]]''
|
|
|
|-
| style='text-align:right'| 8461
| ''[[:d:Q3023702|Derek Bevan]]''
|
|
|
|-
| style='text-align:right'| 8462
| ''[[:d:Q3025583|Dewi Morris]]''
|
|
|
|-
| style='text-align:right'| 8463
| ''[[:d:Q3026609|Dick Moriarty]]''
|
|
|
|-
| style='text-align:right'| 8464
| ''[[:d:Q3037029|Dorian West]]''
| [[Coadan:Dorian West - Northampton Saints vs Sale October 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8465
| ''[[:d:Q3048724|Edward Wynne]]''
|
|
|
|-
| style='text-align:right'| 8466
| ''[[:d:Q3050399|Elaine Morgan]]''
| [[Coadan:Elaine Morgan & Dan Ar Braz.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8467
| ''[[:d:Q3050580|Gwenno Saunders]]''
| [[Coadan:Gwenno Saunders.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8468
| ''[[:d:Q3050590|Gruff Rhys]]''
| [[Coadan:Turning Tides Festival Gruffest Rhys (48292037606).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8469
| ''[[:d:Q3050840|Elgan Rees]]''
|
|
|
|-
| style='text-align:right'| 8470
| ''[[:d:Q3053432|Emyr Lewis]]''
|
|
|
|-
| style='text-align:right'| 8471
| ''[[:d:Q3060850|Euros Childs]]''
| [[Coadan:Euros Childs 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8472
| ''[[:d:Q3065503|Lloyd Jones]]''
| [[Coadan:2011 Cup of China Lloyd Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8473
| ''[[:d:Q3072247|Filthy Pedro]]''
|
|
|
|-
| style='text-align:right'| 8474
| ''[[:d:Q3072545|Finbarr O'Reilly]]''
| [[Coadan:Finbarr O'Reilly par Claude Truong-Ngoc septembre 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8475
| ''[[:d:Q3079096|Frances Thomas]]''
|
|
|
|-
| style='text-align:right'| 8476
| ''[[:d:Q3080918|Gavin Rees]]''
| [[Coadan:Gavin Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8477
| ''[[:d:Q3095279|Garan Evans]]''
|
|
|
|-
| style='text-align:right'| 8478
| ''[[:d:Q3098294|Gareth Davies]]''
| [[Coadan:Gareth Davies 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8479
| ''[[:d:Q3098295|Gareth Delve]]''
| [[Coadan:Garethdelve.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8480
| ''[[:d:Q3098303|Gareth Myles]]''
|
|
|
|-
| style='text-align:right'| 8481
| ''[[:d:Q3098300|Gareth Evans]]''
|
|
|
|-
| style='text-align:right'| 8482
| ''[[:d:Q3098305|Gareth Prothero]]''
|
|
|
|-
| style='text-align:right'| 8483
| ''[[:d:Q3098308|Gareth Morgan]]''
|
|
|
|-
| style='text-align:right'| 8484
| ''[[:d:Q3098309|Gareth Roberts]]''
|
|
|
|-
| style='text-align:right'| 8485
| ''[[:d:Q3098384|Garin Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8486
| ''[[:d:Q3099581|Gavin Evans]]''
|
|
|
|-
| style='text-align:right'| 8487
| ''[[:d:Q3101049|Geoff Evans]]''
|
|
|
|-
| style='text-align:right'| 8488
| ''[[:d:Q3104663|Gethin Jones]]''
| [[Coadan:Haypresent.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8489
| ''[[:d:Q3122557|Gwennan Harries]]''
|
|
|
|-
| style='text-align:right'| 8490
| ''[[:d:Q3122593|Gwynne Walters]]''
|
|
|
|-
| style='text-align:right'| 8491
| ''[[:d:Q3122600|Gwynne Howell]]''
|
|
|
|-
| style='text-align:right'| 8492
| ''[[:d:Q3124567|Michael Moritz]]''
| [[Coadan:Michael Moritz 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8493
| ''[[:d:Q3129370|Hefin O'Hare]]''
|
|
|
|-
| style='text-align:right'| 8494
| ''[[:d:Q3135573|Hilary Summers]]''
|
|
|
|-
| style='text-align:right'| 8495
| ''[[:d:Q3147258|Ian Edwards]]''
|
|
|
|-
| style='text-align:right'| 8496
| ''[[:d:Q3147273|Ian Hall]]''
|
|
|
|-
| style='text-align:right'| 8497
| ''[[:d:Q3147329|Ian Stephens]]''
|
|
|
|-
| style='text-align:right'| 8498
| ''[[:d:Q3147332|Ian Walsh]]''
|
|
|
|-
| style='text-align:right'| 8499
| ''[[:d:Q3147333|Ian Watkins]]''
|
|
|
|-
| style='text-align:right'| 8500
| ''[[:d:Q3148028|Iestyn Thomas]]''
| [[Coadan:Iestyn thomas scarlets.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8501
| ''[[:d:Q3161527|Jamie Corsi]]''
|
|
|
|-
| style='text-align:right'| 8502
| ''[[:d:Q3162903|Jason Bowen]]''
|
|
|
|-
| style='text-align:right'| 8503
| ''[[:d:Q3162947|Jason Hobson]]''
|
|
|
|-
| style='text-align:right'| 8504
| ''[[:d:Q3176589|Jeff Squire]]''
|
|
|
|-
| style='text-align:right'| 8505
| ''[[:d:Q3178941|Jim Shanklin]]''
|
|
|
|-
| style='text-align:right'| 8506
| ''[[:d:Q3181054|John Bevan]]''
|
|
|
|-
| style='text-align:right'| 8507
| ''[[:d:Q3181079|John Bloomfield]]''
|
|
|
|-
| style='text-align:right'| 8508
| ''[[:d:Q3181347|John Devereux]]''
| [[Coadan:John Devereux.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8509
| ''[[:d:Q3183202|Jon Jones]]''
|
|
|
|-
| style='text-align:right'| 8510
| ''[[:d:Q3183687|Jordan Follows]]''
|
|
|
|-
| style='text-align:right'| 8511
| ''[[:d:Q3189104|Julian Richards]]''
| [[Coadan:JulianRichards(director).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8512
| ''[[:d:Q3194743|Keith Jarrett]]''
| [[Coadan:Keith Jarrett 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8513
| ''[[:d:Q3194950|Kel Coslett]]''
|
|
|
|-
| style='text-align:right'| 8514
| ''[[:d:Q3195079|Ken Owens]]''
| [[Coadan:Ken Owens. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8515
| ''[[:d:Q3195435|Keri Collins]]''
|
|
|
|-
| style='text-align:right'| 8516
| ''[[:d:Q3195767|Kevin Morgan]]''
|
|
|
|-
| style='text-align:right'| 8517
| ''[[:d:Q3195786|Kevin Phillips]]''
|
|
|
|-
| style='text-align:right'| 8518
| ''[[:d:Q3199733|Kris Thomas]]''
|
|
|
|-
| style='text-align:right'| 8519
| ''[[:d:Q3228894|Lee Kendall]]''
|
|
|
|-
| style='text-align:right'| 8520
| ''[[:d:Q3228892|Lee Jarvis]]''
|
|
|
|-
| style='text-align:right'| 8521
| ''[[:d:Q3228944|Lee Thomas]]''
|
|
|
|-
| style='text-align:right'| 8522
| ''[[:d:Q3242418|Lisa Lazarus]]''
|
|
|
|-
| style='text-align:right'| 8523
| ''[[:d:Q3242440|Lisa Rogers]]''
|
|
|
|-
| style='text-align:right'| 8524
| ''[[:d:Q3257547|Lloyd Williams]]''
| [[Coadan:Lloyd Williams March 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8525
| ''[[:d:Q3257561|Llŷr Ifans]]''
| [[Coadan:Llyr Ifans, Terry Waite ar Asid.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8526
| ''[[:d:Q3269512|Lyndon Mustoe]]''
|
|
|
|-
| style='text-align:right'| 8527
| ''[[:d:Q3273906|Mac Adams]]''
| [[Coadan:Mac Adams circa 2003.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8528
| ''[[:d:Q3288217|Marc Limbert]]''
| [[Coadan:Marc limbert (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8529
| ''[[:d:Q3294221|Mark Ring]]''
|
|
|
|-
| style='text-align:right'| 8530
| ''[[:d:Q3294253|Mark Taylor]]''
|
|
|
|-
| style='text-align:right'| 8531
| ''[[:d:Q3296143|Mary Balogh]]''
|
|
|
|-
| style='text-align:right'| 8532
| ''[[:d:Q3299493|Matt Jones]]''
| [[Coadan:Matthew Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8533
| ''[[:d:Q3299663|Matthew Bancroft]]''
|
|
|
|-
| style='text-align:right'| 8534
| ''[[:d:Q3299703|Matthew Dent]]''
|
|
|
|-
| style='text-align:right'| 8535
| ''[[:d:Q3299747|Matthew Jones]]''
|
|
|
|-
| style='text-align:right'| 8536
| ''[[:d:Q3299763|Matthew Myers]]''
|
|
|
|-
| style='text-align:right'| 8537
| ''[[:d:Q3301335|Maurice Richards]]''
|
|
|
|-
| style='text-align:right'| 8538
| ''[[:d:Q3304186|Mefin Davies]]''
| [[Coadan:Mefin Davies Rugby Union Player.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8539
| ''[[:d:Q3308279|Michael Jones]]''
|
|
|
|-
| style='text-align:right'| 8540
| ''[[:d:Q3308429|Michael Paget]]''
| [[Coadan:Bullet for my Valentine - Wacken Open Air 2016-AL2256.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8541
| ''[[:d:Q3309601|Iwan Roberts]]''
| [[Coadan:Iwan Roberts (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8542
| ''[[:d:Q3313351|Mike Hall]]''
|
|
|
|-
| style='text-align:right'| 8543
| ''[[:d:Q3313349|Mike Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8544
| ''[[:d:Q3313516|Mike Roberts]]''
|
|
|
|-
| style='text-align:right'| 8545
| ''[[:d:Q3323734|Alexandra Roach]]''
|
|
|
|-
| style='text-align:right'| 8546
| ''[[:d:Q3324109|Einion ap Gwgon]]''
|
|
|
|-
| style='text-align:right'| 8547
| ''[[:d:Q3324142|Peryf ap Cedifor]]''
|
|
|
|-
| style='text-align:right'| 8548
| ''[[:d:Q3331107|Hywel Foel ap Griffri ap Pwyll Wyddel]]''
|
|
|
|-
| style='text-align:right'| 8549
| ''[[:d:Q3331118|Mererid Hopwood]]''
| [[Coadan:Mererid Hopwood, Cadeirydd y cyfarfod Dyfodol i’r Iaith, Yr Egin, Caerfyrddin (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8550
| ''[[:d:Q3331143|Iorwerth Fychan]]''
|
|
|
|-
| style='text-align:right'| 8551
| ''[[:d:Q3331150|Gwilym Rhyfel]]''
|
|
|
|-
| style='text-align:right'| 8552
| ''[[:d:Q3332440|Beirdd y Tywysogion]]''
|
|
|
|-
| style='text-align:right'| 8553
| ''[[:d:Q3334867|Nadia Chambers]]''
|
|
|
|-
| style='text-align:right'| 8554
| ''[[:d:Q3336457|Natasha Harding]]''
| [[Coadan:20150922 1826 W AUT WAL 3962.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8555
| ''[[:d:Q3337819|Neil Hamilton]]''
| [[Coadan:Neil Hamilton (politician), March 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8556
| ''[[:d:Q3339853|Nick Ward]]''
|
|
|
|-
| style='text-align:right'| 8557
| ''[[:d:Q3341363|Nigel Redman]]''
|
|
|
|-
| style='text-align:right'| 8558
| ''[[:d:Q3341371|Nigel Williams]]''
|
|
|
|-
| style='text-align:right'| 8559
| ''[[:d:Q3343310|Non Evans]]''
| [[Coadan:Non Evans (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8560
| ''[[:d:Q3350202|Tony Lewis]]''
|
|
|
|-
| style='text-align:right'| 8561
| ''[[:d:Q3370513|Paul Arnold]]''
|
|
|
|-
| style='text-align:right'| 8562
| ''[[:d:Q3371870|Paul Moriarty]]''
|
|
|
|-
| style='text-align:right'| 8563
| ''[[:d:Q3377178|Stephen Kinnock]]''
| [[Coadan:Official portrait of Stephen Kinnock MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8564
| ''[[:d:Q3378756|Phil Davies]]''
|
|
|
|-
| style='text-align:right'| 8565
| ''[[:d:Q3390705|Laurence Eaves]]''
|
|
|
|-
| style='text-align:right'| 8566
| ''[[:d:Q3391364|Daniel Evans]]''
| [[Coadan:Daniel Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8567
| ''[[:d:Q3395436|Tim Vincent]]''
| [[Coadan:Tim Vincent in 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8568
| ''[[:d:Q3396810|Ieuan Wyn Jones]]''
| [[Coadan:Ieuan Wyn Jones 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8569
| ''[[:d:Q3397705|Eifion Williams]]''
|
|
|
|-
| style='text-align:right'| 8570
| ''[[:d:Q3398074|Mihangel Morgan]]''
|
|
|
|-
| style='text-align:right'| 8571
| ''[[:d:Q3398131|Catrin Finch]]''
| [[Coadan:Catrinfinch-anoriant2008.png|center|128px]]
|
|
|-
| style='text-align:right'| 8572
| ''[[:d:Q3398315|Tudno]]''
| [[Coadan:Eglwys Tudno Sant - St Tudno's Church (geograph 1419209).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8573
| ''[[:d:Q3398331|Siôn Aled Owen]]''
|
|
|
|-
| style='text-align:right'| 8574
| ''[[:d:Q3398374|Meic Stevens]]''
| [[Coadan:Meic Stevens 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8575
| ''[[:d:Q3398492|Emily Huws]]''
|
|
|
|-
| style='text-align:right'| 8576
| ''[[:d:Q3398769|Jeremy Bowen]]''
| [[Coadan:Jeremy Bowen at City University.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8577
| ''[[:d:Q3399667|Ian "H" Watkins]]''
| [[Coadan:Ian 'H' Watkins at a Steps in-store album signing, 19th August 2022, HMV Manchester.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8578
| ''[[:d:Q3399714|Tavis Knoyle]]''
|
|
|
|-
| style='text-align:right'| 8579
| ''[[:d:Q3399819|Scott Williams]]''
| [[Coadan:Scott Williams 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8580
| ''[[:d:Q3400399|Craig Roberts]]''
| [[Coadan:Craig Roberts at the Moet BIFA British Independent Film Awards 2014 (15356308524).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8581
| ''[[:d:Q3400672|Nina Davies]]''
| [[Coadan:Nina Davies 2008MarathonChamps.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8582
| ''[[:d:Q3400803|Jon Ronson]]''
| [[Coadan:Jon Ronson (27846097432) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8583
| ''[[:d:Q3400851|Gwyneth Lewis]]''
| [[Coadan:Gwyneth Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8584
| ''[[:d:Q3400917|Elinor Bennett]]''
| [[Coadan:Talynau A Chan - Folk Songs & Harps, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8585
| ''[[:d:Q3401584|Simon Weston]]''
| [[Coadan:Simon Weston cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8586
| ''[[:d:Q3401592|Cynllo]]''
| [[Coadan:Llangynllo Church - geograph.org.uk - 722642.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8587
| ''[[:d:Q3401988|Peris]]''
| [[Coadan:Llanberis Eglwys Sant Padarn - Church of St Padarn, Llanberis, Gwynedd, Wales 16.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8588
| ''[[:d:Q3402000|Elin Manahan Thomas]]''
| [[Coadan:Doctor Who Symphonic Spectacular (Leeds 2015) (17603021913).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8589
| ''[[:d:Q3402032|Angharad Tomos]]''
| [[Coadan:Angharad Tomos.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8590
| ''[[:d:Q3402381|Anneliese Heard]]''
|
|
|
|-
| style='text-align:right'| 8591
| ''[[:d:Q3402674|Seren Gibson]]''
|
|
|
|-
| style='text-align:right'| 8592
| ''[[:d:Q3402724|Sian Adey-Jones]]''
|
|
|
|-
| style='text-align:right'| 8593
| ''[[:d:Q3403069|Robert Croft]]''
| [[Coadan:Robert Croft.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8594
| ''[[:d:Q3403153|Tiggy Legge-Bourke]]''
|
|
|
|-
| style='text-align:right'| 8595
| ''[[:d:Q3403217|Primael]]''
|
|
|
|-
| style='text-align:right'| 8596
| ''[[:d:Q3403412|Carys Parry]]''
|
|
|
|-
| style='text-align:right'| 8597
| ''[[:d:Q3403718|Sara Sugarman]]''
|
|
|
|-
| style='text-align:right'| 8598
| ''[[:d:Q3403741|Rhys Priestland]]''
| [[Coadan:Rhys Priestland. Wales Grand Slam Celebration, Senedd 19 March 2012 Rhys Priestland. Dathliadau Camp Lawn Cymru, Senedd 19 Mawrth 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8599
| ''[[:d:Q3403967|David Cornell]]''
|
|
|
|-
| style='text-align:right'| 8600
| ''[[:d:Q3404022|Pete Fowler]]''
|
|
|
|-
| style='text-align:right'| 8601
| ''[[:d:Q3404358|Julien Macdonald]]''
|
|
|
|-
| style='text-align:right'| 8602
| ''[[:d:Q3405033|Adam Price]]''
| [[Coadan:Adam-price (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8603
| ''[[:d:Q3405113|Cynog Dafis]]''
| [[Coadan:Cynog Dafis yn annerch y dorf Climate Strike, Aberystwyth (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8604
| ''[[:d:Q3405264|Angharad Price]]''
|
|
|
|-
| style='text-align:right'| 8605
| ''[[:d:Q3405572|John Owen-Jones]]''
| [[Coadan:John Owen-Jones as Jean Valjean.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8606
| ''[[:d:Q3405595|Alun Ffred Jones]]''
| [[Coadan:Alun Ffred Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8607
| ''[[:d:Q3405919|Jac Jones]]''
|
|
|
|-
| style='text-align:right'| 8608
| ''[[:d:Q3406214|Gruffudd ap Dafydd ap Tudur]]''
|
|
|
|-
| style='text-align:right'| 8609
| ''[[:d:Q3420523|Ray Hopkins]]''
|
|
|
|-
| style='text-align:right'| 8610
| ''[[:d:Q3429880|Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 8611
| ''[[:d:Q3430918|Richard Jones]]''
| [[Coadan:Nova2013 Stereophonics Richard Jones 0001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8612
| ''[[:d:Q3431101|Richard Parks]]''
| [[Coadan:Richard Parks.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8613
| ''[[:d:Q3431321|Richard Webster]]''
|
|
|
|-
| style='text-align:right'| 8614
| ''[[:d:Q3434143|Robert Ackerman]]''
| [[Coadan:Rob Ackerman 2013, watching the St Pat's Silverstream 2nd XV beat Wellington College.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8615
| ''[[:d:Q3435545|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 8616
| ''[[:d:Q3436303|Robert Sidoli]]''
|
|
|
|-
| style='text-align:right'| 8617
| ''[[:d:Q3436554|Robert Wilfort]]''
|
|
|
|-
| style='text-align:right'| 8618
| ''[[:d:Q3463769|Saint Enéour]]''
|
|
|
|-
| style='text-align:right'| 8619
| ''[[:d:Q3463819|Guirec]]''
|
|
|
|-
| style='text-align:right'| 8620
| ''[[:d:Q3476218|Scott Gibbs]]''
|
|
|
|-
| style='text-align:right'| 8621
| ''[[:d:Q3476277|Scott Morgan]]''
|
|
|
|-
| style='text-align:right'| 8622
| ''[[:d:Q3477940|Seisyll ap Clydog]]''
|
|
|
|-
| style='text-align:right'| 8623
| ''[[:d:Q3484297|Simon Halliday]]''
|
|
|
|-
| style='text-align:right'| 8624
| ''[[:d:Q3484454|Simon Spender]]''
|
|
|
|-
| style='text-align:right'| 8625
| ''[[:d:Q3485111|Sion Edwards]]''
|
|
|
|-
| style='text-align:right'| 8626
| ''[[:d:Q3498851|Steve Bates]]''
|
|
|
|-
| style='text-align:right'| 8627
| ''[[:d:Q3498920|Steve Evans]]''
|
|
|
|-
| style='text-align:right'| 8628
| ''[[:d:Q3498924|Steve Fenwick]]''
|
|
|
|-
| style='text-align:right'| 8629
| ''[[:d:Q3498965|Steve Jenkins]]''
| [[Coadan:Steve Jenkins October 2020.png|center|128px]]
|
|
|-
| style='text-align:right'| 8630
| ''[[:d:Q3498970|Steve Jones]]''
|
|
|
|-
| style='text-align:right'| 8631
| ''[[:d:Q3499384|Andrew Howard]]''
| [[Coadan:Andrew Howard 2016.png|center|128px]]
|
|
|-
| style='text-align:right'| 8632
| ''[[:d:Q3500815|Stuart Jones]]''
|
|
|
|-
| style='text-align:right'| 8633
| ''[[:d:Q3500816|Stuart Lane]]''
|
|
|
|-
| style='text-align:right'| 8634
| ''[[:d:Q3500845|Stuart Watkins]]''
| [[Coadan:Stuart Watkins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8635
| ''[[:d:Q3506759|Ray Phillips]]''
|
|
|
|-
| style='text-align:right'| 8636
| ''[[:d:Q3506825|Steve Williams]]''
|
|
|
|-
| style='text-align:right'| 8637
| ''[[:d:Q3507204|Tony Bourge]]''
|
|
|
|-
| style='text-align:right'| 8638
| ''[[:d:Q3518894|Terry Cobner]]''
|
|
|
|-
| style='text-align:right'| 8639
| ''[[:d:Q3518904|Terry Holmes]]''
|
|
|
|-
| style='text-align:right'| 8640
| ''[[:d:Q3525028|Tom David]]''
|
|
|
|-
| style='text-align:right'| 8641
| ''[[:d:Q3525517|T. Rhys Thomas]]''
| [[Coadan:Thomas Rhys Thomas 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8642
| ''[[:d:Q3530852|Tom Prydie]]''
| [[Coadan:Tom Prydie 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8643
| ''[[:d:Q3531420|Tomos Roberts]]''
|
|
|
|-
| style='text-align:right'| 8644
| ''[[:d:Q3531720|Tony Clement]]''
|
|
|
|-
| style='text-align:right'| 8645
| ''[[:d:Q3555478|Venetia Dearden]]''
|
|
|
|-
| style='text-align:right'| 8646
| ''[[:d:Q3555990|Vernon Cooper]]''
|
|
|
|-
| style='text-align:right'| 8647
| ''[[:d:Q3566386|Warren Fury]]''
|
|
|
|-
| style='text-align:right'| 8648
| ''[[:d:Q3566853|Wayne Proctor]]''
|
|
|
|-
| style='text-align:right'| 8649
| ''[[:d:Q3570213|Wyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 8650
| ''[[:d:Q3603082|Aaron Morris]]''
|
|
|
|-
| style='text-align:right'| 8651
| ''[[:d:Q3604991|Adam M. Jones]]''
|
|
|
|-
| style='text-align:right'| 8652
| ''[[:d:Q3610807|Alexander Vlahos]]''
| [[Coadan:Alexander Vlahos 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8653
| ''[[:d:Q3614735|Amy Charles]]''
|
|
|
|-
| style='text-align:right'| 8654
| ''[[:d:Q3614741|Amy Guy]]''
|
|
|
|-
| style='text-align:right'| 8655
| ''[[:d:Q3616280|Andrew Lewis]]''
|
|
|
|-
| style='text-align:right'| 8656
| ''[[:d:Q3624265|Arthur Emyr]]''
|
|
|
|-
| style='text-align:right'| 8657
| ''[[:d:Q3644380|Brett Morse]]''
|
|
|
|-
| style='text-align:right'| 8658
| ''[[:d:Q3648334|Mark Anthony]]''
|
|
|
|-
| style='text-align:right'| 8659
| ''[[:d:Q3661738|Casey Thomas]]''
|
|
|
|-
| style='text-align:right'| 8660
| ''[[:d:Q3666366|Charles Cook]]''
|
|
|
|-
| style='text-align:right'| 8661
| ''[[:d:Q3675531|Chris Maxwell]]''
| [[Coadan:Chris Maxwell Wrexham FC at Wembley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8662
| ''[[:d:Q3699742|Cystennin Fawr]]''
| [[Coadan:Bronze portrait of Constantinus I in the Musei Capitolini.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8663
| ''[[:d:Q3701545|Daniel Alfei]]''
|
|
|
|-
| style='text-align:right'| 8664
| ''[[:d:Q3703268|David Morgan]]''
|
|
|
|-
| style='text-align:right'| 8665
| ''[[:d:Q3758994|Gavin Quinnell]]''
|
|
|
|-
| style='text-align:right'| 8666
| ''[[:d:Q3786307|Holly Hale]]''
| [[Coadan:Hwe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8667
| ''[[:d:Q3791483|Ian Lougher]]''
| [[Coadan:CopyofTT072.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8668
| ''[[:d:Q3806739|James Thomas]]''
|
|
|
|-
| style='text-align:right'| 8669
| ''[[:d:Q3807026|Janet Price]]''
|
|
|
|-
| style='text-align:right'| 8670
| ''[[:d:Q3809621|John Sloman]]''
|
|
|
|-
| style='text-align:right'| 8671
| ''[[:d:Q3809908|Jonathan Brown]]''
|
|
|
|-
| style='text-align:right'| 8672
| ''[[:d:Q3809936|Aitor Ariño]]''
| [[Coadan:2025-10-19 Aitor Arino by mroptimax.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8673
| ''[[:d:Q3815276|Kim Ashfield]]''
|
|
|
|-
| style='text-align:right'| 8674
| ''[[:d:Q3829377|Lee Lucas]]''
| [[Coadan:Lee Lucas 08-02-2014 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8675
| ''[[:d:Q3830023|Leighton Phillips]]''
|
|
|
|-
| style='text-align:right'| 8676
| ''[[:d:Q3857385|Mike England]]''
|
|
|
|-
| style='text-align:right'| 8677
| ''[[:d:Q3885328|Ralph Evans]]''
|
|
|
|-
| style='text-align:right'| 8678
| ''[[:d:Q3898091|Paul James]]''
|
|
|
|-
| style='text-align:right'| 8679
| ''[[:d:Q3899285|Penvhyn Llewellyn Neville]]''
|
|
|
|-
| style='text-align:right'| 8680
| ''[[:d:Q3900874|Peter Karrie]]''
| [[Coadan:Peterkarrie.gif|center|128px]]
|
|
|-
| style='text-align:right'| 8681
| ''[[:d:Q3940078|Roger Freestone]]''
|
|
|
|-
| style='text-align:right'| 8682
| ''[[:d:Q3943059|Ryan Doble]]''
|
|
|
|-
| style='text-align:right'| 8683
| ''[[:d:Q3945649|Sally El Hosaini]]''
|
|
|
|-
| style='text-align:right'| 8684
| ''[[:d:Q3961106|Simon Bowman]]''
| [[Coadan:Nicole Scherzinger & the Phantoms - 16.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8685
| ''[[:d:Q3987390|Amy Roberts]]''
| [[Coadan:Quaregnon - Le Samyn des Dames & Le Samyn, 2 mars 2016, départ (B107).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8687
| ''[[:d:Q4009682|Venissa Head]]''
|
|
|
|-
| style='text-align:right'| 8688
| ''[[:d:Q4026445|Julie Gore]]''
|
|
|
|-
| style='text-align:right'| 8689
| ''[[:d:Q4072521|Afan]]''
| [[Coadan:St Afan's Church, Llanafan-Fawr - geograph.org.uk - 1468440.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8690
| ''[[:d:Q4083831|Mark Bennett]]''
|
|
|
|-
| style='text-align:right'| 8691
| ''[[:d:Q4086821|Dabheog]]''
| [[Coadan:Monaghan Saint Macartan's Cathedral Window Clogher Saints II Detail Saint Dobheóg of Lough Derg 2013 09 21.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8692
| ''[[:d:Q4160395|David John]]''
| [[Coadan:David John PHC 2016-4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8693
| ''[[:d:Q4160419|Kingsley Jones]]''
|
|
|
|-
| style='text-align:right'| 8694
| ''[[:d:Q4161903|Dingad of Llandingat]]''
|
|
|
|-
| style='text-align:right'| 8695
| ''[[:d:Q4172032|Anthony Davies]]''
|
|
|
|-
| style='text-align:right'| 8696
| ''[[:d:Q4207234|Gareth Evans]]''
| [[Coadan:Gareth Evans2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8697
| ''[[:d:Q4207586|Steve Jones]]''
| [[Coadan:Steve Jones (presenter).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8698
| ''[[:d:Q4218975|Keyne]]''
| [[Coadan:St Keyne's Well - geograph.org.uk - 1556016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8699
| ''[[:d:Q4219999|Cywair]]''
|
|
|
|-
| style='text-align:right'| 8700
| ''[[:d:Q4232388|Gareth Coppack]]''
|
|
|
|-
| style='text-align:right'| 8701
| ''[[:d:Q4241293|Cristiolus]]''
| [[Coadan:Eglwys St Cristiolus Church, Llangristiolus.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8702
| ''[[:d:Q4328347|Steve Newbury]]''
|
|
|
|-
| style='text-align:right'| 8703
| ''[[:d:Q4379087|Ian Preece]]''
| [[Coadan:Ian Preece PHC 2017-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8704
| ''[[:d:Q4385607|Emyr Jones Parry]]''
| [[Coadan:Emyr Jones Parry.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8705
| ''[[:d:Q4411544|Elian]]''
| [[Coadan:Sant Trillo St Trillo Betws yn Rhos Conwy Gogledd Cymru North Wales 16.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8706
| ''[[:d:Q4457143|Tudglid]]''
|
|
|
|-
| style='text-align:right'| 8707
| ''[[:d:Q4470106|Philip Williams]]''
|
|
|
|-
| style='text-align:right'| 8708
| ''[[:d:Q4482653|Mark Fenton]]''
|
|
|
|-
| style='text-align:right'| 8709
| ''[[:d:Q4530046|Almedha]]''
| [[Coadan:Eluned (straightened) Eglwys Aberhonddu (Brecon, Wales) 03.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8710
| ''[[:d:Q4539315|Erin Richards]]''
| [[Coadan:Erin Richards filming on Penarth Pier January 2016 (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8711
| ''[[:d:Q4575731|Geraint Williams]]''
|
|
|
|-
| style='text-align:right'| 8712
| ''[[:d:Q4648124|A. M. Esmonde]]''
|
|
|
|-
| style='text-align:right'| 8713
| ''[[:d:Q4661867|Aaron Bramwell]]''
|
|
|
|-
| style='text-align:right'| 8714
| ''[[:d:Q4661931|Aaron Cook]]''
|
|
|
|-
| style='text-align:right'| 8715
| ''[[:d:Q4661935|Aaron Coundley]]''
|
|
|
|-
| style='text-align:right'| 8716
| ''[[:d:Q4663748|Abbas Farid]]''
|
|
|
|-
| style='text-align:right'| 8717
| ''[[:d:Q4667523|Abi Morgan]]''
|
|
|
|-
| style='text-align:right'| 8718
| ''[[:d:Q4678792|Adam Brown]]''
|
|
|
|-
| style='text-align:right'| 8719
| ''[[:d:Q4678942|Adam Davies]]''
|
|
|
|-
| style='text-align:right'| 8720
| ''[[:d:Q4679184|Adam Harding]]''
|
|
|
|-
| style='text-align:right'| 8721
| ''[[:d:Q4679194|Adam Harrison]]''
|
|
|
|-
| style='text-align:right'| 8722
| ''[[:d:Q4679263|Adam Hughes]]''
|
|
|
|-
| style='text-align:right'| 8723
| ''[[:d:Q4679561|Adam O'Brian]]''
|
|
|
|-
| style='text-align:right'| 8724
| ''[[:d:Q4679574|Adam Owen]]''
|
|
|
|-
| style='text-align:right'| 8725
| ''[[:d:Q4679608|Adam Phillips]]''
| [[Coadan:Adam Phillips. Photogr. by Bracha L. Ettinger.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8726
| ''[[:d:Q4679626|Adam Powell]]''
|
|
|
|-
| style='text-align:right'| 8727
| ''[[:d:Q4679892|Adam Thomas]]''
|
|
|
|-
| style='text-align:right'| 8728
| ''[[:d:Q4679946|Adam Warren]]''
|
|
|
|-
| style='text-align:right'| 8729
| ''[[:d:Q4684916|Adrian Cambriani]]''
|
|
|
|-
| style='text-align:right'| 8730
| ''[[:d:Q4684968|Adrian Davies]]''
|
|
|
|-
| style='text-align:right'| 8731
| ''[[:d:Q4685066|Adrian Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8732
| ''[[:d:Q4685114|Adrian Holmes]]''
|
|
|
|-
| style='text-align:right'| 8733
| ''[[:d:Q4685181|Adrian Lewis Morgan]]''
|
|
|
|-
| style='text-align:right'| 8734
| ''[[:d:Q4685352|Adrian Shaw]]''
|
|
|
|-
| style='text-align:right'| 8735
| ''[[:d:Q4685401|Adrian Tucker]]''
|
|
|
|-
| style='text-align:right'| 8736
| ''[[:d:Q4704294|Al Lewis]]''
|
|
|
|-
| style='text-align:right'| 8737
| ''[[:d:Q4706157|Alan Beer]]''
|
|
|
|-
| style='text-align:right'| 8738
| ''[[:d:Q4706343|Alan Caughter]]''
|
|
|
|-
| style='text-align:right'| 8739
| ''[[:d:Q4706459|Alan Curtis]]''
|
|
|
|-
| style='text-align:right'| 8740
| ''[[:d:Q4706473|Alan David]]''
|
|
|
|-
| style='text-align:right'| 8741
| ''[[:d:Q4706991|Alan Jones]]''
|
|
|
|-
| style='text-align:right'| 8742
| ''[[:d:Q4706993|Alan Jones]]''
|
|
|
|-
| style='text-align:right'| 8743
| ''[[:d:Q4707361|Alan Morgan]]''
|
|
|
|-
| style='text-align:right'| 8744
| ''[[:d:Q4707769|Alan Simons]]''
|
|
|
|-
| style='text-align:right'| 8745
| ''[[:d:Q4707782|Alan Smith]]''
|
|
|
|-
| style='text-align:right'| 8746
| ''[[:d:Q4708055|Alan Wilkins]]''
|
|
|
|-
| style='text-align:right'| 8747
| ''[[:d:Q4708112|Alan Wynne Williams]]''
|
|
|
|-
| style='text-align:right'| 8748
| ''[[:d:Q4708700|Alastair Dalton]]''
|
|
|
|-
| style='text-align:right'| 8749
| ''[[:d:Q4708997|Alban Davies]]''
|
|
|
|-
| style='text-align:right'| 8750
| ''[[:d:Q4709611|Albert Alan Owen]]''
|
|
|
|-
| style='text-align:right'| 8751
| ''[[:d:Q4710021|Albert Day]]''
|
|
|
|-
| style='text-align:right'| 8752
| ''[[:d:Q4710353|Albert Green]]''
|
|
|
|-
| style='text-align:right'| 8753
| ''[[:d:Q4711325|Albert Thompson]]''
|
|
|
|-
| style='text-align:right'| 8754
| ''[[:d:Q4714179|Alec Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8755
| ''[[:d:Q4714330|Aled Davies]]''
| [[Coadan:Aled Davies (29997772112).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8756
| ''[[:d:Q4714328|Aled Davies]]''
|
|
|
|-
| style='text-align:right'| 8757
| ''[[:d:Q4714333|Aled James]]''
| [[Coadan:Aled James.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8758
| ''[[:d:Q4714342|Aled Thomas]]''
|
|
|
|-
| style='text-align:right'| 8759
| ''[[:d:Q4714340|Aled Haydn Jones]]''
| [[Coadan:Aledhaydnjones11.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8760
| ''[[:d:Q4714348|Aled Wyn Davies]]''
| [[Coadan:Erwau'r Daith, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8761
| ''[[:d:Q4716965|Alex Evans]]''
|
|
|
|-
| style='text-align:right'| 8762
| ''[[:d:Q4717093|Alex Greenfield]]''
|
|
|
|-
| style='text-align:right'| 8763
| ''[[:d:Q4717250|Alex Jones]]''
|
|
|
|-
| style='text-align:right'| 8764
| ''[[:d:Q4717255|Alex Jones]]''
| [[Coadan:Alex Jones 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8765
| ''[[:d:Q4717348|Alex Lawless]]''
| [[Coadan:Alex Lawless 24-09-2011 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8766
| ''[[:d:Q4717889|Alex Titchiner]]''
|
|
|
|-
| style='text-align:right'| 8767
| ''[[:d:Q4717948|Alex Walker]]''
|
|
|
|-
| style='text-align:right'| 8768
| ''[[:d:Q4717998|Alex Winters]]''
|
|
|
|-
| style='text-align:right'| 8769
| ''[[:d:Q4720591|Alexandra Boyd]]''
|
|
|
|-
| style='text-align:right'| 8770
| ''[[:d:Q4727193|Alison Statton]]''
| [[Coadan:Alison portret april 26, 1989.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8771
| ''[[:d:Q4730784|Allan Lewis]]''
|
|
|
|-
| style='text-align:right'| 8772
| ''[[:d:Q4732812|Allison Pearson]]''
|
|
|
|-
| style='text-align:right'| 8773
| ''[[:d:Q4737488|Alun Davies]]''
|
|
|
|-
| style='text-align:right'| 8774
| ''[[:d:Q4737493|Alun Davies]]''
| [[Coadan:Alun Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8775
| ''[[:d:Q4737502|Alun Pugh]]''
|
|
|
|-
| style='text-align:right'| 8776
| ''[[:d:Q4737506|Alun Pugh]]''
| [[Coadan:Alun Pugh.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8777
| ''[[:d:Q4737505|Alun Owen]]''
|
|
|
|-
| style='text-align:right'| 8778
| ''[[:d:Q4738526|Alwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 8779
| ''[[:d:Q4749104|Amy Beth Hayes]]''
|
|
|
|-
| style='text-align:right'| 8780
| ''[[:d:Q4756448|Andrew Brown]]''
|
|
|
|-
| style='text-align:right'| 8781
| ''[[:d:Q4756669|Andrew Coombs]]''
|
|
|
|-
| style='text-align:right'| 8782
| ''[[:d:Q4756770|Andrew Davies]]''
| [[Coadan:AndrewDavies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8783
| ''[[:d:Q4756812|Andrew Dilnot]]''
| [[Coadan:Andrew Dilnot 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8784
| ''[[:d:Q4757241|Andrew Harris]]''
|
|
|
|-
| style='text-align:right'| 8785
| ''[[:d:Q4757506|Andrew John]]''
| [[Coadan:TMR Andy John.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8786
| ''[[:d:Q4757532|Andrew Jones]]''
|
|
|
|-
| style='text-align:right'| 8787
| ''[[:d:Q4757992|Andrew McNeillie]]''
|
|
|
|-
| style='text-align:right'| 8788
| ''[[:d:Q4758034|Andrew Millward]]''
|
|
|
|-
| style='text-align:right'| 8789
| ''[[:d:Q4758081|Andrew Mumford]]''
|
|
|
|-
| style='text-align:right'| 8790
| ''[[:d:Q4758266|Andrew Phillip Smith]]''
| [[Coadan:Andrew Phillip Smith.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 8791
| ''[[:d:Q4758350|Andrew RT Davies]]''
| [[Coadan:Andrew RT Davies 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8792
| ''[[:d:Q4758493|Andrew Salter]]''
|
|
|
|-
| style='text-align:right'| 8793
| ''[[:d:Q4760358|Andy Allen]]''
|
|
|
|-
| style='text-align:right'| 8794
| ''[[:d:Q4760525|Andy Clement]]''
|
|
|
|-
| style='text-align:right'| 8795
| ''[[:d:Q4760597|Andy Dibble]]''
| [[Coadan:Dibble, Andy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8796
| ''[[:d:Q4760648|Andy Evans]]''
|
|
|
|-
| style='text-align:right'| 8797
| ''[[:d:Q4760660|Andy Fenby]]''
|
|
|
|-
| style='text-align:right'| 8798
| ''[[:d:Q4760715|Andy Goddard]]''
|
|
|
|-
| style='text-align:right'| 8799
| ''[[:d:Q4760823|Andy Holden]]''
|
|
|
|-
| style='text-align:right'| 8800
| ''[[:d:Q4760820|Andy Hockley]]''
|
|
|
|-
| style='text-align:right'| 8801
| ''[[:d:Q4760865|Andy Jones]]''
|
|
|
|-
| style='text-align:right'| 8802
| ''[[:d:Q4760958|Andy Lloyd]]''
|
|
|
|-
| style='text-align:right'| 8803
| ''[[:d:Q4760995|Andy Martin]]''
|
|
|
|-
| style='text-align:right'| 8804
| ''[[:d:Q4761069|Andy Moule]]''
|
|
|
|-
| style='text-align:right'| 8805
| ''[[:d:Q4761195|Andy Puddle]]''
|
|
|
|-
| style='text-align:right'| 8806
| ''[[:d:Q4761292|Andy Scott-Lee]]''
|
|
|
|-
| style='text-align:right'| 8807
| ''[[:d:Q4761436|Andy Vine]]''
|
|
|
|-
| style='text-align:right'| 8808
| ''[[:d:Q4761470|Andy White]]''
|
|
|
|-
| style='text-align:right'| 8809
| ''[[:d:Q4761604|Aneirin Hughes]]''
| [[Coadan:Aneirin Hughes 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8810
| ''[[:d:Q4761761|Aneurin Norman]]''
|
|
|
|-
| style='text-align:right'| 8811
| ''[[:d:Q4762459|Angela Hazeldine]]''
|
|
|
|-
| style='text-align:right'| 8812
| ''[[:d:Q4763155|Angharad James]]''
| [[Coadan:20150922 1827 W AUT WAL 3989.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8813
| ''[[:d:Q4763163|Angharad ferch Meurig]]''
|
|
|
|-
| style='text-align:right'| 8814
| ''[[:d:Q4763160|Angharad Mason]]''
|
|
|
|-
| style='text-align:right'| 8815
| ''[[:d:Q4766340|Ann Cotton]]''
| [[Coadan:Ann Lesley Cotton From Poverty to Prosperity- Engaging the Next Generation (5579338412) (3).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8816
| ''[[:d:Q4766483|Ann Keen]]''
| [[Coadan:Ann Keen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8817
| ''[[:d:Q4766480|Ann Jones]]''
| [[Coadan:Ann Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8818
| ''[[:d:Q4768946|Anneka Rice]]''
| [[Coadan:AnnekaRice.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8819
| ''[[:d:Q4772117|Anthony Blackwood]]''
| [[Coadan:Anthony Blackwood.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8820
| ''[[:d:Q4772997|Anthony Malarczyk]]''
|
|
|
|-
| style='text-align:right'| 8821
| ''[[:d:Q4773210|Anthony O'Donnell]]''
|
|
|
|-
| style='text-align:right'| 8822
| ''[[:d:Q4773354|Anthony Reynolds]]''
|
|
|
|-
| style='text-align:right'| 8823
| ''[[:d:Q4773723|Anthony Williams]]''
|
|
|
|-
| style='text-align:right'| 8824
| ''[[:d:Q4777220|Antony John Williams]]''
| [[Coadan:Tony Williams, ACS Spring, 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8825
| ''[[:d:Q4784337|Arash Amel]]''
| [[Coadan:Arash Amel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8826
| ''[[:d:Q4786631|Archie Brown]]''
|
|
|
|-
| style='text-align:right'| 8827
| ''[[:d:Q4789156|Arfon Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8828
| ''[[:d:Q4796062|Arron Davies]]''
| [[Coadan:ArronDavies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8829
| ''[[:d:Q4798596|Arthur Ellis]]''
|
|
|
|-
| style='text-align:right'| 8830
| ''[[:d:Q4798724|Arthur Francis]]''
|
|
|
|-
| style='text-align:right'| 8831
| ''[[:d:Q4802552|Arwel Richards]]''
| [[Coadan:ArwelRichardsJune2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8832
| ''[[:d:Q4805363|Ashley Bateman]]''
|
|
|
|-
| style='text-align:right'| 8833
| ''[[:d:Q4805364|Ashley Beck]]''
| [[Coadan:ST vs Ospreys 08-12-120074.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8834
| ''[[:d:Q4805629|Ashley Way]]''
|
|
|
|-
| style='text-align:right'| 8835
| ''[[:d:Q4860676|Bari Morgan]]''
|
|
|
|-
| style='text-align:right'| 8836
| ''[[:d:Q4863529|Barrie Jones]]''
|
|
|
|-
| style='text-align:right'| 8837
| ''[[:d:Q4864199|Barry Elsby]]''
| [[Coadan:Barry Elsby (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8838
| ''[[:d:Q4864507|Barry Metcalf]]''
|
|
|
|-
| style='text-align:right'| 8839
| ''[[:d:Q4864914|Barry Wright]]''
|
|
|
|-
| style='text-align:right'| 8840
| ''[[:d:Q4878858|Becky Morgan]]''
| [[Coadan:2013 Women's British Open - Becky Morgan (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8841
| ''[[:d:Q4879327|Bedo Aeddren]]''
|
|
|
|-
| style='text-align:right'| 8842
| ''[[:d:Q4879480|Bedwyr Williams]]''
|
|
|
|-
| style='text-align:right'| 8843
| ''[[:d:Q4885193|Ben Addis]]''
|
|
|
|-
| style='text-align:right'| 8844
| ''[[:d:Q4885611|Ben Evans]]''
|
|
|
|-
| style='text-align:right'| 8845
| ''[[:d:Q4885613|Ben Evans]]''
| [[Coadan:Ben Evans London Broncos.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8846
| ''[[:d:Q4885643|Ben Flower]]''
| [[Coadan:Ben Flower.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8847
| ''[[:d:Q4885931|Ben John]]''
|
|
|
|-
| style='text-align:right'| 8848
| ''[[:d:Q4885953|Ben Jones]]''
|
|
|
|-
| style='text-align:right'| 8849
| ''[[:d:Q4886058|Ben Lewis]]''
|
|
|
|-
| style='text-align:right'| 8850
| ''[[:d:Q4886292|Ben Phillips]]''
|
|
|
|-
| style='text-align:right'| 8851
| ''[[:d:Q4886472|Ben Slade]]''
|
|
|
|-
| style='text-align:right'| 8852
| ''[[:d:Q4886530|Ben Swallow]]''
| [[Coadan:Ben Swallow 18-02-12.png|center|128px]]
|
|
|-
| style='text-align:right'| 8853
| ''[[:d:Q4889528|Benji Webbe]]''
| [[Coadan:Skindred - Elbriot 2018 20.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8854
| ''[[:d:Q4889664|Bennett Arron]]''
|
|
|
|-
| style='text-align:right'| 8855
| ''[[:d:Q4893143|Bernard Frederick]]''
|
|
|
|-
| style='text-align:right'| 8856
| ''[[:d:Q4893330|Bernard Knight]]''
|
|
|
|-
| style='text-align:right'| 8857
| ''[[:d:Q4893436|Bernard McNally]]''
|
|
|
|-
| style='text-align:right'| 8858
| ''[[:d:Q4894429|Bernie Lewis]]''
|
|
|
|-
| style='text-align:right'| 8859
| ''[[:d:Q4897683|Bethan Elfyn]]''
|
|
|
|-
| style='text-align:right'| 8860
| ''[[:d:Q4897688|Bethan Sayed]]''
| [[Coadan:Bethan Jenkins 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8861
| ''[[:d:Q4898223|Betsan Powys]]''
| [[Coadan:Betsan Powys 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8862
| ''[[:d:Q4899014|Betty Williams]]''
|
|
|
|-
| style='text-align:right'| 8863
| ''[[:d:Q4899417|Beverley Jones]]''
|
|
|
|-
| style='text-align:right'| 8864
| ''[[:d:Q4912305|Billy Butler]]''
| [[Coadan:Billy Butler 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8865
| ''[[:d:Q4912779|Billy James]]''
|
|
|
|-
| style='text-align:right'| 8866
| ''[[:d:Q4925838|Bleddyn Bowen]]''
|
|
|
|-
| style='text-align:right'| 8867
| ''[[:d:Q4925842|Bleddyn Taylor]]''
|
|
|
|-
| style='text-align:right'| 8868
| ''[[:d:Q4932039|Bob Catley]]''
|
|
|
|-
| style='text-align:right'| 8869
| ''[[:d:Q4932261|Bob Delgado]]''
|
|
|
|-
| style='text-align:right'| 8870
| ''[[:d:Q4932323|Bob Dudley-Jones]]''
|
|
|
|-
| style='text-align:right'| 8871
| ''[[:d:Q4932463|Bob Franklin]]''
| [[Coadan:Bob Franklin 1, 2011, jjron.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8872
| ''[[:d:Q4933076|Bob Kucera]]''
|
|
|
|-
| style='text-align:right'| 8873
| ''[[:d:Q4933698|Bob Pugh]]''
|
|
|
|-
| style='text-align:right'| 8874
| ''[[:d:Q4934328|Bob Weaver]]''
|
|
|
|-
| style='text-align:right'| 8875
| ''[[:d:Q4943807|Claire Curtis-Thomas]]''
|
|
|
|-
| style='text-align:right'| 8876
| ''[[:d:Q4955010|Bradley Pryce]]''
| [[Coadan:Bradley Pryce.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8877
| ''[[:d:Q4955057|Bradley Wadlan]]''
|
|
|
|-
| style='text-align:right'| 8878
| ''[[:d:Q4963005|Brian Attley]]''
|
|
|
|-
| style='text-align:right'| 8879
| ''[[:d:Q4963178|Brian Bowditch]]''
|
|
|
|-
| style='text-align:right'| 8880
| ''[[:d:Q4963235|Brian Butler]]''
|
|
|
|-
| style='text-align:right'| 8881
| ''[[:d:Q4963315|Brian Caswell]]''
|
|
|
|-
| style='text-align:right'| 8882
| ''[[:d:Q4963529|Sarah Loosemore]]''
|
|
|
|-
| style='text-align:right'| 8883
| ''[[:d:Q4963897|Brian Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8884
| ''[[:d:Q4963931|Brian Hancock]]''
| [[Coadan:Brian Hancock.png|center|128px]]
|
|
|-
| style='text-align:right'| 8885
| ''[[:d:Q4964202|Brian Jenkins]]''
| [[Coadan:Brian Jenkins 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8886
| ''[[:d:Q4964262|Brian Juliff]]''
|
|
|
|-
| style='text-align:right'| 8887
| ''[[:d:Q4964454|Brian Law]]''
|
|
|
|-
| style='text-align:right'| 8888
| ''[[:d:Q4964513|Brian Lloyd]]''
|
|
|
|-
| style='text-align:right'| 8889
| ''[[:d:Q4967443|Bright Light Bright Light]]''
| [[Coadan:Rod Thomas Trickledown.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8890
| ''[[:d:Q4980861|Bryn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8891
| ''[[:d:Q4980879|Bryn Jones]]''
|
|
|
|-
| style='text-align:right'| 8892
| ''[[:d:Q4980919|Bryn Williams]]''
|
|
|
|-
| style='text-align:right'| 8893
| ''[[:d:Q4981006|Brynley Jones]]''
|
|
|
|-
| style='text-align:right'| 8894
| ''[[:d:Q4981021|Brynmor Williams]]''
|
|
|
|-
| style='text-align:right'| 8895
| ''[[:d:Q4984759|Buddug Verona James]]''
|
|
|
|-
| style='text-align:right'| 8896
| ''[[:d:Q5004293|Byron Anthony]]''
| [[Coadan:Phil Kite.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8897
| ''[[:d:Q5004338|Byron Davies]]''
| [[Coadan:Official portrait of Lord Davies of Gower crop 2, 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8898
| ''[[:d:Q5004379|Byron Hayward]]''
|
|
|
|-
| style='text-align:right'| 8899
| ''[[:d:Q5017482|Cai Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8900
| ''[[:d:Q5022959|Callum Hart]]''
|
|
|
|-
| style='text-align:right'| 8901
| ''[[:d:Q5026396|Cameron Toshack]]''
|
|
|
|-
| style='text-align:right'| 8902
| ''[[:d:Q5036555|Captain Beany]]''
| [[Coadan:Captain Beany - geograph.org.uk - 6822015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8903
| ''[[:d:Q5037322|Cara Readle]]''
|
|
|
|-
| style='text-align:right'| 8904
| ''[[:d:Q5037601|Caradog Jones]]''
|
|
|
|-
| style='text-align:right'| 8905
| ''[[:d:Q5040015|Carl Dale]]''
|
|
|
|-
| style='text-align:right'| 8906
| ''[[:d:Q5040714|Carl Roberts]]''
|
|
|
|-
| style='text-align:right'| 8907
| ''[[:d:Q5045217|Caroline Sheen]]''
|
|
|
|-
| style='text-align:right'| 8908
| ''[[:d:Q5047746|Carys Hawkins]]''
| [[Coadan:Caryshawkins glory.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8909
| ''[[:d:Q5051783|Cate Le Bon]]''
| [[Coadan:Cate Le Bon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8910
| ''[[:d:Q5053946|Catrin Edwards]]''
|
|
|
|-
| style='text-align:right'| 8911
| ''[[:d:Q5053948|Catrin Stewart]]''
| [[Coadan:Catrin Stewart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8912
| ''[[:d:Q5053949|Catrin Thomas]]''
|
|
|
|-
| style='text-align:right'| 8913
| ''[[:d:Q5057382|Ceiri Torjussen]]''
|
|
|
|-
| style='text-align:right'| 8914
| ''[[:d:Q5057386|Ceiron Thomas]]''
|
|
|
|-
| style='text-align:right'| 8915
| ''[[:d:Q5057975|Celia Barlow]]''
|
|
|
|-
| style='text-align:right'| 8916
| ''[[:d:Q5063221|Cenydd]]''
| [[Coadan:LLangennith church.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 8917
| ''[[:d:Q5064233|Ceri Hughes]]''
|
|
|
|-
| style='text-align:right'| 8918
| ''[[:d:Q5064239|Ceri Phillips]]''
|
|
|
|-
| style='text-align:right'| 8919
| ''[[:d:Q5066169|Chad Bond]]''
| [[Coadan:Chad Bond.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 8920
| ''[[:d:Q5074191|Chard Hayward]]''
|
|
|
|-
| style='text-align:right'| 8921
| ''[[:d:Q5076682|Charles Dale]]''
|
|
|
|-
| style='text-align:right'| 8922
| ''[[:d:Q5080412|Charles Lynn Davies]]''
|
|
|
|-
| style='text-align:right'| 8923
| ''[[:d:Q5081973|Charles Rees]]''
|
|
|
|-
| style='text-align:right'| 8924
| ''[[:d:Q5082319|Charles Sage]]''
|
|
|
|-
| style='text-align:right'| 8925
| ''[[:d:Q5082619|Charles Staines]]''
|
|
|
|-
| style='text-align:right'| 8926
| ''[[:d:Q5085136|Charlie Landsborough]]''
|
|
|
|-
| style='text-align:right'| 8927
| ''[[:d:Q5092334|Cherry Dee]]''
|
|
|
|-
| style='text-align:right'| 8928
| ''[[:d:Q5092726|Cheryl Foster]]''
| [[Coadan:Cheryl Foster 20181101.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8929
| ''[[:d:Q5105905|Chris Birch]]''
|
|
|
|-
| style='text-align:right'| 8930
| ''[[:d:Q5106346|Chris Dale]]''
|
|
|
|-
| style='text-align:right'| 8931
| ''[[:d:Q5106362|Chris Davies]]''
|
|
|
|-
| style='text-align:right'| 8932
| ''[[:d:Q5106395|Chris Dicomidis]]''
|
|
|
|-
| style='text-align:right'| 8933
| ''[[:d:Q5106513|Chris Evans]]''
|
|
|
|-
| style='text-align:right'| 8934
| ''[[:d:Q5106601|Chris Fry]]''
|
|
|
|-
| style='text-align:right'| 8935
| ''[[:d:Q5106660|Chris Giles]]''
|
|
|
|-
| style='text-align:right'| 8936
| ''[[:d:Q5107007|Chris Jenkins]]''
| [[Coadan:Chrisjenkinsbodypower.png|center|128px]]
|
|
|-
| style='text-align:right'| 8937
| ''[[:d:Q5107005|Chris Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8938
| ''[[:d:Q5107015|Chris Johns]]''
|
|
|
|-
| style='text-align:right'| 8939
| ''[[:d:Q5107037|Chris Jones]]''
|
|
|
|-
| style='text-align:right'| 8940
| ''[[:d:Q5107253|Chris Llewellyn]]''
| [[Coadan:Chris Llewellyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8941
| ''[[:d:Q5107713|Chris Pearce]]''
|
|
|
|-
| style='text-align:right'| 8942
| ''[[:d:Q5107766|Chris Pike]]''
|
|
|
|-
| style='text-align:right'| 8943
| ''[[:d:Q5107913|Chris Rodon]]''
|
|
|
|-
| style='text-align:right'| 8944
| ''[[:d:Q5108280|Chris Todd]]''
|
|
|
|-
| style='text-align:right'| 8945
| ''[[:d:Q5108299|Chris Townsend]]''
|
|
|
|-
| style='text-align:right'| 8946
| ''[[:d:Q5109563|Christian Edwards]]''
|
|
|
|-
| style='text-align:right'| 8947
| ''[[:d:Q5110078|Christian Roberts]]''
|
|
|
|-
| style='text-align:right'| 8948
| ''[[:d:Q5110965|Christine Chapman]]''
| [[Coadan:Christine Chapman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8949
| ''[[:d:Q5111036|Christine Gwyther]]''
| [[Coadan:Christinegwyther.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8950
| ''[[:d:Q5111062|Christine James]]''
| [[Coadan:Christine James Cyn-Archdderwydd Awst 2018 7.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8951
| ''[[:d:Q5112290|Christopher Evans]]''
|
|
|
|-
| style='text-align:right'| 8952
| ''[[:d:Q5112291|Christopher Evans]]''
|
|
|
|-
| style='text-align:right'| 8953
| ''[[:d:Q5112865|Christopher Meredith]]''
|
|
|
|-
| style='text-align:right'| 8954
| ''[[:d:Q5112896|Christopher Monger]]''
|
|
|
|-
| style='text-align:right'| 8955
| ''[[:d:Q5112979|Christopher O'Brien]]''
|
|
|
|-
| style='text-align:right'| 8956
| ''[[:d:Q5113189|Christopher Salmon]]''
| [[Coadan:Christopher Salmon PCC.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8957
| ''[[:d:Q5113212|Christopher Seldon]]''
|
|
|
|-
| style='text-align:right'| 8958
| ''[[:d:Q5119067|Cian Ciaran]]''
| [[Coadan:Cian Ciaran Summersonic 2008 crop&lighten.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8959
| ''[[:d:Q5119143|Ciaran Jenkins]]''
|
|
|
|-
| style='text-align:right'| 8960
| ''[[:d:Q5119144|Ciarán Joyce]]''
|
|
|
|-
| style='text-align:right'| 8961
| ''[[:d:Q5125191|Claire Evans]]''
|
|
|
|-
| style='text-align:right'| 8962
| ''[[:d:Q5125320|Claire Summers]]''
| [[Coadan:Claire Summers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8963
| ''[[:d:Q5125351|Claire Williams]]''
|
|
|
|-
| style='text-align:right'| 8964
| ''[[:d:Q5126175|Clare Greenwood]]''
|
|
|
|-
| style='text-align:right'| 8965
| ''[[:d:Q5134507|Clive Branson]]''
|
|
|
|-
| style='text-align:right'| 8966
| ''[[:d:Q5134504|Clive Bowen]]''
|
|
|
|-
| style='text-align:right'| 8967
| ''[[:d:Q5134542|Clive Davies]]''
|
|
|
|-
| style='text-align:right'| 8968
| ''[[:d:Q5134586|Clive Griffiths]]''
|
|
|
|-
| style='text-align:right'| 8969
| ''[[:d:Q5134598|Clive Hill]]''
|
|
|
|-
| style='text-align:right'| 8970
| ''[[:d:Q5134610|Clive Jones]]''
|
|
|
|-
| style='text-align:right'| 8971
| ''[[:d:Q5134640|Clive Norling]]''
|
|
|
|-
| style='text-align:right'| 8972
| ''[[:d:Q5144947|Colin Campbell, 7th Earl Cawdor]]''
|
|
|
|-
| style='text-align:right'| 8973
| ''[[:d:Q5144972|Colin Casemore]]''
|
|
|
|-
| style='text-align:right'| 8974
| ''[[:d:Q5145156|Colin Green]]''
|
|
|
|-
| style='text-align:right'| 8975
| ''[[:d:Q5145239|Colin Jeavons]]''
|
|
|
|-
| style='text-align:right'| 8976
| ''[[:d:Q5145249|Colin Jones]]''
|
|
|
|-
| style='text-align:right'| 8977
| ''[[:d:Q5145287|Colin Leys]]''
| [[Coadan:ColinLeys-2016-SOAS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8978
| ''[[:d:Q5145499|Colin Randell]]''
|
|
|
|-
| style='text-align:right'| 8979
| ''[[:d:Q5145585|Colin Standing]]''
|
|
|
|-
| style='text-align:right'| 8980
| ''[[:d:Q5173537|Cory Allen]]''
| [[Coadan:Cory Allen at The Arms Park 2013-10-21 17-55.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8981
| ''[[:d:Q5180912|Craig Draper]]''
|
|
|
|-
| style='text-align:right'| 8982
| ''[[:d:Q5180944|Craig Evans]]''
|
|
|
|-
| style='text-align:right'| 8983
| ''[[:d:Q5180983|Craig Gallivan]]''
|
|
|
|-
| style='text-align:right'| 8984
| ''[[:d:Q5180995|Craig Goodwin]]''
|
|
|
|-
| style='text-align:right'| 8985
| ''[[:d:Q5181010|Craig Handley]]''
|
|
|
|-
| style='text-align:right'| 8986
| ''[[:d:Q5181044|Craig Hill]]''
|
|
|
|-
| style='text-align:right'| 8987
| ''[[:d:Q5181147|Craig Lawton]]''
|
|
|
|-
| style='text-align:right'| 8988
| ''[[:d:Q5181341|Craig Price]]''
|
|
|
|-
| style='text-align:right'| 8989
| ''[[:d:Q5181370|Craig Richards]]''
|
|
|
|-
| style='text-align:right'| 8990
| ''[[:d:Q5181496|Craig Stiens]]''
|
|
|
|-
| style='text-align:right'| 8991
| ''[[:d:Q5195826|Curtis McDonald]]''
|
|
|
|-
| style='text-align:right'| 8992
| ''[[:d:Q5200682|Cyril Davies]]''
|
|
|
|-
| style='text-align:right'| 8993
| ''[[:d:Q5200789|Cyril Lea]]''
| [[Coadan:Cyril Lea (1978).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 8994
| ''[[:d:Q5200894|Cyril Tamplin]]''
|
|
|
|-
| style='text-align:right'| 8995
| ''[[:d:Q5208377|Dafydd Carter]]''
|
|
|
|-
| style='text-align:right'| 8996
| ''[[:d:Q5208383|Dafydd Ieuan]]''
|
|
|
|-
| style='text-align:right'| 8997
| ''[[:d:Q5208381|Dafydd Hewitt]]''
|
|
|
|-
| style='text-align:right'| 8998
| ''[[:d:Q5208384|Dafydd Lockyer]]''
|
|
|
|-
| style='text-align:right'| 8999
| ''[[:d:Q5208977|Dai Bevan]]''
|
|
|
|-
| style='text-align:right'| 9000
| ''[[:d:Q5208989|Dai Davies]]''
| [[Coadan:David Davies c215f5bacb.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9001
| ''[[:d:Q5209010|Dai Jones]]''
|
|
|
|-
| style='text-align:right'| 9002
| ''[[:d:Q5209031|Dai Rees]]''
|
|
|
|-
| style='text-align:right'| 9003
| ''[[:d:Q5209028|Dai Rees]]''
|
|
|
|-
| style='text-align:right'| 9004
| ''[[:d:Q5209029|Dai Rees]]''
|
|
|
|-
| style='text-align:right'| 9005
| ''[[:d:Q5209037|Dai Thomas]]''
|
|
|
|-
| style='text-align:right'| 9006
| ''[[:d:Q5209040|Dai Thomas]]''
|
|
|
|-
| style='text-align:right'| 9007
| ''[[:d:Q5210441|Dale Ford]]''
|
|
|
|-
| style='text-align:right'| 9008
| ''[[:d:Q5210694|Dale Williams]]''
|
|
|
|-
| style='text-align:right'| 9009
| ''[[:d:Q5211687|Dalton Grant]]''
| [[Coadan:Dalton Grant.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9010
| ''[[:d:Q5212277|Damian Keyes]]''
|
|
|
|-
| style='text-align:right'| 9011
| ''[[:d:Q5212328|Damian Shirazi]]''
|
|
|
|-
| style='text-align:right'| 9012
| ''[[:d:Q5212452|Damien Hudd]]''
|
|
|
|-
| style='text-align:right'| 9013
| ''[[:d:Q5212879|Damon Searle]]''
| [[Coadan:Damon Searle.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9014
| ''[[:d:Q5213252|Dan Cherry]]''
|
|
|
|-
| style='text-align:right'| 9015
| ''[[:d:Q5213482|Dan Fish]]''
| [[Coadan:Dan Fish.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9016
| ''[[:d:Q5213554|Dan George]]''
|
|
|
|-
| style='text-align:right'| 9017
| ''[[:d:Q5213878|Dan Lewis]]''
|
|
|
|-
| style='text-align:right'| 9018
| ''[[:d:Q5214493|Dan Thomas]]''
| [[Coadan:Dan-thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9019
| ''[[:d:Q5216926|Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 9020
| ''[[:d:Q5217351|Daniel Griffiths]]''
|
|
|
|-
| style='text-align:right'| 9021
| ''[[:d:Q5217448|Daniel Hawksford]]''
|
|
|
|-
| style='text-align:right'| 9022
| ''[[:d:Q5217957|Daniel Lloyd]]''
| [[Coadan:Dan Lloyd a Mr Pinc.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9023
| ''[[:d:Q5218257|Daniel Newton]]''
|
|
|
|-
| style='text-align:right'| 9024
| ''[[:d:Q5218813|Daniel Sperber]]''
| [[Coadan:Daniel Sperber.png|center|128px]]
|
|
|-
| style='text-align:right'| 9025
| ''[[:d:Q5219402|Danielle Lineker]]''
| [[Coadan:DanielleLineker2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9026
| ''[[:d:Q5220422|Danny Harris]]''
|
|
|
|-
| style='text-align:right'| 9027
| ''[[:d:Q5220721|Daniel Parslow]]''
| [[Coadan:Danny Parslow 2017-08-28 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9028
| ''[[:d:Q5220880|Danny Thomas]]''
|
|
|
|-
| style='text-align:right'| 9029
| ''[[:d:Q5220937|Danny Williams]]''
|
|
|
|-
| style='text-align:right'| 9030
| ''[[:d:Q5220946|Danny Wilson]]''
|
|
|
|-
| style='text-align:right'| 9031
| ''[[:d:Q5222071|Daral Pugh]]''
|
|
|
|-
| style='text-align:right'| 9032
| ''[[:d:Q5222678|Dari Taylor]]''
|
|
|
|-
| style='text-align:right'| 9033
| ''[[:d:Q5224748|Darren Allinson]]''
| [[Coadan:Darren Allinson 2 crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9034
| ''[[:d:Q5224871|Darren Davies]]''
|
|
|
|-
| style='text-align:right'| 9035
| ''[[:d:Q5224868|Darren Daniel]]''
|
|
|
|-
| style='text-align:right'| 9036
| ''[[:d:Q5224901|Darren Edwards]]''
|
|
|
|-
| style='text-align:right'| 9037
| ''[[:d:Q5224966|Darren Heyes]]''
|
|
|
|-
| style='text-align:right'| 9038
| ''[[:d:Q5224988|Darren Jeffries]]''
|
|
|
|-
| style='text-align:right'| 9039
| ''[[:d:Q5224996|Darren Jones]]''
| [[Coadan:Darrenjones.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9040
| ''[[:d:Q5225131|Darran Rowbotham]]''
|
|
|
|-
| style='text-align:right'| 9041
| ''[[:d:Q5225192|Darren Thomas]]''
|
|
|
|-
| style='text-align:right'| 9042
| ''[[:d:Q5225199|Darren Tinson]]''
|
|
|
|-
| style='text-align:right'| 9043
| ''[[:d:Q5225221|Darren Waters]]''
|
|
|
|-
| style='text-align:right'| 9044
| ''[[:d:Q5225252|Darren Wynne]]''
|
|
|
|-
| style='text-align:right'| 9045
| ''[[:d:Q5228468|Dave Cameron]]''
|
|
|
|-
| style='text-align:right'| 9046
| ''[[:d:Q5228883|Dave Gwyther]]''
|
|
|
|-
| style='text-align:right'| 9047
| ''[[:d:Q5228986|Dave Hollins]]''
|
|
|
|-
| style='text-align:right'| 9048
| ''[[:d:Q5229167|Dave Lee]]''
|
|
|
|-
| style='text-align:right'| 9049
| ''[[:d:Q5229464|Dave Newsham]]''
| [[Coadan:Dave newsham silverstone2012.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9050
| ''[[:d:Q5230584|David Abruzzese]]''
|
|
|
|-
| style='text-align:right'| 9051
| ''[[:d:Q5230801|David Anthony]]''
| [[Coadan:David Anthony and William Groulx at the 2012 Summer Paralympics.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9052
| ''[[:d:Q5231301|David Benjamin Rees]]''
| [[Coadan:Dr D.Ben Rees.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9053
| ''[[:d:Q5231397|David Beynon]]''
|
|
|
|-
| style='text-align:right'| 9054
| ''[[:d:Q5231425|David Bishop]]''
|
|
|
|-
| style='text-align:right'| 9055
| ''[[:d:Q5231897|David Burcher]]''
|
|
|
|-
| style='text-align:right'| 9056
| ''[[:d:Q5232685|David Crouch]]''
|
|
|
|-
| style='text-align:right'| 9057
| ''[[:d:Q5232755|David D'Auria]]''
|
|
|
|-
| style='text-align:right'| 9058
| ''[[:d:Q5232859|David Davies]]''
|
|
|
|-
| style='text-align:right'| 9059
| ''[[:d:Q5232856|David Davies]]''
|
|
|
|-
| style='text-align:right'| 9060
| ''[[:d:Q5232874|David Dawson]]''
|
|
|
|-
| style='text-align:right'| 9061
| ''[[:d:Q5233287|David Edwards]]''
|
|
|
|-
| style='text-align:right'| 9062
| ''[[:d:Q5233468|David Evans]]''
|
|
|
|-
| style='text-align:right'| 9063
| ''[[:d:Q5233602|David Felgate]]''
|
|
|
|-
| style='text-align:right'| 9064
| ''[[:d:Q5234131|David Giles]]''
|
|
|
|-
| style='text-align:right'| 9065
| ''[[:d:Q5234759|David Harrison]]''
|
|
|
|-
| style='text-align:right'| 9066
| ''[[:d:Q5235226|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 9067
| ''[[:d:Q5235229|David Hughes]]''
|
|
|
|-
| style='text-align:right'| 9068
| ''[[:d:Q5235563|David James]]''
|
|
|
|-
| style='text-align:right'| 9069
| ''[[:d:Q5235651|David John]]''
| [[Coadan:Dai John, Salford Rugby League player.png|center|128px]]
|
|
|-
| style='text-align:right'| 9070
| ''[[:d:Q5235746|David Jones]]''
|
|
|
|-
| style='text-align:right'| 9071
| ''[[:d:Q5235758|David Joseph Miller]]''
|
|
|
|-
| style='text-align:right'| 9072
| ''[[:d:Q5236569|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 9073
| ''[[:d:Q5236575|David Ley]]''
|
|
|
|-
| style='text-align:right'| 9074
| ''[[:d:Q5236683|David Llewellin]]''
| [[Coadan:David Llewellin, 1993 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9075
| ''[[:d:Q5236691|David Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 9076
| ''[[:d:Q5236695|David Lloyd]]''
| [[Coadan:Dai Lloyd AM (28170816265).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9077
| ''[[:d:Q5236811|David Luckes]]''
|
|
|
|-
| style='text-align:right'| 9078
| ''[[:d:Q5237047|David Maidment]]''
|
|
|
|-
| style='text-align:right'| 9079
| ''[[:d:Q5237493|David Melding]]''
| [[Coadan:David Melding AM.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9080
| ''[[:d:Q5237740|David Morrell]]''
|
|
|
|-
| style='text-align:right'| 9081
| ''[[:d:Q5238549|David Petersen]]''
|
|
|
|-
| style='text-align:right'| 9082
| ''[[:d:Q5238554|David Phelps]]''
|
|
|
|-
| style='text-align:right'| 9083
| ''[[:d:Q5238568|David Pickering]]''
|
|
|
|-
| style='text-align:right'| 9084
| ''[[:d:Q5238724|David Probert]]''
| [[Coadan:David Probert 2009 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9085
| ''[[:d:Q5239120|David Roberts]]''
| [[Coadan:David Roberts (swimmer) 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9086
| ''[[:d:Q5239330|David Ryder Prangley]]''
| [[Coadan:David-ryder-prangley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9087
| ''[[:d:Q5240329|David Thaxton]]''
|
|
|
|-
| style='text-align:right'| 9088
| ''[[:d:Q5240342|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 9089
| ''[[:d:Q5240358|David Thomas]]''
|
|
|
|-
| style='text-align:right'| 9090
| ''[[:d:Q5241135|David Williams]]''
|
|
|
|-
| style='text-align:right'| 9091
| ''[[:d:Q5242467|Dawn McCafferty]]''
| [[Coadan:Air Marshall Julian Young with Dawn McCafferty and Carol Vorderman (McCafferty cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9092
| ''[[:d:Q5249348|Declan John]]''
| [[Coadan:Declan John 1.png|center|128px]]
|
|
|-
| style='text-align:right'| 9093
| ''[[:d:Q5252401|Deian Hopkin]]''
|
|
|
|-
| style='text-align:right'| 9094
| ''[[:d:Q5254977|Delyth Evans]]''
| [[Coadan:Delyth Evans.png|center|128px]]
|
|
|-
| style='text-align:right'| 9095
| ''[[:d:Q5255333|Demi Holborn]]''
|
|
|
|-
| style='text-align:right'| 9096
| ''[[:d:Q5257677|Denise Gyngell]]''
|
|
|
|-
| style='text-align:right'| 9097
| ''[[:d:Q5258234|Dennis Brown]]''
|
|
|
|-
| style='text-align:right'| 9098
| ''[[:d:Q5258320|Dennis Curling]]''
|
|
|
|-
| style='text-align:right'| 9099
| ''[[:d:Q5258496|Dennis Hawkins]]''
|
|
|
|-
| style='text-align:right'| 9100
| ''[[:d:Q5258538|Dennis Hughes]]''
|
|
|
|-
| style='text-align:right'| 9101
| ''[[:d:Q5258810|Dennis O'Neill]]''
| [[Coadan:Caro Mio Ben, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9102
| ''[[:d:Q5260010|Deon Saffery]]''
|
|
|
|-
| style='text-align:right'| 9103
| ''[[:d:Q5261840|Derek Brockway]]''
|
|
|
|-
| style='text-align:right'| 9104
| ''[[:d:Q5262063|Derek Howes]]''
|
|
|
|-
| style='text-align:right'| 9105
| ''[[:d:Q5262090|Derek Jones]]''
| [[Coadan:Sir derek jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9106
| ''[[:d:Q5262353|Derek Showers]]''
|
|
|
|-
| style='text-align:right'| 9107
| ''[[:d:Q5262848|Dermot Tynan]]''
|
|
|
|-
| style='text-align:right'| 9108
| ''[[:d:Q5263378|Derwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9109
| ''[[:d:Q5263401|Deryn Brace]]''
| [[Coadan:Deryn Brace2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9110
| ''[[:d:Q5263425|Desmond Barry]]''
|
|
|
|-
| style='text-align:right'| 9111
| ''[[:d:Q5264804|Desmond Star]]''
|
|
|
|-
| style='text-align:right'| 9112
| ''[[:d:Q5270024|Di Botcher]]''
|
|
|
|-
| style='text-align:right'| 9113
| ''[[:d:Q5271679|Dianne Edwards]]''
|
|
|
|-
| style='text-align:right'| 9114
| ''[[:d:Q5273112|Dick Krzywicki]]''
|
|
|
|-
| style='text-align:right'| 9115
| ''[[:d:Q5273289|Dick Power]]''
|
|
|
|-
| style='text-align:right'| 9116
| ''[[:d:Q5273450|Dick Thomas]]''
|
|
|
|-
| style='text-align:right'| 9117
| ''[[:d:Q5277104|Dilwyn John]]''
|
|
|
|-
| style='text-align:right'| 9118
| ''[[:d:Q5290516|Dominic Day]]''
|
|
|
|-
| style='text-align:right'| 9119
| ''[[:d:Q5293533|Don Skene]]''
|
|
|
|-
| style='text-align:right'| 9120
| ''[[:d:Q5295437|Donato Nardiello]]''
|
|
|
|-
| style='text-align:right'| 9121
| ''[[:d:Q5296340|Donna Edwards]]''
|
|
|
|-
| style='text-align:right'| 9122
| ''[[:d:Q5298657|Dorothy Thornhill]]''
| [[Coadan:Official portrait of Baroness Thornhill crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9123
| ''[[:d:Q5298825|Rhian O'Sullivan]]''
| [[Coadan:Rhian O'Sullivan at the Dutch Open 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9124
| ''[[:d:Q5303665|Dowster]]''
|
|
|
|-
| style='text-align:right'| 9125
| ''[[:d:Q5318595|Dyfed Wyn-Evans]]''
|
|
|
|-
| style='text-align:right'| 9126
| ''[[:d:Q5318593|Dyfan Dwyfor]]''
|
|
|
|-
| style='text-align:right'| 9127
| ''[[:d:Q5318618|Dyfodwg]]''
|
|
|
|-
| style='text-align:right'| 9128
| ''[[:d:Q5318732|Dylan Jones-Evans]]''
| [[Coadan:A713 Dylan Jones Evans 1x1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9129
| ''[[:d:Q5331614|Eben Upton]]''
| [[Coadan:EbenUpton.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 9130
| ''[[:d:Q5335402|Ed Shervington]]''
| [[Coadan:Edshervingtonpic.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9131
| ''[[:d:Q5335828|Eddie Avoth]]''
|
|
|
|-
| style='text-align:right'| 9132
| ''[[:d:Q5336579|Eddie Woods]]''
|
|
|
|-
| style='text-align:right'| 9133
| ''[[:d:Q5336695|Eddy Temple-Morris]]''
| [[Coadan:Eddie temple morris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9134
| ''[[:d:Q5343829|Edward Jones]]''
|
|
|
|-
| style='text-align:right'| 9135
| ''[[:d:Q5344713|Edward Owen]]''
|
|
|
|-
| style='text-align:right'| 9136
| ''[[:d:Q5345025|Edward Relph]]''
| [[Coadan:TedRelph.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9137
| ''[[:d:Q5345328|Edward Siggery]]''
|
|
|
|-
| style='text-align:right'| 9138
| ''[[:d:Q5345587|Edward Thomas]]''
|
|
|
|-
| style='text-align:right'| 9139
| ''[[:d:Q5346268|Edwin Brooks]]''
|
|
|
|-
| style='text-align:right'| 9140
| ''[[:d:Q5346948|Edwina Hart]]''
| [[Coadan:Edwina Hart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9141
| ''[[:d:Q5349876|Eirlys Bellin]]''
|
|
|
|-
| style='text-align:right'| 9142
| ''[[:d:Q5353384|Elan Closs Stephens]]''
| [[Coadan:Elan Closs Stephens (1506997).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9143
| ''[[:d:Q5354231|Eleanor Burnham]]''
| [[Coadan:Democracy Day in Ysgol Dyffryn Nantlle, Penygroes, Gwynedd (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9144
| ''[[:d:Q5354362|Eleanor Pilgrim]]''
|
|
|
|-
| style='text-align:right'| 9145
| ''[[:d:Q5356565|Rhydian Vaughan]]''
| [[Coadan:Rhydian-Vaughan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9146
| ''[[:d:Q5359947|Elfyn Edwards]]''
|
|
|
|-
| style='text-align:right'| 9147
| ''[[:d:Q5359948|Elfyn Evans]]''
| [[Coadan:WRC Central European Rallye 2023 Elfyn Evans (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9148
| ''[[:d:Q5360201|Eli Davies]]''
|
|
|
|-
| style='text-align:right'| 9149
| ''[[:d:Q5360339|Eli Walker]]''
| [[Coadan:ST vs Ospreys 08-12-120076.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9150
| ''[[:d:Q5361081|Elin Fflur]]''
| [[Coadan:Dim Gair, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9151
| ''[[:d:Q5361084|Elin Jones]]''
| [[Coadan:Elin-jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9152
| ''[[:d:Q5361252|Eliot Richards]]''
| [[Coadan:Eliot Richards 2014-01-18 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9153
| ''[[:d:Q5361330|Elis James]]''
| [[Coadan:Elis James (41363128095) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9154
| ''[[:d:Q5362806|Elizabeth Fritsch]]''
| [[Coadan:Elizabethfritsch.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9155
| ''[[:d:Q5363240|Elizabeth Morgan]]''
|
|
|
|-
| style='text-align:right'| 9156
| ''[[:d:Q5364567|Ella Smith]]''
|
|
|
|-
| style='text-align:right'| 9157
| ''[[:d:Q5364886|Ellen Hunter]]''
|
|
|
|-
| style='text-align:right'| 9158
| ''[[:d:Q5365501|Elliot Kear]]''
| [[Coadan:Elliot Kear.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9159
| ''[[:d:Q5365664|Elliott Hewitt]]''
|
|
|
|-
| style='text-align:right'| 9160
| ''[[:d:Q5365899|Ellis Harrison]]''
| [[Coadan:Ellis warming up for Bristol Rovers in 2015.PNG|center|128px]]
|
|
|-
| style='text-align:right'| 9161
| ''[[:d:Q5367919|Eluned Parrott]]''
| [[Coadan:Eluned Parrott (6324905297).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9162
| ''[[:d:Q5372681|Emlyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9163
| ''[[:d:Q5372689|Emlyn Williams]]''
|
|
|
|-
| style='text-align:right'| 9164
| ''[[:d:Q5372866|Emma Jones]]''
|
|
|
|-
| style='text-align:right'| 9165
| ''[[:d:Q5372864|Emma Jones]]''
| [[Coadan:Emma jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9166
| ''[[:d:Q5372925|Emma Plewa]]''
| [[Coadan:Lewes Ladies 1 QPR Ladies 2 28 02 2016-7651 (24789317084).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9167
| ''[[:d:Q5372963|Emma Stansfield]]''
|
|
|
|-
| style='text-align:right'| 9168
| ''[[:d:Q5374087|Empire ISIS]]''
|
|
|
|-
| style='text-align:right'| 9169
| ''[[:d:Q5374906|Emyr Huws]]''
| [[Coadan:Emyr Huws 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9170
| ''[[:d:Q5374908|Emyr Phillips]]''
| [[Coadan:Scarlets.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9171
| ''[[:d:Q5375924|Endaf Emlyn]]''
| [[Coadan:Dilyn Y Graen, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9172
| ''[[:d:Q5381878|Eos Counsell]]''
| [[Coadan:Eos Chater - Metrocentre 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9173
| ''[[:d:Q5386843|Eric Jones]]''
| [[Coadan:Eric Jones (solo climber).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9174
| ''[[:d:Q5387714|Eric Weaver]]''
|
|
|
|-
| style='text-align:right'| 9175
| ''[[:d:Q5389230|Erin Vaughan]]''
|
|
|
|-
| style='text-align:right'| 9176
| ''[[:d:Q5393664|Ernest Peake]]''
|
|
|
|-
| style='text-align:right'| 9177
| ''[[:d:Q5396272|Eryl McNally]]''
| [[Coadan:Eryl Margaret McNally MEP 1994.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9178
| ''[[:d:Q5411301|Eurfyl ap Gwilym]]''
| [[Coadan:Eufryl ap Gwilym, Senedd 2018 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9179
| ''[[:d:Q5415361|Evan Davies]]''
|
|
|
|-
| style='text-align:right'| 9180
| ''[[:d:Q5415513|Evan Price]]''
|
|
|
|-
| style='text-align:right'| 9181
| ''[[:d:Q5415557|Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 9182
| ''[[:d:Q5446220|Fflur Dafydd]]''
|
|
|
|-
| style='text-align:right'| 9183
| ''[[:d:Q5446237|Ffred Ffransis]]''
| [[Coadan:Children of Blaenau Ffestiniog calling for a social centre after a Welsh Language Campaign (1532298).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9184
| ''[[:d:Q5451046|Fiona Fox]]''
|
|
|
|-
| style='text-align:right'| 9185
| ''[[:d:Q5462444|Floyd Havard]]''
|
|
|
|-
| style='text-align:right'| 9186
| ''[[:d:Q5488912|Philip Caveney]]''
|
|
|
|-
| style='text-align:right'| 9187
| ''[[:d:Q5490389|Frank Williams]]''
|
|
|
|-
| style='text-align:right'| 9188
| ''[[:d:Q5490493|Frank Wrentmore]]''
|
|
|
|-
| style='text-align:right'| 9189
| ''[[:d:Q5491049|Frankie Prince]]''
|
|
|
|-
| style='text-align:right'| 9190
| ''[[:d:Q5494964|Fred Davies]]''
|
|
|
|-
| style='text-align:right'| 9191
| ''[[:d:Q5495031|Fred Dyer]]''
| [[Coadan:Fred Dyer - Welsh boxer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9192
| ''[[:d:Q5496251|Fred Sheldon]]''
|
|
|
|-
| style='text-align:right'| 9193
| ''[[:d:Q5497427|Frederick Brown]]''
|
|
|
|-
| style='text-align:right'| 9194
| ''[[:d:Q5498740|Frederick Smart]]''
|
|
|
|-
| style='text-align:right'| 9195
| ''[[:d:Q5498823|Frederick Talbot]]''
|
|
|
|-
| style='text-align:right'| 9196
| ''[[:d:Q5499127|Frederick Willis]]''
|
|
|
|-
| style='text-align:right'| 9197
| ''[[:d:Q5516960|Gai Toms]]''
| [[Coadan:Gai Toms.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9198
| ''[[:d:Q5522777|Gareth Abraham]]''
|
|
|
|-
| style='text-align:right'| 9199
| ''[[:d:Q5522783|Gareth Armstrong]]''
|
|
|
|-
| style='text-align:right'| 9200
| ''[[:d:Q5522787|Gareth Baber]]''
| [[Coadan:Gareth Baber 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9201
| ''[[:d:Q5522798|Gareth Chapman]]''
|
|
|
|-
| style='text-align:right'| 9202
| ''[[:d:Q5522815|Gareth Davies]]''
|
|
|
|-
| style='text-align:right'| 9203
| ''[[:d:Q5522812|Gareth Davies]]''
|
|
|
|-
| style='text-align:right'| 9204
| ''[[:d:Q5522819|Gareth Davies]]''
|
|
|
|-
| style='text-align:right'| 9205
| ''[[:d:Q5522816|Gareth Davies]]''
|
|
|
|-
| style='text-align:right'| 9206
| ''[[:d:Q5522821|Gareth Davies]]''
|
|
|
|-
| style='text-align:right'| 9207
| ''[[:d:Q5522825|Gareth Dean]]''
|
|
|
|-
| style='text-align:right'| 9208
| ''[[:d:Q5522829|Gareth Edwards]]''
|
|
|
|-
| style='text-align:right'| 9209
| ''[[:d:Q5522834|Gareth Evans]]''
|
|
|
|-
| style='text-align:right'| 9210
| ''[[:d:Q5522851|Gareth Glyn]]''
| [[Coadan:Gareth2011small.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9211
| ''[[:d:Q5522855|Gareth Gwynn]]''
|
|
|
|-
| style='text-align:right'| 9212
| ''[[:d:Q5522867|Gareth Holgate]]''
|
|
|
|-
| style='text-align:right'| 9213
| ''[[:d:Q5522878|Gareth Jelleyman]]''
|
|
|
|-
| style='text-align:right'| 9214
| ''[[:d:Q5522883|Gareth Jones]]''
| [[Coadan:Gareth Jones (53964509022) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9215
| ''[[:d:Q5522880|Gareth Jewell]]''
|
|
|
|-
| style='text-align:right'| 9216
| ''[[:d:Q5522905|Gareth Maule]]''
|
|
|
|-
| style='text-align:right'| 9217
| ''[[:d:Q5522934|Gareth Owen]]''
|
|
|
|-
| style='text-align:right'| 9218
| ''[[:d:Q5522946|Gareth Price]]''
|
|
|
|-
| style='text-align:right'| 9219
| ''[[:d:Q5522951|Gareth Rees]]''
|
|
|
|-
| style='text-align:right'| 9220
| ''[[:d:Q5522948|Gareth Pierce]]''
| [[Coadan:Gareth Pierce 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9221
| ''[[:d:Q5522966|Gareth Salisbury]]''
|
|
|
|-
| style='text-align:right'| 9222
| ''[[:d:Q5522982|Gareth Thomas]]''
| [[Coadan:Gareth Thomas Clwyd and Aberconwy Count National Assembly Election 2016.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9223
| ''[[:d:Q5523005|Gareth Williams]]''
|
|
|
|-
| style='text-align:right'| 9224
| ''[[:d:Q5523710|Garnon Davies]]''
| [[Coadan:Garnon Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9225
| ''[[:d:Q5524223|Garry Shephard]]''
|
|
|
|-
| style='text-align:right'| 9226
| ''[[:d:Q5524777|Gary Buckland]]''
|
|
|
|-
| style='text-align:right'| 9227
| ''[[:d:Q5525024|Gary Emmanuel]]''
|
|
|
|-
| style='text-align:right'| 9228
| ''[[:d:Q5525472|Gary Ley]]''
|
|
|
|-
| style='text-align:right'| 9229
| ''[[:d:Q5525478|Gary Lockett]]''
|
|
|
|-
| style='text-align:right'| 9230
| ''[[:d:Q5525700|Gary Owen]]''
|
|
|
|-
| style='text-align:right'| 9231
| ''[[:d:Q5525727|Gary Pearce]]''
|
|
|
|-
| style='text-align:right'| 9232
| ''[[:d:Q5525779|Gary Powell]]''
|
|
|
|-
| style='text-align:right'| 9233
| ''[[:d:Q5525836|Gary Roberts]]''
|
|
|
|-
| style='text-align:right'| 9234
| ''[[:d:Q5526231|Garyn Preen]]''
|
|
|
|-
| style='text-align:right'| 9235
| ''[[:d:Q5526232|Garyn Lucas]]''
|
|
|
|-
| style='text-align:right'| 9236
| ''[[:d:Q5528098|Gavin Cattle]]''
|
|
|
|-
| style='text-align:right'| 9237
| ''[[:d:Q5534127|Geoff Ellis]]''
|
|
|
|-
| style='text-align:right'| 9238
| ''[[:d:Q5534167|Geoff Holder]]''
| [[Coadan:Geoffholderlibrary.png|center|128px]]
|
|
|-
| style='text-align:right'| 9239
| ''[[:d:Q5534703|Geoffrey James]]''
|
|
|
|-
| style='text-align:right'| 9240
| ''[[:d:Q5534927|Geoffrey Thomas]]''
|
|
|
|-
| style='text-align:right'| 9241
| ''[[:d:Q5537002|George Bishop]]''
|
|
|
|-
| style='text-align:right'| 9242
| ''[[:d:Q5539968|George Gummer]]''
|
|
|
|-
| style='text-align:right'| 9243
| ''[[:d:Q5543824|George Reynolds]]''
|
|
|
|-
| style='text-align:right'| 9244
| ''[[:d:Q5545871|George Warburton]]''
|
|
|
|-
| style='text-align:right'| 9245
| ''[[:d:Q5546236|George Whitney]]''
|
|
|
|-
| style='text-align:right'| 9246
| ''[[:d:Q5546607|George Young]]''
|
|
|
|-
| style='text-align:right'| 9247
| ''[[:d:Q5546629|George Zambellas]]''
| [[Coadan:First Sea Lord Admiral Sir George Zambellas KCB DSC ADC MOD 45155508.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9248
| ''[[:d:Q5547526|Georgia Henshaw]]''
|
|
|
|-
| style='text-align:right'| 9249
| ''[[:d:Q5548803|Geraint Davies]]''
| [[Coadan:Geraint Davies.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9250
| ''[[:d:Q5548804|Geraint F. Lewis]]''
| [[Coadan:2012-09-17 Prof Geraint Lewis Cropped.png|center|128px]]
|
|
|-
| style='text-align:right'| 9251
| ''[[:d:Q5548808|Geraint Davies]]''
| [[Coadan:Geraint Davies (Rhondda).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9252
| ''[[:d:Q5548819|Geraint Lloyd Owen]]''
|
|
|
|-
| style='text-align:right'| 9253
| ''[[:d:Q5548820|Geraint Lövgreen]]''
|
|
|
|-
| style='text-align:right'| 9254
| ''[[:d:Q5548829|Geraint Wyn Davies]]''
| [[Coadan:Geraint Wyn Davies 2004.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9255
| ''[[:d:Q5549028|Gerald Cordle]]''
|
|
|
|-
| style='text-align:right'| 9256
| ''[[:d:Q5553517|Gerwyn Edwards]]''
|
|
|
|-
| style='text-align:right'| 9257
| ''[[:d:Q5554439|Gethin Jones]]''
|
|
|
|-
| style='text-align:right'| 9258
| ''[[:d:Q5554442|Gethin Robinson]]''
|
|
|
|-
| style='text-align:right'| 9259
| ''[[:d:Q5558035|Gian M. Fulgoni]]''
| [[Coadan:ComScoreFulgoni.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9260
| ''[[:d:Q5562222|Gillian Clarke]]''
|
|
|
|-
| style='text-align:right'| 9261
| ''[[:d:Q5562229|Gillian Elisa]]''
|
|
|
|-
| style='text-align:right'| 9262
| ''[[:d:Q5568095|Glen Webbe]]''
|
|
|
|-
| style='text-align:right'| 9263
| ''[[:d:Q5569151|Glenn Tolley]]''
|
|
|
|-
| style='text-align:right'| 9264
| ''[[:d:Q5572840|Glyn Garner]]''
| [[Coadan:Glyn Garner.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9265
| ''[[:d:Q5572845|Glyn James]]''
|
|
|
|-
| style='text-align:right'| 9266
| ''[[:d:Q5572850|Glyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9267
| ''[[:d:Q5572853|Glyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9268
| ''[[:d:Q5572861|Glyn Mathias]]''
|
|
|
|-
| style='text-align:right'| 9269
| ''[[:d:Q5572864|Glyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 9270
| ''[[:d:Q5572892|Glyn Taylor]]''
| [[Coadan:GlynTaylor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9271
| ''[[:d:Q5572896|Glyn Turner]]''
| [[Coadan:Glyn Turner WRU Cap Presentaton 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9272
| ''[[:d:Q5576469|Godfrey John]]''
|
|
|
|-
| style='text-align:right'| 9273
| ''[[:d:Q5584971|Gordon Child]]''
|
|
|
|-
| style='text-align:right'| 9274
| ''[[:d:Q5585060|Gordon Davies]]''
| [[Coadan:Gordon Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9275
| ''[[:d:Q5585456|Gordon Lewis]]''
|
|
|
|-
| style='text-align:right'| 9276
| ''[[:d:Q5585687|Gordon Pritchard]]''
|
|
|
|-
| style='text-align:right'| 9277
| ''[[:d:Q5591287|Grace McCleen]]''
| [[Coadan:Grace McCleen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9278
| ''[[:d:Q5592729|Graham Coldrick]]''
|
|
|
|-
| style='text-align:right'| 9279
| ''[[:d:Q5592968|Graham Jones]]''
|
|
|
|-
| style='text-align:right'| 9280
| ''[[:d:Q5592985|Graham Kingston]]''
|
|
|
|-
| style='text-align:right'| 9281
| ''[[:d:Q5593332|Graham Walters]]''
|
|
|
|-
| style='text-align:right'| 9282
| ''[[:d:Q5593360|Graham Williams]]''
|
|
|
|-
| style='text-align:right'| 9283
| ''[[:d:Q5596323|Grant Llewellyn]]''
| [[Coadan:Grant Llewellyn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9284
| ''[[:d:Q5602580|Green Gartside]]''
| [[Coadan:Green Gartside 2006.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9285
| [[Greg Davies]]
| [[Coadan:GregDavies-byPhilipRomano.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9286
| ''[[:d:Q5606341|Greg Thomas]]''
|
|
|
|-
| style='text-align:right'| 9287
| ''[[:d:Q5606517|Gregg Coombes]]''
|
|
|
|-
| style='text-align:right'| 9288
| ''[[:d:Q5606843|Gregory Cameron]]''
| [[Coadan:Gregory-Cameron.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9289
| ''[[:d:Q5610965|Howard Collins]]''
|
|
|
|-
| style='text-align:right'| 9290
| ''[[:d:Q5615933|Lee Dainton]]''
|
|
|
|-
| style='text-align:right'| 9291
| ''[[:d:Q5621838|Guto Pryce]]''
| [[Coadan:Guto Pryce.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9292
| ''[[:d:Q5621836|Guto Harri]]''
| [[Coadan:Guto Harri, 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9293
| ''[[:d:Q5623379|Gwawr Edwards]]''
|
|
|
|-
| style='text-align:right'| 9294
| ''[[:d:Q5623469|Gwenan Edwards]]''
| [[Coadan:Gwenan Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9295
| ''[[:d:Q5623522|Gwenllwyfo]]''
|
|
|
|-
| style='text-align:right'| 9296
| ''[[:d:Q5623524|Gwenllian Lansdown]]''
|
|
|
|-
| style='text-align:right'| 9297
| ''[[:d:Q5623534|Gwenno Teifi]]''
|
|
|
|-
| style='text-align:right'| 9298
| ''[[:d:Q5623678|Gwion Edwards]]''
| [[Coadan:GwionEdwardsBntIps1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9299
| ''[[:d:Q5623679|Gwion Hallam]]''
|
|
|
|-
| style='text-align:right'| 9300
| ''[[:d:Q5623770|Gwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 9301
| ''[[:d:Q5623776|Gwyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 9302
| ''[[:d:Q5623783|Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9303
| ''[[:d:Q5623791|Gwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9304
| ''[[:d:Q5623796|Gwyn Morgan]]''
|
|
|
|-
| style='text-align:right'| 9305
| ''[[:d:Q5623802|Gwyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 9306
| ''[[:d:Q5623810|Gwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 9307
| ''[[:d:Q5623812|Gwyndaf Evans]]''
|
|
|
|-
| style='text-align:right'| 9308
| ''[[:d:Q5623843|Gwyneth Keyworth]]''
|
|
|
|-
| style='text-align:right'| 9309
| ''[[:d:Q5623862|Gwynfor Williams]]''
|
|
|
|-
| style='text-align:right'| 9310
| ''[[:d:Q5623887|Gwynne Williams]]''
|
|
|
|-
| style='text-align:right'| 9311
| ''[[:d:Q5638525|Hagan Bayley]]''
|
|
|
|-
| style='text-align:right'| 9312
| ''[[:d:Q5648869|Hannah Keryakoplis]]''
|
|
|
|-
| style='text-align:right'| 9313
| ''[[:d:Q5648940|Hannah Rich]]''
|
|
|
|-
| style='text-align:right'| 9314
| ''[[:d:Q5671894|Harry Rees]]''
|
|
|
|-
| style='text-align:right'| 9315
| ''[[:d:Q5671999|Harry Robinson]]''
|
|
|
|-
| style='text-align:right'| 9316
| ''[[:d:Q5701785|Helen Adams]]''
|
|
|
|-
| style='text-align:right'| 9317
| ''[[:d:Q5702657|Helen Lederer]]''
| [[Coadan:Helen Lederer in 2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9318
| ''[[:d:Q5735218|Douglas Foley]]''
| [[Coadan:Douglas Foley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9319
| ''[[:d:Q5736164|Herbie Williams]]''
|
|
|
|-
| style='text-align:right'| 9320
| ''[[:d:Q5739697|Michael Francis]]''
|
|
|
|-
| style='text-align:right'| 9321
| ''[[:d:Q5800067|Christopher Bale]]''
|
|
|
|-
| style='text-align:right'| 9322
| ''[[:d:Q5875568|Hockey Driscoll]]''
|
|
|
|-
| style='text-align:right'| 9323
| ''[[:d:Q5882068|Holly Holyoake]]''
|
|
|
|-
| style='text-align:right'| 9324
| ''[[:d:Q5920650|Howard Pritchard]]''
|
|
|
|-
| style='text-align:right'| 9325
| ''[[:d:Q5930990|Hugh Gustafson]]''
|
|
|
|-
| style='text-align:right'| 9326
| ''[[:d:Q5951215|Huw Bunford]]''
| [[Coadan:HuwBunford1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9327
| ''[[:d:Q5951222|Huw Dixon]]''
| [[Coadan:Huw Dixon 1992 cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9328
| ''[[:d:Q5951232|Huw Edwards]]''
|
|
|
|-
| style='text-align:right'| 9329
| ''[[:d:Q5951262|Huw Lewis]]''
| [[Coadan:Huw Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9330
| ''[[:d:Q5951282|Huw Richards]]''
|
|
|
|-
| style='text-align:right'| 9331
| ''[[:d:Q5951297|Huw Waters]]''
|
|
|
|-
| style='text-align:right'| 9332
| ''[[:d:Q5951307|Huw Watkins]]''
|
|
|
|-
| style='text-align:right'| 9333
| ''[[:d:Q5959734|Kim Lawrence]]''
|
|
|
|-
| style='text-align:right'| 9334
| ''[[:d:Q5962128|Michael Locke]]''
| [[Coadan:Michael "Pancho" Locke 2021.png|center|128px]]
|
|
|-
| style='text-align:right'| 9335
| ''[[:d:Q5962763|Hywel Gwynfryn]]''
|
|
|
|-
| style='text-align:right'| 9336
| ''[[:d:Q5980623|Iain Sinclair]]''
| [[Coadan:Iain Sinclair cheltenham.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9337
| ''[[:d:Q5980849|Ian Barker]]''
|
|
|
|-
| style='text-align:right'| 9338
| ''[[:d:Q5980981|Ian Bray]]''
|
|
|
|-
| style='text-align:right'| 9339
| ''[[:d:Q5981133|Ian Capon]]''
|
|
|
|-
| style='text-align:right'| 9340
| ''[[:d:Q5981808|Ian Hillier]]''
|
|
|
|-
| style='text-align:right'| 9341
| ''[[:d:Q5981839|Ian Howat]]''
|
|
|
|-
| style='text-align:right'| 9342
| ''[[:d:Q5981847|Ian Hughes]]''
|
|
|
|-
| style='text-align:right'| 9343
| ''[[:d:Q5981864|Ian Hutchinson]]''
|
|
|
|-
| style='text-align:right'| 9344
| ''[[:d:Q5982646|Ian Puleston-Davies]]''
| [[Coadan:Ian Puleston-Davies in Midnight Man 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9345
| ''[[:d:Q5990139|Ieuan Jones]]''
|
|
|
|-
| style='text-align:right'| 9346
| ''[[:d:Q5990144|Ieuan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9347
| ''[[:d:Q5990159|Ieuan Rhys]]''
| [[Coadan:Ieuan Head Shots 2009 116 (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9348
| ''[[:d:Q5990172|Ieuan ap Tudur Penllyn]]''
|
|
|
|-
| style='text-align:right'| 9349
| ''[[:d:Q6001994|Imad Wasim]]''
| [[Coadan:Imad Wasim during a media talk in 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9350
| ''[[:d:Q6063518|Iona Jones]]''
|
|
|
|-
| style='text-align:right'| 9351
| ''[[:d:Q6097409|Ivan J. Sansom]]''
|
|
|
|-
| style='text-align:right'| 9352
| ''[[:d:Q6099370|Ivor Davies]]''
|
|
|
|-
| style='text-align:right'| 9353
| ''[[:d:Q6100562|Iwan Brown]]''
|
|
|
|-
| style='text-align:right'| 9354
| ''[[:d:Q6100571|Iwan Griffiths]]''
| [[Coadan:Iwan Griffiths The Automatic Tear The Signs Down.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9355
| ''[[:d:Q6109438|Robert East]]''
|
|
|
|-
| style='text-align:right'| 9356
| ''[[:d:Q6111756|Jack Compton]]''
|
|
|
|-
| style='text-align:right'| 9357
| ''[[:d:Q6112030|Jack Davies]]''
|
|
|
|-
| style='text-align:right'| 9358
| ''[[:d:Q6112111|Jack Dixon]]''
| [[Coadan:Jack Dixon 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9359
| ''[[:d:Q6112960|Jack Harris]]''
|
|
|
|-
| style='text-align:right'| 9360
| ''[[:d:Q6113370|Jack Jones]]''
|
|
|
|-
| style='text-align:right'| 9361
| ''[[:d:Q6113680|Jack Lewis]]''
|
|
|
|-
| style='text-align:right'| 9362
| ''[[:d:Q6114683|Jack Pring]]''
|
|
|
|-
| style='text-align:right'| 9363
| ''[[:d:Q6116417|Jackie Hughes]]''
|
|
|
|-
| style='text-align:right'| 9364
| ''[[:d:Q6124605|Jake Cassidy]]''
|
|
|
|-
| style='text-align:right'| 9365
| ''[[:d:Q6127543|Jamal Easter]]''
|
|
|
|-
| style='text-align:right'| 9366
| ''[[:d:Q6129470|James Bater]]''
|
|
|
|-
| style='text-align:right'| 9367
| ''[[:d:Q6132803|James Down]]''
|
|
|
|-
| style='text-align:right'| 9368
| ''[[:d:Q6134726|James Goode]]''
|
|
|
|-
| style='text-align:right'| 9369
| ''[[:d:Q6135615|James Harris]]''
| [[Coadan:James Harris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9370
| ''[[:d:Q6136198|James Honeyben]]''
|
|
|
|-
| style='text-align:right'| 9371
| ''[[:d:Q6137766|James Langworth]]''
|
|
|
|-
| style='text-align:right'| 9372
| ''[[:d:Q6137887|James Leadbeater]]''
|
|
|
|-
| style='text-align:right'| 9373
| ''[[:d:Q6138035|James Lewis]]''
|
|
|
|-
| style='text-align:right'| 9374
| ''[[:d:Q6140710|James Owen]]''
|
|
|
|-
| style='text-align:right'| 9375
| ''[[:d:Q6141939|James Regan]]''
|
|
|
|-
| style='text-align:right'| 9376
| ''[[:d:Q6142242|James Roberts]]''
|
|
|
|-
| style='text-align:right'| 9377
| ''[[:d:Q6143405|James Sommerin]]''
|
|
|
|-
| style='text-align:right'| 9378
| ''[[:d:Q6144142|James Thomas]]''
|
|
|
|-
| style='text-align:right'| 9379
| ''[[:d:Q6145639|James Williams]]''
|
|
|
|-
| style='text-align:right'| 9380
| ''[[:d:Q6146625|Jamie Bevan]]''
| [[Coadan:Jamie Bevan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9381
| ''[[:d:Q6146982|Jamie Harris]]''
|
|
|
|-
| style='text-align:right'| 9382
| ''[[:d:Q6147109|Jamie Lewis]]''
|
|
|
|-
| style='text-align:right'| 9383
| ''[[:d:Q6147282|Jamie Murphy]]''
|
|
|
|-
| style='text-align:right'| 9384
| ''[[:d:Q6147322|Jamie Owen]]''
|
|
|
|-
| style='text-align:right'| 9385
| ''[[:d:Q6147393|Jamie Ringer]]''
|
|
|
|-
| style='text-align:right'| 9386
| ''[[:d:Q6147533|Jamie Sylvester]]''
|
|
|
|-
| style='text-align:right'| 9387
| ''[[:d:Q6148467|Jan Anderson]]''
|
|
|
|-
| style='text-align:right'| 9388
| ''[[:d:Q6153289|Janet Davies]]''
| [[Coadan:JanetDavies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9389
| ''[[:d:Q6153343|Janet Finch-Saunders]]''
| [[Coadan:Janet Finch-Saunders.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9390
| ''[[:d:Q6154241|Janice Gregory]]''
| [[Coadan:Janice Gregory.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9391
| ''[[:d:Q6161756|Jasmine Cresswell]]''
|
|
|
|-
| style='text-align:right'| 9392
| ''[[:d:Q6162253|Jason Cook]]''
|
|
|
|-
| style='text-align:right'| 9393
| ''[[:d:Q6162809|Jason Wyn-Jones]]''
| [[Coadan:Footballer Jason Andrew jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9394
| ''[[:d:Q6163128|Jason Mohammad]]''
| [[Coadan:2012-03-19 Jason Mohammad at Wales Grand Slam Celebrations.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9395
| ''[[:d:Q6163246|Jason Perry]]''
|
|
|
|-
| style='text-align:right'| 9396
| ''[[:d:Q6163292|Jason Price]]''
| [[Coadan:Jason Price.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9397
| ''[[:d:Q6163322|Jason Rees]]''
|
|
|
|-
| style='text-align:right'| 9398
| ''[[:d:Q6163565|Jason Strange]]''
|
|
|
|-
| style='text-align:right'| 9399
| ''[[:d:Q6163640|Jason Tovey]]''
|
|
|
|-
| style='text-align:right'| 9400
| ''[[:d:Q6166525|Jay Curtis]]''
| [[Coadan:Jay Curtis Headshot3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9401
| ''[[:d:Q6167716|Jayce Lewis]]''
| [[Coadan:DSC 0061-Edit.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9402
| ''[[:d:Q6167907|Jayne Pierson]]''
| [[Coadan:Jayne Pierson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9403
| ''[[:d:Q6171595|Jean Thomas]]''
|
|
|
|-
| style='text-align:right'| 9404
| ''[[:d:Q6173293|Jeff Banks]]''
| [[Coadan:Jeff Banks.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9405
| ''[[:d:Q6173783|Jeff Evans]]''
|
|
|
|-
| style='text-align:right'| 9406
| ''[[:d:Q6174089|Jeff Hopkins]]''
|
|
|
|-
| style='text-align:right'| 9407
| ''[[:d:Q6174175|Jeff Johnson]]''
|
|
|
|-
| style='text-align:right'| 9408
| ''[[:d:Q6174186|Jeff Jones]]''
|
|
|
|-
| style='text-align:right'| 9409
| ''[[:d:Q6174649|Jeff Parton]]''
|
|
|
|-
| style='text-align:right'| 9410
| ''[[:d:Q6175116|Jeff T. Thomas]]''
|
|
|
|-
| style='text-align:right'| 9411
| ''[[:d:Q6175154|Jeff Thomas]]''
|
|
|
|-
| style='text-align:right'| 9412
| ''[[:d:Q6175261|Jeff Whitefoot]]''
|
|
|
|-
| style='text-align:right'| 9413
| ''[[:d:Q6176386|Jeffris Hopkins]]''
|
|
|
|-
| style='text-align:right'| 9414
| ''[[:d:Q6177546|Jenkin Jones]]''
|
|
|
|-
| style='text-align:right'| 9415
| ''[[:d:Q6178864|Jennifer Sullivan]]''
|
|
|
|-
| style='text-align:right'| 9416
| ''[[:d:Q6181214|Jeremy Charles]]''
|
|
|
|-
| style='text-align:right'| 9417
| ''[[:d:Q6181512|Jeremy Huw Williams]]''
|
|
|
|-
| style='text-align:right'| 9418
| ''[[:d:Q6181975|Jeremy Treglown]]''
|
|
|
|-
| style='text-align:right'| 9419
| ''[[:d:Q6196963|Jim Mills]]''
|
|
|
|-
| style='text-align:right'| 9420
| ''[[:d:Q6197932|Jim Ryan]]''
|
|
|
|-
| style='text-align:right'| 9421
| ''[[:d:Q6198340|Jim Stewart]]''
|
|
|
|-
| style='text-align:right'| 9422
| ''[[:d:Q6204177|Jo Caulfield]]''
| [[Coadan:Jo Caulfield @ The Late Show 2002.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9423
| ''[[:d:Q6207115|Jocelyn Davies]]''
| [[Coadan:Jocelyn Davies 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9424
| ''[[:d:Q6207972|Jodie Marie]]''
| [[Coadan:Jodie Marie (53355801223) (sq cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9425
| ''[[:d:Q6208659|Joe Blackman]]''
| [[Coadan:JoeBlackman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9426
| ''[[:d:Q6208866|Joe Burke]]''
| [[Coadan:Joe Burke.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9427
| ''[[:d:Q6210509|Joe Jacobson]]''
| [[Coadan:Joe Jacobson 25-04-2011 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9428
| ''[[:d:Q6211974|Joe Rees]]''
|
|
|
|-
| style='text-align:right'| 9429
| ''[[:d:Q6219807|John Avon]]''
|
|
|
|-
| style='text-align:right'| 9430
| ''[[:d:Q6221241|John Beard]]''
|
|
|
|-
| style='text-align:right'| 9431
| ''[[:d:Q6221954|John Bird]]''
|
|
|
|-
| style='text-align:right'| 9432
| ''[[:d:Q6228636|John David]]''
|
|
|
|-
| style='text-align:right'| 9433
| ''[[:d:Q6228737|John Davies]]''
| [[Coadan:Welsh-bishops (John Davies cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9434
| ''[[:d:Q6228768|John Davies]]''
|
|
|
|-
| style='text-align:right'| 9435
| ''[[:d:Q6228804|John Davis]]''
|
|
|
|-
| style='text-align:right'| 9436
| ''[[:d:Q6231731|John Emanuel]]''
|
|
|
|-
| style='text-align:right'| 9437
| ''[[:d:Q6232022|John Evans]]''
| [[Coadan:Johnbocha.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9438
| ''[[:d:Q6235537|John Glover]]''
|
|
|
|-
| style='text-align:right'| 9439
| ''[[:d:Q6235655|John Golightly]]''
|
|
|
|-
| style='text-align:right'| 9440
| ''[[:d:Q6236398|John Griffiths]]''
|
|
|
|-
| style='text-align:right'| 9441
| ''[[:d:Q6236400|John Griffiths]]''
| [[Coadan:John Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9442
| ''[[:d:Q6238674|John Hennessey]]''
|
|
|
|-
| style='text-align:right'| 9443
| ''[[:d:Q6240277|John Hughes]]''
| [[Coadan:John Hughes (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9444
| ''[[:d:Q6240280|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 9445
| ''[[:d:Q6240307|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 9446
| ''[[:d:Q6241487|John James]]''
| [[Coadan:John James (musician) on stage at Greenwich, U.K., 1982.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9447
| ''[[:d:Q6244759|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 9448
| ''[[:d:Q6245037|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9449
| ''[[:d:Q6245047|John Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9450
| ''[[:d:Q6247450|John McCarthy]]''
|
|
|
|-
| style='text-align:right'| 9451
| ''[[:d:Q6248571|John Metcalf]]''
|
|
|
|-
| style='text-align:right'| 9452
| ''[[:d:Q6249398|John Morgan]]''
|
|
|
|-
| style='text-align:right'| 9453
| ''[[:d:Q6251165|John Ogwen]]''
| [[Coadan:Cwmni Theatr Cymru's production of Saunders Lewis' new drama, Cymru Fydd, at Bala Eisteddfod (1451485).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9454
| ''[[:d:Q6251370|John Osmond]]''
|
|
|
|-
| style='text-align:right'| 9455
| ''[[:d:Q6251994|John Parsons]]''
|
|
|
|-
| style='text-align:right'| 9456
| ''[[:d:Q6253147|John Pook]]''
|
|
|
|-
| style='text-align:right'| 9457
| ''[[:d:Q6253403|John Price]]''
|
|
|
|-
| style='text-align:right'| 9458
| ''[[:d:Q6258296|John Smith]]''
| [[Coadan:John Smith MP 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9459
| ''[[:d:Q6258580|John Sparkes]]''
|
|
|
|-
| style='text-align:right'| 9460
| ''[[:d:Q6260516|John Thomas]]''
| [[Coadan:Official portrait of Lord Thomas of Cwmgiedd crop 2, 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9461
| ''[[:d:Q6261362|John Tudno Williams]]''
| [[Coadan:JTWilliams1976.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9462
| ''[[:d:Q6263231|John Watson]]''
|
|
|
|-
| style='text-align:right'| 9463
| ''[[:d:Q6263798|John G. White]]''
|
|
|
|-
| style='text-align:right'| 9464
| ''[[:d:Q6264368|John Williams]]''
|
|
|
|-
| style='text-align:right'| 9465
| ''[[:d:Q6265973|Johnathan Edwards]]''
|
|
|
|-
| style='text-align:right'| 9466
| ''[[:d:Q6270436|Jon Breakingbury]]''
|
|
|
|-
| style='text-align:right'| 9467
| ''[[:d:Q6271045|Jon Kenworthy]]''
|
|
|
|-
| style='text-align:right'| 9468
| ''[[:d:Q6271100|Jon Langford]]''
| [[Coadan:Langford.gif|center|128px]]
|
|
|-
| style='text-align:right'| 9469
| ''[[:d:Q6271262|Jon Moore]]''
|
|
|
|-
| style='text-align:right'| 9470
| ''[[:d:Q6271270|Jonathan Mould]]''
| [[Coadan:Jon Mould (Edinburgh).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9471
| ''[[:d:Q6271344|Jon Owen Jones]]''
|
|
|
|-
| style='text-align:right'| 9472
| ''[[:d:Q6271551|Jon Shanklin]]''
| [[Coadan:Jonathan Shanklin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9473
| ''[[:d:Q6272670|Jonathan Bryant]]''
|
|
|
|-
| style='text-align:right'| 9474
| ''[[:d:Q6272774|Jonathan Clark]]''
|
|
|
|-
| style='text-align:right'| 9475
| ''[[:d:Q6272787|Jonathan Coates]]''
|
|
|
|-
| style='text-align:right'| 9476
| ''[[:d:Q6273042|Jonathan Elphick]]''
| [[Coadan:Jonathan Elphick -Boquer Valley -Mallorca -31May2007.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9477
| ''[[:d:Q6273065|Jonathan Evans]]''
|
|
|
|-
| style='text-align:right'| 9478
| ''[[:d:Q6273235|Jonathan Goodwin]]''
|
|
|
|-
| style='text-align:right'| 9479
| ''[[:d:Q6273277|Jonathan Griffiths]]''
|
|
|
|-
| style='text-align:right'| 9480
| ''[[:d:Q6273441|Jonathan Humphreys]]''
|
|
|
|-
| style='text-align:right'| 9481
| ''[[:d:Q6273500|Jonathan Jones]]''
|
|
|
|-
| style='text-align:right'| 9482
| ''[[:d:Q6273665|Jonathan Legard]]''
|
|
|
|-
| style='text-align:right'| 9483
| ''[[:d:Q6273874|Jonathan Meades]]''
| [[Coadan:Meades and Barcham.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9484
| ''[[:d:Q6273991|Jonathan Myerson]]''
|
|
|
|-
| style='text-align:right'| 9485
| ''[[:d:Q6274141|Jonathan Phillips]]''
|
|
|
|-
| style='text-align:right'| 9486
| ''[[:d:Q6275805|Jonny Owen]]''
|
|
|
|-
| style='text-align:right'| 9487
| ''[[:d:Q6275834|Jonny Vaughton]]''
|
|
|
|-
| style='text-align:right'| 9488
| ''[[:d:Q6276627|Jordan Howe]]''
|
|
|
|-
| style='text-align:right'| 9489
| ''[[:d:Q6285232|Joseph Mahoney]]''
|
|
|
|-
| style='text-align:right'| 9490
| ''[[:d:Q6289200|Josh Navidi]]''
| [[Coadan:Josh Navidi.png|center|128px]]
|
|
|-
| style='text-align:right'| 9491
| ''[[:d:Q6289460|Josh Turnbull]]''
| [[Coadan:Josh Turnbull 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9492
| ''[[:d:Q6290786|Josie d'Arby]]''
| [[Coadan:Josie d'Arby.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9493
| ''[[:d:Q6297656|Joyce Watson]]''
| [[Coadan:Joyce Watson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9494
| ''[[:d:Q6306064|Jules Williams]]''
| [[Coadan:JulesWilliamsWiki.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9495
| ''[[:d:Q6306356|Julia Davis]]''
|
|
|
|-
| style='text-align:right'| 9496
| ''[[:d:Q6307356|Julian Lewis Jones]]''
|
|
|
|-
| style='text-align:right'| 9497
| ''[[:d:Q6308284|Julie James]]''
| [[Coadan:Julie James - National Assembly for Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9498
| ''[[:d:Q6308404|Julie Morgan]]''
| [[Coadan:Julie Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9499
| ''[[:d:Q6317431|Justin Burnell]]''
|
|
|
|-
| style='text-align:right'| 9500
| ''[[:d:Q6319360|Jynine James]]''
| [[Coadan:Jyninejamesbw001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9501
| ''[[:d:Q6369590|Karen Davies]]''
|
|
|
|-
| style='text-align:right'| 9502
| ''[[:d:Q6369945|Karen Paullada]]''
|
|
|
|-
| style='text-align:right'| 9503
| ''[[:d:Q6370035|Karen Sinclair]]''
| [[Coadan:Karen Sinclair.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9504
| ''[[:d:Q6371796|Karl Francis]]''
| [[Coadan:Karl Francis, 2014 (wedi'i gropio).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9505
| ''[[:d:Q6371908|Karl Hocking]]''
|
|
|
|-
| style='text-align:right'| 9506
| ''[[:d:Q6372187|Karl Ready]]''
|
|
|
|-
| style='text-align:right'| 9507
| ''[[:d:Q6375562|Kate Jarman]]''
|
|
|
|-
| style='text-align:right'| 9508
| ''[[:d:Q6375640|Kate McGill]]''
| [[Coadan:Kate McGill 2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9509
| ''[[:d:Q6377256|Kathy Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9510
| ''[[:d:Q6377422|Katie Curtis]]''
| [[Coadan:Katie Prankerd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9511
| ''[[:d:Q6377553|Katie Sherwood]]''
|
|
|
|-
| style='text-align:right'| 9512
| ''[[:d:Q6377585|Katie Williams]]''
|
|
|
|-
| style='text-align:right'| 9513
| ''[[:d:Q6378533|Katy Wix]]''
|
|
|
|-
| style='text-align:right'| 9514
| ''[[:d:Q6380641|Kayne McLaggon]]''
| [[Coadan:Kayne McLaggon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9515
| ''[[:d:Q6383819|Keiron Self]]''
|
|
|
|-
| style='text-align:right'| 9516
| ''[[:d:Q6383816|Keiron Jenkins]]''
|
|
|
|-
| style='text-align:right'| 9517
| ''[[:d:Q6384144|Keith Burnett]]''
| [[Coadan:KeithBurnettDec08.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9518
| ''[[:d:Q6384255|Keith Davies]]''
| [[Coadan:Keith Davies - National Assembly for Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9519
| ''[[:d:Q6384474|Keith Haynes]]''
| [[Coadan:Keith Haynes of Picture Frame Seduction.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9520
| ''[[:d:Q6384761|Keith Miles]]''
|
|
|
|-
| style='text-align:right'| 9521
| ''[[:d:Q6384884|Keith Peters]]''
|
|
|
|-
| style='text-align:right'| 9522
| ''[[:d:Q6385114|Keith Thomas]]''
|
|
|
|-
| style='text-align:right'| 9523
| ''[[:d:Q6387901|Ken Jones]]''
| [[Coadan:Ken Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9524
| ''[[:d:Q6388051|Ken MacDonald]]''
|
|
|
|-
| style='text-align:right'| 9525
| ''[[:d:Q6388501|Ken Skates]]''
| [[Coadan:Official photograph of Ken Skates MS Cabinet Secretary for Transport and North Wales (Landscape) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9527
| ''[[:d:Q6391344|Kenrick Harris]]''
|
|
|
|-
| style='text-align:right'| 9528
| ''[[:d:Q6393868|Keri Davies]]''
|
|
|
|-
| style='text-align:right'| 9529
| ''[[:d:Q6393873|Keri Jones]]''
|
|
|
|-
| style='text-align:right'| 9530
| ''[[:d:Q6394594|Kerry Morgan]]''
|
|
|
|-
| style='text-align:right'| 9531
| ''[[:d:Q6395702|Kevin Aherne-Evans]]''
|
|
|
|-
| style='text-align:right'| 9532
| ''[[:d:Q6396226|Kevin Ellis]]''
| [[Coadan:Kevin Ellis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9533
| ''[[:d:Q6396343|Kevin Gall]]''
| [[Coadan:Kevin Gall York City v. Ebbsfleet United 14-11-09.png|center|128px]]
|
|
|-
| style='text-align:right'| 9534
| ''[[:d:Q6396787|Kevin Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9535
| ''[[:d:Q6397382|Kevin Rogers]]''
|
|
|
|-
| style='text-align:right'| 9536
| ''[[:d:Q6398588|Kezia Burrows]]''
|
|
|
|-
| style='text-align:right'| 9537
| ''[[:d:Q6404453|Kid Chaos]]''
|
|
|
|-
| style='text-align:right'| 9538
| ''[[:d:Q6405352|Kieran Crawford]]''
|
|
|
|-
| style='text-align:right'| 9539
| ''[[:d:Q6414752|Kira Geil]]''
| [[Coadan:European Kira GEIL Tobias EISENBAUER.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9540
| ''[[:d:Q6414951|Kirby Myhill]]''
| [[Coadan:Kirby Myhill.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9541
| ''[[:d:Q6416168|Kirsty Jones]]''
|
|
|
|-
| style='text-align:right'| 9543
| ''[[:d:Q6437879|Kristian Bell]]''
|
|
|
|-
| style='text-align:right'| 9544
| ''[[:d:Q6437885|Kristian Dacey]]''
|
|
|
|-
| style='text-align:right'| 9545
| ''[[:d:Q6437967|Kristian O'Leary]]''
|
|
|
|-
| style='text-align:right'| 9546
| ''[[:d:Q6437973|Kristian Phillips]]''
|
|
|
|-
| style='text-align:right'| 9547
| ''[[:d:Q6446940|Kurt Nogan]]''
|
|
|
|-
| style='text-align:right'| 9548
| ''[[:d:Q6451266|Kyle Letheren]]''
| [[Coadan:Kyle Letheren 2017-03-04 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9549
| ''[[:d:Q6451479|Kyle Tudge]]''
|
|
|
|-
| style='text-align:right'| 9550
| ''[[:d:Q6452565|Kyron Duke]]''
| [[Coadan:Kyron Duke - Our Greatest Team Parade (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9551
| ''[[:d:Q6498889|Laura Evans]]''
| [[Coadan:LauraEvans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9552
| ''[[:d:Q6500336|Lauren Phillips]]''
|
|
|
|-
| style='text-align:right'| 9553
| ''[[:d:Q6503979|Lawrence Davies]]''
|
|
|
|-
| style='text-align:right'| 9554
| ''[[:d:Q6504240|Lawrence Jones]]''
|
|
|
|-
| style='text-align:right'| 9555
| ''[[:d:Q6513002|Lee Baddeley]]''
|
|
|
|-
| style='text-align:right'| 9556
| ''[[:d:Q6513047|Lee Beach]]''
|
|
|
|-
| style='text-align:right'| 9557
| ''[[:d:Q6513621|Lee Fowler]]''
| [[Coadan:Lee Fowler 07-04-12.png|center|128px]]
|
|
|-
| style='text-align:right'| 9558
| ''[[:d:Q6514132|Lee Jarman]]''
|
|
|
|-
| style='text-align:right'| 9559
| ''[[:d:Q6514139|Lee Jenkins]]''
|
|
|
|-
| style='text-align:right'| 9560
| ''[[:d:Q6514183|Lee Jones]]''
|
|
|
|-
| style='text-align:right'| 9561
| ''[[:d:Q6514659|Lee Nogan]]''
|
|
|
|-
| style='text-align:right'| 9562
| ''[[:d:Q6514721|Lee Phillips]]''
|
|
|
|-
| style='text-align:right'| 9563
| ''[[:d:Q6514744|Lee Powell]]''
|
|
|
|-
| style='text-align:right'| 9564
| ''[[:d:Q6514983|Lee Selby]]''
| [[Coadan:Lee Selby 2015 (cropped).png|center|128px]]
|
|
|-
| style='text-align:right'| 9565
| ''[[:d:Q6515526|Lee Williams]]''
| [[Coadan:Lee Williams Celtic Crusaders.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9566
| ''[[:d:Q6515531|Lee Williams]]''
|
|
|
|-
| style='text-align:right'| 9567
| ''[[:d:Q6519569|Leigh Davies]]''
|
|
|
|-
| style='text-align:right'| 9568
| ''[[:d:Q6519628|Leigh Loveday]]''
|
|
|
|-
| style='text-align:right'| 9569
| ''[[:d:Q6519732|Leighton Andrews]]''
| [[Coadan:Leighton Andrews.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9570
| ''[[:d:Q6519760|Leighton Hodges]]''
|
|
|
|-
| style='text-align:right'| 9571
| ''[[:d:Q6523015|Lenny Woodard]]''
|
|
|
|-
| style='text-align:right'| 9572
| ''[[:d:Q6524712|Leon Jeanne]]''
|
|
|
|-
| style='text-align:right'| 9573
| ''[[:d:Q6530036|Les Thomas]]''
|
|
|
|-
| style='text-align:right'| 9574
| ''[[:d:Q6532137|Leszek Borysiewicz]]''
| [[Coadan:Cmglee Cambridge graduation Leszek Borysiewicz.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9575
| ''[[:d:Q6536535|Lewis Evans]]''
|
|
|
|-
| style='text-align:right'| 9576
| ''[[:d:Q6536889|Lewis Mills]]''
|
|
|
|-
| style='text-align:right'| 9577
| ''[[:d:Q6536998|Lewis Reece]]''
| [[Coadan:Lewis Reece.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9578
| ''[[:d:Q6538148|Leyton Maxwell]]''
|
|
|
|-
| style='text-align:right'| 9579
| ''[[:d:Q6539548|Liam Davies]]''
|
|
|
|-
| style='text-align:right'| 9580
| ''[[:d:Q6539846|Liam Williams]]''
| [[Coadan:Liam Williams 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9581
| ''[[:d:Q6548532|Lily Matthews]]''
|
|
|
|-
| style='text-align:right'| 9582
| ''[[:d:Q6552839|Lindsay Whittle]]''
| [[Coadan:Lindsay Whittle MS AS (54876759279) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9583
| ''[[:d:Q6557938|Lisa Diveney]]''
|
|
|
|-
| style='text-align:right'| 9584
| ''[[:d:Q6558184|Lisa Lee Dark]]''
|
|
|
|-
| style='text-align:right'| 9585
| ''[[:d:Q6572944|Hayley Jones]]''
| [[Coadan:Hayley jones stage two womens tour 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9586
| ''[[:d:Q6660144|Liz Fuller]]''
| [[Coadan:Shooter - Movie premiere (439610088) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9587
| ''[[:d:Q6660196|Liz Johnson]]''
|
|
|
|-
| style='text-align:right'| 9588
| ''[[:d:Q6662082|Llewellyn Treharne]]''
|
|
|
|-
| style='text-align:right'| 9589
| ''[[:d:Q6662167|Llion Iwan]]''
|
|
|
|-
| style='text-align:right'| 9590
| ''[[:d:Q6662169|Llinor ap Gwynedd]]''
|
|
|
|-
| style='text-align:right'| 9591
| ''[[:d:Q6662689|Lloyd Peers]]''
| [[Coadan:Ospreys - Warm-up - 2012-12-08 - 24.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9592
| ''[[:d:Q6662812|Lloyd White]]''
| [[Coadan:Lloyd White Crusaders.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9593
| ''[[:d:Q6685709|Lou Reed]]''
|
|
|
|-
| style='text-align:right'| 9594
| ''[[:d:Q6694820|Lu Corfield]]''
|
|
|
|-
| style='text-align:right'| 9595
| ''[[:d:Q6701976|Luke Ford]]''
|
|
|
|-
| style='text-align:right'| 9596
| ''[[:d:Q6702019|Luke Hamilton]]''
| [[Coadan:Luke Hamilton.png|center|128px]]
|
|
|-
| style='text-align:right'| 9597
| ''[[:d:Q6708312|Lyn Davies]]''
|
|
|
|-
| style='text-align:right'| 9598
| ''[[:d:Q6708332|Lyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9599
| ''[[:d:Q6708718|Lyndon Bateman]]''
|
|
|
|-
| style='text-align:right'| 9600
| ''[[:d:Q6708735|Lyndon Jones]]''
|
|
|
|-
| style='text-align:right'| 9601
| ''[[:d:Q6708773|Lyndsay Hugh Morgan]]''
| [[Coadan:Warrant Officer Lindsey Morgan (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9602
| ''[[:d:Q6708943|Lynn Bowles]]''
|
|
|
|-
| style='text-align:right'| 9603
| ''[[:d:Q6709072|Lynn Howells]]''
| [[Coadan:Lynn Howells 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9604
| ''[[:d:Q6709399|Lynne Neagle]]''
| [[Coadan:Lynne Neagle official portrait 2021 (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9605
| ''[[:d:Q6722772|Macauley Cook]]''
| [[Coadan:Macauley Cook.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9606
| ''[[:d:Q6740639|Mal Pope]]''
|
|
|
|-
| style='text-align:right'| 9607
| ''[[:d:Q6742263|Malcolm Dacey]]''
|
|
|
|-
| style='text-align:right'| 9608
| ''[[:d:Q6742298|Malcolm Edwards]]''
|
|
|
|-
| style='text-align:right'| 9609
| ''[[:d:Q6742407|Malcolm Johnson]]''
| [[Coadan:Malcolm Johnson - WSIS Forum 2018 (28097516059) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9610
| ''[[:d:Q6742541|Malcolm Page]]''
|
|
|
|-
| style='text-align:right'| 9612
| ''[[:d:Q6743287|Mali Harries]]''
| [[Coadan:Mali Harries in 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9613
| ''[[:d:Q6755417|Marc Breeze]]''
|
|
|
|-
| style='text-align:right'| 9614
| ''[[:d:Q6755651|Marc Jones]]''
|
|
|
|-
| style='text-align:right'| 9615
| ''[[:d:Q6755915|Marc Thomas]]''
|
|
|
|-
| style='text-align:right'| 9616
| ''[[:d:Q6755964|Marc Williams]]''
|
|
|
|-
| style='text-align:right'| 9617
| ''[[:d:Q6758141|Marcus Ebdon]]''
|
|
|
|-
| style='text-align:right'| 9618
| ''[[:d:Q6766497|Mark Aizlewood]]''
|
|
|
|-
| style='text-align:right'| 9619
| ''[[:d:Q6766803|Mark Bowden]]''
| [[Coadan:A portrait of Mark Bowden by Raphaël Neal, London 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9620
| ''[[:d:Q6766824|Mark Brake]]''
| [[Coadan:Mark Brake.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9621
| ''[[:d:Q6767108|Mark Colbourne]]''
|
|
|
|-
| style='text-align:right'| 9622
| ''[[:d:Q6767282|Mark Davies]]''
|
|
|
|-
| style='text-align:right'| 9623
| ''[[:d:Q6767281|Mark Davies]]''
|
|
|
|-
| style='text-align:right'| 9624
| ''[[:d:Q6767286|Mark Davies]]''
| [[Coadan:Mark Davies Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9625
| ''[[:d:Q6767407|Mark Drakeford]]''
| [[Coadan:Mark Drakeford (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9626
| ''[[:d:Q6767505|Mark Elliott]]''
|
|
|
|-
| style='text-align:right'| 9627
| ''[[:d:Q6767547|Mark Evans]]''
|
|
|
|-
| style='text-align:right'| 9628
| ''[[:d:Q6768134|Mark Hughes]]''
|
|
|
|-
| style='text-align:right'| 9629
| ''[[:d:Q6768278|Mark Jones]]''
|
|
|
|-
| style='text-align:right'| 9630
| ''[[:d:Q6768280|Mark Jones]]''
|
|
|
|-
| style='text-align:right'| 9631
| ''[[:d:Q6768584|Mark Lewis]]''
|
|
|
|-
| style='text-align:right'| 9632
| ''[[:d:Q6768819|Mark McJennett]]''
|
|
|
|-
| style='text-align:right'| 9633
| ''[[:d:Q6769161|Mark Parry]]''
|
|
|
|-
| style='text-align:right'| 9634
| ''[[:d:Q6769232|Mark Peters]]''
|
|
|
|-
| style='text-align:right'| 9635
| ''[[:d:Q6769267|Mark Pilkington]]''
|
|
|
|-
| style='text-align:right'| 9636
| ''[[:d:Q6769338|Mark Pritchard]]''
|
|
|
|-
| style='text-align:right'| 9637
| ''[[:d:Q6769569|Mark Salmon]]''
|
|
|
|-
| style='text-align:right'| 9638
| ''[[:d:Q6769646|Mark Sconce]]''
|
|
|
|-
| style='text-align:right'| 9639
| ''[[:d:Q6769678|Mark Serwotka]]''
| [[Coadan:Mark Serwotka 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9640
| ''[[:d:Q6769814|Mark Stacey]]''
|
|
|
|-
| style='text-align:right'| 9641
| ''[[:d:Q6770200|Mark Wallace]]''
|
|
|
|-
| style='text-align:right'| 9642
| ''[[:d:Q6770218|Mark Walton]]''
|
|
|
|-
| style='text-align:right'| 9643
| ''[[:d:Q6770423|Mark Wool]]''
|
|
|
|-
| style='text-align:right'| 9644
| ''[[:d:Q6770449|Mark Wyatt]]''
|
|
|
|-
| style='text-align:right'| 9645
| ''[[:d:Q6775622|Martin Harley]]''
| [[Coadan:Martin Harley performing at Bromley blues club.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9646
| ''[[:d:Q6775799|Martin Jarvis]]''
|
|
|
|-
| style='text-align:right'| 9647
| ''[[:d:Q6776739|Martin Thomas]]''
|
|
|
|-
| style='text-align:right'| 9648
| ''[[:d:Q6777595|Martyn Ashton]]''
| [[Coadan:Martyn Ashton (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9649
| ''[[:d:Q6777631|Martyn Giles]]''
|
|
|
|-
| style='text-align:right'| 9650
| ''[[:d:Q6777642|Martyn Jones]]''
|
|
|
|-
| style='text-align:right'| 9651
| ''[[:d:Q6777647|Martyn Joseph]]''
| [[Coadan:Martyn Joseph.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9652
| ''[[:d:Q6777644|Martyn Jones]]''
| [[Coadan:Martyn Jones 2009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9653
| ''[[:d:Q6777655|Martyn Lewis]]''
| [[Coadan:Martyn Lewis.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9654
| ''[[:d:Q6777659|Martyn Margetson]]''
| [[Coadan:Martyn Margetson in 2008.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9655
| ''[[:d:Q6777660|Martyn Madden]]''
|
|
|
|-
| style='text-align:right'| 9656
| ''[[:d:Q6777683|Martyn Thomas]]''
|
|
|
|-
| style='text-align:right'| 9657
| ''[[:d:Q6777681|Martyn Sprague]]''
|
|
|
|-
| style='text-align:right'| 9658
| ''[[:d:Q6777688|Martyn Woodroffe]]''
|
|
|
|-
| style='text-align:right'| 9659
| ''[[:d:Q6786991|Mathew Bevan]]''
|
|
|
|-
| style='text-align:right'| 9660
| ''[[:d:Q6788852|Matt Johnson]]''
| [[Coadan:Matt Johnson 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9661
| ''[[:d:Q6789197|Matt Postle]]''
|
|
|
|-
| style='text-align:right'| 9662
| ''[[:d:Q6789223|Matt Rees]]''
|
|
|
|-
| style='text-align:right'| 9663
| ''[[:d:Q6790320|Matthew Collins]]''
|
|
|
|-
| style='text-align:right'| 9664
| ''[[:d:Q6790325|Matthew Compton]]''
|
|
|
|-
| style='text-align:right'| 9665
| ''[[:d:Q6790439|Matthew Dwyer]]''
| [[Coadan:ST vs Ospreys 08-12-120027.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9666
| ''[[:d:Q6790586|Matthew Gravelle]]''
|
|
|
|-
| style='text-align:right'| 9667
| ''[[:d:Q6790741|Matthew Jarvis]]''
|
|
|
|-
| style='text-align:right'| 9668
| ''[[:d:Q6790752|Matthew Jones]]''
|
|
|
|-
| style='text-align:right'| 9669
| ''[[:d:Q6790988|Matthew Morgan]]''
|
|
|
|-
| style='text-align:right'| 9670
| ''[[:d:Q6791026|Matthew Nuthall]]''
|
|
|
|-
| style='text-align:right'| 9671
| ''[[:d:Q6791076|Matthew Pewtner]]''
|
|
|
|-
| style='text-align:right'| 9672
| ''[[:d:Q6791116|Matthew Rees]]''
|
|
|
|-
| style='text-align:right'| 9673
| ''[[:d:Q6791147|Matthew Robinson]]''
|
|
|
|-
| style='text-align:right'| 9674
| ''[[:d:Q6791226|Matthew Silva]]''
|
|
|
|-
| style='text-align:right'| 9675
| ''[[:d:Q6791328|Matthew Tipton]]''
|
|
|
|-
| style='text-align:right'| 9676
| ''[[:d:Q6792674|Maureen Evans]]''
| [[Coadan:Maureen Evans.png|center|128px]]
|
|
|-
| style='text-align:right'| 9677
| ''[[:d:Q6795379|Max Wideman]]''
| [[Coadan:MaxWideman2000R2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9678
| ''[[:d:Q6795965|Maxine Evans]]''
|
|
|
|-
| style='text-align:right'| 9679
| ''[[:d:Q6802996|Me One]]''
|
|
|
|-
| style='text-align:right'| 9680
| ''[[:d:Q6805202|Meddy Ford]]''
|
|
|
|-
| style='text-align:right'| 9681
| ''[[:d:Q6807451|Medwyn Williams]]''
|
|
|
|-
| style='text-align:right'| 9682
| ''[[:d:Q6807980|Marged Dafydd]]''
|
|
|
|-
| style='text-align:right'| 9683
| ''[[:d:Q6810800|Mel Nurse]]''
|
|
|
|-
| style='text-align:right'| 9684
| ''[[:d:Q6811342|Melanie Roberts]]''
|
|
|
|-
| style='text-align:right'| 9685
| ''[[:d:Q6811374|Melanie Walters]]''
|
|
|
|-
| style='text-align:right'| 9686
| ''[[:d:Q6817164|Menna Richards]]''
|
|
|
|-
| style='text-align:right'| 9687
| ''[[:d:Q6819012|Meredydd Hughes]]''
|
|
|
|-
| style='text-align:right'| 9688
| ''[[:d:Q6819154|Meri Huws]]''
| [[Coadan:Meri Huws (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9689
| ''[[:d:Q6820803|Merv Hicks]]''
|
|
|
|-
| style='text-align:right'| 9690
| ''[[:d:Q6828351|Michael Baer]]''
|
|
|
|-
| style='text-align:right'| 9691
| ''[[:d:Q6829746|Michael Davies]]''
|
|
|
|-
| style='text-align:right'| 9692
| ''[[:d:Q6830117|Michael Elwyn]]''
|
|
|
|-
| style='text-align:right'| 9693
| ''[[:d:Q6830352|Michael Flynn]]''
|
|
|
|-
| style='text-align:right'| 9694
| ''[[:d:Q6830845|Michael Gustavius Payne]]''
| [[Coadan:Michael Gustavius Payne (2011).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9695
| ''[[:d:Q6831465|Michael J. Morgan]]''
| [[Coadan:Mm portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9696
| ''[[:d:Q6833053|Michael Newbold]]''
|
|
|
|-
| style='text-align:right'| 9697
| ''[[:d:Q6833845|Michael Richards]]''
|
|
|
|-
| style='text-align:right'| 9698
| ''[[:d:Q6834952|Michael Tremellen]]''
|
|
|
|-
| style='text-align:right'| 9699
| ''[[:d:Q6837058|Michelle Green]]''
| [[Coadan:Michelle Green.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9700
| ''[[:d:Q6838178|Mick Flynn]]''
|
|
|
|-
| style='text-align:right'| 9701
| ''[[:d:Q6838620|Mickey Evans]]''
|
|
|
|-
| style='text-align:right'| 9702
| ''[[:d:Q6846242|Mike Cann]]''
|
|
|
|-
| style='text-align:right'| 9703
| ''[[:d:Q6846612|Mike Dowler]]''
|
|
|
|-
| style='text-align:right'| 9704
| ''[[:d:Q6846689|Mike Elliott]]''
|
|
|
|-
| style='text-align:right'| 9705
| ''[[:d:Q6847105|Mike Gwilym]]''
| [[Coadan:Mike Gwilym.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 9706
| ''[[:d:Q6847187|Mike Hedges]]''
| [[Coadan:Members of the Fifth Senedd (taken May 11, 2011) Members of the Fifth Senedd Mike Hedges AS MS (28170821805).png|center|128px]]
|
|
|-
| style='text-align:right'| 9707
| ''[[:d:Q6847304|Mike Hook]]''
|
|
|
|-
| style='text-align:right'| 9708
| ''[[:d:Q6847395|Mike Jenkins]]''
| [[Coadan:Mike Jenkins, Welsh poet.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9709
| ''[[:d:Q6847692|Mike Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 9710
| ''[[:d:Q6847868|Mike McBurney]]''
|
|
|
|-
| style='text-align:right'| 9711
| ''[[:d:Q6848187|Mike Nicholas]]''
|
|
|
|-
| style='text-align:right'| 9712
| ''[[:d:Q6848254|Mike O'Shea]]''
|
|
|
|-
| style='text-align:right'| 9713
| ''[[:d:Q6848353|Mike Pearson]]''
|
|
|
|-
| style='text-align:right'| 9714
| ''[[:d:Q6848419|Mike Poole]]''
|
|
|
|-
| style='text-align:right'| 9715
| ''[[:d:Q6848445|Mike Powell]]''
|
|
|
|-
| style='text-align:right'| 9716
| ''[[:d:Q6848516|Mike Rayer]]''
|
|
|
|-
| style='text-align:right'| 9717
| ''[[:d:Q6849180|Mike Voyle]]''
|
|
|
|-
| style='text-align:right'| 9718
| ''[[:d:Q6849198|Mike Walker]]''
|
|
|
|-
| style='text-align:right'| 9719
| ''[[:d:Q6849279|Mike Williams]]''
|
|
|
|-
| style='text-align:right'| 9720
| ''[[:d:Q6849282|Mike Williams]]''
|
|
|
|-
| style='text-align:right'| 9721
| ''[[:d:Q6849355|Mike Young]]''
|
|
|
|-
| style='text-align:right'| 9722
| ''[[:d:Q6865038|Mini Grey]]''
|
|
|
|-
| style='text-align:right'| 9723
| ''[[:d:Q6911577|Morgan Allen]]''
|
|
|
|-
| style='text-align:right'| 9724
| ''[[:d:Q6962803|Nancy Lee]]''
|
|
|
|-
| style='text-align:right'| 9725
| ''[[:d:Q6968475|Natasha Marsh]]''
|
|
|
|-
| style='text-align:right'| 9726
| ''[[:d:Q6968486|Natasha Perdue]]''
|
|
|
|-
| style='text-align:right'| 9727
| ''[[:d:Q6968912|Nathan Blake]]''
|
|
|
|-
| style='text-align:right'| 9728
| ''[[:d:Q6968916|Nathan Bonner-Evans]]''
|
|
|
|-
| style='text-align:right'| 9729
| ''[[:d:Q6968940|Nathan Buck]]''
|
|
|
|-
| style='text-align:right'| 9730
| ''[[:d:Q6968941|Nathan Budgett]]''
|
|
|
|-
| style='text-align:right'| 9731
| ''[[:d:Q6968996|Nathan Craig]]''
|
|
|
|-
| style='text-align:right'| 9732
| ''[[:d:Q6969374|Nathan Thomas]]''
|
|
|
|-
| style='text-align:right'| 9733
| ''[[:d:Q6969436|Nathan Wyburn]]''
| [[Coadan:NathanWyburn-inStudio-C.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9734
| ''[[:d:Q6969699|Nathaniel Jarvis]]''
| [[Coadan:Jarvis, Nathaniel.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9735
| ''[[:d:Q6983198|Naz Ball]]''
|
|
|
|-
| style='text-align:right'| 9736
| ''[[:d:Q6988305|Neil Boobyer]]''
|
|
|
|-
| style='text-align:right'| 9737
| ''[[:d:Q6988465|Neil Davies]]''
|
|
|
|-
| style='text-align:right'| 9738
| ''[[:d:Q6988618|Neil Gibson]]''
|
|
|
|-
| style='text-align:right'| 9739
| ''[[:d:Q6988674|Neil Haddock]]''
|
|
|
|-
| style='text-align:right'| 9740
| ''[[:d:Q6989128|Neil Patel]]''
|
|
|
|-
| style='text-align:right'| 9741
| ''[[:d:Q6989319|Neil Slatter]]''
|
|
|
|-
| style='text-align:right'| 9742
| ''[[:d:Q6997045|Nerys Evans]]''
| [[Coadan:Nerys Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9743
| ''[[:d:Q7004817|Neville Powell]]''
|
|
|
|-
| style='text-align:right'| 9744
| ''[[:d:Q7023480|Nia Caron]]''
|
|
|
|-
| style='text-align:right'| 9745
| ''[[:d:Q7023504|Nia Roberts]]''
| [[Coadan:OIFF 2015-07-17 143447 - Nia Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9746
| ''[[:d:Q7024261|Nic Cudd]]''
|
|
|
|-
| style='text-align:right'| 9747
| ''[[:d:Q7024310|Nic Parry]]''
| [[Coadan:Nic Parry Tachwedd 2014.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9748
| ''[[:d:Q7025678|Nicholas Jones]]''
|
|
|
|-
| style='text-align:right'| 9749
| ''[[:d:Q7027072|Nick Ellis]]''
|
|
|
|-
| style='text-align:right'| 9750
| ''[[:d:Q7027121|Nick Fletcher]]''
|
|
|
|-
| style='text-align:right'| 9751
| ''[[:d:Q7027494|Nick Macleod]]''
|
|
|
|-
| style='text-align:right'| 9752
| ''[[:d:Q7027777|Nick Ramsay]]''
| [[Coadan:Nick Ramsay 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9753
| ''[[:d:Q7028008|Nick Swetman]]''
|
|
|
|-
| style='text-align:right'| 9754
| ''[[:d:Q7028665|Nicky Piper]]''
|
|
|
|-
| style='text-align:right'| 9755
| ''[[:d:Q7032258|Nigel Boulton]]''
|
|
|
|-
| style='text-align:right'| 9756
| ''[[:d:Q7032329|Nigel Davies]]''
|
|
|
|-
| style='text-align:right'| 9757
| ''[[:d:Q7032604|Nigel Pulsford]]''
|
|
|
|-
| style='text-align:right'| 9758
| ''[[:d:Q7032608|Nigel Rees]]''
|
|
|
|-
| style='text-align:right'| 9759
| ''[[:d:Q7032660|Nigel Stevenson]]''
|
|
|
|-
| style='text-align:right'| 9760
| ''[[:d:Q7032689|Nigel Vaughan]]''
|
|
|
|-
| style='text-align:right'| 9761
| ''[[:d:Q7047187|Noel Richards]]''
| [[Coadan:Noel Performing 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9762
| ''[[:d:Q7047219|Noel Sullivan]]''
|
|
|
|-
| style='text-align:right'| 9763
| ''[[:d:Q7051658|Norma Curtis]]''
|
|
|
|-
| style='text-align:right'| 9764
| ''[[:d:Q7071254|Nyree Kindred]]''
|
|
|
|-
| style='text-align:right'| 9765
| ''[[:d:Q7087625|Oliver James]]''
|
|
|
|-
| style='text-align:right'| 9766
| ''[[:d:Q7087790|Oliver Reynolds]]''
|
|
|
|-
| style='text-align:right'| 9767
| ''[[:d:Q7087873|Oliver Thornton]]''
|
|
|
|-
| style='text-align:right'| 9768
| ''[[:d:Q7088315|Ollie Burton]]''
|
|
|
|-
| style='text-align:right'| 9769
| ''[[:d:Q7088359|Ollie Olds]]''
|
|
|
|-
| style='text-align:right'| 9770
| ''[[:d:Q7114239|Owain Arwel Hughes]]''
|
|
|
|-
| style='text-align:right'| 9771
| ''[[:d:Q7114242|Owain Fôn Williams]]''
| [[Coadan:Owain Fôn Williams playing for Wales vs Austria 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9772
| ''[[:d:Q7114245|Owain Hopkins]]''
|
|
|
|-
| style='text-align:right'| 9773
| ''[[:d:Q7114249|Owain Warlow]]''
|
|
|
|-
| style='text-align:right'| 9774
| ''[[:d:Q7114467|Owen Edwards]]''
| [[Coadan:Owen Edwards & Louise Walden GBR.png|center|128px]]
|
|
|-
| style='text-align:right'| 9775
| ''[[:d:Q7114472|Owen Evans]]''
|
|
|
|-
| style='text-align:right'| 9776
| ''[[:d:Q7114580|Owen Money]]''
|
|
|
|-
| style='text-align:right'| 9777
| ''[[:d:Q7114598|Owen Phillips]]''
|
|
|
|-
| style='text-align:right'| 9778
| ''[[:d:Q7114657|Owen Thomas]]''
|
|
|
|-
| style='text-align:right'| 9779
| ''[[:d:Q7114698|Owen Williams]]''
|
|
|
|-
| style='text-align:right'| 9780
| ''[[:d:Q7114699|Owen Williams]]''
|
|
|
|-
| style='text-align:right'| 9781
| ''[[:d:Q7114700|Owen Williams]]''
| [[Coadan:Owen Williams 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9782
| ''[[:d:Q7143662|Pat Leach]]''
|
|
|
|-
| style='text-align:right'| 9783
| ''[[:d:Q7143720|Pat McCarthy]]''
|
|
|
|-
| style='text-align:right'| 9784
| ''[[:d:Q7143810|Pat Mountain]]''
| [[Coadan:Pat Mountain 11042026 (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9785
| ''[[:d:Q7143923|Pat Pocock]]''
|
|
|
|-
| style='text-align:right'| 9786
| ''[[:d:Q7147445|Patrick Palmer]]''
|
|
|
|-
| style='text-align:right'| 9787
| ''[[:d:Q7149015|Paul Affleck]]''
|
|
|
|-
| style='text-align:right'| 9788
| ''[[:d:Q7149081|Paul Anthony]]''
|
|
|
|-
| style='text-align:right'| 9789
| ''[[:d:Q7149356|Paul Beynon-Davies]]''
|
|
|
|-
| style='text-align:right'| 9790
| ''[[:d:Q7149394|Paul Blackwell]]''
|
|
|
|-
| style='text-align:right'| 9791
| ''[[:d:Q7149821|Paul Child]]''
|
|
|
|-
| style='text-align:right'| 9792
| ''[[:d:Q7150146|Paul Davies]]''
| [[Coadan:Paul-davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9793
| ''[[:d:Q7150147|Paul Davies]]''
|
|
|
|-
| style='text-align:right'| 9794
| ''[[:d:Q7150149|Paul Davies]]''
| [[Coadan:DAVIES Paul (GBR).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9795
| ''[[:d:Q7150527|Paul Esposti]]''
|
|
|
|-
| style='text-align:right'| 9796
| ''[[:d:Q7150900|Paul Giles]]''
|
|
|
|-
| style='text-align:right'| 9797
| ''[[:d:Q7151019|Paul Griffiths]]''
|
|
|
|-
| style='text-align:right'| 9798
| ''[[:d:Q7151017|Paul Griffiths]]''
| [[Coadan:Paul Griffiths.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9799
| ''[[:d:Q7151248|Paul Henry]]''
|
|
|
|-
| style='text-align:right'| 9800
| ''[[:d:Q7151549|Paul James Wheeler]]''
|
|
|
|-
| style='text-align:right'| 9801
| ''[[:d:Q7152147|Paul Maddy]]''
|
|
|
|-
| style='text-align:right'| 9802
| ''[[:d:Q7152438|Paul Mealor]]''
| [[Coadan:Paulmealorphoto.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 9803
| ''[[:d:Q7153006|Paul Prendiville]]''
|
|
|
|-
| style='text-align:right'| 9804
| ''[[:d:Q7154096|Paul Turner]]''
|
|
|
|-
| style='text-align:right'| 9805
| ''[[:d:Q7155038|Pauline Jarman]]''
|
|
|
|-
| style='text-align:right'| 9806
| ''[[:d:Q7167764|Peredur Lynch]]''
| [[Coadan:Peredur Lynch ym Mangor, Medi 2018.png|center|128px]]
|
|
|-
| style='text-align:right'| 9807
| ''[[:d:Q7172097|Pete Lee-Wilson]]''
|
|
|
|-
| style='text-align:right'| 9808
| ''[[:d:Q7172205|Pete Price]]''
| [[Coadan:Pete Price at Superhero Skyfall 2018-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9809
| ''[[:d:Q7172477|Peter Aitken]]''
|
|
|
|-
| style='text-align:right'| 9810
| ''[[:d:Q7172726|Peter Baynham]]''
|
|
|
|-
| style='text-align:right'| 9811
| ''[[:d:Q7173980|Peter Finch]]''
| [[Coadan:Pf John Briggs Nov 2018 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9812
| ''[[:d:Q7174079|Peter Fraser]]''
|
|
|
|-
| style='text-align:right'| 9813
| ''[[:d:Q7174185|Peter Gatehouse]]''
|
|
|
|-
| style='text-align:right'| 9814
| ''[[:d:Q7174237|Peter Gill]]''
|
|
|
|-
| style='text-align:right'| 9815
| ''[[:d:Q7174549|Peter Harris]]''
|
|
|
|-
| style='text-align:right'| 9816
| ''[[:d:Q7175499|Peter Locke]]''
|
|
|
|-
| style='text-align:right'| 9817
| ''[[:d:Q7175943|Peter Moore]]''
|
|
|
|-
| style='text-align:right'| 9818
| ''[[:d:Q7176193|Peter O'Sullivan]]''
|
|
|
|-
| style='text-align:right'| 9819
| ''[[:d:Q7176450|Peter Price]]''
|
|
|
|-
| style='text-align:right'| 9820
| ''[[:d:Q7176554|Peter Rees]]''
|
|
|
|-
| style='text-align:right'| 9821
| ''[[:d:Q7176583|Peter Richards]]''
|
|
|
|-
| style='text-align:right'| 9822
| ''[[:d:Q7176643|Peter Rodrigues]]''
|
|
|
|-
| style='text-align:right'| 9823
| ''[[:d:Q7176685|Peter Rowe]]''
|
|
|
|-
| style='text-align:right'| 9824
| ''[[:d:Q7176768|Peter Sanders]]''
|
|
|
|-
| style='text-align:right'| 9825
| ''[[:d:Q7176791|Peter Sayer]]''
|
|
|
|-
| style='text-align:right'| 9826
| ''[[:d:Q7176927|Peter Shreeves]]''
|
|
|
|-
| style='text-align:right'| 9827
| ''[[:d:Q7176932|Peter Sidoli]]''
|
|
|
|-
| style='text-align:right'| 9828
| ''[[:d:Q7176999|Peter Smith]]''
|
|
|
|-
| style='text-align:right'| 9829
| ''[[:d:Q7177126|Peter Stimpson]]''
|
|
|
|-
| style='text-align:right'| 9830
| ''[[:d:Q7177186|Peter Sunman]]''
|
|
|
|-
| style='text-align:right'| 9831
| ''[[:d:Q7177481|Peter Vaughan]]''
|
|
|
|-
| style='text-align:right'| 9832
| ''[[:d:Q7181686|Phil Bater]]''
|
|
|
|-
| style='text-align:right'| 9833
| ''[[:d:Q7181762|Phil Carradice]]''
|
|
|
|-
| style='text-align:right'| 9834
| ''[[:d:Q7181840|Phil Dollman]]''
|
|
|
|-
| style='text-align:right'| 9835
| ''[[:d:Q7181880|Phil Evans]]''
|
|
|
|-
| style='text-align:right'| 9836
| ''[[:d:Q7181889|Phil Ford]]''
|
|
|
|-
| style='text-align:right'| 9837
| ''[[:d:Q7181976|Phil Harrington]]''
|
|
|
|-
| style='text-align:right'| 9838
| ''[[:d:Q7182004|Phil Hill]]''
|
|
|
|-
| style='text-align:right'| 9839
| ''[[:d:Q7182043|Phil John]]''
|
|
|
|-
| style='text-align:right'| 9840
| ''[[:d:Q7182197|Phil Morris]]''
| [[Coadan:Phil Morris speedway rider.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9841
| ''[[:d:Q7182228|Phil North]]''
|
|
|
|-
| style='text-align:right'| 9842
| ''[[:d:Q7182292|Phil Price]]''
|
|
|
|-
| style='text-align:right'| 9843
| ''[[:d:Q7182339|Phil Roberts]]''
|
|
|
|-
| style='text-align:right'| 9844
| ''[[:d:Q7182507|Phil Vance]]''
|
|
|
|-
| style='text-align:right'| 9845
| ''[[:d:Q7182554|Phil Williams]]''
|
|
|
|-
| style='text-align:right'| 9846
| ''[[:d:Q7183455|Philip C.J. Donoghue]]''
| [[Coadan:Professor Philip Conrad Donoghue FRS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9847
| ''[[:d:Q7183607|Philip George]]''
|
|
|
|-
| style='text-align:right'| 9848
| ''[[:d:Q7184059|Philip McGough]]''
|
|
|
|-
| style='text-align:right'| 9849
| ''[[:d:Q7184104|Philip Morgan]]''
|
|
|
|-
| style='text-align:right'| 9850
| ''[[:d:Q7184189|Philip Palmer]]''
| [[Coadan:Philip Palmer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9851
| ''[[:d:Q7184201|Philip Pedlar]]''
|
|
|
|-
| style='text-align:right'| 9852
| ''[[:d:Q7184350|Philip Sayce]]''
|
|
|
|-
| style='text-align:right'| 9853
| ''[[:d:Q7185718|Phillip Joll]]''
|
|
|
|-
| style='text-align:right'| 9854
| ''[[:d:Q7228390|Ponty Thomas]]''
|
|
|
|-
| style='text-align:right'| 9855
| ''[[:d:Q7228389|Ponty Davies]]''
|
|
|
|-
| style='text-align:right'| 9856
| ''[[:d:Q7253279|Prys Morgan]]''
|
|
|
|-
| style='text-align:right'| 9857
| ''[[:d:Q7279095|Rachael Solomon]]''
|
|
|
|-
| style='text-align:right'| 9858
| ''[[:d:Q7286596|Rakesh Aggarwal]]''
|
|
|
|-
| style='text-align:right'| 9859
| ''[[:d:Q7293962|Raphael Gray]]''
|
|
|
|-
| style='text-align:right'| 9860
| ''[[:d:Q7297200|Ray Bishop]]''
|
|
|
|-
| style='text-align:right'| 9861
| ''[[:d:Q7297551|Ray Griffiths]]''
|
|
|
|-
| style='text-align:right'| 9862
| ''[[:d:Q7297994|Ray Pulis]]''
|
|
|
|-
| style='text-align:right'| 9863
| ''[[:d:Q7298301|Ray Williams]]''
| [[Coadan:Ray williams weightlifter.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9864
| ''[[:d:Q7298964|Raymond Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 9865
| ''[[:d:Q7299231|Raymond Wilkins]]''
|
|
|
|-
| style='text-align:right'| 9866
| ''[[:d:Q7301732|Rebecca Evans]]''
|
|
|
|-
| style='text-align:right'| 9867
| ''[[:d:Q7301733|Rebecca Evans]]''
| [[Coadan:Rebecca Evans AM (27555062324) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9868
| ''[[:d:Q7301790|Rebecca John]]''
|
|
|
|-
| style='text-align:right'| 9869
| ''[[:d:Q7301813|Rebecca Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 9870
| ''[[:d:Q7306428|Redvern Edmunds]]''
|
|
|
|-
| style='text-align:right'| 9871
| ''[[:d:Q7306970|Rees Richards]]''
|
|
|
|-
| style='text-align:right'| 9872
| ''[[:d:Q7307801|Reg Hunter]]''
|
|
|
|-
| style='text-align:right'| 9873
| ''[[:d:Q7308736|Reginald Hathway]]''
|
|
|
|-
| style='text-align:right'| 9874
| ''[[:d:Q7308776|Reginald Jones]]''
|
|
|
|-
| style='text-align:right'| 9875
| ''[[:d:Q7308794|Reginald Lloyd]]''
|
|
|
|-
| style='text-align:right'| 9876
| ''[[:d:Q7320502|Rhian Davies]]''
|
|
|
|-
| style='text-align:right'| 9877
| ''[[:d:Q7320507|Rhian Samuel]]''
|
|
|
|-
| style='text-align:right'| 9878
| ''[[:d:Q7320505|Rhian Pugh]]''
|
|
|
|-
| style='text-align:right'| 9879
| ''[[:d:Q7320519|Rhidian Brook]]''
|
|
|
|-
| style='text-align:right'| 9880
| ''[[:d:Q7320717|Rhisiart ap Rhys]]''
|
|
|
|-
| style='text-align:right'| 9881
| ''[[:d:Q7320826|Rhod Gilbert]]''
| [[Coadan:Rhod Gilbert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9882
| ''[[:d:Q7321238|Rhodri Evans]]''
|
|
|
|-
| style='text-align:right'| 9883
| ''[[:d:Q7321239|Rhodri Glyn Thomas]]''
| [[Coadan:Rhodri glyn thomas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9884
| ''[[:d:Q7321237|Rhodri Davies]]''
|
|
|
|-
| style='text-align:right'| 9885
| ''[[:d:Q7321243|Rhodri Jones]]''
|
|
|
|-
| style='text-align:right'| 9886
| ''[[:d:Q7321241|Rhodri Gomer-Davies]]''
| [[Coadan:CDF Glos Dragons 09 (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9887
| ''[[:d:Q7321247|Rhodri Owen]]''
|
|
|
|-
| style='text-align:right'| 9888
| ''[[:d:Q7321244|Rhodri McAtee]]''
|
|
|
|-
| style='text-align:right'| 9889
| ''[[:d:Q7321251|Rhodri Williams]]''
|
|
|
|-
| style='text-align:right'| 9890
| ''[[:d:Q7321249|Rhodri Williams]]''
| [[Coadan:Rhodri Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9891
| ''[[:d:Q7321762|Rhys Brydydd]]''
|
|
|
|-
| style='text-align:right'| 9892
| ''[[:d:Q7321763|Rhys Buckley]]''
|
|
|
|-
| style='text-align:right'| 9893
| ''[[:d:Q7321779|Rhys Gill]]''
| [[Coadan:Rhys Gill 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9894
| ''[[:d:Q7321776|Rhys Evans]]''
| [[Coadan:RhysEvans0811.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9895
| ''[[:d:Q7321794|Rhys Jenkins]]''
|
|
|
|-
| style='text-align:right'| 9896
| ''[[:d:Q7321793|Rhys Hughes]]''
|
|
|
|-
| style='text-align:right'| 9897
| ''[[:d:Q7321799|Rhys Jones]]''
|
|
|
|-
| style='text-align:right'| 9898
| ''[[:d:Q7321797|Rhys Jones]]''
| [[Coadan:Rhys Jones - Great Britain Paralympic sprinter 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9899
| ''[[:d:Q7321814|Rhys Meirion]]''
| [[Coadan:Rhys Meirion 2011 llai.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9900
| ''[[:d:Q7321829|Rhys Patchell]]''
| [[Coadan:Rhys Patchell 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9901
| ''[[:d:Q7321834|Rhys Rees]]''
|
|
|
|-
| style='text-align:right'| 9902
| ''[[:d:Q7321838|Rhys Shellard]]''
|
|
|
|-
| style='text-align:right'| 9903
| ''[[:d:Q7321847|Rhys Williams]]''
| [[Coadan:Rhys Williams Warrington.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9904
| ''[[:d:Q7321844|Rhys Webb]]''
| [[Coadan:Rhys Webb. Wales Grand Slam Celebration, Senedd 19 March 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9905
| ''[[:d:Q7321850|Rhys Wilmot]]''
|
|
|
|-
| style='text-align:right'| 9906
| ''[[:d:Q7321848|Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 9907
| ''[[:d:Q7321849|Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 9908
| ''[[:d:Q7322910|Riccardo Gabbiadini]]''
|
|
|
|-
| style='text-align:right'| 9909
| ''[[:d:Q7324655|Richard Carwardine]]''
| [[Coadan:Carwardine july2010.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9910
| ''[[:d:Q7325461|Richard Edwards]]''
| [[Coadan:Richard Edwards, former Labour AM.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9911
| ''[[:d:Q7325548|Richard Evans]]''
|
|
|
|-
| style='text-align:right'| 9912
| ''[[:d:Q7325812|Richard Fussell]]''
| [[Coadan:ST vs Ospreys 08-12-120089.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 9913
| ''[[:d:Q7326022|Richard Grant]]''
|
|
|
|-
| style='text-align:right'| 9914
| ''[[:d:Q7326127|Richard Gwyn]]''
| [[Coadan:RGwyn 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9915
| ''[[:d:Q7326205|Richard Haig]]''
|
|
|
|-
| style='text-align:right'| 9916
| ''[[:d:Q7326280|Richard Harrington]]''
|
|
|
|-
| style='text-align:right'| 9917
| ''[[:d:Q7326809|Richard James]]''
| [[Coadan:Richard James at the ICA - 3315264865.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9918
| ''[[:d:Q7326900|Richard Johnson]]''
|
|
|
|-
| style='text-align:right'| 9919
| ''[[:d:Q7326904|Richard Johnson]]''
|
|
|
|-
| style='text-align:right'| 9920
| ''[[:d:Q7327041|Richard Kelly]]''
|
|
|
|-
| style='text-align:right'| 9921
| ''[[:d:Q7327515|Richard Lynch]]''
|
|
|
|-
| style='text-align:right'| 9922
| ''[[:d:Q7327965|Richard Mustoe]]''
|
|
|
|-
| style='text-align:right'| 9923
| ''[[:d:Q7327975|Richard Mylan]]''
|
|
|
|-
| style='text-align:right'| 9924
| ''[[:d:Q7328258|Richard Page]]''
|
|
|
|-
| style='text-align:right'| 9925
| ''[[:d:Q7328490|Richard Powell]]''
|
|
|
|-
| style='text-align:right'| 9926
| ''[[:d:Q7329060|Richard Singleton]]''
|
|
|
|-
| style='text-align:right'| 9927
| ''[[:d:Q7329076|Richard Skone]]''
|
|
|
|-
| style='text-align:right'| 9928
| ''[[:d:Q7329117|Richard Smith]]''
|
|
|
|-
| style='text-align:right'| 9929
| ''[[:d:Q7329960|Richard Wiegold]]''
|
|
|
|-
| style='text-align:right'| 9930
| ''[[:d:Q7330502|Richie Gendall]]''
|
|
|
|-
| style='text-align:right'| 9931
| ''[[:d:Q7330545|Richie Morgan]]''
|
|
|
|-
| style='text-align:right'| 9932
| ''[[:d:Q7330560|Richie Pugh]]''
|
|
|
|-
| style='text-align:right'| 9933
| ''[[:d:Q7330564|Richie Rees]]''
|
|
|
|-
| style='text-align:right'| 9934
| ''[[:d:Q7330585|Richie Thomas]]''
|
|
|
|-
| style='text-align:right'| 9935
| ''[[:d:Q7331266|Rick Brookes]]''
|
|
|
|-
| style='text-align:right'| 9936
| ''[[:d:Q7332065|Ricky Evans]]''
|
|
|
|-
| style='text-align:right'| 9937
| ''[[:d:Q7339945|Rob Appleyard]]''
|
|
|
|-
| style='text-align:right'| 9938
| ''[[:d:Q7340065|Rob Davies]]''
|
|
|
|-
| style='text-align:right'| 9939
| ''[[:d:Q7340119|Rob Evans]]''
|
|
|
|-
| style='text-align:right'| 9940
| ''[[:d:Q7340132|Rob Folland]]''
|
|
|
|-
| style='text-align:right'| 9941
| ''[[:d:Q7340204|Rob Higgitt]]''
|
|
|
|-
| style='text-align:right'| 9942
| ''[[:d:Q7340357|Rob McCusker]]''
|
|
|
|-
| style='text-align:right'| 9943
| ''[[:d:Q7340465|Rob Piercy]]''
|
|
|
|-
| style='text-align:right'| 9944
| ''[[:d:Q7340978|Robbie Regan]]''
|
|
|
|-
| style='text-align:right'| 9945
| ''[[:d:Q7342978|Robert Clift]]''
|
|
|
|-
| style='text-align:right'| 9946
| ''[[:d:Q7343424|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 9947
| ''[[:d:Q7343425|Robert Davies]]''
|
|
|
|-
| style='text-align:right'| 9948
| ''[[:d:Q7343672|Robert Duffy]]''
|
|
|
|-
| style='text-align:right'| 9949
| ''[[:d:Q7344030|Robert Ellis]]''
|
|
|
|-
| style='text-align:right'| 9950
| ''[[:d:Q7344461|Robert Fountain]]''
|
|
|
|-
| style='text-align:right'| 9951
| ''[[:d:Q7345014|Robert Gwilym]]''
|
|
|
|-
| style='text-align:right'| 9952
| ''[[:d:Q7345142|Robert Hadley]]''
|
|
|
|-
| style='text-align:right'| 9953
| ''[[:d:Q7345683|Robert Hughes]]''
|
|
|
|-
| style='text-align:right'| 9954
| ''[[:d:Q7345746|Robert Huw Morgan]]''
| [[Coadan:Robert Huw Morgan Stanford October 2019 001.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9955
| ''[[:d:Q7346880|Robert Lewis]]''
|
|
|
|-
| style='text-align:right'| 9956
| ''[[:d:Q7347710|Robert Minhinnick]]''
| [[Coadan:Robert Minhinnick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9957
| ''[[:d:Q7347796|Robert Morgan]]''
|
|
|
|-
| style='text-align:right'| 9958
| ''[[:d:Q7348762|Robert Paterson]]''
|
|
|
|-
| style='text-align:right'| 9959
| ''[[:d:Q7348841|Robert Perkins]]''
|
|
|
|-
| style='text-align:right'| 9960
| ''[[:d:Q7349052|Robert Prosser]]''
|
|
|
|-
| style='text-align:right'| 9961
| ''[[:d:Q7349356|Robert Rogers]]''
| [[Coadan:Official portrait of Lord Lisvane crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9962
| ''[[:d:Q7349408|Robert Rowthorn]]''
|
|
|
|-
| style='text-align:right'| 9963
| ''[[:d:Q7352623|Robin Llywelyn]]''
|
|
|
|-
| style='text-align:right'| 9964
| ''[[:d:Q7352873|Robin Williams]]''
|
|
|
|-
| style='text-align:right'| 9965
| ''[[:d:Q7356255|Rod Jones]]''
|
|
|
|-
| style='text-align:right'| 9966
| ''[[:d:Q7356492|Roddy Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 9967
| ''[[:d:Q7356724|Rodger Gifford]]''
|
|
|
|-
| style='text-align:right'| 9968
| ''[[:d:Q7358079|Roger Davis]]''
|
|
|
|-
| style='text-align:right'| 9969
| ''[[:d:Q7358254|Roger Green]]''
|
|
|
|-
| style='text-align:right'| 9970
| ''[[:d:Q7358800|Roger Pratt]]''
|
|
|
|-
| style='text-align:right'| 9971
| ''[[:d:Q7358860|Roger Royle]]''
|
|
|
|-
| style='text-align:right'| 9972
| ''[[:d:Q7364707|Ronald Burge]]''
|
|
|
|-
| style='text-align:right'| 9973
| ''[[:d:Q7364983|Ronald James]]''
|
|
|
|-
| style='text-align:right'| 9974
| ''[[:d:Q7366940|Rory Pitman]]''
|
|
|
|-
| style='text-align:right'| 9975
| ''[[:d:Q7366962|Rory Watts-Jones]]''
|
|
|
|-
| style='text-align:right'| 9976
| ''[[:d:Q7368928|Rosie Thomas]]''
|
|
|
|-
| style='text-align:right'| 9977
| ''[[:d:Q7369277|Ross Davies]]''
|
|
|
|-
| style='text-align:right'| 9978
| ''[[:d:Q7369288|Ross Divorty]]''
|
|
|
|-
| style='text-align:right'| 9979
| ''[[:d:Q7369430|Ross Jamison]]''
| [[Coadan:Ross Jamison.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9980
| ''[[:d:Q7369438|Ross Johnson]]''
|
|
|
|-
| style='text-align:right'| 9981
| ''[[:d:Q7369441|Ross Jones]]''
|
|
|
|-
| style='text-align:right'| 9982
| ''[[:d:Q7369602|Ross Reid]]''
|
|
|
|-
| style='text-align:right'| 9983
| ''[[:d:Q7369697|Ross Wardle]]''
|
|
|
|-
| style='text-align:right'| 9984
| ''[[:d:Q7369797|Rosser Evans]]''
|
|
|
|-
| style='text-align:right'| 9985
| ''[[:d:Q7372175|Rowland Phillips]]''
|
|
|
|-
| style='text-align:right'| 9986
| ''[[:d:Q7372572|Roy Bergiers]]''
|
|
|
|-
| style='text-align:right'| 9987
| ''[[:d:Q7373056|Roy Lambert]]''
|
|
|
|-
| style='text-align:right'| 9988
| ''[[:d:Q7373216|Roy Noble]]''
| [[Coadan:RoyNobleAberdareBlog.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9989
| ''[[:d:Q7375253|Royston Evans]]''
|
|
|
|-
| style='text-align:right'| 9990
| ''[[:d:Q7381514|Russell George]]''
| [[Coadan:Russell George.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9991
| ''[[:d:Q7381526|Russell Goodway]]''
|
|
|
|-
| style='text-align:right'| 9992
| ''[[:d:Q7381608|Russell Jones]]''
|
|
|
|-
| style='text-align:right'| 9993
| ''[[:d:Q7381697|Russell Morris]]''
| [[Coadan:Professor Russell Morris FRS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9994
| ''[[:d:Q7383015|Ruth Goodman]]''
| [[Coadan:Ruth Goodman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9995
| ''[[:d:Q7383058|Ruth Jones]]''
| [[Coadan:Ruth Jones Little Britain Gavin and Stacey.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 9996
| ''[[:d:Q7383062|Ruth Jên]]''
|
|
|
|-
| style='text-align:right'| 9997
| ''[[:d:Q7384100|Ryan Green]]''
|
|
|
|-
| style='text-align:right'| 9998
| ''[[:d:Q7384121|Ryan Harford]]''
|
|
|
|-
| style='text-align:right'| 9999
| ''[[:d:Q7384374|Ryan Nicholls]]''
|
|
|
|-
| style='text-align:right'| 10000
| ''[[:d:Q7384446|Ryan Prosser]]''
|
|
|
|-
| style='text-align:right'| 10001
| ''[[:d:Q7384568|Ryan Sylvester]]''
|
|
|
|-
| style='text-align:right'| 10002
| ''[[:d:Q7384624|Ryan Watkins]]''
|
|
|
|-
| style='text-align:right'| 10003
| ''[[:d:Q7401235|Saint Flewyn]]''
| [[Coadan:Eglwys St Fflewin Church, Llanfflewin, Mynydd Mechell.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10004
| ''[[:d:Q7401288|Gelert]]''
|
|
|
|-
| style='text-align:right'| 10005
| ''[[:d:Q7407398|Sam Davies]]''
|
|
|
|-
| style='text-align:right'| 10006
| ''[[:d:Q7407397|Sam Davies]]''
|
|
|
|-
| style='text-align:right'| 10007
| ''[[:d:Q7407611|Sam Hobbs]]''
|
|
|
|-
| style='text-align:right'| 10008
| ''[[:d:Q7407791|Sam Lewis]]''
| [[Coadan:ST vs Ospreys 08-12-120025.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10009
| ''[[:d:Q7408004|Sam Parry]]''
| [[Coadan:Sam Parry 20250419 152653.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10010
| ''[[:d:Q7408265|Sam Turner]]''
|
|
|
|-
| style='text-align:right'| 10011
| ''[[:d:Q7408625|Samantha Bowen]]''
|
|
|
|-
| style='text-align:right'| 10012
| ''[[:d:Q7410381|Samson Lee]]''
|
|
|
|-
| style='text-align:right'| 10013
| ''[[:d:Q7417378|Sandy Mewies]]''
| [[Coadan:Sandy Mewies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10014
| ''[[:d:Q7421612|Sara Edwards]]''
| [[Coadan:Sara Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10015
| ''[[:d:Q7421643|Sara Gregory]]''
|
|
|
|-
| style='text-align:right'| 10016
| ''[[:d:Q7421653|Sara Head]]''
| [[Coadan:Sara Head (GBR) (6925416825).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10017
| ''[[:d:Q7422514|Sarah Lark]]''
|
|
|
|-
| style='text-align:right'| 10018
| ''[[:d:Q7428669|Sawnder Sion]]''
|
|
|
|-
| style='text-align:right'| 10019
| ''[[:d:Q7435895|Scott Andrews]]''
|
|
|
|-
| style='text-align:right'| 10020
| ''[[:d:Q7435941|Scott Baldwin]]''
| [[Coadan:ST vs Ospreys 08-12-120012.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10021
| ''[[:d:Q7436380|Scott Gammer]]''
|
|
|
|-
| style='text-align:right'| 10022
| ''[[:d:Q7437554|Scott Young]]''
| [[Coadan:Scott Young.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10023
| ''[[:d:Q7441218|Sean McCarthy]]''
|
|
|
|-
| style='text-align:right'| 10024
| ''[[:d:Q7441234|Sean McGoldrick]]''
|
|
|
|-
| style='text-align:right'| 10025
| ''[[:d:Q7441342|Sean Palfrey]]''
|
|
|
|-
| style='text-align:right'| 10026
| ''[[:d:Q7441351|Sean Parrish]]''
|
|
|
|-
| style='text-align:right'| 10027
| ''[[:d:Q7459474|Seán Burke]]''
|
|
|
|-
| style='text-align:right'| 10028
| ''[[:d:Q7488043|Shane Dix]]''
|
|
|
|-
| style='text-align:right'| 10029
| ''[[:d:Q7489879|Sharla Passariello]]''
|
|
|
|-
| style='text-align:right'| 10030
| ''[[:d:Q7490161|Sharon Morgan]]''
|
|
|
|-
| style='text-align:right'| 10031
| ''[[:d:Q7490820|Shaun Connor]]''
|
|
|
|-
| style='text-align:right'| 10032
| ''[[:d:Q7490884|Shaun Hopkins]]''
|
|
|
|-
| style='text-align:right'| 10033
| ''[[:d:Q7493819|Shelley Rees]]''
|
|
|
|-
| style='text-align:right'| 10034
| ''[[:d:Q7500411|Shoni Jones]]''
| [[Coadan:Shoni (William John) Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10035
| ''[[:d:Q7506042|Shân Cothi]]''
| [[Coadan:ShânCothi.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10036
| ''[[:d:Q7506792|Sian Lloyd]]''
| [[Coadan:Siân Lloyd (news presenter).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10037
| ''[[:d:Q7506799|Sian Reese-Williams]]''
|
|
|
|-
| style='text-align:right'| 10038
| ''[[:d:Q7518575|Simon Davey]]''
|
|
|
|-
| style='text-align:right'| 10039
| ''[[:d:Q7518821|Simon Gardiner]]''
|
|
|
|-
| style='text-align:right'| 10040
| ''[[:d:Q7518852|Simon Goddard]]''
|
|
|
|-
| style='text-align:right'| 10041
| ''[[:d:Q7518929|Simon Haworth]]''
|
|
|
|-
| style='text-align:right'| 10042
| ''[[:d:Q7519069|Simon Jones]]''
| [[Coadan:Simon Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10043
| ''[[:d:Q7519190|Simon Lee Evans]]''
|
|
|
|-
| style='text-align:right'| 10044
| ''[[:d:Q7519203|Simon Lewis]]''
|
|
|
|-
| style='text-align:right'| 10045
| ''[[:d:Q7519575|Simon Price]]''
|
|
|
|-
| style='text-align:right'| 10046
| ''[[:d:Q7519948|Simon Van Booy]]''
| [[Coadan:Simon van booy 5187641.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10047
| ''[[:d:Q7519973|Simon Wallace]]''
|
|
|
|-
| style='text-align:right'| 10048
| ''[[:d:Q7525296|Siobhan Flynn]]''
| [[Coadan:Siobhan Flynn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10049
| ''[[:d:Q7525303|Siobhán Owen]]''
|
|
|
|-
| style='text-align:right'| 10050
| ''[[:d:Q7525362|Sion Morris]]''
|
|
|
|-
| style='text-align:right'| 10051
| ''[[:d:Q7525365|Sion Russell Jones]]''
|
|
|
|-
| style='text-align:right'| 10052
| ''[[:d:Q7530227|Siri Neal]]''
|
|
|
|-
| style='text-align:right'| 10053
| ''[[:d:Q7532512|Siw Hughes]]''
| [[Coadan:SiwHughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10054
| ''[[:d:Q7533474|Siân Lloyd]]''
| [[Coadan:Siân Lloyd (weather presenter).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10055
| ''[[:d:Q7562994|Sophie Evans]]''
| [[Coadan:Sophie Evans 2013 (10005216415).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10056
| ''[[:d:Q7563011|Sophie Ingle]]''
|
|
|
|-
| style='text-align:right'| 10057
| ''[[:d:Q7563068|Sophie Stanton]]''
|
|
|
|-
| style='text-align:right'| 10058
| ''[[:d:Q7576224|Spencer Wilding]]''
| [[Coadan:Spencer Wilding at the Pan Premiere.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10059
| ''[[:d:Q7596554|Staff Jones]]''
|
|
|
|-
| style='text-align:right'| 10060
| ''[[:d:Q7597866|Stan Rowlands]]''
| [[Coadan:Stan Rowlands.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10061
| ''[[:d:Q7599810|Stanley Mountain]]''
|
|
|
|-
| style='text-align:right'| 10062
| ''[[:d:Q7606146|Stefan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10063
| ''[[:d:Q7606231|Stefan Pejic]]''
|
|
|
|-
| style='text-align:right'| 10064
| ''[[:d:Q7606592|Steffan Cook]]''
|
|
|
|-
| style='text-align:right'| 10065
| ''[[:d:Q7606593|Steffan Cravos]]''
|
|
|
|-
| style='text-align:right'| 10066
| ''[[:d:Q7606598|Steffan Jones]]''
|
|
|
|-
| style='text-align:right'| 10067
| ''[[:d:Q7606597|Steffan Jones]]''
|
|
|
|-
| style='text-align:right'| 10068
| ''[[:d:Q7606601|Steffan Rhodri]]''
|
|
|
|-
| style='text-align:right'| 10069
| ''[[:d:Q7608097|Steph Davies]]''
| [[Coadan:Steph davies 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10070
| ''[[:d:Q7608105|Steph Reynolds]]''
|
|
|
|-
| style='text-align:right'| 10071
| ''[[:d:Q7609085|Stephen Doughty]]''
| [[Coadan:Official portrait of Stephen Doughty MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10072
| ''[[:d:Q7609158|Stephen Evans]]''
|
|
|
|-
| style='text-align:right'| 10073
| ''[[:d:Q7609157|Stephen Evans]]''
|
|
|
|-
| style='text-align:right'| 10074
| ''[[:d:Q7610382|Stephen Roberts]]''
|
|
|
|-
| style='text-align:right'| 10075
| ''[[:d:Q7610762|Stephen Volk]]''
| [[Coadan:Stephen Volk.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10076
| ''[[:d:Q7611777|Steve Alker]]''
|
|
|
|-
| style='text-align:right'| 10077
| ''[[:d:Q7611798|Steve Andrews]]''
| [[Coadan:Steve Andrews, promotional image.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10078
| ''[[:d:Q7611858|Steve Balsamo]]''
|
|
|
|-
| style='text-align:right'| 10079
| ''[[:d:Q7611877|Steve Barry]]''
|
|
|
|-
| style='text-align:right'| 10080
| ''[[:d:Q7611884|Steve Barwick]]''
|
|
|
|-
| style='text-align:right'| 10081
| ''[[:d:Q7611899|Steve Bayliss]]''
|
|
|
|-
| style='text-align:right'| 10082
| ''[[:d:Q7612376|Steve Derrett]]''
|
|
|
|-
| style='text-align:right'| 10083
| ''[[:d:Q7612423|Steve Doyle]]''
|
|
|
|-
| style='text-align:right'| 10084
| ''[[:d:Q7612487|Steve Emery]]''
|
|
|
|-
| style='text-align:right'| 10085
| ''[[:d:Q7612568|Steve Ford]]''
|
|
|
|-
| style='text-align:right'| 10086
| ''[[:d:Q7613191|Steve Lowndes]]''
|
|
|
|-
| style='text-align:right'| 10087
| ''[[:d:Q7613188|Steve Lovell]]''
|
|
|
|-
| style='text-align:right'| 10088
| ''[[:d:Q7613494|Steve O'Shaughnessy]]''
|
|
|
|-
| style='text-align:right'| 10089
| ''[[:d:Q7613555|Steve Parry]]''
|
|
|
|-
| style='text-align:right'| 10090
| ''[[:d:Q7613556|Steve Parry]]''
|
|
|
|-
| style='text-align:right'| 10091
| ''[[:d:Q7613567|Steve Paulding]]''
|
|
|
|-
| style='text-align:right'| 10092
| ''[[:d:Q7613700|Steve Ray]]''
|
|
|
|-
| style='text-align:right'| 10093
| ''[[:d:Q7613774|Steve Robinson]]''
|
|
|
|-
| style='text-align:right'| 10094
| ''[[:d:Q7613812|Steve Rowland]]''
|
|
|
|-
| style='text-align:right'| 10095
| ''[[:d:Q7613936|Steve Sims]]''
|
|
|
|-
| style='text-align:right'| 10096
| ''[[:d:Q7614093|Steve Tandy]]''
|
|
|
|-
| style='text-align:right'| 10097
| ''[[:d:Q7614247|Steve Watkin]]''
|
|
|
|-
| style='text-align:right'| 10098
| ''[[:d:Q7614248|Steve Watkin]]''
|
|
|
|-
| style='text-align:right'| 10099
| ''[[:d:Q7614314|Steve Williams]]''
|
|
|
|-
| style='text-align:right'| 10100
| ''[[:d:Q7614316|Steve Williams]]''
| [[Coadan:181117--steve williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10101
| ''[[:d:Q7615049|Steven Meo]]''
|
|
|
|-
| style='text-align:right'| 10102
| ''[[:d:Q7615264|Steven Shingler]]''
|
|
|
|-
| style='text-align:right'| 10103
| ''[[:d:Q7615593|Stevie Lyle]]''
|
|
|
|-
| style='text-align:right'| 10104
| ''[[:d:Q7620234|Stormie Mills]]''
| [[Coadan:Stormie Mills (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10105
| ''[[:d:Q7626453|Stuart Davies]]''
|
|
|
|-
| style='text-align:right'| 10106
| ''[[:d:Q7626511|Stuart Evans]]''
|
|
|
|-
| style='text-align:right'| 10107
| ''[[:d:Q7626525|Stuart Ferguson]]''
|
|
|
|-
| style='text-align:right'| 10108
| ''[[:d:Q7626628|Stuart Harrison]]''
|
|
|
|-
| style='text-align:right'| 10109
| ''[[:d:Q7626870|Stuart Morgan]]''
|
|
|
|-
| style='text-align:right'| 10110
| ''[[:d:Q7626948|Stuart Phelps]]''
|
|
|
|-
| style='text-align:right'| 10111
| ''[[:d:Q7627025|Stuart Roberts]]''
|
|
|
|-
| style='text-align:right'| 10112
| ''[[:d:Q7634158|Sue Jones]]''
|
|
|
|-
| style='text-align:right'| 10113
| ''[[:d:Q7650929|Suzanne Packer]]''
| [[Coadan:Suzanne Packer at the Chsiwick Book Festival (51449023075) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10114
| ''[[:d:Q7651414|Suzy Davies]]''
| [[Coadan:Suzy Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10115
| ''[[:d:Q7655213|Sweet Baboo]]''
|
|
|
|-
| style='text-align:right'| 10116
| ''[[:d:Q7659702|Syd Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10117
| ''[[:d:Q7660931|Sylvia Heal]]''
|
|
|
|-
| style='text-align:right'| 10118
| ''[[:d:Q7678716|Tal Selley]]''
|
|
|
|-
| style='text-align:right'| 10119
| ''[[:d:Q7681592|Tammy Jones]]''
|
|
|
|-
| style='text-align:right'| 10120
| ''[[:d:Q7683954|Tanwg]]''
| [[Coadan:Tanwg.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10121
| ''[[:d:Q7686269|Tarki Micallef]]''
|
|
|
|-
| style='text-align:right'| 10122
| ''[[:d:Q7692924|Tecwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 10123
| ''[[:d:Q7704135|Terry Boyle]]''
|
|
|
|-
| style='text-align:right'| 10124
| ''[[:d:Q7704246|Terry Cooke]]''
|
|
|
|-
| style='text-align:right'| 10125
| ''[[:d:Q7704251|Terry Cooper]]''
|
|
|
|-
| style='text-align:right'| 10126
| ''[[:d:Q7704351|Terry Evans]]''
|
|
|
|-
| style='text-align:right'| 10127
| ''[[:d:Q7704540|Terry Hubbard]]''
|
|
|
|-
| style='text-align:right'| 10128
| ''[[:d:Q7704747|Terry Matthews]]''
|
|
|
|-
| style='text-align:right'| 10129
| ''[[:d:Q7704824|Terry Morris]]''
| [[Coadan:Terry Morris and Dame Shirley Bassey.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10130
| ''[[:d:Q7705046|Terry Stephens]]''
|
|
|
|-
| style='text-align:right'| 10131
| ''[[:d:Q7781507|Theo Wharton]]''
| [[Coadan:Theo Wharton 2017-08-05 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10132
| ''[[:d:Q7790073|Thomas Glyn Watkin]]''
|
|
|
|-
| style='text-align:right'| 10133
| ''[[:d:Q7790335|Thomas Haffield]]''
|
|
|
|-
| style='text-align:right'| 10134
| ''[[:d:Q7791847|Thomas Leyson]]''
|
|
|
|-
| style='text-align:right'| 10135
| ''[[:d:Q7792960|Thomas Paddison]]''
|
|
|
|-
| style='text-align:right'| 10136
| ''[[:d:Q7795299|Thomas Woods]]''
|
|
|
|-
| style='text-align:right'| 10137
| ''[[:d:Q7795382|Thomas Young]]''
|
|
|
|-
| style='text-align:right'| 10138
| ''[[:d:Q7804161|Tim Rhys-Evans]]''
| [[Coadan:Tim Rhys-Evans conducting at the AMIS Honor Choir 2019 in Beijing.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10139
| ''[[:d:Q7807185|Timothy Everest]]''
| [[Coadan:Timothy Everest.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10140
| ''[[:d:Q7811780|Toby Charles]]''
|
|
|
|-
| style='text-align:right'| 10141
| ''[[:d:Q7815245|Tom Cave]]''
| [[Coadan:Tom Cave, 2014 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10142
| ''[[:d:Q7815265|Tom Cheeseman]]''
|
|
|
|-
| style='text-align:right'| 10143
| ''[[:d:Q7815481|Tom Cullen]]''
| [[Coadan:Tom Cullen (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10144
| ''[[:d:Q7815982|Tom Grabham]]''
|
|
|
|-
| style='text-align:right'| 10145
| ''[[:d:Q7816039|Tom Habberfield]]''
|
|
|
|-
| style='text-align:right'| 10146
| ''[[:d:Q7816060|Tom Hallett]]''
|
|
|
|-
| style='text-align:right'| 10147
| ''[[:d:Q7816300|Tom Isaacs]]''
| [[Coadan:ST vs Ospreys 08-12-120001.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10148
| ''[[:d:Q7816335|Tom John]]''
|
|
|
|-
| style='text-align:right'| 10149
| ''[[:d:Q7816609|Tom Lockyer]]''
| [[Coadan:Tom Lockyer in action for Wales v Croatia.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10150
| ''[[:d:Q7817055|Tom Norris]]''
|
|
|
|-
| style='text-align:right'| 10151
| ''[[:d:Q7817323|Tom Ramasut]]''
| [[Coadan:Tom Ramasut 05042025 (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10152
| ''[[:d:Q7817387|Tom Riley]]''
|
|
|
|-
| style='text-align:right'| 10153
| ''[[:d:Q7817808|Tom Thomas]]''
|
|
|
|-
| style='text-align:right'| 10154
| ''[[:d:Q7817972|Tom Walley]]''
|
|
|
|-
| style='text-align:right'| 10155
| ''[[:d:Q7818042|Tom Whittaker]]''
| [[Coadan:Tom Whittaker at Malmstrom-cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10156
| ''[[:d:Q7818067|Tom Williams]]''
|
|
|
|-
| style='text-align:right'| 10157
| ''[[:d:Q7819582|Tommy Jones]]''
| [[Coadan:Tommy Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10158
| ''[[:d:Q7819760|Tommy O'Sullivan]]''
| [[Coadan:Tommy O'Sullivan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10159
| ''[[:d:Q7821903|Tony Bird]]''
|
|
|
|-
| style='text-align:right'| 10160
| ''[[:d:Q7822067|Tony Clark]]''
|
|
|
|-
| style='text-align:right'| 10161
| ''[[:d:Q7822122|Tony Cottey]]''
|
|
|
|-
| style='text-align:right'| 10162
| ''[[:d:Q7822155|Tony Curtis]]''
|
|
|
|-
| style='text-align:right'| 10163
| ''[[:d:Q7822341|Tony Fisher]]''
|
|
|
|-
| style='text-align:right'| 10164
| ''[[:d:Q7822639|Tony James]]''
| [[Coadan:Tony James Hereford United.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10165
| ''[[:d:Q7823064|Tony Norman]]''
|
|
|
|-
| style='text-align:right'| 10166
| ''[[:d:Q7823155|Tony Pennock]]''
| [[Coadan:Tony Pennock.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10167
| ''[[:d:Q7823245|Tony Rees]]''
|
|
|
|-
| style='text-align:right'| 10168
| ''[[:d:Q7823281|Tony Roberts]]''
| [[Coadan:Roberts, Tony.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10169
| ''[[:d:Q7823414|Tony Simmons]]''
|
|
|
|-
| style='text-align:right'| 10170
| ''[[:d:Q7823432|Tony Skuse]]''
|
|
|
|-
| style='text-align:right'| 10171
| ''[[:d:Q7831207|Tracey Corderoy]]''
| [[Coadan:Tracey Corderoy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10172
| ''[[:d:Q7831231|Tracey Hinton]]''
|
|
|
|-
| style='text-align:right'| 10173
| ''[[:d:Q7831254|Tracey Moberly]]''
|
|
|
|-
| style='text-align:right'| 10174
| ''[[:d:Q7836739|Hannah Mills]]''
| [[Coadan:Hannah Mills.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10175
| ''[[:d:Q7843996|Trish Law]]''
| [[Coadan:Trish Law AM 2007.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10176
| ''[[:d:Q7848821|Trystan Gravelle]]''
|
|
|
|-
| style='text-align:right'| 10177
| ''[[:d:Q7851307|Tudor Parfitt]]''
|
|
|
|-
| style='text-align:right'| 10178
| ''[[:d:Q7861631|Tyrone Powell]]''
|
|
|
|-
| style='text-align:right'| 10179
| ''[[:d:Q7909111|Val Lloyd]]''
| [[Coadan:Val Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10180
| ''[[:d:Q7917296|Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 10181
| ''[[:d:Q7921085|Verden Allen]]''
| [[Coadan:HunterAllenMotttheHoople.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10182
| ''[[:d:Q7924902|Vic Rouse]]''
|
|
|
|-
| style='text-align:right'| 10183
| ''[[:d:Q7927089|Victoria Thornley]]''
|
|
|
|-
| style='text-align:right'| 10184
| ''[[:d:Q7970188|Warren Feeney, Sr.]]''
|
|
|
|-
| style='text-align:right'| 10185
| ''[[:d:Q7976022|Wayne Atwood]]''
|
|
|
|-
| style='text-align:right'| 10186
| ''[[:d:Q7976218|Wayne Evans]]''
|
|
|
|-
| style='text-align:right'| 10187
| ''[[:d:Q7976374|Wayne Jones]]''
|
|
|
|-
| style='text-align:right'| 10188
| ''[[:d:Q7976416|Wayne Law]]''
|
|
|
|-
| style='text-align:right'| 10189
| ''[[:d:Q7976425|Wayne Lock]]''
|
|
|
|-
| style='text-align:right'| 10190
| ''[[:d:Q7976496|Wayne Mumford]]''
|
|
|
|-
| style='text-align:right'| 10191
| ''[[:d:Q7976534|Wayne Phillips]]''
|
|
|
|-
| style='text-align:right'| 10192
| ''[[:d:Q7976580|Wayne Russell]]''
|
|
|
|-
| style='text-align:right'| 10193
| ''[[:d:Q7976757|Wayne Warren]]''
|
|
|
|-
| style='text-align:right'| 10194
| ''[[:d:Q7982581|Wendy Albiston]]''
|
|
|
|-
| style='text-align:right'| 10195
| ''[[:d:Q7982737|Wendy Mulford]]''
|
|
|
|-
| style='text-align:right'| 10196
| ''[[:d:Q7983858|Wesley Burns]]''
| [[Coadan:Wes Burns 2 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10197
| ''[[:d:Q8002411|William Owen Roberts]]''
|
|
|
|-
| style='text-align:right'| 10198
| ''[[:d:Q8002713|Will Bragg]]''
|
|
|
|-
| style='text-align:right'| 10199
| ''[[:d:Q8002779|Will Davies]]''
|
|
|
|-
| style='text-align:right'| 10200
| ''[[:d:Q8002851|Will Harries]]''
|
|
|
|-
| style='text-align:right'| 10201
| ''[[:d:Q8002875|Will Hopkins]]''
|
|
|
|-
| style='text-align:right'| 10202
| ''[[:d:Q8003002|Will Owen]]''
|
|
|
|-
| style='text-align:right'| 10203
| ''[[:d:Q8003041|Will Roberts]]''
|
|
|
|-
| style='text-align:right'| 10204
| ''[[:d:Q8003141|Will Taylor]]''
|
|
|
|-
| style='text-align:right'| 10205
| ''[[:d:Q8005289|William Beck]]''
|
|
|
|-
| style='text-align:right'| 10206
| ''[[:d:Q8007644|William Davies]]''
|
|
|
|-
| style='text-align:right'| 10207
| ''[[:d:Q8008695|William Evans]]''
|
|
|
|-
| style='text-align:right'| 10208
| ''[[:d:Q8010078|William Graham]]''
| [[Coadan:William Graham - National Assembly for Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10209
| ''[[:d:Q8012322|William Higgins]]''
|
|
|
|-
| style='text-align:right'| 10210
| ''[[:d:Q8012598|William Howell]]''
|
|
|
|-
| style='text-align:right'| 10211
| ''[[:d:Q8015812|William Morgan]]''
|
|
|
|-
| style='text-align:right'| 10212
| ''[[:d:Q8017036|William Powell]]''
| [[Coadan:William Powell - National Assembly for Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10213
| ''[[:d:Q8017511|William Rhodes]]''
|
|
|
|-
| style='text-align:right'| 10214
| ''[[:d:Q8017537|William Richards]]''
|
|
|
|-
| style='text-align:right'| 10215
| ''[[:d:Q8017651|William Roberts]]''
|
|
|
|-
| style='text-align:right'| 10216
| ''[[:d:Q8017653|William Roberts]]''
|
|
|
|-
| style='text-align:right'| 10217
| ''[[:d:Q8019294|William Thomas]]''
|
|
|
|-
| style='text-align:right'| 10218
| ''[[:d:Q8019440|William Todd-Jones]]''
|
|
|
|-
| style='text-align:right'| 10219
| ''[[:d:Q8021889|Willie Whitehill]]''
|
|
|
|-
| style='text-align:right'| 10220
| ''[[:d:Q8026122|Winston Roddick]]''
|
|
|
|-
| style='text-align:right'| 10221
| ''[[:d:Q8040067|Wyn Davies]]''
| [[Coadan:Wyn Davies (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10222
| ''[[:d:Q8040073|Wyn Williams]]''
| [[Coadan:Wyn Williams.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10223
| ''[[:d:Q8040147|Wynford Dore]]''
|
|
|
|-
| style='text-align:right'| 10224
| ''[[:d:Q8040203|Wynne Hooper]]''
|
|
|
|-
| style='text-align:right'| 10225
| ''[[:d:Q8040207|Wynne Evans]]''
| [[Coadan:A Song In My Heart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10226
| ''[[:d:Q8049836|Yasmin Yusuff]]''
|
|
|
|-
| style='text-align:right'| 10227
| ''[[:d:Q8073285|Zoe Lyons]]''
| [[Coadan:Zoe Lyons Cigar Wink High Res.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10228
| ''[[:d:Q8451565|Robert Wade]]''
|
|
|
|-
| style='text-align:right'| 10229
| ''[[:d:Q8784090|Nathan Craze]]''
|
|
|
|-
| style='text-align:right'| 10230
| ''[[:d:Q9218440|Edward Lyndon Rees]]''
| [[Coadan:L.Ryees DBay.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10231
| ''[[:d:Q9371662|Wayne Cegielski]]''
|
|
|
|-
| style='text-align:right'| 10232
| ''[[:d:Q10314880|Kyle Redmond-Jones]]''
|
|
|
|-
| style='text-align:right'| 10233
| ''[[:d:Q10379452|Lee Jones]]''
|
|
|
|-
| style='text-align:right'| 10234
| ''[[:d:Q10387537|Nathan Jones]]''
| [[Coadan:Nathan Jones (Welsh footballer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10235
| ''[[:d:Q10388322|Malcolm Allen]]''
|
|
|
|-
| style='text-align:right'| 10236
| ''[[:d:Q10392508|John Mahoney]]''
|
|
|
|-
| style='text-align:right'| 10237
| ''[[:d:Q10396757|Neil Edwards]]''
|
|
|
|-
| style='text-align:right'| 10238
| ''[[:d:Q10407045|Kaid Mohamed]]''
| [[Coadan:Kaid Mohamed 16-08-2014 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10239
| ''[[:d:Q10409906|Bernard Purdie]]''
|
|
|
|-
| style='text-align:right'| 10240
| ''[[:d:Q10413935|Karl Elsey]]''
|
|
|
|-
| style='text-align:right'| 10241
| ''[[:d:Q10427199|Nigel Edwards]]''
|
|
|
|-
| style='text-align:right'| 10242
| ''[[:d:Q10428766|Jason Rowbotham]]''
|
|
|
|-
| style='text-align:right'| 10243
| ''[[:d:Q10429555|Linden Jones]]''
|
|
|
|-
| style='text-align:right'| 10244
| ''[[:d:Q10433007|Paul Wheeler]]''
|
|
|
|-
| style='text-align:right'| 10245
| ''[[:d:Q10441659|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 10246
| ''[[:d:Q10455270|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 10247
| ''[[:d:Q10459260|Ted Hughes]]''
| [[Coadan:Edward "Ted" Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10248
| ''[[:d:Q10477308|Richard Hurlin]]''
|
|
|
|-
| style='text-align:right'| 10249
| ''[[:d:Q10480632|Milly Durrant]]''
|
|
|
|-
| style='text-align:right'| 10250
| ''[[:d:Q10488853|Morrys Scott]]''
|
|
|
|-
| style='text-align:right'| 10251
| ''[[:d:Q10493312|Steve Gammon]]''
|
|
|
|-
| style='text-align:right'| 10252
| ''[[:d:Q10513359|Nicola Davies]]''
|
|
|
|-
| style='text-align:right'| 10253
| ''[[:d:Q10513486|Zac Evans]]''
|
|
|
|-
| style='text-align:right'| 10254
| ''[[:d:Q10514110|Loren Dykes]]''
| [[Coadan:Loren Dykes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10255
| ''[[:d:Q10514727|Wyndham Evans]]''
|
|
|
|-
| style='text-align:right'| 10256
| ''[[:d:Q10518079|Ibrahim Farah]]''
| [[Coadan:Farah, Ibrahim.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10257
| ''[[:d:Q10521309|David Summerhayes]]''
|
|
|
|-
| style='text-align:right'| 10258
| ''[[:d:Q10538955|Percy Roberts]]''
|
|
|
|-
| style='text-align:right'| 10259
| ''[[:d:Q10548006|Les Jones]]''
|
|
|
|-
| style='text-align:right'| 10260
| ''[[:d:Q10548318|Harvey Jones]]''
|
|
|
|-
| style='text-align:right'| 10261
| ''[[:d:Q10554425|Alan Halsall]]''
|
|
|
|-
| style='text-align:right'| 10262
| ''[[:d:Q10555958|Carl Slee]]''
|
|
|
|-
| style='text-align:right'| 10263
| ''[[:d:Q10556877|Robert Speakman]]''
|
|
|
|-
| style='text-align:right'| 10264
| ''[[:d:Q10556901|Micky Bloor]]''
|
|
|
|-
| style='text-align:right'| 10265
| ''[[:d:Q10965002|Gwladus ferch Senana]]''
|
|
|
|-
| style='text-align:right'| 10266
| ''[[:d:Q10976448|Hannah Stone]]''
|
|
|
|-
| style='text-align:right'| 10267
| ''[[:d:Q11001414|Huw Garmon]]''
|
|
|
|-
| style='text-align:right'| 10268
| ''[[:d:Q11010724|Sion Jones]]''
|
|
|
|-
| style='text-align:right'| 10269
| [[Jane Edwards]]
|
|
|
|-
| style='text-align:right'| 10270
| ''[[:d:Q11026121|Llŷr Williams]]''
|
|
|
|-
| style='text-align:right'| 10271
| ''[[:d:Q11155368|Tecwyn Ifan]]''
| [[Coadan:Goreuon, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10272
| ''[[:d:Q11162843|Jonathan Morgan]]''
| [[Coadan:Jonathan-Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10273
| ''[[:d:Q11193133|Rowena Hill]]''
| [[Coadan:Rowenahill01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10274
| ''[[:d:Q11351025|Lorna Morgan]]''
| [[Coadan:Lorna Morgan.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10275
| ''[[:d:Q11833942|Rebecca Rowe]]''
|
|
|
|-
| style='text-align:right'| 10276
| ''[[:d:Q11891034|Robert Prys-Jones]]''
|
|
|
|-
| style='text-align:right'| 10277
| ''[[:d:Q11963604|Chris Twiddy]]''
|
|
|
|-
| style='text-align:right'| 10278
| ''[[:d:Q12025739|Joe Dunthorne]]''
| [[Coadan:Joe Dunthorne 2019.png|center|128px]]
|
|
|-
| style='text-align:right'| 10279
| ''[[:d:Q12162082|Darran Smith]]''
|
|
|
|-
| style='text-align:right'| 10280
| ''[[:d:Q12300610|Adrian Lloyd Hughes]]''
| [[Coadan:Adrian Hughes by Christian Ursilva.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10281
| ''[[:d:Q12386943|Daniel ap Llosgwrn Mew]]''
|
|
|
|-
| style='text-align:right'| 10282
| ''[[:d:Q12390330|Gwernen ap Clyddno]]''
|
|
|
|-
| style='text-align:right'| 10283
| ''[[:d:Q12988572|Lynne Thomas]]''
|
|
|
|-
| style='text-align:right'| 10284
| ''[[:d:Q13125438|Aled Pugh]]''
| [[Coadan:AledPugh2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10285
| ''[[:d:Q13125439|Aled Rhys Hughes]]''
| [[Coadan:Aled Rhys Hughes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10286
| ''[[:d:Q13125469|Alun Jones]]''
|
|
|
|-
| style='text-align:right'| 10287
| ''[[:d:Q13125540|Annes Glynn]]''
|
|
|
|-
| style='text-align:right'| 10288
| ''[[:d:Q13125546|Anthony K. Campbell]]''
|
|
|
|-
| style='text-align:right'| 10289
| ''[[:d:Q13125580|Arfon Gwilym]]''
|
|
|
|-
| style='text-align:right'| 10290
| ''[[:d:Q13125586|Arfon Wyn]]''
|
|
|
|-
| style='text-align:right'| 10291
| ''[[:d:Q13125608|Arthur Howard Williams]]''
|
|
|
|-
| style='text-align:right'| 10292
| ''[[:d:Q13125609|Arthur of Bardsey]]''
|
|
|
|-
| style='text-align:right'| 10293
| ''[[:d:Q13126293|Bruce Griffiths]]''
| [[Coadan:Llen Natur Conference May 2017 26.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10294
| ''[[:d:Q13126878|Caryl Lewis]]''
|
|
|
|-
| style='text-align:right'| 10295
| ''[[:d:Q13126947|Catrin Dafydd]]''
| [[Coadan:Catrin Dafydd Bardd y Goron Awst 2018 cropped 4.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10296
| ''[[:d:Q13127291|Crach Ffinnant]]''
|
|
|
|-
| style='text-align:right'| 10298
| ''[[:d:Q13127762|Dafydd Benwyn]]''
|
|
|
|-
| style='text-align:right'| 10299
| ''[[:d:Q13127765|Dafydd Alaw]]''
|
|
|
|-
| style='text-align:right'| 10300
| ''[[:d:Q13127787|Damian Walford Davies]]''
|
|
|
|-
| style='text-align:right'| 10301
| ''[[:d:Q13127791|Daniel Morden]]''
|
|
|
|-
| style='text-align:right'| 10302
| ''[[:d:Q13127839|Deiniolen]]''
|
|
|
|-
| style='text-align:right'| 10303
| ''[[:d:Q13127844|Deio ab Ieuan Du]]''
|
|
|
|-
| style='text-align:right'| 10304
| ''[[:d:Q13127926|Dona]]''
|
|
|
|-
| style='text-align:right'| 10305
| ''[[:d:Q13128004|Dwywe]]''
| [[Coadan:Church of St Dwywe, Dyffryn Ardudwy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10306
| ''[[:d:Q13128010|Dyfan Roberts]]''
|
|
|
|-
| style='text-align:right'| 10307
| ''[[:d:Q13128017|Dyfrig Wynn Jones]]''
|
|
|
|-
| style='text-align:right'| 10308
| ''[[:d:Q13128080|Edward Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10309
| ''[[:d:Q13128095|Efa ferch Madog]]''
|
|
|
|-
| style='text-align:right'| 10310
| ''[[:d:Q13128265|Emyr Wyn]]''
|
|
|
|-
| style='text-align:right'| 10311
| ''[[:d:Q13128270|Enghenedl]]''
| [[Coadan:The Llanynghenedl Standing Stone, Anglesey. - geograph.org.uk - 110758.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10312
| ''[[:d:Q13128575|Garry Owen]]''
|
|
|
|-
| style='text-align:right'| 10313
| ''[[:d:Q13128587|Gary Slaymaker]]''
|
|
|
|-
| style='text-align:right'| 10314
| ''[[:d:Q13128623|Geraint Jones]]''
| [[Coadan:Band Trefor carol singing around the village as was traditional in the last century (1587451).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10315
| ''[[:d:Q13128625|Geraint Griffiths]]''
|
|
|
|-
| style='text-align:right'| 10316
| ''[[:d:Q13128670|Glyn Wise]]''
|
|
|
|-
| style='text-align:right'| 10317
| ''[[:d:Q13128682|Golyddan Fardd]]''
|
|
|
|-
| style='text-align:right'| 10318
| ''[[:d:Q13128777|Gronw Ddu o Fôn]]''
|
|
|
|-
| style='text-align:right'| 10319
| ''[[:d:Q13128780|Gronw Ddu]]''
|
|
|
|-
| style='text-align:right'| 10320
| ''[[:d:Q13128795|Gruffudd ap Llywelyn Lwyd]]''
|
|
|
|-
| style='text-align:right'| 10321
| ''[[:d:Q13128796|Gruffydd Sion Pritchard]]''
|
|
|
|-
| style='text-align:right'| 10322
| ''[[:d:Q13128891|Gwyn Elfyn]]''
|
|
|
|-
| style='text-align:right'| 10323
| ''[[:d:Q13128896|Gwynhoedl]]''
|
|
|
|-
| style='text-align:right'| 10324
| ''[[:d:Q13128901|Gwynin]]''
|
|
|
|-
| style='text-align:right'| 10325
| ''[[:d:Q13129026|Heledd Cynwal]]''
|
|
|
|-
| style='text-align:right'| 10326
| ''[[:d:Q13129028|Hywel Heilyn]]''
|
|
|
|-
| style='text-align:right'| 10327
| ''[[:d:Q13129090|Hilma Lloyd Edwards]]''
|
|
|
|-
| style='text-align:right'| 10328
| ''[[:d:Q13129092|Hillyn]]''
|
|
|
|-
| style='text-align:right'| 10329
| ''[[:d:Q13129132|Hopcyn ap Tomas]]''
|
|
|
|-
| style='text-align:right'| 10330
| ''[[:d:Q13129190|Huw Chiswell]]''
| [[Coadan:Huw Chiswell - 4492516889.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10331
| ''[[:d:Q13129199|Huw Llywelyn Davies]]''
|
|
|
|-
| style='text-align:right'| 10332
| ''[[:d:Q13129201|Huw Edwards]]''
| [[Coadan:Huw Edwards (James Tamim crop).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10333
| ''[[:d:Q13129206|Huw Stephens]]''
| [[Coadan:Meltdown Festival Sunday Surprises Huw Stephens (41075747240).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10334
| ''[[:d:Q13129204|Huw Pritchard]]''
|
|
|
|-
| style='text-align:right'| 10335
| ''[[:d:Q13129225|Ian Cottrell]]''
|
|
|
|-
| style='text-align:right'| 10336
| ''[[:d:Q13129239|Iestyn Garlick]]''
|
|
|
|-
| style='text-align:right'| 10337
| ''[[:d:Q13129236|Idris Caffrey]]''
|
|
|
|-
| style='text-align:right'| 10338
| ''[[:d:Q13129240|Ifan Morgan Jones]]''
|
|
|
|-
| style='text-align:right'| 10339
| ''[[:d:Q13129265|Iorwerth ab y Cyriog]]''
|
|
|
|-
| style='text-align:right'| 10340
| ''[[:d:Q13129287|Iwan Rhys]]''
|
|
|
|-
| style='text-align:right'| 10341
| ''[[:d:Q13129288|Iwan Bala]]''
| [[Coadan:Iwan Bala (2009).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10342
| ''[[:d:Q13129308|Jenny Ogwen]]''
|
|
|
|-
| style='text-align:right'| 10343
| ''[[:d:Q13129316|T. James Jones]]''
| [[Coadan:Y Prifardd Jim Parc Nest (cropped).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10344
| ''[[:d:Q13129329|John Gwilym Jones]]''
|
|
|
|-
| style='text-align:right'| 10345
| ''[[:d:Q13129346|John Pierce Jones]]''
|
|
|
|-
| style='text-align:right'| 10346
| ''[[:d:Q13129373|Kate Crockett]]''
|
|
|
|-
| style='text-align:right'| 10347
| ''[[:d:Q13129493|Laura Anne Jones]]''
| [[Coadan:Laura Anne Jones MS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10348
| ''[[:d:Q13129536|Lewis Caerleon]]''
|
|
|
|-
| style='text-align:right'| 10349
| ''[[:d:Q13129679|Llechid]]''
| [[Coadan:Llanllechid Church - geograph.org.uk - 110331.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10350
| ''[[:d:Q13129698|Lleucu Llwyd]]''
|
|
|
|-
| style='text-align:right'| 10351
| ''[[:d:Q13129915|Manon Rhys]]''
|
|
|
|-
| style='text-align:right'| 10352
| ''[[:d:Q13129942|Margaret Williams]]''
| [[Coadan:Margaret Williams, the Anglesey songstress, Charles Williams, and other singers (1460340).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10353
| ''[[:d:Q13129949|Mari Lövgreen]]''
|
|
|
|-
| style='text-align:right'| 10354
| ''[[:d:Q13129962|Martin Davis]]''
|
|
|
|-
| style='text-align:right'| 10355
| ''[[:d:Q13129976|Maureen Rhys]]''
|
|
|
|-
| style='text-align:right'| 10356
| ''[[:d:Q13130138|Mici Plwm]]''
|
|
|
|-
| style='text-align:right'| 10357
| ''[[:d:Q13130360|Nerys Hughes]]''
|
|
|
|-
| style='text-align:right'| 10358
| ''[[:d:Q13130598|Peblig]]''
| [[Coadan:Llanbeblig Hours (f. 3v.) A bishop, possibly St. Peblig, blessing and wearing a mitre, and holding a crosier.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10359
| ''[[:d:Q13130599|Paul Sheppard]]''
|
|
|
|-
| style='text-align:right'| 10360
| ''[[:d:Q13131021|Rhiannon Wyn]]''
|
|
|
|-
| style='text-align:right'| 10361
| ''[[:d:Q13131075|Rhys Iorwerth]]''
|
|
|
|-
| style='text-align:right'| 10362
| ''[[:d:Q13131073|Rhys Mwyn]]''
|
|
|
|-
| style='text-align:right'| 10363
| ''[[:d:Q13131076|Rhys Hartley]]''
|
|
|
|-
| style='text-align:right'| 10364
| ''[[:d:Q13131184|Samantha Wynne Rhydderch]]''
|
|
|
|-
| style='text-align:right'| 10365
| ''[[:d:Q13131904|Tim Jones]]''
|
|
|
|-
| style='text-align:right'| 10366
| ''[[:d:Q13132053|Tudur Dylan Jones]]''
| [[Coadan:Tudur Dylan Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10367
| ''[[:d:Q13132095|Saint Tybie]]''
| [[Coadan:Entrance to Llandybie Parish Church - geograph.org.uk - 4445311.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10368
| ''[[:d:Q13132101|Tyfaelog]]''
| [[Coadan:St Tyfaelog's Church, Pontlottyn - geograph.org.uk - 1152586.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10369
| ''[[:d:Q13132175|Vaughan Roderick]]''
|
|
|
|-
| style='text-align:right'| 10370
| ''[[:d:Q13132177|Vernon Jones]]''
|
|
|
|-
| style='text-align:right'| 10371
| ''[[:d:Q13132185|W. Gareth Jones]]''
|
|
|
|-
| style='text-align:right'| 10372
| ''[[:d:Q13147289|Jaime Gareth Flórez]]''
|
|
|
|-
| style='text-align:right'| 10373
| ''[[:d:Q13231953|Neil A. Oakman]]''
|
|
|
|-
| style='text-align:right'| 10374
| ''[[:d:Q13405418|Bryn Fôn]]''
| [[Coadan:Bryn Fon gan Dogfael.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10375
| ''[[:d:Q13405416|Einir Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10376
| ''[[:d:Q13405478|Mark Joseph]]''
| [[Coadan:Mark joseph.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10377
| ''[[:d:Q13416998|Catrin Collier]]''
| [[Coadan:Catrin Collier - colour.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10378
| ''[[:d:Q13522522|Hugh Schofield]]''
|
|
|
|-
| style='text-align:right'| 10379
| ''[[:d:Q13563004|Gillian Gill]]''
|
|
|
|-
| style='text-align:right'| 10380
| ''[[:d:Q13581065|Jamie Jones]]''
|
|
|
|-
| style='text-align:right'| 10381
| ''[[:d:Q13635446|Grahame Davies]]''
|
|
|
|-
| style='text-align:right'| 10382
| ''[[:d:Q13637417|Ian Jeremiah]]''
|
|
|
|-
| style='text-align:right'| 10383
| ''[[:d:Q13638382|Iolo Williams]]''
| [[Coadan:Iolo Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10384
| ''[[:d:Q13645303|Lucy Christopher]]''
|
|
|
|-
| style='text-align:right'| 10385
| ''[[:d:Q13646991|Mark Donovan]]''
| [[Coadan:Mark Donovan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10386
| ''[[:d:Q14095064|Mark Whitby]]''
|
|
|
|-
| style='text-align:right'| 10387
| ''[[:d:Q14159639|Heather Jones]]''
|
|
|
|-
| style='text-align:right'| 10388
| ''[[:d:Q14420732|Rhun ap Iorwerth]]''
| [[Coadan:Rhun Ap Iorwerth official photo 2026.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10389
| ''[[:d:Q14476341|Terwyn Davies]]''
| [[Coadan:Terwyn davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10390
| ''[[:d:Q14508446|Aled Jones Williams]]''
|
|
|
|-
| style='text-align:right'| 10391
| ''[[:d:Q14508501|Gruffudd Fychan ap Gruffudd ab Ednyfed]]''
|
|
|
|-
| style='text-align:right'| 10392
| ''[[:d:Q14508658|Myrddin ap Dafydd]]''
| [[Coadan:Myrddin ap Dafydd, Eisteddfod Genedlaethol Tregaron 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10393
| ''[[:d:Q14945645|J. D. Davies]]''
| [[Coadan:David davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10394
| ''[[:d:Q14945659|John Lewis]]''
|
|
|
|-
| style='text-align:right'| 10395
| ''[[:d:Q14946841|Mark Evans]]''
|
|
|
|-
| style='text-align:right'| 10396
| ''[[:d:Q14949171|Paul Atherton]]''
| [[Coadan:Paul Atherton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10397
| ''[[:d:Q15008212|Dafydd Bullock]]''
|
|
|
|-
| style='text-align:right'| 10398
| ''[[:d:Q15052584|Martin Daunton]]''
|
|
|
|-
| style='text-align:right'| 10399
| ''[[:d:Q15052605|Richard Evans]]''
|
|
|
|-
| style='text-align:right'| 10400
| ''[[:d:Q15062913|Matt Parry]]''
|
|
|
|-
| style='text-align:right'| 10401
| ''[[:d:Q15077570|Trebor Edwards]]''
| [[Coadan:Trebor Edwards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10402
| ''[[:d:Q15148558|József Richter]]''
| [[Coadan:Hungarian National Circus 2014 Richter József Jr. 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10403
| ''[[:d:Q15149236|Jonathan Jones]]''
|
|
|
|-
| style='text-align:right'| 10404
| ''[[:d:Q15285212|Owain Doull]]''
| [[Coadan:Owain Doull - 2023 UCI Road World Championships (Men's road race).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10405
| ''[[:d:Q15378581|Peter Thomas]]''
|
|
|
|-
| style='text-align:right'| 10406
| ''[[:d:Q15401784|Simon Cox]]''
|
|
|
|-
| style='text-align:right'| 10407
| ''[[:d:Q15428968|Dean Gratton]]''
|
|
|
|-
| style='text-align:right'| 10408
| ''[[:d:Q15433564|Stephen Knight]]''
|
|
|
|-
| style='text-align:right'| 10409
| ''[[:d:Q15446774|Ian Hamilton]]''
| [[Coadan:Ian Hamilton, Author image 2012.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10410
| ''[[:d:Q15447289|Chris Hann]]''
|
|
|
|-
| style='text-align:right'| 10411
| ''[[:d:Q15456259|Eric Mival]]''
| [[Coadan:Mival and Barrie 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10412
| ''[[:d:Q15460527|Paul Carey Jones]]''
|
|
|
|-
| style='text-align:right'| 10413
| ''[[:d:Q15498606|Larry Goves]]''
|
|
|
|-
| style='text-align:right'| 10414
| ''[[:d:Q15631605|Mark Sampson]]''
| [[Coadan:Mark Sampson, England Ladies v Montenegro 5 4 2014 1058.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10415
| ''[[:d:Q15710759|Neil Thomas]]''
|
|
|
|-
| style='text-align:right'| 10416
| ''[[:d:Q15712409|Nic Strange]]''
|
|
|
|-
| style='text-align:right'| 10417
| ''[[:d:Q15831079|Raj Popat]]''
|
|
|
|-
| style='text-align:right'| 10418
| ''[[:d:Q15831077|Daniel Font]]''
|
|
|
|-
| style='text-align:right'| 10419
| ''[[:d:Q15840050|Peter Creed]]''
|
|
|
|-
| style='text-align:right'| 10420
| ''[[:d:Q15967923|Robert Fry]]''
| [[Coadan:Sir Robert Fry - Self Portrait.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10421
| ''[[:d:Q15991307|Charlotte Voake]]''
|
|
|
|-
| style='text-align:right'| 10422
| ''[[:d:Q15994361|Maureen Elizabeth Church]]''
|
|
|
|-
| style='text-align:right'| 10423
| ''[[:d:Q15994385|Sarah Cruddas]]''
| [[Coadan:Sarah Cruddas (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10424
| ''[[:d:Q15994548|Carl Jones]]''
|
|
|
|-
| style='text-align:right'| 10425
| ''[[:d:Q15999899|Martin Davies]]''
|
|
|
|-
| style='text-align:right'| 10426
| ''[[:d:Q15999960|Gary Richards]]''
|
|
|
|-
| style='text-align:right'| 10427
| ''[[:d:Q16037727|Thomas Humphreys]]''
|
|
|
|-
| style='text-align:right'| 10428
| ''[[:d:Q16066973|Joe Moran]]''
|
|
|
|-
| style='text-align:right'| 10429
| ''[[:d:Q16069708|Lydia Hall]]''
|
|
|
|-
| style='text-align:right'| 10430
| ''[[:d:Q16079066|Len Orchard]]''
|
|
|
|-
| style='text-align:right'| 10431
| ''[[:d:Q16089618|Robert Jones]]''
|
|
|
|-
| style='text-align:right'| 10432
| ''[[:d:Q16089913|Glenys Cour]]''
|
|
|
|-
| style='text-align:right'| 10433
| ''[[:d:Q16095921|Don Ward]]''
|
|
|
|-
| style='text-align:right'| 10434
| ''[[:d:Q16097119|Vincent Kane]]''
|
|
|
|-
| style='text-align:right'| 10435
| ''[[:d:Q16104409|Frank Clarke]]''
|
|
|
|-
| style='text-align:right'| 10436
| ''[[:d:Q16104431|Phil Edwards]]''
|
|
|
|-
| style='text-align:right'| 10437
| ''[[:d:Q16104637|Fenton Coles]]''
|
|
|
|-
| style='text-align:right'| 10438
| ''[[:d:Q16105402|David Lewis]]''
|
|
|
|-
| style='text-align:right'| 10439
| ''[[:d:Q16106220|Howard Cole]]''
| [[Coadan:Howard.cole.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10440
| ''[[:d:Q16106245|Pete Drummond]]''
|
|
|
|-
| style='text-align:right'| 10441
| ''[[:d:Q16106590|John Cooper]]''
|
|
|
|-
| style='text-align:right'| 10442
| ''[[:d:Q16106615|Ken Elias]]''
|
|
|
|-
| style='text-align:right'| 10443
| ''[[:d:Q16106933|Hywel Evans]]''
|
|
|
|-
| style='text-align:right'| 10444
| ''[[:d:Q16106974|John Harris]]''
|
|
|
|-
| style='text-align:right'| 10445
| ''[[:d:Q16106997|John Jeffery]]''
|
|
|
|-
| style='text-align:right'| 10446
| ''[[:d:Q16107026|Brian Lewis]]''
|
|
|
|-
| style='text-align:right'| 10447
| ''[[:d:Q16107406|Kevin Lyons]]''
|
|
|
|-
| style='text-align:right'| 10448
| ''[[:d:Q16107436|Ian Morris]]''
|
|
|
|-
| style='text-align:right'| 10449
| ''[[:d:Q16116092|Pat Murphy]]''
|
|
|
|-
| style='text-align:right'| 10450
| ''[[:d:Q16123852|David Nott]]''
| [[Coadan:David Nott addressing the Keep Her Safe conference in 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10451
| ''[[:d:Q16135575|Hilary Boyd]]''
|
|
|
|-
| style='text-align:right'| 10452
| ''[[:d:Q16144618|Lorraine Barrett]]''
| [[Coadan:Lorraine Barrett AM.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10453
| ''[[:d:Q16145283|Michael Hollingsworth]]''
|
|
|
|-
| style='text-align:right'| 10454
| ''[[:d:Q16146280|Dan Baker]]''
|
|
|
|-
| style='text-align:right'| 10455
| ''[[:d:Q16146480|Martin J. Ball]]''
|
|
|
|-
| style='text-align:right'| 10456
| ''[[:d:Q16148201|Paul Chapman]]''
|
|
|
|-
| style='text-align:right'| 10457
| ''[[:d:Q16148893|Clive Hicks-Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10458
| ''[[:d:Q16150175|Roger Argente]]''
|
|
|
|-
| style='text-align:right'| 10459
| ''[[:d:Q16150554|Nicky Stevens]]''
| [[Coadan:Nicky Stevens.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10460
| ''[[:d:Q16152009|Barry Tucker]]''
|
|
|
|-
| style='text-align:right'| 10461
| ''[[:d:Q16154488|Rakie Ayola]]''
|
|
|
|-
| style='text-align:right'| 10462
| ''[[:d:Q16156023|Kieran Evans]]''
|
|
|
|-
| style='text-align:right'| 10463
| ''[[:d:Q16185522|Marc Phillips]]''
|
|
|
|-
| style='text-align:right'| 10464
| ''[[:d:Q16186256|Keith Griffiths]]''
| [[Coadan:Keith Griffiths at TEDx Nov2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10465
| ''[[:d:Q16186314|Les Keen]]''
|
|
|
|-
| style='text-align:right'| 10466
| ''[[:d:Q16187020|James Coombes]]''
| [[Coadan:Photograph of British Actor and Photographer, James Coombes, taken in 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10467
| ''[[:d:Q16188850|Roger Blake]]''
|
|
|
|-
| style='text-align:right'| 10468
| ''[[:d:Q16191114|David Rees]]''
| [[Coadan:David Rees (5804396479).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10469
| ''[[:d:Q16192714|David Garner]]''
| [[Coadan:Installing 846.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10470
| ''[[:d:Q16192753|Roger Highfield]]''
| [[Coadan:Dr Roger Highfield.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10471
| ''[[:d:Q16193115|Stephen Garlick]]''
|
|
|
|-
| style='text-align:right'| 10472
| ''[[:d:Q16193706|Peter Lawlor]]''
|
|
|
|-
| style='text-align:right'| 10473
| ''[[:d:Q16193861|Kelvin Smart]]''
|
|
|
|-
| style='text-align:right'| 10474
| ''[[:d:Q16194126|Gareth Jones]]''
| [[Coadan:Violet Berlin and Gareth Jones (Gareth Jones).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10475
| ''[[:d:Q16194528|Mark Evans]]''
|
|
|
|-
| style='text-align:right'| 10476
| ''[[:d:Q16195606|David Martyn Jones]]''
|
|
|
|-
| style='text-align:right'| 10477
| ''[[:d:Q16195738|Kerry Peers]]''
|
|
|
|-
| style='text-align:right'| 10478
| ''[[:d:Q16195819|Alia Syed]]''
|
|
|
|-
| style='text-align:right'| 10479
| ''[[:d:Q16195981|Gary M Dobbs]]''
| [[Coadan:Gary Dobbs.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10480
| ''[[:d:Q16197935|Albert Bumford]]''
|
|
|
|-
| style='text-align:right'| 10481
| ''[[:d:Q16198144|Dan Rees]]''
|
|
|
|-
| style='text-align:right'| 10482
| ''[[:d:Q16199209|Justin Chaston]]''
|
|
|
|-
| style='text-align:right'| 10483
| ''[[:d:Q16199536|Osian Roberts]]''
| [[Coadan:Osian Roberts.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10484
| ''[[:d:Q16199881|Norman Pugh]]''
|
|
|
|-
| style='text-align:right'| 10485
| ''[[:d:Q16205127|Ruth Hunt, Baroness Hunt of Bethnal Green]]''
| [[Coadan:Official portrait of Baroness Hunt of Bethnal Green crop 2, 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10486
| ''[[:d:Q16205582|Gavin Dacey]]''
|
|
|
|-
| style='text-align:right'| 10487
| ''[[:d:Q16206111|Hywel Davies]]''
|
|
|
|-
| style='text-align:right'| 10488
| ''[[:d:Q16206117|Jennifer Davies]]''
|
|
|
|-
| style='text-align:right'| 10489
| ''[[:d:Q16206127|Jonathan Davies]]''
|
|
|
|-
| style='text-align:right'| 10490
| ''[[:d:Q16206142|Rob Davies]]''
| [[Coadan:Rob Davies 2016.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10491
| ''[[:d:Q16207211|Richard Elis]]''
|
|
|
|-
| style='text-align:right'| 10492
| ''[[:d:Q16207950|Hannah Jones]]''
| [[Coadan:Hannah Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10493
| ''[[:d:Q16208301|Gareth Duke]]''
|
|
|
|-
| style='text-align:right'| 10494
| ''[[:d:Q16208797|Russell Gomer]]''
|
|
|
|-
| style='text-align:right'| 10495
| ''[[:d:Q16210221|Glyn Meredith]]''
|
|
|
|-
| style='text-align:right'| 10496
| ''[[:d:Q16211037|Dominic Evans]]''
|
|
|
|-
| style='text-align:right'| 10497
| ''[[:d:Q16212127|Ness Flowers]]''
|
|
|
|-
| style='text-align:right'| 10498
| ''[[:d:Q16212417|Amy Hill]]''
| [[Coadan:Amy hill stage two womens tour 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10499
| ''[[:d:Q16212823|Rachel James]]''
| [[Coadan:2016 2017 UCI Track World Cup Apeldoorn 228.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10500
| ''[[:d:Q16213085|Nathan Stephens]]''
|
|
|
|-
| style='text-align:right'| 10501
| ''[[:d:Q16213713|Toby Radford]]''
|
|
|
|-
| style='text-align:right'| 10502
| ''[[:d:Q16213798|Neil Swain]]''
|
|
|
|-
| style='text-align:right'| 10503
| ''[[:d:Q16213945|Steve Evans]]''
|
|
|
|-
| style='text-align:right'| 10504
| ''[[:d:Q16213995|Mark Hill]]''
|
|
|
|-
| style='text-align:right'| 10505
| ''[[:d:Q16214561|Leigh Phillips]]''
| [[Coadan:Leigh Phillips (2024).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10506
| ''[[:d:Q16214892|Richard Huxtable]]''
|
|
|
|-
| style='text-align:right'| 10507
| ''[[:d:Q16215062|Nicola Reynolds]]''
|
|
|
|-
| style='text-align:right'| 10508
| ''[[:d:Q16215512|Jimmy Richards]]''
|
|
|
|-
| style='text-align:right'| 10509
| ''[[:d:Q16216112|Nathan Strong]]''
|
|
|
|-
| style='text-align:right'| 10510
| ''[[:d:Q16216574|James Griffiths]]''
|
|
|
|-
| style='text-align:right'| 10511
| ''[[:d:Q16216635|Damien Lacey]]''
|
|
|
|-
| style='text-align:right'| 10512
| ''[[:d:Q16221709|Nathan Brew]]''
|
|
|
|-
| style='text-align:right'| 10513
| ''[[:d:Q16222166|Ifan Evans]]''
|
|
|
|-
| style='text-align:right'| 10514
| ''[[:d:Q16222332|Kate Alicia Morgan]]''
|
|
|
|-
| style='text-align:right'| 10515
| ''[[:d:Q16222538|Nathan Williams]]''
|
|
|
|-
| style='text-align:right'| 10516
| ''[[:d:Q16223279|James Merriman]]''
|
|
|
|-
| style='text-align:right'| 10517
| ''[[:d:Q16223286|Jonathan Mills]]''
| [[Coadan:USO-Sale Sharks - 20131205 - Jonathan Mills.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10518
| ''[[:d:Q16223405|Scott Roberts]]''
|
|
|
|-
| style='text-align:right'| 10519
| ''[[:d:Q16223639|Nicky Griffiths]]''
|
|
|
|-
| style='text-align:right'| 10520
| ''[[:d:Q16223817|James Morgan]]''
|
|
|
|-
| style='text-align:right'| 10521
| ''[[:d:Q16223980|Ross Stephens]]''
|
|
|
|-
| style='text-align:right'| 10522
| ''[[:d:Q16224261|Joe Thomas]]''
| [[Coadan:JoeThomas2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10523
| ''[[:d:Q16224682|William Griffin]]''
|
|
|
|-
| style='text-align:right'| 10524
| ''[[:d:Q16224740|David Lloyd]]''
|
|
|
|-
| style='text-align:right'| 10525
| ''[[:d:Q16224744|Hannah Lloyd]]''
|
|
|
|-
| style='text-align:right'| 10526
| ''[[:d:Q16226076|Nia Roberts]]''
|
|
|
|-
| style='text-align:right'| 10527
| ''[[:d:Q16226895|Chris Jenkins]]''
| [[Coadan:Chris Jenkins, Welsh light-Welterweight boxer 2013.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10528
| ''[[:d:Q16230676|Howard Giles]]''
|
|
|
|-
| style='text-align:right'| 10529
| ''[[:d:Q16231553|Jonathan Spratt]]''
|
|
|
|-
| style='text-align:right'| 10530
| ''[[:d:Q16231561|Hywel Stoddart]]''
|
|
|
|-
| style='text-align:right'| 10531
| ''[[:d:Q16231957|Richard Smith]]''
|
|
|
|-
| style='text-align:right'| 10532
| ''[[:d:Q16231982|Bruce Tasker]]''
|
|
|
|-
| style='text-align:right'| 10533
| ''[[:d:Q16232132|Jevon Groves]]''
|
|
|
|-
| style='text-align:right'| 10534
| ''[[:d:Q16232219|Iwan Lewis]]''
|
|
|
|-
| style='text-align:right'| 10535
| ''[[:d:Q16232794|Darragh Mortell]]''
| [[Coadan:Darragh Mortell Directing.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10536
| ''[[:d:Q16232878|Nic Reynolds]]''
|
|
|
|-
| style='text-align:right'| 10537
| ''[[:d:Q16233083|Gareth Davies]]''
| [[Coadan:Gareth Davies 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10538
| ''[[:d:Q16233186|Harri Greville]]''
|
|
|
|-
| style='text-align:right'| 10539
| ''[[:d:Q16233500|Lloyd Read]]''
|
|
|
|-
| style='text-align:right'| 10540
| ''[[:d:Q16233638|Josh Tyler]]''
|
|
|
|-
| style='text-align:right'| 10541
| ''[[:d:Q16234541|Tesni Evans]]''
| [[Coadan:Monte-Carlo Squash Classic 2018 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10542
| ''[[:d:Q16234630|Cory Hill]]''
| [[Coadan:Cory Hill 2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10543
| ''[[:d:Q16234640|Andrew Hughes]]''
| [[Coadan:Andrew Hughes 26-04-2014 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10544
| ''[[:d:Q16234958|Rob Evans]]''
|
|
|
|-
| style='text-align:right'| 10545
| ''[[:d:Q16235000|Matthew Screech]]''
| [[Coadan:Matthew Screech 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10546
| ''[[:d:Q16235144|Joe Walsh]]''
| [[Coadan:Joe Walsh Crawley Town 1 November 2014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10547
| ''[[:d:Q16235445|Aaron Amadi-Holloway]]''
|
|
|
|-
| style='text-align:right'| 10548
| ''[[:d:Q16235485|Alex Jones]]''
|
|
|
|-
| style='text-align:right'| 10549
| ''[[:d:Q16235579|Rhodri Lloyd]]''
| [[Coadan:Rhodri Lloyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10550
| ''[[:d:Q16235894|Luke Thomas]]''
|
|
|
|-
| style='text-align:right'| 10551
| ''[[:d:Q16235976|Jordan Williams]]''
| [[Coadan:Jordan Williams (2012).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10552
| ''[[:d:Q16236079|Elliot Dee]]''
|
|
|
|-
| style='text-align:right'| 10553
| ''[[:d:Q16236125|Lee Evans]]''
| [[Coadan:Lee Evans (Wolves).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10554
| ''[[:d:Q16236166|Danny Gosset]]''
| [[Coadan:DanielGossetBangorFC2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10555
| ''[[:d:Q16236193|Cameron Herring]]''
|
|
|
|-
| style='text-align:right'| 10556
| ''[[:d:Q16236232|Luc Jones]]''
|
|
|
|-
| style='text-align:right'| 10557
| ''[[:d:Q16236289|Tom Lawrence]]''
| [[Coadan:Tom Lawrence.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10558
| ''[[:d:Q16236306|James Loveridge]]''
|
|
|
|-
| style='text-align:right'| 10559
| ''[[:d:Q16236782|Dafydd Howells]]''
|
|
|
|-
| style='text-align:right'| 10560
| ''[[:d:Q16236924|Seb Morris]]''
|
|
|
|-
| style='text-align:right'| 10561
| ''[[:d:Q16237062|Leona Kate Vaughan]]''
|
|
|
|-
| style='text-align:right'| 10562
| ''[[:d:Q16239323|Ian Saynor]]''
|
|
|
|-
| style='text-align:right'| 10563
| ''[[:d:Q16239399|Geraint Todd]]''
|
|
|
|-
| style='text-align:right'| 10564
| ''[[:d:Q16239500|Jennifer Evans]]''
|
|
|
|-
| style='text-align:right'| 10565
| ''[[:d:Q16240285|Chris Lilygreen]]''
|
|
|
|-
| style='text-align:right'| 10566
| ''[[:d:Q16255748|Julia Watson]]''
|
|
|
|-
| style='text-align:right'| 10567
| ''[[:d:Q16318727|Carl Sentance]]''
| [[Coadan:2016 Nazareth - Carl Sentance - by 2eight - DSC2639.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10568
| ''[[:d:Q16527618|Alex Morgan]]''
|
|
|
|-
| style='text-align:right'| 10569
| ''[[:d:Q16561032|Andrew Matthews]]''
|
|
|
|-
| style='text-align:right'| 10570
| ''[[:d:Q16564560|Ian Thomas]]''
|
|
|
|-
| style='text-align:right'| 10571
| ''[[:d:Q16610733|Tim Davies]]''
|
|
|
|-
| style='text-align:right'| 10572
| ''[[:d:Q16727629|Cara Braia]]''
|
|
|
|-
| style='text-align:right'| 10573
| ''[[:d:Q16728064|Claire Jones]]''
|
|
|
|-
| style='text-align:right'| 10574
| ''[[:d:Q16728146|Rachel K Collier]]''
| [[Coadan:Rachel K Collier General Press Pic.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10575
| ''[[:d:Q16729053|John Forrester-Clack]]''
|
|
|
|-
| style='text-align:right'| 10576
| ''[[:d:Q16729677|Tom Harrison]]''
|
|
|
|-
| style='text-align:right'| 10577
| ''[[:d:Q16729774|Rhiannon Henry]]''
|
|
|
|-
| style='text-align:right'| 10578
| ''[[:d:Q16731153|Eddie Ladd]]''
|
|
|
|-
| style='text-align:right'| 10579
| ''[[:d:Q16731199|Kate Lambert]]''
| [[Coadan:Kate Lambert - Kato (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10580
| ''[[:d:Q16731446|Flex Lewis]]''
|
|
|
|-
| style='text-align:right'| 10581
| ''[[:d:Q16731984|Marco Marenghi]]''
|
|
|
|-
| style='text-align:right'| 10582
| ''[[:d:Q16734502|Phlegm]]''
|
|
|
|-
| style='text-align:right'| 10583
| ''[[:d:Q16735285|Beth Robert]]''
|
|
|
|-
| style='text-align:right'| 10584
| ''[[:d:Q16740079|Elaine Treharne]]''
| [[Coadan:ProfessorElaineTreharne-4.16.19.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10585
| ''[[:d:Q16743899|Huw Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10586
| ''[[:d:Q16745471|Connor Roberts]]''
|
|
|
|-
| style='text-align:right'| 10587
| ''[[:d:Q16762663|Calum Antell]]''
|
|
|
|-
| style='text-align:right'| 10588
| ''[[:d:Q16848132|James Richards]]''
|
|
|
|-
| style='text-align:right'| 10589
| ''[[:d:Q16863591|Lauren Price]]''
| [[Coadan:Lauren Price in 2021.png|center|128px]]
|
|
|-
| style='text-align:right'| 10590
| ''[[:d:Q16885739|David Smith]]''
| [[Coadan:Dave Smith NRL.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10591
| ''[[:d:Q16898435|Annabelle Despard]]''
|
|
|
|-
| style='text-align:right'| 10592
| ''[[:d:Q16931125|Emma Manners, Duchess of Rutland]]''
|
|
|
|-
| style='text-align:right'| 10593
| ''[[:d:Q16976371|Benjamin Davies]]''
|
|
|
|-
| style='text-align:right'| 10594
| ''[[:d:Q16982750|Griffith George]]''
|
|
|
|-
| style='text-align:right'| 10595
| ''[[:d:Q16985888|Caleb McDuff]]''
| [[Coadan:Caleb McDuff - Deaf Go Kart Racer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10596
| ''[[:d:Q16988006|Christopher Painter]]''
|
|
|
|-
| style='text-align:right'| 10597
| ''[[:d:Q16988285|Jonathan Woodhouse]]''
| [[Coadan:Archbishop of Canterbury with military chaplains (Jonathan Woodhouse cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10598
| ''[[:d:Q17016985|Patricia Wiltshire]]''
|
|
|
|-
| style='text-align:right'| 10599
| ''[[:d:Q17020826|Simon Williams]]''
|
|
|
|-
| style='text-align:right'| 10600
| ''[[:d:Q17058143|Brynmor Evans]]''
| [[Coadan:Brynmor Evans (MDG).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10601
| ''[[:d:Q17130218|Toni Murray]]''
|
|
|
|-
| style='text-align:right'| 10602
| ''[[:d:Q17151106|Georgia Ruth]]''
| [[Coadan:Georgia Ruth (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10603
| ''[[:d:Q17159675|Celyn Jones]]''
|
|
|
|-
| style='text-align:right'| 10604
| ''[[:d:Q17198217|John Bryan Evans]]''
|
|
|
|-
| style='text-align:right'| 10605
| ''[[:d:Q17198796|Kevin Thomas]]''
|
|
|
|-
| style='text-align:right'| 10606
| ''[[:d:Q17306402|Michael Price]]''
|
|
|
|-
| style='text-align:right'| 10607
| ''[[:d:Q17361343|Alan James]]''
|
|
|
|-
| style='text-align:right'| 10608
| ''[[:d:Q17377054|Curig]]''
| [[Coadan:Eglwys y Santes Julitta St Julitta's Church, Capel Curig 32.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10609
| ''[[:d:Q17386578|Gerwyn Price]]''
| [[Coadan:2025-04-03 Premier League Darts Berlin 2025 by Sandro Halank–167.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10610
| ''[[:d:Q17402905|Paul Shackerley]]''
| [[Coadan:Deanofbreconshackerley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10611
| ''[[:d:Q17403332|Scott Davies]]''
| [[Coadan:2019 Tour of Austria – 3rd stage 20190608 (02).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10612
| ''[[:d:Q17403531|Jamie Lucas]]''
| [[Coadan:Jamie Lucas at Bristol Rovers in 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10613
| ''[[:d:Q17418382|Phil Basey]]''
|
|
|
|-
| style='text-align:right'| 10614
| ''[[:d:Q17418759|Calum Jarvis]]''
|
|
|
|-
| style='text-align:right'| 10615
| ''[[:d:Q17449785|Angel Romaeo]]''
|
|
|
|-
| style='text-align:right'| 10616
| ''[[:d:Q17449824|Raer Theaker]]''
|
|
|
|-
| style='text-align:right'| 10617
| ''[[:d:Q17479557|Dogfan]]''
| [[Coadan:Eglwys Sant Dogfan, Church of St Dogfan, Llanrhaeadr-ym-Mochnant, Powys 23.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10618
| ''[[:d:Q17479587|Gwrddelw]]''
|
|
|
|-
| style='text-align:right'| 10619
| ''[[:d:Q17492322|Ashley Williams]]''
|
|
|
|-
| style='text-align:right'| 10620
| ''[[:d:Q17496545|Dyddgu Hywel]]''
|
|
|
|-
| style='text-align:right'| 10621
| ''[[:d:Q17509327|Tudclyd]]''
| [[Coadan:Penmachno Parish Church - geograph.org.uk - 756583.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10622
| ''[[:d:Q17517040|Daniel Kyriakides]]''
|
|
|
|-
| style='text-align:right'| 10623
| ''[[:d:Q17578075|Maria Leijerstam]]''
| [[Coadan:Maria Leijerstam.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 10624
| ''[[:d:Q17591287|Rachel Musson]]''
| [[Coadan:Rachel-musson DSC08626.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10625
| ''[[:d:Q17612657|Sophie Moulds]]''
|
|
|
|-
| style='text-align:right'| 10626
| ''[[:d:Q17661439|Mali Morris]]''
|
|
|
|-
| style='text-align:right'| 10627
| ''[[:d:Q17715103|Lloyd Handley]]''
|
|
|
|-
| style='text-align:right'| 10628
| ''[[:d:Q17984369|Aerdeyrn]]''
|
|
|
|-
| style='text-align:right'| 10629
| ''[[:d:Q17984465|Cynidr]]''
| [[Coadan:Well, Ffynnon Gwynydd, Glasbury - geograph.org.uk - 61678.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10630
| [[Rhisiart Tal-e-bot]]
|
|
|
|-
| style='text-align:right'| 10631
| ''[[:d:Q18016151|Amelia Womack]]''
| [[Coadan:Amelia Womack, 2014 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10632
| ''[[:d:Q18043654|James Benjamin]]''
|
|
|
|-
| style='text-align:right'| 10633
| ''[[:d:Q18044237|Thomas James]]''
| [[Coadan:Thomas James 26122024 (3).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10634
| ''[[:d:Q18044286|Dorian Jones]]''
|
|
|
|-
| style='text-align:right'| 10635
| ''[[:d:Q18044288|Joe Jones]]''
|
|
|
|-
| style='text-align:right'| 10636
| ''[[:d:Q18044791|Scott Matthews]]''
|
|
|
|-
| style='text-align:right'| 10637
| ''[[:d:Q18045036|Tyler Morgan]]''
|
|
|
|-
| style='text-align:right'| 10638
| ''[[:d:Q18045213|Angus O'Brien]]''
|
|
|
|-
| style='text-align:right'| 10639
| ''[[:d:Q18045430|Rhys Pugsley]]''
|
|
|
|-
| style='text-align:right'| 10640
| ''[[:d:Q18062133|Ashton Hewitt]]''
|
|
|
|-
| style='text-align:right'| 10641
| ''[[:d:Q18108230|Caryl Parry Jones]]''
| [[Coadan:Caryl Parry Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10642
| ''[[:d:Q18109251|Jack Thomas]]''
|
|
|
|-
| style='text-align:right'| 10643
| ''[[:d:Q18122000|MJ Williams]]''
| [[Coadan:Jordan Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10644
| ''[[:d:Q18125441|Aaron Collins]]''
| [[Coadan:Aaron Collins Bristol Rovers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10645
| ''[[:d:Q18125528|Christian Doidge]]''
| [[Coadan:ChristianDoidge.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10646
| ''[[:d:Q18127948|Josh Sheehan]]''
|
|
|
|-
| style='text-align:right'| 10647
| ''[[:d:Q18129138|Jim Williams]]''
|
|
|
|-
| style='text-align:right'| 10648
| ''[[:d:Q18162186|Scott Tancock]]''
|
|
|
|-
| style='text-align:right'| 10649
| ''[[:d:Q18162727|Mike Williams]]''
|
|
|
|-
| style='text-align:right'| 10650
| ''[[:d:Q18166244|Brenda Wilson]]''
|
|
|
|-
| style='text-align:right'| 10651
| ''[[:d:Q18169400|Regan Poole]]''
|
|
|
|-
| style='text-align:right'| 10652
| ''[[:d:Q18206315|Dan Hanford]]''
| [[Coadan:Dan Hanford 19-09-2015 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10653
| ''[[:d:Q18217120|Natalie Powell]]''
|
|
|
|-
| style='text-align:right'| 10654
| ''[[:d:Q18221060|Robert D. Anderson]]''
|
|
|
|-
| style='text-align:right'| 10655
| ''[[:d:Q18330912|Joe Cordina]]''
| [[Coadan:Joe Cordina (2016).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10656
| ''[[:d:Q18331849|Nathan Thorley]]''
|
|
|
|-
| style='text-align:right'| 10657
| ''[[:d:Q18340098|Leigh Jones]]''
| [[Coadan:Leigh jones hong kong rugby head coach 20170506.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10658
| ''[[:d:Q18341833|Kyle Rees]]''
|
|
|
|-
| style='text-align:right'| 10659
| ''[[:d:Q18350944|Aled Richards]]''
|
|
|
|-
| style='text-align:right'| 10660
| ''[[:d:Q18352539|Marc Wyatt]]''
|
|
|
|-
| style='text-align:right'| 10661
| ''[[:d:Q18353250|Nicky Smith]]''
| [[Coadan:Nicky Smith 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10662
| ''[[:d:Q18358867|James Thomas]]''
|
|
|
|-
| style='text-align:right'| 10663
| ''[[:d:Q18385698|Jonathan Tomlinson]]''
|
|
|
|-
| style='text-align:right'| 10664
| ''[[:d:Q18387151|Paul Taylor]]''
|
|
|
|-
| style='text-align:right'| 10665
| ''[[:d:Q18526703|Caradog ab Iestyn]]''
|
|
|
|-
| style='text-align:right'| 10666
| ''[[:d:Q18535410|Aled Islwyn]]''
|
|
|
|-
| style='text-align:right'| 10667
| ''[[:d:Q18535435|Angharad Rhiannon Davies]]''
|
|
|
|-
| style='text-align:right'| 10668
| ''[[:d:Q18535440|Alistair James]]''
|
|
|
|-
| style='text-align:right'| 10669
| ''[[:d:Q18535445|Dafydd Andrews]]''
|
|
|
|-
| style='text-align:right'| 10670
| ''[[:d:Q18535453|Aled ap Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10671
| ''[[:d:Q18535458|Menna Baines]]''
|
|
|
|-
| style='text-align:right'| 10672
| ''[[:d:Q18535489|Siôn Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 10673
| ''[[:d:Q18535497|Toni Caroll]]''
|
|
|
|-
| style='text-align:right'| 10674
| ''[[:d:Q18535501|Celynnin]]''
| [[Coadan:Eglwys Llangelynnin Conwy 31.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10675
| ''[[:d:Q18535514|Clydog]]''
|
|
|
|-
| style='text-align:right'| 10676
| ''[[:d:Q18535527|Ceri Cunnington]]''
|
|
|
|-
| style='text-align:right'| 10677
| ''[[:d:Q18535538|Cynhafal]]''
| [[Coadan:St Cynhafal's Church - geograph.org.uk - 135338.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10678
| ''[[:d:Q18535539|Cynhaiarn]]''
| [[Coadan:Eglwys Sant Cynhaiarn St Cynhaearn's Church, Ynyscynhaearn, Gwynedd North Wales 05.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10679
| ''[[:d:Q18535553|Siân Melangell Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10680
| ''[[:d:Q18535558|Nicholas Daniels]]''
|
|
|
|-
| style='text-align:right'| 10681
| ''[[:d:Q18535567|Jason Walford Davies]]''
|
|
|
|-
| style='text-align:right'| 10682
| ''[[:d:Q18535565|Glan Davies]]''
|
|
|
|-
| style='text-align:right'| 10683
| ''[[:d:Q18535590|Lyn Ebenezer]]''
|
|
|
|-
| style='text-align:right'| 10684
| ''[[:d:Q18535597|Sonia Edwards]]''
|
|
|
|-
| style='text-align:right'| 10685
| ''[[:d:Q18535610|Tony Etoria]]''
|
|
|
|-
| style='text-align:right'| 10686
| ''[[:d:Q18535609|John Emyr]]''
|
|
|
|-
| style='text-align:right'| 10687
| ''[[:d:Q18535617|Meirion Evans]]''
|
|
|
|-
| style='text-align:right'| 10688
| ''[[:d:Q18535625|Heledd Fychan]]''
| [[Coadan:Heledd Fychan AS-MS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10689
| ''[[:d:Q18535630|Ffion Dafis]]''
|
|
|
|-
| style='text-align:right'| 10690
| ''[[:d:Q18535635|Beti George]]''
|
|
|
|-
| style='text-align:right'| 10691
| ''[[:d:Q18535643|Hywel Griffiths]]''
| [[Coadan:Hywel Griffiths.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10692
| ''[[:d:Q18535647|Gruffudd ap Dafydd Goch]]''
| [[Coadan:Eglwys Fihangel Sant Saint Michaels Church Betws-y-Coed Conwy Gwynedd Cymru Wales 42.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10693
| ''[[:d:Q18535656|Robat Gruffudd]]''
|
|
|
|-
| style='text-align:right'| 10694
| ''[[:d:Q18535665|Gwenfaen]]''
|
|
|
|-
| style='text-align:right'| 10695
| ''[[:d:Q18535672|Gwyddelan]]''
|
|
|
|-
| style='text-align:right'| 10696
| ''[[:d:Q18535681|Rheinallt ap Gwynedd]]''
|
|
|
|-
| style='text-align:right'| 10697
| ''[[:d:Q18535686|Helen Aileen Davies]]''
|
|
|
|-
| style='text-align:right'| 10698
| ''[[:d:Q18535701|Meirion MacIntyre Huws]]''
|
|
|
|-
| style='text-align:right'| 10699
| ''[[:d:Q18535713|Ifan Huw Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10700
| ''[[:d:Q18535718|Meleri Wyn James]]''
|
|
|
|-
| style='text-align:right'| 10701
| ''[[:d:Q18535746|Hefin Jones]]''
|
|
|
|-
| style='text-align:right'| 10702
| ''[[:d:Q18535763|Lee Haven-Jones]]''
|
|
|
|-
| style='text-align:right'| 10703
| ''[[:d:Q18535760|Aneirin Karadog]]''
|
|
|
|-
| style='text-align:right'| 10704
| ''[[:d:Q18535769|Doreen Lewis]]''
|
|
|
|-
| style='text-align:right'| 10705
| ''[[:d:Q18535785|Dewi Llwyd]]''
| [[Coadan:Dewi Llwyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10706
| ''[[:d:Q18535794|John-Paul Macleod]]''
|
|
|
|-
| style='text-align:right'| 10707
| ''[[:d:Q18535807|Dyl Mei]]''
|
|
|
|-
| style='text-align:right'| 10708
| ''[[:d:Q18535808|Meinir Jones]]''
|
|
|
|-
| style='text-align:right'| 10709
| ''[[:d:Q18535819|Lowri Morgan]]''
|
|
|
|-
| style='text-align:right'| 10710
| ''[[:d:Q18535817|Elin Llwyd Morgan]]''
|
|
|
|-
| style='text-align:right'| 10711
| ''[[:d:Q18535825|Mr Huw]]''
|
|
|
|-
| style='text-align:right'| 10712
| ''[[:d:Q18535858|Gerallt Pennant]]''
|
|
|
|-
| style='text-align:right'| 10713
| ''[[:d:Q18535866|Arwel Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 10714
| ''[[:d:Q18535875|Dewi Prysor]]''
|
|
|
|-
| style='text-align:right'| 10715
| ''[[:d:Q18535877|Pwyll ap Siôn]]''
| [[Coadan:Golygathon Wicipop Prifysgol Bangor Wicipop Editathon 2017 04.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10716
| ''[[:d:Q18535900|Bethan Rhys Roberts]]''
|
|
|
|-
| style='text-align:right'| 10717
| ''[[:d:Q18535901|Cefin Roberts]]''
|
|
|
|-
| style='text-align:right'| 10718
| ''[[:d:Q18535906|Lleucu Roberts]]''
|
|
|
|-
| style='text-align:right'| 10719
| ''[[:d:Q18535914|Manon Steffan Ros]]''
| [[Coadan:Manon Steffan Ros (33218890640) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10720
| ''[[:d:Q18535925|Rhuddlad]]''
|
|
|
|-
| style='text-align:right'| 10721
| ''[[:d:Q18535979|Emily Tucker]]''
|
|
|
|-
| style='text-align:right'| 10722
| ''[[:d:Q18536008|Hugh Williams]]''
|
|
|
|-
| style='text-align:right'| 10723
| ''[[:d:Q18536012|John Ellis Williams]]''
|
|
|
|-
| style='text-align:right'| 10724
| ''[[:d:Q18536058|Cadfarch]]''
|
|
|
|-
| style='text-align:right'| 10725
| ''[[:d:Q18545621|Laura McAllister]]''
| [[Coadan:Professor Laura McAllister (8552094408) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10726
| ''[[:d:Q18576042|Dorcas Erbery]]''
|
|
|
|-
| style='text-align:right'| 10727
| ''[[:d:Q18588247|Bryan Parry]]''
|
|
|
|-
| style='text-align:right'| 10728
| ''[[:d:Q18593818|Aelhaearn]]''
| [[Coadan:Saint Aelhaiarn.png|center|128px]]
|
|
|-
| style='text-align:right'| 10729
| ''[[:d:Q18601440|Merlin James]]''
|
|
|
|-
| style='text-align:right'| 10730
| ''[[:d:Q18612371|Judith Phillips]]''
|
|
|
|-
| style='text-align:right'| 10731
| ''[[:d:Q18624411|Gavin Jones]]''
|
|
|
|-
| style='text-align:right'| 10732
| ''[[:d:Q18630239|Robert Jones]]''
| [[Coadan:Robert Jones (Welsh composer).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10733
| ''[[:d:Q18637292|Joe Davies]]''
|
|
|
|-
| style='text-align:right'| 10734
| ''[[:d:Q18637509|Emily Kagan]]''
|
|
|
|-
| style='text-align:right'| 10735
| ''[[:d:Q18637863|Dewi Penrhyn Jones]]''
|
|
|
|-
| style='text-align:right'| 10736
| ''[[:d:Q18640327|Gerry Humphreys]]''
|
|
|
|-
| style='text-align:right'| 10737
| ''[[:d:Q18646602|Wendell Morgan]]''
|
|
|
|-
| style='text-align:right'| 10738
| ''[[:d:Q18657319|Daniel Hickey]]''
| [[Coadan:Daniel Hickey.png|center|128px]]
|
|
|-
| style='text-align:right'| 10739
| ''[[:d:Q18683953|Alize Lily Mounter]]''
| [[Coadan:Alize Mounter (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10740
| ''[[:d:Q18688008|Iori Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10741
| ''[[:d:Q18691847|Saint Ilar]]''
| [[Coadan:Sant Ilar (st ilar) ('St Hilary's Church' is NEVER used), Llanilar, Aberystwyth, Ceredigion, Cymru 68.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10742
| ''[[:d:Q18719315|Michael Brown]]''
|
|
|
|-
| style='text-align:right'| 10743
| ''[[:d:Q18719387|Jonathan Edwards]]''
|
|
|
|-
| style='text-align:right'| 10744
| ''[[:d:Q18730245|Efa ferch Maredudd]]''
|
|
|
|-
| style='text-align:right'| 10745
| ''[[:d:Q18737042|David Pugh]]''
|
|
|
|-
| style='text-align:right'| 10746
| ''[[:d:Q18763812|Mark Andrews]]''
| [[Coadan:Mark Andrews at Smash Nov 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10747
| ''[[:d:Q18763900|Kieran Bull]]''
|
|
|
|-
| style='text-align:right'| 10748
| ''[[:d:Q18764018|Aneurin Donald]]''
| [[Coadan:1 19 Aneurin Donald.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10749
| ''[[:d:Q18764163|John Price]]''
|
|
|
|-
| style='text-align:right'| 10750
| ''[[:d:Q18815948|Arthur Isaac]]''
|
|
|
|-
| style='text-align:right'| 10751
| ''[[:d:Q18921907|Gavin Hitchings]]''
|
|
|
|-
| style='text-align:right'| 10752
| ''[[:d:Q19202498|Bob Shaw]]''
|
|
|
|-
| style='text-align:right'| 10753
| ''[[:d:Q19276832|Keith Palmer]]''
|
|
|
|-
| style='text-align:right'| 10754
| ''[[:d:Q19281946|Danny Ward]]''
| [[Coadan:Danny Ward 2014 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10755
| ''[[:d:Q19282249|Catherine Hare Willianson]]''
|
|
|
|-
| style='text-align:right'| 10756
| ''[[:d:Q19518803|Bethan Witcomb]]''
|
|
|
|-
| style='text-align:right'| 10757
| ''[[:d:Q19519776|Nigel Williams]]''
|
|
|
|-
| style='text-align:right'| 10758
| ''[[:d:Q19519831|Max Clark]]''
|
|
|
|-
| style='text-align:right'| 10759
| ''[[:d:Q19519921|Jenny Hawkins]]''
|
|
|
|-
| style='text-align:right'| 10760
| ''[[:d:Q19560518|Natalie Fryde]]''
|
|
|
|-
| style='text-align:right'| 10761
| ''[[:d:Q19560780|Harold Hughes]]''
|
|
|
|-
| style='text-align:right'| 10762
| ''[[:d:Q19578070|Laura Thomas]]''
|
|
|
|-
| style='text-align:right'| 10763
| ''[[:d:Q19578254|Liam Williams]]''
|
|
|
|-
| style='text-align:right'| 10764
| ''[[:d:Q19578296|Viv Woodward]]''
|
|
|
|-
| style='text-align:right'| 10765
| ''[[:d:Q19585743|Nigel Haworth]]''
| [[Coadan:Nigel Haworth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10766
| ''[[:d:Q19600732|Clydai ach Brychan]]''
|
|
|
|-
| style='text-align:right'| 10767
| ''[[:d:Q19629034|Simon Armstrong]]''
|
|
|
|-
| style='text-align:right'| 10768
| ''[[:d:Q19630379|Glynn Croudace]]''
|
|
|
|-
| style='text-align:right'| 10769
| ''[[:d:Q19650365|Frances Donovan]]''
| [[Coadan:Frances Donovan 2011.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10770
| ''[[:d:Q19661146|Wynne Richards]]''
|
|
|
|-
| style='text-align:right'| 10771
| ''[[:d:Q19662539|Sue Jones]]''
|
|
|
|-
| style='text-align:right'| 10772
| ''[[:d:Q19663103|Greg Hill]]''
|
|
|
|-
| style='text-align:right'| 10773
| ''[[:d:Q19664267|Rachel Johncock]]''
|
|
|
|-
| style='text-align:right'| 10774
| ''[[:d:Q19665598|Alex Jeffries]]''
|
|
|
|-
| style='text-align:right'| 10775
| ''[[:d:Q19665984|Gyllian Raby]]''
|
|
|
|-
| style='text-align:right'| 10776
| ''[[:d:Q19666293|Rory Sutherland]]''
| [[Coadan:Business of Software - Rory Sutherland.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10777
| ''[[:d:Q19666470|Nicky Thomas]]''
|
|
|
|-
| style='text-align:right'| 10778
| ''[[:d:Q19666871|Kevin Moseley]]''
|
|
|
|-
| style='text-align:right'| 10779
| ''[[:d:Q19668085|Liam Shephard]]''
|
|
|
|-
| style='text-align:right'| 10780
| ''[[:d:Q19668376|Nick Salapatas]]''
| [[Coadan:Nick Salapatas.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10781
| ''[[:d:Q19840274|Rhodri Jones]]''
|
|
|
|-
| style='text-align:right'| 10782
| ''[[:d:Q19848670|Chalkie Davies]]''
|
|
|
|-
| style='text-align:right'| 10783
| ''[[:d:Q19870710|Alun Anderson]]''
|
|
|
|-
| style='text-align:right'| 10784
| ''[[:d:Q19872799|Rod Duncan]]''
|
|
|
|-
| style='text-align:right'| 10785
| ''[[:d:Q19873847|Ian Hamer]]''
|
|
|
|-
| style='text-align:right'| 10786
| ''[[:d:Q19874739|Owain Jones]]''
| [[Coadan:Owain Jones footballer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10787
| ''[[:d:Q19895893|Betsan Llwyd]]''
|
|
|
|-
| style='text-align:right'| 10788
| ''[[:d:Q19899726|Ross O'Hennessy]]''
| [[Coadan:Ross at Wakles Comic Con 2015.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 10789
| ''[[:d:Q19903914|Cynan Jones]]''
|
|
|
|-
| style='text-align:right'| 10790
| ''[[:d:Q19904075|Siân Gibson]]''
| [[Coadan:Sian Gibson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10791
| ''[[:d:Q19904139|Jason Greenslade]]''
|
|
|
|-
| style='text-align:right'| 10792
| ''[[:d:Q19945904|Bryn Markham-Jones]]''
|
|
|
|-
| style='text-align:right'| 10793
| ''[[:d:Q19957299|Chris Davies]]''
| [[Coadan:Official portrait of Chris Davies crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10794
| ''[[:d:Q19957303|James Davies]]''
| [[Coadan:Official portrait of Dr James Davies MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10795
| ''[[:d:Q19958026|Carolyn Harris]]''
| [[Coadan:Official portrait of Carolyn Harris MP, 2025 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10796
| ''[[:d:Q19958045|Janet Haworth]]''
| [[Coadan:Janet Owart.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10797
| ''[[:d:Q19958093|Simon Hoare]]''
| [[Coadan:Official portrait of Simon Hoare (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10798
| ''[[:d:Q19968719|Lateysha Grace]]''
| [[Coadan:Lateysha Grace at the National Television Awards.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10799
| ''[[:d:Q20007832|Leondre Devries]]''
|
|
|
|-
| style='text-align:right'| 10800
| ''[[:d:Q20022443|Mark Bennett]]''
|
|
|
|-
| style='text-align:right'| 10801
| ''[[:d:Q20022497|Simon Hill]]''
|
|
|
|-
| style='text-align:right'| 10802
| ''[[:d:Q20055587|Sioned Wiliam]]''
|
|
|
|-
| style='text-align:right'| 10803
| ''[[:d:Q20089033|David Braid]]''
|
|
|
|-
| style='text-align:right'| 10804
| ''[[:d:Q20090102|Gareth Allen]]''
| [[Coadan:Gareth Allen PHC 2015-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10805
| ''[[:d:Q20090668|Chris Tally Evans]]''
| [[Coadan:Shift Exhibition pic.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 10806
| ''[[:d:Q20090820|Ollie Griffiths]]''
|
|
|
|-
| style='text-align:right'| 10807
| ''[[:d:Q20109582|Penelope Evans]]''
|
|
|
|-
| style='text-align:right'| 10808
| ''[[:d:Q20127986|Kyle Patten]]''
|
|
|
|-
| style='text-align:right'| 10809
| ''[[:d:Q20128115|Jo Stevens]]''
| [[Coadan:Official portrait of Jo Stevens MP crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10810
| ''[[:d:Q20497707|Emlyn Rees]]''
|
|
|
|-
| style='text-align:right'| 10811
| ''[[:d:Q20534916|Elinor Crawley]]''
| [[Coadan:Elinor Crawley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10812
| ''[[:d:Q20558011|Aeryn Jones]]''
|
|
|
|-
| style='text-align:right'| 10813
| ''[[:d:Q20558076|Angharad Llwyd-Jones]]''
|
|
|
|-
| style='text-align:right'| 10814
| ''[[:d:Q20558096|Angharad Puw Davies]]''
|
|
|
|-
| style='text-align:right'| 10815
| ''[[:d:Q20558342|Alice E. Williams]]''
|
|
|
|-
| style='text-align:right'| 10816
| ''[[:d:Q20558419|Alun Guy]]''
|
|
|
|-
| style='text-align:right'| 10817
| ''[[:d:Q20558440|Alun Ifans]]''
|
|
|
|-
| style='text-align:right'| 10818
| ''[[:d:Q20558530|Alwyn Humphreys]]''
|
|
|
|-
| style='text-align:right'| 10819
| ''[[:d:Q20559469|Dyfnwal ap Arthwyr]]''
|
|
|
|-
| style='text-align:right'| 10820
| ''[[:d:Q20560367|Androw Bennett]]''
|
|
|
|-
| style='text-align:right'| 10821
| ''[[:d:Q20560477|Bethan Marlow]]''
|
|
|
|-
| style='text-align:right'| 10822
| ''[[:d:Q20560688|Bleddyn Owen Huws]]''
|
|
|
|-
| style='text-align:right'| 10823
| ''[[:d:Q20562825|Eurig Salisbury]]''
|
|
|
|-
| style='text-align:right'| 10824
| ''[[:d:Q20562948|Lleuwen Steffan]]''
|
|
|
|-
| style='text-align:right'| 10825
| ''[[:d:Q20564992|Ceri Dupree]]''
|
|
|
|-
| style='text-align:right'| 10826
| ''[[:d:Q20567154|John Rowlands]]''
|
|
|
|-
| style='text-align:right'| 10827
| ''[[:d:Q20567225|Ann Pierce Jones]]''
|
|
|
|-
| style='text-align:right'| 10828
| ''[[:d:Q20568764|Beryl Stafford Williams]]''
|
|
|
|-
| style='text-align:right'| 10829
| ''[[:d:Q20569630|Gareth Morlais]]''
| [[Coadan:Celtic Knot Conference, July 2017 (14) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10830
| ''[[:d:Q20570139|Siân Gwenllian]]''
| [[Coadan:Siân Gwenllian AM (28092344141).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10831
| ''[[:d:Q20630509|Anthony Lyn]]''
|
|
|
|-
| style='text-align:right'| 10832
| ''[[:d:Q20638115|H. Hawkline]]''
| [[Coadan:H. Hawkline.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10833
| ''[[:d:Q20638154|Rhisiart Iorwerth]]''
|
|
|
|-
| style='text-align:right'| 10834
| ''[[:d:Q20641048|Nia Jones]]''
| [[Coadan:20150922 1826 W AUT WAL 3974.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10835
| ''[[:d:Q20641505|George Smith]]''
|
|
|
|-
| style='text-align:right'| 10836
| ''[[:d:Q20647531|Gerald Jones]]''
| [[Coadan:Official portrait of Gerald Jones MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10837
| ''[[:d:Q20647978|Craig Williams]]''
| [[Coadan:Official portrait of Craig Williams MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10838
| ''[[:d:Q20648332|Christina Rees]]''
| [[Coadan:Official portrait of Christina Rees crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10839
| ''[[:d:Q20648913|Nick Thomas-Symonds]]''
| [[Coadan:Official portrait of Nick Thomas-Symonds MP (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10840
| ''[[:d:Q20651182|David Morris]]''
|
|
|
|-
| style='text-align:right'| 10841
| ''[[:d:Q20684269|Terry Jones]]''
|
|
|
|-
| style='text-align:right'| 10842
| ''[[:d:Q20707550|Jack Murphy]]''
|
|
|
|-
| style='text-align:right'| 10843
| ''[[:d:Q20707929|Jeremy Lawlor]]''
|
|
|
|-
| style='text-align:right'| 10844
| ''[[:d:Q20713162|Duane Jones]]''
| [[Coadan:Duane Jones PHC 2015-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10845
| ''[[:d:Q20713565|Rory Thornton]]''
|
|
|
|-
| style='text-align:right'| 10846
| ''[[:d:Q20714025|Javan Sebastian]]''
|
|
|
|-
| style='text-align:right'| 10847
| ''[[:d:Q20732632|Arthur Jones]]''
|
|
|
|-
| style='text-align:right'| 10848
| ''[[:d:Q20732663|William Birchinshaw]]''
|
|
|
|-
| style='text-align:right'| 10849
| ''[[:d:Q20732678|Cadwaladr Davies]]''
|
|
|
|-
| style='text-align:right'| 10850
| ''[[:d:Q20732683|Cadwgan Delynor]]''
|
|
|
|-
| style='text-align:right'| 10851
| ''[[:d:Q20732684|Cadwgan Ffôl]]''
|
|
|
|-
| style='text-align:right'| 10852
| ''[[:d:Q20732734|Dafydd ap Phylip ap Rhys]]''
|
|
|
|-
| style='text-align:right'| 10853
| ''[[:d:Q20732732|Dafydd ap Maredudd ap Tudur]]''
|
|
|
|-
| style='text-align:right'| 10854
| ''[[:d:Q20732927|Edward Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 10855
| ''[[:d:Q20732994|Ellis Cadwaladr]]''
|
|
|
|-
| style='text-align:right'| 10856
| ''[[:d:Q20732999|Ellis Lewis]]''
|
|
|
|-
| style='text-align:right'| 10857
| ''[[:d:Q20733184|Hugh Bulkeley]]''
|
|
|
|-
| style='text-align:right'| 10858
| ''[[:d:Q20733219|Huw ap Morus]]''
|
|
|
|-
| style='text-align:right'| 10859
| ''[[:d:Q20733217|Huw ap Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10860
| ''[[:d:Q20733220|Huw ap Rhisiart ap Dafydd]]''
|
|
|
|-
| style='text-align:right'| 10861
| ''[[:d:Q20734421|Thomas Blayney]]''
|
|
|
|-
| style='text-align:right'| 10862
| ''[[:d:Q20734505|Thomas Meredith]]''
|
|
|
|-
| style='text-align:right'| 10863
| ''[[:d:Q20740720|Jamie Clarke]]''
|
|
|
|-
| style='text-align:right'| 10864
| ''[[:d:Q20744651|Julian Philips]]''
| [[Coadan:Composer Julian Philips.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10865
| ''[[:d:Q20746350|Sarah Vine]]''
|
|
|
|-
| style='text-align:right'| 10866
| ''[[:d:Q20748859|Margaret Thomas]]''
|
|
|
|-
| style='text-align:right'| 10867
| ''[[:d:Q20751801|Edward Evans]]''
|
|
|
|-
| style='text-align:right'| 10868
| ''[[:d:Q20796502|John Doyle]]''
|
|
|
|-
| style='text-align:right'| 10869
| ''[[:d:Q20804702|Evan Williams]]''
|
|
|
|-
| style='text-align:right'| 10870
| ''[[:d:Q20806930|Scott Barrow]]''
| [[Coadan:Scott barrow york city 2021-22.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10871
| ''[[:d:Q20858102|John McGrath]]''
|
|
|
|-
| style='text-align:right'| 10872
| ''[[:d:Q20864810|Richard Rees]]''
|
|
|
|-
| style='text-align:right'| 10873
| ''[[:d:Q20871825|Joseph Devries]]''
|
|
|
|-
| style='text-align:right'| 10874
| ''[[:d:Q20876607|David Carpanini]]''
|
|
|
|-
| style='text-align:right'| 10875
| ''[[:d:Q20878085|Ryan Broom]]''
|
|
|
|-
| style='text-align:right'| 10876
| ''[[:d:Q20878155|Dafydd Jones]]''
|
|
|
|-
| style='text-align:right'| 10877
| ''[[:d:Q20878221|Connor Roberts]]''
| [[Coadan:Connor Roberts (footballer, born 1995), cropped image, Turkey vs Wales EURO 2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10878
| ''[[:d:Q20878239|Rick Smith]]''
| [[Coadan:Rick Smith.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10879
| ''[[:d:Q20878285|Josh Yorwerth]]''
| [[Coadan:Josh Yorwerth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10880
| ''[[:d:Q20900626|Drew Sherman]]''
|
|
|
|-
| style='text-align:right'| 10881
| ''[[:d:Q20949696|Cynon]]''
|
|
|
|-
| style='text-align:right'| 10882
| ''[[:d:Q20955871|Huw M.]]''
|
|
|
|-
| style='text-align:right'| 10883
| ''[[:d:Q20979145|Alex Samuel]]''
|
|
|
|-
| style='text-align:right'| 10884
| ''[[:d:Q21004948|Lewis Bamford]]''
|
|
|
|-
| style='text-align:right'| 10885
| ''[[:d:Q21005409|Colin Roscoe]]''
|
|
|
|-
| style='text-align:right'| 10886
| ''[[:d:Q21005591|Anne Denholm]]''
|
|
|
|-
| style='text-align:right'| 10887
| ''[[:d:Q21005762|Rob Evans]]''
|
|
|
|-
| style='text-align:right'| 10888
| ''[[:d:Q21030583|Dylan Wiliam]]''
| [[Coadan:Dylan Wiliam LISE2006 podium.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10889
| ''[[:d:Q21030581|Alexa Davies]]''
| [[Coadan:Alexa Davies on MTV International.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10890
| ''[[:d:Q21030612|Richard Owain Roberts]]''
| [[Coadan:Richard Owain Roberts.png|center|128px]]
|
|
|-
| style='text-align:right'| 10891
| ''[[:d:Q21030613|Philip Salt]]''
| [[Coadan:2 02 Phil Salt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10892
| ''[[:d:Q21030620|Stephen Thomas]]''
|
|
|
|-
| style='text-align:right'| 10893
| ''[[:d:Q21032001|Peter Rudeforth]]''
|
|
|
|-
| style='text-align:right'| 10894
| ''[[:d:Q21062381|Roger Matthews]]''
| [[Coadan:Professor Roger Matthews in October 2019, a workshop in Sulaymaniyah, Iraq.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10895
| ''[[:d:Q21064622|Matt Protheroe]]''
| [[Coadan:ProtheroeMatt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10896
| ''[[:d:Q21066421|Lara Stephen]]''
|
|
|
|-
| style='text-align:right'| 10897
| ''[[:d:Q21165576|John Aggleton]]''
|
|
|
|-
| style='text-align:right'| 10898
| ''[[:d:Q21181195|Nicholas Harrhy]]''
|
|
|
|-
| style='text-align:right'| 10899
| ''[[:d:Q21284652|Tal Dunne]]''
| [[Coadan:Tal dan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10900
| ''[[:d:Q21284929|Paul Emanuelli]]''
| [[Coadan:Paul Emanuelli.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10901
| ''[[:d:Q21285653|Geraint Walsh]]''
|
|
|
|-
| style='text-align:right'| 10902
| ''[[:d:Q21294997|Hayley Smith]]''
|
|
|
|-
| style='text-align:right'| 10903
| ''[[:d:Q21453970|Liam Hanley]]''
|
|
|
|-
| style='text-align:right'| 10904
| ''[[:d:Q21455479|Roy Slade]]''
|
|
|
|-
| style='text-align:right'| 10905
| ''[[:d:Q21455692|Manon Awst]]''
| [[Coadan:Manon Awst portrait 2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10906
| ''[[:d:Q21455918|Sally Moore]]''
|
|
|
|-
| style='text-align:right'| 10907
| ''[[:d:Q21456698|Andrzej Jackowski]]''
|
|
|
|-
| style='text-align:right'| 10908
| ''[[:d:Q21457000|Elinor Evans]]''
|
|
|
|-
| style='text-align:right'| 10909
| ''[[:d:Q21457350|James Malcolm Rielly]]''
|
|
|
|-
| style='text-align:right'| 10910
| ''[[:d:Q21457627|Elwyn Ioan]]''
|
|
|
|-
| style='text-align:right'| 10911
| ''[[:d:Q21458001|Emrys Parry]]''
|
|
|
|-
| style='text-align:right'| 10912
| ''[[:d:Q21461712|John Harvey]]''
|
|
|
|-
| style='text-align:right'| 10913
| ''[[:d:Q21462444|Paul Brewer]]''
|
|
|
|-
| style='text-align:right'| 10914
| ''[[:d:Q21464075|Cherry Pickles]]''
|
|
|
|-
| style='text-align:right'| 10915
| ''[[:d:Q21464870|Glyn Jones]]''
|
|
|
|-
| style='text-align:right'| 10916
| ''[[:d:Q21465832|Gwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 10917
| ''[[:d:Q21466186|D. Alun Evans]]''
|
|
|
|-
| style='text-align:right'| 10918
| ''[[:d:Q21466631|Keith Bowen]]''
|
|
|
|-
| style='text-align:right'| 10919
| ''[[:d:Q21466820|Richard O'Connell]]''
|
|
|
|-
| style='text-align:right'| 10920
| ''[[:d:Q21466996|Wynn Jones]]''
|
|
|
|-
| style='text-align:right'| 10921
| ''[[:d:Q21474189|Dafydd Hellard]]''
|
|
|
|-
| style='text-align:right'| 10922
| ''[[:d:Q21481534|John Williams]]''
|
|
|
|-
| style='text-align:right'| 10923
| ''[[:d:Q21521789|John Neilson]]''
|
|
|
|-
| style='text-align:right'| 10924
| ''[[:d:Q21521815|Wynne Melville Jones]]''
| [[Coadan:Parêd Gŵyl Dewi Aberystwyth 2023 - Wynne Melville Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10925
| ''[[:d:Q21585387|The Anchoress]]''
| [[Coadan:Simple Minds - 2018173231123 2018-06-22 Rock the Ring - 1D X MK II - 2684 - B70I0818.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10926
| ''[[:d:Q21620859|Adam Beard]]''
| [[Coadan:Adam Beard 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10927
| ''[[:d:Q21620926|Will Boyde]]''
|
|
|
|-
| style='text-align:right'| 10928
| ''[[:d:Q21621069|Jack Condy]]''
|
|
|
|-
| style='text-align:right'| 10929
| ''[[:d:Q21621139|James Davies]]''
|
|
|
|-
| style='text-align:right'| 10930
| ''[[:d:Q21621193|Dion Donohue]]''
|
|
|
|-
| style='text-align:right'| 10931
| ''[[:d:Q21621239|Ryan Elias]]''
| [[Coadan:20260314 184512 Ryan Elias 2026 Six Nations Wales vs Italy.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10932
| ''[[:d:Q21621263|Jarrod Evans]]''
| [[Coadan:Jarrod Evans 2020.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10933
| ''[[:d:Q21621266|Steffan Evans]]''
|
|
|
|-
| style='text-align:right'| 10934
| ''[[:d:Q21621265|Lloyd Evans]]''
|
|
|
|-
| style='text-align:right'| 10935
| ''[[:d:Q21621405|Wyn Jones]]''
| [[Coadan:Wyn Jones March 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10936
| ''[[:d:Q21621506|Steffan Hughes]]''
|
|
|
|-
| style='text-align:right'| 10937
| ''[[:d:Q21621505|Rhodri Hughes]]''
|
|
|
|-
| style='text-align:right'| 10938
| ''[[:d:Q21621582|Ellis Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10939
| ''[[:d:Q21621583|Owen Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10940
| ''[[:d:Q21621580|Aled Jenkins]]''
|
|
|
|-
| style='text-align:right'| 10941
| ''[[:d:Q21621611|Dan Jones]]''
|
|
|
|-
| style='text-align:right'| 10942
| ''[[:d:Q21621827|Ethan Lewis]]''
|
|
|
|-
| style='text-align:right'| 10943
| ''[[:d:Q21621825|Dillon Lewis]]''
| [[Coadan:Dillon Lewis 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10944
| ''[[:d:Q21621829|Josh Lewis]]''
|
|
|
|-
| style='text-align:right'| 10945
| ''[[:d:Q21622160|Torin Myhill]]''
|
|
|
|-
| style='text-align:right'| 10946
| ''[[:d:Q21622199|Ioan Nicholas]]''
|
|
|
|-
| style='text-align:right'| 10947
| ''[[:d:Q21622291|Scott Otten]]''
|
|
|
|-
| style='text-align:right'| 10948
| ''[[:d:Q21622371|Tom Phillips]]''
|
|
|
|-
| style='text-align:right'| 10949
| ''[[:d:Q21622500|Lewis Rawlins]]''
|
|
|
|-
| style='text-align:right'| 10950
| ''[[:d:Q21622920|Garyn Smith]]''
|
|
|
|-
| style='text-align:right'| 10951
| ''[[:d:Q21622991|Aled Summerhill]]''
|
|
|
|-
| style='text-align:right'| 10952
| ''[[:d:Q21622998|Dan Suter]]''
|
|
|
|-
| style='text-align:right'| 10953
| ''[[:d:Q21623095|Gareth Thomas]]''
| [[Coadan:Gareth Thomas (ospreys) 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10954
| ''[[:d:Q21623285|Owen Watkin]]''
| [[Coadan:Owen Watkin RWC 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10955
| ''[[:d:Q21623324|Tomos Williams]]''
| [[Coadan:Tomos Williams 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10956
| ''[[:d:Q21642411|Hannah Daniel]]''
|
|
|
|-
| style='text-align:right'| 10957
| ''[[:d:Q21642535|Gemma Hallett]]''
| [[Coadan:Gem Hallett.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10958
| ''[[:d:Q21716254|Jordan Evans]]''
| [[Coadan:Jordan Evans.png|center|128px]]
|
|
|-
| style='text-align:right'| 10959
| ''[[:d:Q21754193|Jacob Ifan]]''
|
|
|
|-
| style='text-align:right'| 10960
| ''[[:d:Q21857916|Roger Hackney]]''
|
|
|
|-
| style='text-align:right'| 10961
| ''[[:d:Q21899385|Stephen Williams]]''
| [[Coadan:Stephen Williams, 2023 Paris-Nice.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10962
| ''[[:d:Q21932066|Dean Reynolds]]''
|
|
|
|-
| style='text-align:right'| 10963
| ''[[:d:Q21933272|Alex Lynch]]''
|
|
|
|-
| style='text-align:right'| 10964
| ''[[:d:Q21954811|Morgan Evans]]''
|
|
|
|-
| style='text-align:right'| 10965
| ''[[:d:Q21964342|Anwen Butten]]''
| [[Coadan:Anwen Butten.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 10966
| ''[[:d:Q21964937|Sean Holley]]''
|
|
|
|-
| style='text-align:right'| 10967
| ''[[:d:Q21999572|Robert Nisbet]]''
|
|
|
|-
| style='text-align:right'| 10968
| ''[[:d:Q21999672|Kevin Hopkins]]''
|
|
|
|-
| style='text-align:right'| 10969
| ''[[:d:Q21999689|Carl Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 10970
| ''[[:d:Q21999695|Nigel Meek]]''
|
|
|
|-
| style='text-align:right'| 10971
| ''[[:d:Q21999708|Joseph Owens]]''
|
|
|
|-
| style='text-align:right'| 10972
| ''[[:d:Q21999727|Dick Roberts]]''
|
|
|
|-
| style='text-align:right'| 10973
| ''[[:d:Q21999735|Cyril Smith]]''
|
|
|
|-
| style='text-align:right'| 10974
| ''[[:d:Q22007406|John Pettigrew]]''
|
|
|
|-
| style='text-align:right'| 10975
| ''[[:d:Q22097933|Richard Lewis]]''
| [[Coadan:Richard Lewis in 2018.png|center|128px]]
|
|
|-
| style='text-align:right'| 10976
| ''[[:d:Q22097945|Darril Williams]]''
|
|
|
|-
| style='text-align:right'| 10977
| ''[[:d:Q22098319|Justin Thomas]]''
|
|
|
|-
| style='text-align:right'| 10978
| ''[[:d:Q22098343|Georgia Evans]]''
|
|
|
|-
| style='text-align:right'| 10979
| ''[[:d:Q22113503|John S. Noyes]]''
|
|
|
|-
| style='text-align:right'| 10980
| ''[[:d:Q22137015|Ellie Curson]]''
| [[Coadan:Ellie Curson - Yeovil Ladies (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10981
| ''[[:d:Q22277003|Remy Beasley]]''
|
|
|
|-
| style='text-align:right'| 10982
| ''[[:d:Q22277869|Daniel Gammond]]''
|
|
|
|-
| style='text-align:right'| 10983
| ''[[:d:Q22277934|Oncle Gilbert]]''
|
|
|
|-
| style='text-align:right'| 10984
| ''[[:d:Q22278255|Edwin Humphreys]]''
|
|
|
|-
| style='text-align:right'| 10985
| ''[[:d:Q22278601|Timothy Killeen]]''
| [[Coadan:Tim Killeen and Tom Vilsack.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10986
| ''[[:d:Q22279195|Maisie Methuen]]''
|
|
|
|-
| style='text-align:right'| 10987
| ''[[:d:Q22695859|Brian Davies]]''
|
|
|
|-
| style='text-align:right'| 10988
| ''[[:d:Q22703903|Eirlys Britton]]''
|
|
|
|-
| style='text-align:right'| 10989
| ''[[:d:Q22704062|Rebecca Harries]]''
|
|
|
|-
| style='text-align:right'| 10990
| ''[[:d:Q22704087|Ioan Hefin]]''
|
|
|
|-
| style='text-align:right'| 10991
| ''[[:d:Q22774613|Daniel Pearson]]''
| [[Coadan:Daniel Pearson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10992
| ''[[:d:Q22815213|Marged ferch Tomos]]''
|
|
|
|-
| style='text-align:right'| 10993
| ''[[:d:Q22941875|Jess Davies]]''
|
|
|
|-
| style='text-align:right'| 10994
| ''[[:d:Q22957455|Nicola Cousins]]''
| [[Coadan:Nicola Cousins.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10995
| ''[[:d:Q22957701|Claire Skinner]]''
|
|
|
|-
| style='text-align:right'| 10996
| ''[[:d:Q22957757|Laura May Walkley]]''
|
|
|
|-
| style='text-align:right'| 10997
| ''[[:d:Q22997454|Ffion Hague]]''
| [[Coadan:Ffion Hague.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10998
| ''[[:d:Q23000846|Trystan Llŷr Griffiths]]''
|
|
|
|-
| style='text-align:right'| 10999
| ''[[:d:Q23013170|Eleri Mills]]''
|
|
|
|-
| style='text-align:right'| 11000
| ''[[:d:Q23210319|Meilyr Jones]]''
|
|
|
|-
| style='text-align:right'| 11001
| ''[[:d:Q23304355|David Smallman]]''
|
|
|
|-
| style='text-align:right'| 11002
| ''[[:d:Q23309977|Kathy Jones]]''
|
|
|
|-
| style='text-align:right'| 11003
| ''[[:d:Q23419103|Beth Reekles]]''
| [[Coadan:Beth Reeks on Institute of Physics.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11004
| ''[[:d:Q23463073|James Bird]]''
|
|
|
|-
| style='text-align:right'| 11005
| ''[[:d:Q23542620|Scott Andrews]]''
|
|
|
|-
| style='text-align:right'| 11006
| ''[[:d:Q23664137|Fiona Bennett]]''
|
|
|
|-
| style='text-align:right'| 11007
| ''[[:d:Q23664153|Luke Francis]]''
|
|
|
|-
| style='text-align:right'| 11008
| ''[[:d:Q23665729|Stephen Malik]]''
|
|
|
|-
| style='text-align:right'| 11009
| ''[[:d:Q23696663|Lee Gaze]]''
|
|
|
|-
| style='text-align:right'| 11010
| ''[[:d:Q23721875|Shelley Miranda Barrett]]''
|
|
|
|-
| style='text-align:right'| 11011
| ''[[:d:Q23731514|Elen Rhys]]''
|
|
|
|-
| style='text-align:right'| 11012
| ''[[:d:Q23731532|Kate Lamb]]''
|
|
|
|-
| style='text-align:right'| 11013
| ''[[:d:Q23762604|Tyler Rees]]''
|
|
|
|-
| style='text-align:right'| 11014
| ''[[:d:Q23770381|Luke Garrett]]''
|
|
|
|-
| style='text-align:right'| 11015
| ''[[:d:Q23770470|Owain Arthur]]''
| [[Coadan:Owain Arthur at World Premiere London, The Rings of Power 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11016
| ''[[:d:Q23812726|Rhian Edwards]]''
|
|
|
|-
| style='text-align:right'| 11017
| ''[[:d:Q23883547|Leigh De-Vulgt]]''
|
|
|
|-
| style='text-align:right'| 11018
| ''[[:d:Q23883851|Josh Heard]]''
| [[Coadan:CINvBST 2017-05-20 - Josh Heard (33997230723) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11019
| ''[[:d:Q23887822|Kayleigh Barton]]''
| [[Coadan:Kayleigh Green (46934063632) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11020
| ''[[:d:Q23888209|Alastair Cavenagh]]''
|
|
|
|-
| style='text-align:right'| 11021
| ''[[:d:Q23892568|Aelrhiw]]''
| [[Coadan:Eglwys S Aelrhiw a Rheithordy Rhiw St Aelrhiw's and Rectory - geograph.org.uk - 568285.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11022
| ''[[:d:Q23927294|Callwen]]''
| [[Coadan:All Saints, Cellan - geograph.org.uk - 49752.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11023
| ''[[:d:Q23927301|Gwenfyl]]''
|
|
|
|-
| style='text-align:right'| 11024
| ''[[:d:Q23991119|Thomas Boden]]''
|
|
|
|-
| style='text-align:right'| 11025
| ''[[:d:Q23991117|Matt Whatley]]''
|
|
|
|-
| style='text-align:right'| 11026
| ''[[:d:Q23991127|Les Cartwright]]''
|
|
|
|-
| style='text-align:right'| 11027
| ''[[:d:Q23991125|Samuel Brookes]]''
|
|
|
|-
| style='text-align:right'| 11028
| ''[[:d:Q23991134|Alfred Owen Davies]]''
|
|
|
|-
| style='text-align:right'| 11029
| ''[[:d:Q23991135|Oswald Davies]]''
|
|
|
|-
| style='text-align:right'| 11030
| ''[[:d:Q23991132|Charles Conde]]''
|
|
|
|-
| style='text-align:right'| 11031
| ''[[:d:Q23991143|Dick Finnigan]]''
|
|
|
|-
| style='text-align:right'| 11032
| ''[[:d:Q23991172|Abel Hayes]]''
|
|
|
|-
| style='text-align:right'| 11033
| ''[[:d:Q23991231|Harry Hibbott]]''
|
|
|
|-
| style='text-align:right'| 11034
| ''[[:d:Q23991291|Edmund Howell]]''
|
|
|
|-
| style='text-align:right'| 11035
| ''[[:d:Q23991313|Ron Hugh]]''
|
|
|
|-
| style='text-align:right'| 11036
| ''[[:d:Q23991471|Wilf James]]''
|
|
|
|-
| style='text-align:right'| 11037
| ''[[:d:Q23991510|Eddie Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11038
| ''[[:d:Q23991548|Charles Ketley]]''
|
|
|
|-
| style='text-align:right'| 11039
| ''[[:d:Q23991587|Sid Lawrence]]''
|
|
|
|-
| style='text-align:right'| 11040
| ''[[:d:Q23991610|Patrick Leary]]''
|
|
|
|-
| style='text-align:right'| 11041
| ''[[:d:Q23991667|Tommy Matthias]]''
|
|
|
|-
| style='text-align:right'| 11042
| ''[[:d:Q23991664|Jack Mates]]''
|
|
|
|-
| style='text-align:right'| 11043
| ''[[:d:Q23991672|John Moulsdale]]''
|
|
|
|-
| style='text-align:right'| 11044
| ''[[:d:Q23991673|William Nock]]''
|
|
|
|-
| style='text-align:right'| 11045
| ''[[:d:Q23991676|Walter Hugh Roberts]]''
|
|
|
|-
| style='text-align:right'| 11046
| ''[[:d:Q23991685|Thomas John Thomas]]''
|
|
|
|-
| style='text-align:right'| 11047
| ''[[:d:Q23991692|Dick Wilcock]]''
|
|
|
|-
| style='text-align:right'| 11048
| ''[[:d:Q23991693|Richard Parry Williams]]''
|
|
|
|-
| style='text-align:right'| 11049
| ''[[:d:Q24005337|Josh Adams]]''
| [[Coadan:Josh Adams March 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11050
| ''[[:d:Q24005525|David Harrison]]''
|
|
|
|-
| style='text-align:right'| 11051
| ''[[:d:Q24006201|Jane Aaron]]''
|
|
|
|-
| style='text-align:right'| 11052
| ''[[:d:Q24007014|Novo Amor]]''
| [[Coadan:Novo Amor at Prinzen Bar.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11053
| ''[[:d:Q24007087|Cerys Hale]]''
|
|
|
|-
| style='text-align:right'| 11054
| ''[[:d:Q24007150|Rebecca De Filippo]]''
|
|
|
|-
| style='text-align:right'| 11055
| ''[[:d:Q24007174|Shona Powell Hughes]]''
|
|
|
|-
| style='text-align:right'| 11056
| ''[[:d:Q24007306|Megan York]]''
|
|
|
|-
| style='text-align:right'| 11057
| ''[[:d:Q24007313|David Jones]]''
|
|
|
|-
| style='text-align:right'| 11058
| ''[[:d:Q24007358|Eddie Lawrence]]''
|
|
|
|-
| style='text-align:right'| 11059
| ''[[:d:Q24007359|Dai Lewis]]''
|
|
|
|-
| style='text-align:right'| 11060
| ''[[:d:Q24007372|Tommy Mills]]''
|
|
|
|-
| style='text-align:right'| 11061
| ''[[:d:Q24007383|Elen Evans]]''
|
|
|
|-
| style='text-align:right'| 11062
| ''[[:d:Q24007428|Aneurin Richards]]''
|
|
|
|-
| style='text-align:right'| 11063
| ''[[:d:Q24007436|Sian Williams]]''
| [[Coadan:Sian Williams Rugby.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11064
| ''[[:d:Q24007470|Bethan Dainton]]''
|
|
|
|-
| style='text-align:right'| 11065
| ''[[:d:Q24007472|Ffion Bowen]]''
|
|
|
|-
| style='text-align:right'| 11066
| ''[[:d:Q24039661|Lee Waters]]''
| [[Coadan:Lee Waters AM (28066509142).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11067
| ''[[:d:Q24041564|Neil McEvoy]]''
| [[Coadan:Neil McEvoy AM (28092346611).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11068
| ''[[:d:Q24045680|Vikki Howells]]''
| [[Coadan:Vikki Howells AM (27555188583).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11069
| ''[[:d:Q24050178|Jayne Bryant]]''
| [[Coadan:Jayne Bryant AM (28092339351).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11070
| ''[[:d:Q24053857|Chris Elmore]]''
| [[Coadan:Official portrait of Chris Elmore MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11071
| ''[[:d:Q24073707|David Powell]]''
|
|
|
|-
| style='text-align:right'| 11072
| ''[[:d:Q24182168|Aled Williams]]''
|
|
|
|-
| style='text-align:right'| 11073
| ''[[:d:Q24182511|Greg Prosser]]''
|
|
|
|-
| style='text-align:right'| 11074
| ''[[:d:Q24183405|Darran Harris]]''
|
|
|
|-
| style='text-align:right'| 11075
| ''[[:d:Q24183505|Steve Cooper]]''
| [[Coadan:Steve Cooper.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11076
| ''[[:d:Q24206353|Des Palmer]]''
|
|
|
|-
| style='text-align:right'| 11077
| ''[[:d:Q24206440|Henry Phoenix]]''
|
|
|
|-
| style='text-align:right'| 11078
| ''[[:d:Q24229287|Кішан Хірані]]''
|
|
|
|-
| style='text-align:right'| 11079
| ''[[:d:Q24250050|Tudor Jones]]''
|
|
|
|-
| style='text-align:right'| 11080
| ''[[:d:Q24405234|David Rowlands]]''
| [[Coadan:David Rowlands AM (28092341381).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11081
| ''[[:d:Q24405244|Gareth Bennett]]''
| [[Coadan:Gareth Bennett AM.png|center|128px]]
|
|
|-
| style='text-align:right'| 11082
| ''[[:d:Q24450426|Rheon James]]''
|
|
|
|-
| style='text-align:right'| 11083
| ''[[:d:Q24450793|Chloe Tutton]]''
|
|
|
|-
| style='text-align:right'| 11084
| ''[[:d:Q24548833|Chris Knight]]''
|
|
|
|-
| style='text-align:right'| 11085
| ''[[:d:Q24571914|Martyn Davies]]''
|
|
|
|-
| style='text-align:right'| 11086
| ''[[:d:Q24702621|Tom Doran]]''
|
|
|
|-
| style='text-align:right'| 11087
| ''[[:d:Q24706040|Jeremy Miles]]''
| [[Coadan:Jeremy Miles official portrait (cropped).png|center|128px]]
|
|
|-
| style='text-align:right'| 11088
| ''[[:d:Q24708157|Branwen Niclas]]''
|
|
|
|-
| style='text-align:right'| 11089
| ''[[:d:Q24809662|Ted Parry]]''
|
|
|
|-
| style='text-align:right'| 11090
| ''[[:d:Q24809752|Abdullah Izzidien]]''
|
|
|
|-
| style='text-align:right'| 11091
| ''[[:d:Q24827868|Trevor Owen]]''
|
|
|
|-
| style='text-align:right'| 11092
| ''[[:d:Q24963103|Iestyn George]]''
|
|
|
|-
| style='text-align:right'| 11093
| ''[[:d:Q24996661|Nellie Evans Packard]]''
| [[Coadan:NellieEvansPackard.tiff|center|128px]]
|
|
|-
| style='text-align:right'| 11094
| ''[[:d:Q25171277|Richard Parfitt]]''
|
|
|
|-
| style='text-align:right'| 11095
| ''[[:d:Q25171703|Steve Hamer]]''
|
|
|
|-
| style='text-align:right'| 11096
| ''[[:d:Q25189322|Jack Jones]]''
| [[Coadan:Jack Jones.jpeg|center|128px]]
|
|
|-
| style='text-align:right'| 11097
| ''[[:d:Q25206945|John Davies]]''
|
|
|
|-
| style='text-align:right'| 11098
| ''[[:d:Q25206950|Walter Davies]]''
|
|
|
|-
| style='text-align:right'| 11099
| ''[[:d:Q25206949|Jack Edwards]]''
|
|
|
|-
| style='text-align:right'| 11100
| ''[[:d:Q25206954|Jack Garner]]''
|
|
|
|-
| style='text-align:right'| 11101
| ''[[:d:Q25206953|Maurice Evans]]''
|
|
|
|-
| style='text-align:right'| 11102
| ''[[:d:Q25206957|Roger Evans]]''
|
|
|
|-
| style='text-align:right'| 11103
| ''[[:d:Q25206960|Peter Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11104
| ''[[:d:Q25206972|Edwin James]]''
|
|
|
|-
| style='text-align:right'| 11105
| ''[[:d:Q25206982|Frederick Jones]]''
|
|
|
|-
| style='text-align:right'| 11106
| ''[[:d:Q25206980|Thomas Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11107
| ''[[:d:Q25206981|Evan Jones]]''
|
|
|
|-
| style='text-align:right'| 11108
| ''[[:d:Q25206986|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 11109
| ''[[:d:Q25206995|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 11110
| ''[[:d:Q25206999|Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 11111
| ''[[:d:Q25206996|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 11112
| ''[[:d:Q25206997|Samuel Jones]]''
|
|
|
|-
| style='text-align:right'| 11113
| ''[[:d:Q25207017|Thomas Lewis]]''
|
|
|
|-
| style='text-align:right'| 11114
| ''[[:d:Q25207022|Thomas McCarthy]]''
|
|
|
|-
| style='text-align:right'| 11115
| ''[[:d:Q25207020|James Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11116
| ''[[:d:Q25207026|John Matthias]]''
|
|
|
|-
| style='text-align:right'| 11117
| ''[[:d:Q25207035|Robert Morris]]''
|
|
|
|-
| style='text-align:right'| 11118
| ''[[:d:Q25207045|Thomas Owen]]''
|
|
|
|-
| style='text-align:right'| 11119
| ''[[:d:Q25207059|John Roberts]]''
|
|
|
|-
| style='text-align:right'| 11120
| ''[[:d:Q25207062|Joseph Rogers]]''
|
|
|
|-
| style='text-align:right'| 11121
| ''[[:d:Q25207070|John Taylor]]''
|
|
|
|-
| style='text-align:right'| 11122
| ''[[:d:Q25207068|George Thomas]]''
|
|
|
|-
| style='text-align:right'| 11123
| ''[[:d:Q25207076|Dick Turner]]''
|
|
|
|-
| style='text-align:right'| 11124
| ''[[:d:Q25207083|George Williams]]''
|
|
|
|-
| style='text-align:right'| 11125
| ''[[:d:Q25207080|Billy Williams]]''
|
|
|
|-
| style='text-align:right'| 11126
| ''[[:d:Q25414715|Lauren Williams]]''
| [[Coadan:Lauren Williams after the Tokyo Olympics.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11127
| ''[[:d:Q25485241|Ammar Alfian]]''
|
|
|
|-
| style='text-align:right'| 11128
| ''[[:d:Q25558093|Jennifer Jones]]''
|
|
|
|-
| style='text-align:right'| 11129
| ''[[:d:Q25558134|Alex Harries]]''
|
|
|
|-
| style='text-align:right'| 11130
| ''[[:d:Q25558142|Arwel Davies]]''
|
|
|
|-
| style='text-align:right'| 11131
| ''[[:d:Q25558144|Eiry Palfrey]]''
|
|
|
|-
| style='text-align:right'| 11132
| ''[[:d:Q25558156|Alice Hooker-Stroud]]''
|
|
|
|-
| style='text-align:right'| 11133
| ''[[:d:Q25558240|Eiry Thomas]]''
|
|
|
|-
| style='text-align:right'| 11134
| ''[[:d:Q25558290|Cath Aran]]''
|
|
|
|-
| style='text-align:right'| 11135
| ''[[:d:Q25558317|Nesdi Jones]]''
|
|
|
|-
| style='text-align:right'| 11136
| ''[[:d:Q25558966|Rhys James]]''
|
|
|
|-
| style='text-align:right'| 11137
| ''[[:d:Q25559011|Ifan Gruffydd]]''
|
|
|
|-
| style='text-align:right'| 11138
| ''[[:d:Q25756678|Owen Morgan]]''
|
|
|
|-
| style='text-align:right'| 11139
| ''[[:d:Q25858076|Scott Ellaway]]''
| [[Coadan:Scott Ellaway filming OpusYou in 2016 (Photo by Clive Barda).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11140
| ''[[:d:Q25906323|Joel Makin]]''
|
|
|
|-
| style='text-align:right'| 11141
| ''[[:d:Q25927690|Chris Barber]]''
|
|
|
|-
| style='text-align:right'| 11142
| ''[[:d:Q25938069|Adrian Davies]]''
|
|
|
|-
| style='text-align:right'| 11143
| ''[[:d:Q26132127|Kiran Carlson]]''
| [[Coadan:3 37 Kiran Carlson.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11144
| ''[[:d:Q26132784|Nigel Hurley]]''
|
|
|
|-
| style='text-align:right'| 11145
| ''[[:d:Q26208520|Gruffudd Lewis]]''
|
|
|
|-
| style='text-align:right'| 11146
| ''[[:d:Q26210728|Jonathan Worsley]]''
|
|
|
|-
| style='text-align:right'| 11147
| ''[[:d:Q26219700|Jasmine Joyce]]''
|
|
|
|-
| style='text-align:right'| 11148
| ''[[:d:Q26220911|Sam Cross]]''
|
|
|
|-
| style='text-align:right'| 11149
| ''[[:d:Q26250588|David Morgan]]''
| [[Coadan:David Morgan (swimmer, 2017, cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11150
| ''[[:d:Q26251785|Lukas Carey]]''
|
|
|
|-
| style='text-align:right'| 11151
| ''[[:d:Q26253823|Einir Jones]]''
|
|
|
|-
| style='text-align:right'| 11152
| ''[[:d:Q26253829|Arthur Thomas]]''
|
|
|
|-
| style='text-align:right'| 11153
| ''[[:d:Q26293080|Elfed Roberts]]''
|
|
|
|-
| style='text-align:right'| 11154
| ''[[:d:Q26405093|George Nott]]''
|
|
|
|-
| style='text-align:right'| 11155
| ''[[:d:Q26689655|Stephen Morris]]''
|
|
|
|-
| style='text-align:right'| 11156
| ''[[:d:Q26704328|Michael Bonacini]]''
|
|
|
|-
| style='text-align:right'| 11157
| ''[[:d:Q26704697|Diana Darke]]''
|
|
|
|-
| style='text-align:right'| 11158
| ''[[:d:Q26775230|Jack Roberts]]''
|
|
|
|-
| style='text-align:right'| 11159
| ''[[:d:Q26837633|Liam Angel]]''
|
|
|
|-
| style='text-align:right'| 11160
| ''[[:d:Q26837649|Kyle Copp]]''
|
|
|
|-
| style='text-align:right'| 11161
| ''[[:d:Q26838543|Sean Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11162
| ''[[:d:Q26923806|Harrison Keddie]]''
| [[Coadan:Harrison Keddie 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11163
| ''[[:d:Q26923804|Brad Thyer]]''
|
|
|
|-
| style='text-align:right'| 11164
| ''[[:d:Q26923859|Regan Grace]]''
| [[Coadan:Regan Grace.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11165
| ''[[:d:Q26923857|Calvin Wellington]]''
|
|
|
|-
| style='text-align:right'| 11166
| ''[[:d:Q26924699|Kevin Courtney]]''
|
|
|
|-
| style='text-align:right'| 11167
| ''[[:d:Q26973563|Haf Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 11168
| ''[[:d:Q26985026|Aimee Moran]]''
|
|
|
|-
| style='text-align:right'| 11169
| ''[[:d:Q27036912|Cwyfan]]''
| [[Coadan:Eglwys Sant Cwyfan, Aberffraw, Ynys Môn - St Cwyfan's Church near Aberffraw, Anglesey, Wales 60.png|center|128px]]
|
|
|-
| style='text-align:right'| 11170
| ''[[:d:Q27048861|Josh Helps]]''
|
|
|
|-
| style='text-align:right'| 11171
| ''[[:d:Q27048869|Dafydd Hughes]]''
|
|
|
|-
| style='text-align:right'| 11172
| ''[[:d:Q27048999|Keelan Giles]]''
|
|
|
|-
| style='text-align:right'| 11173
| ''[[:d:Q27049185|Connor Farrer]]''
|
|
|
|-
| style='text-align:right'| 11174
| ''[[:d:Q27057756|Jonny Clayton]]''
| [[Coadan:2026-03-26 Premier League Darts – Night 8 – Berlin 2026 by Sandro Halank–028.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11175
| ''[[:d:Q27058417|Stephen Goss]]''
| [[Coadan:Stephen Goss.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11176
| ''[[:d:Q27067380|Hychan]]''
| [[Coadan:St Hychan's Church, Eglwys Llanychan, Rhuthun, Sir Ddinbych, Cymru, Wales 09.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11177
| ''[[:d:Q27068512|James Ball]]''
| [[Coadan:James Ball (2016).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11178
| ''[[:d:Q27070262|Greg Holmes]]''
|
|
|
|-
| style='text-align:right'| 11179
| ''[[:d:Q27074279|Gwyn Llewelyn]]''
| [[Coadan:Broadcaster, Gwyn Llywelyn (1522882).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11180
| ''[[:d:Q27140407|Siân Eirian Rees Davies]]''
|
|
|
|-
| style='text-align:right'| 11181
| ''[[:d:Q27140454|Siân Lewis]]''
|
|
|
|-
| style='text-align:right'| 11182
| ''[[:d:Q27206071|Sam Jones]]''
|
|
|
|-
| style='text-align:right'| 11183
| ''[[:d:Q27230339|Twm Elias]]''
| [[Coadan:Y Naturiaethwr Twm Elias yn Rhuthun Ebrill 2017 RO.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11184
| ''[[:d:Q27306153|Dave Richards]]''
| [[Coadan:Richards, Dave.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11185
| ''[[:d:Q27494205|Manon Lloyd]]''
| [[Coadan:Manon Lloyd - 2017 Tour Series (Motherwell, pre-race).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11186
| ''[[:d:Q27517561|Gruffydd Aled Williams]]''
|
|
|
|-
| style='text-align:right'| 11187
| ''[[:d:Q27567889|Steve Gully]]''
|
|
|
|-
| style='text-align:right'| 11188
| ''[[:d:Q27579892|John Cooper]]''
|
|
|
|-
| style='text-align:right'| 11189
| ''[[:d:Q27588652|Lisa Forey]]''
|
|
|
|-
| style='text-align:right'| 11190
| ''[[:d:Q27628129|Jackson Page]]''
|
|
|
|-
| style='text-align:right'| 11191
| ''[[:d:Q27636890|Marion Purcell]]''
|
|
|
|-
| style='text-align:right'| 11192
| ''[[:d:Q27655866|Caroline Taylor]]''
|
|
|
|-
| style='text-align:right'| 11193
| ''[[:d:Q27655874|Hannah Smith]]''
|
|
|
|-
| style='text-align:right'| 11194
| ''[[:d:Q27663652|Richard Lancaster]]''
|
|
|
|-
| style='text-align:right'| 11195
| ''[[:d:Q27666574|Ruth Martin-Jones]]''
|
|
|
|-
| style='text-align:right'| 11196
| ''[[:d:Q27671285|Howard Davies]]''
|
|
|
|-
| style='text-align:right'| 11197
| ''[[:d:Q27681006|Gwyn Hughes Jones]]''
| [[Coadan:Canu'r Cymru, album cover.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11198
| ''[[:d:Q27733807|Jed Davies]]''
|
|
|
|-
| style='text-align:right'| 11199
| ''[[:d:Q27734045|Finlay Wood]]''
|
|
|
|-
| style='text-align:right'| 11200
| ''[[:d:Q27793332|Jordan Hart]]''
|
|
|
|-
| style='text-align:right'| 11201
| ''[[:d:Q27824219|Richard Jarrett]]''
|
|
|
|-
| style='text-align:right'| 11202
| ''[[:d:Q27825230|Ben Whitehouse]]''
| [[Coadan:Ben Whitehouse 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11203
| ''[[:d:Q27827594|Henry Robins]]''
|
|
|
|-
| style='text-align:right'| 11204
| ''[[:d:Q27830996|Courtney Davies]]''
|
|
|
|-
| style='text-align:right'| 11205
| ''[[:d:Q27838011|Andrew Davies]]''
|
|
|
|-
| style='text-align:right'| 11206
| ''[[:d:Q27863975|Ed Thomas]]''
|
|
|
|-
| style='text-align:right'| 11207
| ''[[:d:Q27898910|Penelope Fillon]]''
| [[Coadan:Penelope Fillon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11208
| ''[[:d:Q27924032|Marchell]]''
| [[Coadan:Yr Eglwys Wen Dinbych St Marcella 06.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 11209
| ''[[:d:Q27924815|Edward Laverack]]''
| [[Coadan:Bellignies - Grand Prix des Marbriers, 25 août 2015 (A074).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 11210
| ''[[:d:Q27947670|Annemarie Lewis Thomas]]''
|
|
|
|-
| style='text-align:right'| 11211
| ''[[:d:Q27969093|Wendy Price]]''
|
|
|
|-
| style='text-align:right'| 11212
| ''[[:d:Q27981378|Jonny Duddle]]''
|
|
|
|-
| style='text-align:right'| 11213
| ''[[:d:Q27995602|Tori James]]''
| [[Coadan:Tori James with Rhodri Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11214
| ''[[:d:Q27998774|Izaak Duffy]]''
|
|
|
|-
| style='text-align:right'| 11215
| ''[[:d:Q28018188|Betty Morgan]]''
|
|
|
|-
| style='text-align:right'| 11216
| ''[[:d:Q28037263|Amanda James]]''
|
|
|
|-
| style='text-align:right'| 11217
| ''[[:d:Q28037345|Anne Adams]]''
|
|
|
|-
| style='text-align:right'| 11218
| ''[[:d:Q28039165|Michael Dear]]''
|
|
|
|-
| style='text-align:right'| 11219
| ''[[:d:Q28047804|Luke Price]]''
| [[Coadan:Luke Price 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11220
| ''[[:d:Q28059338|Jermaine Asare]]''
|
|
|
|-
| style='text-align:right'| 11221
| ''[[:d:Q28086082|Jason Shepherd]]''
| [[Coadan:Jason Shepherd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11222
| ''[[:d:Q28086085|Peter Anthony Freeman]]''
| [[Coadan:Peter Anthony Freeman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11223
| ''[[:d:Q28105546|John K. Davies]]''
|
|
|
|-
| style='text-align:right'| 11224
| ''[[:d:Q28124208|Chris Blake]]''
|
|
|
|-
| style='text-align:right'| 11225
| ''[[:d:Q28151696|Rhian Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11226
| ''[[:d:Q28151842|Mark Harris]]''
| [[Coadan:Sparky Harris.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11227
| ''[[:d:Q28180374|Russell P. Hughes]]''
|
|
|
|-
| style='text-align:right'| 11228
| ''[[:d:Q28312659|Ilan]]''
|
|
|
|-
| style='text-align:right'| 11229
| ''[[:d:Q28407622|Edla Spencer-Churchill, Duchess of Marlborough]]''
|
|
|
|-
| style='text-align:right'| 11230
| ''[[:d:Q28421887|Nick Kenny]]''
| [[Coadan:Nick Kenny 2024.png|center|128px]]
|
|
|-
| style='text-align:right'| 11231
| ''[[:d:Q28472304|Alfred Oliver]]''
|
|
|
|-
| style='text-align:right'| 11232
| ''[[:d:Q28474403|Billy McBryde]]''
|
|
|
|-
| style='text-align:right'| 11233
| ''[[:d:Q28510956|Richard Bowen]]''
|
|
|
|-
| style='text-align:right'| 11234
| ''[[:d:Q28533369|Lucie Jones]]''
| [[Coadan:Lucie Jones Red Carpet Kyiv 2017.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11235
| ''[[:d:Q28549773|Joe Hughes]]''
|
|
|
|-
| style='text-align:right'| 11236
| ''[[:d:Q28560642|Morgan Morgans]]''
|
|
|
|-
| style='text-align:right'| 11237
| ''[[:d:Q28600252|Wayne Curtis]]''
|
|
|
|-
| style='text-align:right'| 11238
| ''[[:d:Q28648730|Tegan Nox]]''
| [[Coadan:SHIMMER Volume 88 - Nixon Newell 01 (cropped2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11239
| ''[[:d:Q28710231|Dewi Humphreys]]''
|
|
|
|-
| style='text-align:right'| 11240
| ''[[:d:Q28736423|Joe Holt]]''
| [[Coadan:2016 2017 UCI Track World Cup Apeldoorn 234.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11241
| ''[[:d:Q28756399|Matthew Aubrey]]''
|
|
|
|-
| style='text-align:right'| 11242
| ''[[:d:Q28784496|Charley Edge]]''
|
|
|
|-
| style='text-align:right'| 11243
| ''[[:d:Q28853738|Ifan Phillips]]''
|
|
|
|-
| style='text-align:right'| 11244
| ''[[:d:Q28861574|Ryan Conbeer]]''
|
|
|
|-
| style='text-align:right'| 11245
| ''[[:d:Q28867970|Declan Smith]]''
|
|
|
|-
| style='text-align:right'| 11246
| ''[[:d:Q28870673|Jay Baker]]''
|
|
|
|-
| style='text-align:right'| 11247
| ''[[:d:Q28870726|Billy Reeves]]''
| [[Coadan:Leek Town v Workington, 12 April 2025 05.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11248
| ''[[:d:Q28873696|Peter Rawlinson]]''
| [[Coadan:Peter Rawlinson (46522523975).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11249
| ''[[:d:Q28911822|Jason Gummer]]''
|
|
|
|-
| style='text-align:right'| 11250
| ''[[:d:Q28935078|El Jones]]''
| [[Coadan:El Jones Halifax poet.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11251
| ''[[:d:Q28952252|Stefan Leyshon]]''
| [[Coadan:Stefan Leyshon portrait.png|center|128px]]
|
|
|-
| style='text-align:right'| 11252
| ''[[:d:Q28968013|Don Punch]]''
| [[Coadan:Don Punch at farm.png|center|128px]]
|
|
|-
| style='text-align:right'| 11253
| ''[[:d:Q28980561|Tony Day]]''
|
|
|
|-
| style='text-align:right'| 11254
| ''[[:d:Q29023727|Brychan Llŷr]]''
| [[Coadan:Brychan Llyr, Jess.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11255
| ''[[:d:Q29048134|Luke Pearce]]''
| [[Coadan:Luke Pearce Italy 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11256
| ''[[:d:Q29052058|Oliver Pike]]''
|
|
|
|-
| style='text-align:right'| 11257
| ''[[:d:Q29052057|Connor Brown]]''
|
|
|
|-
| style='text-align:right'| 11258
| ''[[:d:Q29530855|Julie Keeble]]''
|
|
|
|-
| style='text-align:right'| 11259
| ''[[:d:Q29545039|Michael J. Lewis]]''
|
|
|
|-
| style='text-align:right'| 11260
| ''[[:d:Q29625620|Rebecca Trehearn]]''
|
|
|
|-
| style='text-align:right'| 11261
| ''[[:d:Q29907467|Seb Davies]]''
|
|
|
|-
| style='text-align:right'| 11262
| ''[[:d:Q29907504|Rhun Williams]]''
|
|
|
|-
| style='text-align:right'| 11263
| ''[[:d:Q29919894|Stephen Williams]]''
| [[Coadan:Stephen Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11264
| ''[[:d:Q29952260|Brett Johns]]''
|
|
|
|-
| style='text-align:right'| 11265
| ''[[:d:Q29959653|Tom Wrigley]]''
|
|
|
|-
| style='text-align:right'| 11266
| ''[[:d:Q30005191|Sioned Harries]]''
|
|
|
|-
| style='text-align:right'| 11267
| ''[[:d:Q30052727|Rachel Taylor]]''
|
|
|
|-
| style='text-align:right'| 11268
| ''[[:d:Q30069347|Geoffrey M. Heal]]''
|
|
|
|-
| style='text-align:right'| 11269
| ''[[:d:Q30069829|Roger Moore]]''
|
|
|
|-
| style='text-align:right'| 11270
| ''[[:d:Q30118010|Rhodri Lovett]]''
|
|
|
|-
| style='text-align:right'| 11271
| ''[[:d:Q30121081|Morwyn Brebner]]''
|
|
|
|-
| style='text-align:right'| 11272
| ''[[:d:Q30122028|Rhys Thomas]]''
|
|
|
|-
| style='text-align:right'| 11273
| ''[[:d:Q30122062|Tom Davies]]''
|
|
|
|-
| style='text-align:right'| 11274
| ''[[:d:Q30122379|Leon Brown]]''
|
|
|
|-
| style='text-align:right'| 11275
| ''[[:d:Q30122913|Michael Lieber]]''
| [[Coadan:Michael Lieber.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11276
| ''[[:d:Q30157831|Gwyn Harries-Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11277
| ''[[:d:Q30164279|Anna McMorrin]]''
| [[Coadan:Official portrait of Anna McMorrin MP crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11278
| ''[[:d:Q30165536|Tonia Antoniazzi]]''
| [[Coadan:Official portrait of Tonia Antoniazzi crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11279
| ''[[:d:Q30172752|Ben Lake]]''
| [[Coadan:Official portrait of Ben Lake crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11280
| ''[[:d:Q30219424|Chris Mottershead]]''
|
|
|
|-
| style='text-align:right'| 11281
| ''[[:d:Q30303313|Martin Conway]]''
|
|
|
|-
| style='text-align:right'| 11282
| ''[[:d:Q30321004|Robert Childs]]''
|
|
|
|-
| style='text-align:right'| 11283
| ''[[:d:Q30323317|Scott Barley]]''
| [[Coadan:Scott Barley, 2015.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11284
| ''[[:d:Q30323462|Carl Hopgood]]''
|
|
|
|-
| style='text-align:right'| 11285
| ''[[:d:Q30502234|Jack Marshman]]''
| [[Coadan:Jack Marshman at UFC 230.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11286
| ''[[:d:Q31358720|Manon Antoniazzi]]''
| [[Coadan:Manon Williams Croeso Cymru.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11287
| ''[[:d:Q31358731|Mared Lenny]]''
|
|
|
|-
| style='text-align:right'| 11288
| ''[[:d:Q31358728|Ryan Kift]]''
|
|
|
|-
| style='text-align:right'| 11289
| ''[[:d:Q31358769|Myfyr Isaac]]''
|
|
|
|-
| style='text-align:right'| 11290
| ''[[:d:Q31358792|Wil Tân]]''
|
|
|
|-
| style='text-align:right'| 11291
| ''[[:d:Q31358808|Hefin Huws]]''
|
|
|
|-
| style='text-align:right'| 11292
| ''[[:d:Q31358836|Iestyn Jones]]''
|
|
|
|-
| style='text-align:right'| 11293
| ''[[:d:Q31359017|John Wayne Griffith]]''
|
|
|
|-
| style='text-align:right'| 11294
| ''[[:d:Q31359493|Arwel Lloyd Owen]]''
|
|
|
|-
| style='text-align:right'| 11295
| ''[[:d:Q31886221|Donald Roy]]''
|
|
|
|-
| style='text-align:right'| 11296
| ''[[:d:Q32308031|Hywel Davies]]''
|
|
|
|-
| style='text-align:right'| 11297
| ''[[:d:Q32859631|Nicholas Francis]]''
|
|
|
|-
| style='text-align:right'| 11298
| ''[[:d:Q33125100|Kelvyn Jones]]''
|
|
|
|-
| style='text-align:right'| 11299
| ''[[:d:Q33812797|Terry Cotton]]''
|
|
|
|-
| style='text-align:right'| 11300
| ''[[:d:Q33820175|Phil Holme]]''
|
|
|
|-
| style='text-align:right'| 11301
| ''[[:d:Q33824044|Alan McIntosh]]''
|
|
|
|-
| style='text-align:right'| 11302
| ''[[:d:Q34007837|Daniel Jervis]]''
|
|
|
|-
| style='text-align:right'| 11303
| ''[[:d:Q34980052|Keston Davies]]''
|
|
|
|-
| style='text-align:right'| 11304
| ''[[:d:Q35488635|David Annwn Jones]]''
| [[Coadan:David Annwn Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11305
| ''[[:d:Q35850145|Jay Foulston]]''
|
|
|
|-
| style='text-align:right'| 11306
| ''[[:d:Q36419796|P. G. Morgan]]''
| [[Coadan:PG Morgan.tif|center|128px]]
|
|
|-
| style='text-align:right'| 11307
| ''[[:d:Q36697214|Tom Rhys Harries]]''
|
|
|
|-
| style='text-align:right'| 11308
| ''[[:d:Q37269398|Jonathan Evans-Jones]]''
|
|
|
|-
| style='text-align:right'| 11309
| ''[[:d:Q37649676|Anita Thapar]]''
|
|
|
|-
| style='text-align:right'| 11310
| ''[[:d:Q37763071|Cameron Coxe]]''
| [[Coadan:Cameron Coxe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11311
| ''[[:d:Q37996916|Jon Worth]]''
| [[Coadan:Jon Worth.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11312
| ''[[:d:Q38094908|Andrew Brace]]''
| [[Coadan:Andrew Brace 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11313
| ''[[:d:Q38138534|Ashley Sweet]]''
|
|
|
|-
| style='text-align:right'| 11314
| ''[[:d:Q38138540|Ellis Shipp]]''
|
|
|
|-
| style='text-align:right'| 11315
| ''[[:d:Q38185495|Billy Sass-Davies]]''
| [[Coadan:BillySassDavies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11316
| ''[[:d:Q38190133|Corey Domachowski]]''
|
|
|
|-
| style='text-align:right'| 11317
| ''[[:d:Q38190147|Keiron Assiratti]]''
|
|
|
|-
| style='text-align:right'| 11318
| ''[[:d:Q38190446|Harri Millard]]''
|
|
|
|-
| style='text-align:right'| 11319
| ''[[:d:Q38190462|Shane Lewis-Hughes]]''
|
|
|
|-
| style='text-align:right'| 11320
| ''[[:d:Q38383577|Reuben Morgan-Williams]]''
|
|
|
|-
| style='text-align:right'| 11321
| ''[[:d:Q39074703|John Rawlins]]''
|
|
|
|-
| style='text-align:right'| 11322
| ''[[:d:Q39074894|Robert Owen]]''
| [[Coadan:Robert Owen.png|center|128px]]
|
|
|-
| style='text-align:right'| 11323
| ''[[:d:Q39078916|Peter Davies]]''
|
|
|
|-
| style='text-align:right'| 11324
| ''[[:d:Q39078938|Sam Jones]]''
|
|
|
|-
| style='text-align:right'| 11325
| ''[[:d:Q39257430|Rollin Menayese]]''
|
|
|
|-
| style='text-align:right'| 11326
| ''[[:d:Q39299873|Kurt Parry]]''
|
|
|
|-
| style='text-align:right'| 11327
| ''[[:d:Q39388876|Дориан Дарч]]''
|
|
|
|-
| style='text-align:right'| 11328
| ''[[:d:Q39640868|Betsy]]''
|
|
|
|-
| style='text-align:right'| 11329
| ''[[:d:Q40265813|Elizabeth Vaughan]]''
|
|
|
|-
| style='text-align:right'| 11330
| ''[[:d:Q40745599|Mags Harries]]''
|
|
|
|-
| style='text-align:right'| 11331
| ''[[:d:Q40766069|Freddie Hill]]''
|
|
|
|-
| style='text-align:right'| 11332
| ''[[:d:Q41234642|Helen Molyneux]]''
|
|
|
|-
| style='text-align:right'| 11333
| ''[[:d:Q41247240|Hannah Grace]]''
|
|
|
|-
| style='text-align:right'| 11334
| [[Owen Evans (bluckaneyr Bretnagh)|Owen Evans]]
|
|
|
|-
| style='text-align:right'| 11335
| ''[[:d:Q41446728|Megan Jones]]''
| [[Coadan:Megan Jones POTM 2021 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11336
| ''[[:d:Q41530142|Robson Blake]]''
|
|
|
|-
| style='text-align:right'| 11337
| ''[[:d:Q41693923|Siwan Davies]]''
| [[Coadan:Siwan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11338
| ''[[:d:Q41693935|Deirdre Beddoe]]''
|
|
|
|-
| style='text-align:right'| 11339
| ''[[:d:Q41787459|Derek Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11340
| ''[[:d:Q41949778|Jackie E. Kendrick]]''
|
|
|
|-
| style='text-align:right'| 11341
| ''[[:d:Q42211621|Cerith Flinn]]''
|
|
|
|-
| style='text-align:right'| 11342
| ''[[:d:Q42291096|Michael J. Ingleson]]''
|
|
|
|-
| style='text-align:right'| 11343
| ''[[:d:Q42313714|Tegau Eurfron]]''
|
|
|
|-
| style='text-align:right'| 11344
| ''[[:d:Q42314072|Laura O'Sullivan]]''
| [[Coadan:Laura O'Sullivan (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11345
| ''[[:d:Q42375487|Paul Meek]]''
|
|
|
|-
| style='text-align:right'| 11346
| ''[[:d:Q42431221|Amy Dowden]]''
| [[Coadan:Amy Dowden - 2023 (52720307368) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11347
| ''[[:d:Q42520174|Dylan Roberts]]''
| [[Coadan:Dilanroberts (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11348
| ''[[:d:Q42583341|Hannah Miles]]''
|
|
|
|-
| style='text-align:right'| 11349
| ''[[:d:Q42845798|Evan Press]]''
|
|
|
|-
| style='text-align:right'| 11350
| ''[[:d:Q42846969|Jane Dodds]]''
| [[Coadan:Jane Dodds official photo 2026.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11351
| ''[[:d:Q42852267|Wayne Hughes]]''
|
|
|
|-
| style='text-align:right'| 11352
| ''[[:d:Q42886882|Owen Taylor]]''
|
|
|
|-
| style='text-align:right'| 11353
| ''[[:d:Q42889463|Lewis Collins]]''
|
|
|
|-
| style='text-align:right'| 11354
| ''[[:d:Q43151279|Ceri Phillips]]''
|
|
|
|-
| style='text-align:right'| 11355
| ''[[:d:Q43170848|David Walsh]]''
|
|
|
|-
| style='text-align:right'| 11356
| ''[[:d:Q43178378|Taylor Davies]]''
|
|
|
|-
| style='text-align:right'| 11357
| ''[[:d:Q43178639|Rhys Fawcett]]''
|
|
|
|-
| style='text-align:right'| 11358
| ''[[:d:Q43260423|Ben Jones]]''
|
|
|
|-
| style='text-align:right'| 11359
| ''[[:d:Q43289293|David J. Tozer]]''
|
|
|
|-
| style='text-align:right'| 11360
| ''[[:d:Q43374061|Jethro Binns]]''
|
|
|
|-
| style='text-align:right'| 11361
| ''[[:d:Q43380801|Toni Evans]]''
|
|
|
|-
| style='text-align:right'| 11362
| ''[[:d:Q43472159|Nicki McNelly]]''
|
|
|
|-
| style='text-align:right'| 11363
| ''[[:d:Q43847981|Owen Lane]]''
|
|
|
|-
| style='text-align:right'| 11364
| ''[[:d:Q44070372|Morgan Williams]]''
|
|
|
|-
| style='text-align:right'| 11365
| ''[[:d:Q44481398|Rowan Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11366
| ''[[:d:Q44490509|Catherine Smaill]]''
|
|
|
|-
| style='text-align:right'| 11367
| ''[[:d:Q44711039|Dane Blacker]]''
|
|
|
|-
| style='text-align:right'| 11368
| ''[[:d:Q44742025|Joe Thomas]]''
|
|
|
|-
| style='text-align:right'| 11369
| ''[[:d:Q44742037|Will Jones]]''
|
|
|
|-
| style='text-align:right'| 11370
| ''[[:d:Q44963860|Nathan Broadhead]]''
| [[Coadan:Nathan Broadhead (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11371
| ''[[:d:Q45189110|Shaun Evans]]''
| [[Coadan:Shaun Evans 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11372
| ''[[:d:Q45298761|Nicholas Tee]]''
|
|
|
|-
| style='text-align:right'| 11373
| ''[[:d:Q45319455|Ashley Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11374
| ''[[:d:Q45776704|Ray Giles]]''
|
|
|
|-
| style='text-align:right'| 11375
| ''[[:d:Q45985290|Colin Lake]]''
|
|
|
|-
| style='text-align:right'| 11376
| ''[[:d:Q46271067|David P Mills]]''
| [[Coadan:David Paul Mills.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11377
| ''[[:d:Q46586061|Steve Sutton]]''
|
|
|
|-
| style='text-align:right'| 11378
| ''[[:d:Q47035203|Nikara Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11379
| ''[[:d:Q47073063|Megan Chard]]''
|
|
|
|-
| style='text-align:right'| 11380
| ''[[:d:Q47120611|Ion Thomas]]''
|
|
|
|-
| style='text-align:right'| 11381
| ''[[:d:Q47120737|Cathryn Charnell-White]]''
|
|
|
|-
| style='text-align:right'| 11382
| ''[[:d:Q47120836|Meilyr Siôn]]''
|
|
|
|-
| style='text-align:right'| 11383
| ''[[:d:Q47120923|Mared Llwyd]]''
|
|
|
|-
| style='text-align:right'| 11384
| ''[[:d:Q47121102|Mari Gwilym]]''
|
|
|
|-
| style='text-align:right'| 11385
| ''[[:d:Q47121493|Ruth Morgan]]''
|
|
|
|-
| style='text-align:right'| 11386
| ''[[:d:Q47121781|Mari George]]''
|
|
|
|-
| style='text-align:right'| 11387
| ''[[:d:Q47121825|Gwen Redvers Jones]]''
|
|
|
|-
| style='text-align:right'| 11388
| ''[[:d:Q47122031|Emlyn Richards]]''
|
|
|
|-
| style='text-align:right'| 11389
| ''[[:d:Q47122142|Derfel Williams]]''
|
|
|
|-
| style='text-align:right'| 11390
| ''[[:d:Q47122487|Gruff Roberts]]''
|
|
|
|-
| style='text-align:right'| 11391
| ''[[:d:Q47123290|Eirian Jones]]''
|
|
|
|-
| style='text-align:right'| 11392
| ''[[:d:Q47123511|Morgan Tomos]]''
|
|
|
|-
| style='text-align:right'| 11393
| ''[[:d:Q47123629|Robin Gwyndaf]]''
|
|
|
|-
| style='text-align:right'| 11394
| ''[[:d:Q47123796|Bedwyr Rees]]''
|
|
|
|-
| style='text-align:right'| 11395
| ''[[:d:Q47124178|Dulais Rhys]]''
|
|
|
|-
| style='text-align:right'| 11396
| ''[[:d:Q47124189|Martyn Geraint]]''
|
|
|
|-
| style='text-align:right'| 11397
| ''[[:d:Q47124323|Adrian Reynolds]]''
|
|
|
|-
| style='text-align:right'| 11398
| ''[[:d:Q47124529|Arwel Vittle]]''
|
|
|
|-
| style='text-align:right'| 11399
| ''[[:d:Q47124631|Arfon Haines Davies]]''
|
|
|
|-
| style='text-align:right'| 11400
| ''[[:d:Q47124993|Margiad Roberts]]''
|
|
|
|-
| style='text-align:right'| 11401
| ''[[:d:Q47125185|Eurgain Haf]]''
|
|
|
|-
| style='text-align:right'| 11402
| ''[[:d:Q47125531|Cris Dafis]]''
|
|
|
|-
| style='text-align:right'| 11403
| ''[[:d:Q47125698|Sioned Lleinau]]''
|
|
|
|-
| style='text-align:right'| 11404
| ''[[:d:Q47125789|Marlis Jones]]''
|
|
|
|-
| style='text-align:right'| 11405
| ''[[:d:Q47125847|Heather Williams]]''
| [[Coadan:Heather M Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11406
| ''[[:d:Q47126006|Ceridwen Lloyd-Morgan]]''
|
|
|
|-
| style='text-align:right'| 11407
| ''[[:d:Q47126099|Mari Emlyn]]''
|
|
|
|-
| style='text-align:right'| 11408
| ''[[:d:Q47126113|Geoffrey R. Orrin]]''
|
|
|
|-
| style='text-align:right'| 11409
| ''[[:d:Q47126182|Gwilym H. Jones]]''
|
|
|
|-
| style='text-align:right'| 11410
| ''[[:d:Q47126264|Llion Jones]]''
|
|
|
|-
| style='text-align:right'| 11411
| ''[[:d:Q47126436|William R. Lewis]]''
|
|
|
|-
| style='text-align:right'| 11412
| ''[[:d:Q47126701|Heini Gruffudd]]''
|
|
|
|-
| style='text-align:right'| 11413
| ''[[:d:Q47126713|Euron Griffith]]''
|
|
|
|-
| style='text-align:right'| 11414
| ''[[:d:Q47126724|Huw Meirion Edwards]]''
|
|
|
|-
| style='text-align:right'| 11415
| ''[[:d:Q47126897|Pegi Lloyd-Williams]]''
|
|
|
|-
| style='text-align:right'| 11416
| ''[[:d:Q47126908|Robert Rhys]]''
|
|
|
|-
| style='text-align:right'| 11417
| ''[[:d:Q47126926|Iestyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 11418
| ''[[:d:Q47126982|John Alwyn Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11419
| ''[[:d:Q47127009|Paul Joyner]]''
|
|
|
|-
| style='text-align:right'| 11420
| ''[[:d:Q47127065|Erwyd Howells]]''
|
|
|
|-
| style='text-align:right'| 11421
| ''[[:d:Q47127360|E. Wyn James]]''
|
|
|
|-
| style='text-align:right'| 11422
| ''[[:d:Q47127557|Mair Roberts]]''
|
|
|
|-
| style='text-align:right'| 11423
| ''[[:d:Q47127623|Mair Evans]]''
|
|
|
|-
| style='text-align:right'| 11424
| ''[[:d:Q47127951|Martin Huws]]''
|
|
|
|-
| style='text-align:right'| 11425
| ''[[:d:Q47128057|Marlyn Samuel]]''
|
|
|
|-
| style='text-align:right'| 11426
| ''[[:d:Q47128294|Sêra Moore-Williams]]''
|
|
|
|-
| style='text-align:right'| 11427
| ''[[:d:Q47128461|Gareth Ffowc Roberts]]''
|
|
|
|-
| style='text-align:right'| 11428
| ''[[:d:Q47128519|Daniel Davies]]''
|
|
|
|-
| style='text-align:right'| 11429
| ''[[:d:Q47128679|Walford L. Gealy]]''
|
|
|
|-
| style='text-align:right'| 11430
| ''[[:d:Q47129834|Dylan Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 11431
| ''[[:d:Q47129889|John Barnie]]''
|
|
|
|-
| style='text-align:right'| 11432
| ''[[:d:Q47130219|Janet Aethwy]]''
|
|
|
|-
| style='text-align:right'| 11433
| ''[[:d:Q47130226|Mari Rhian Owen]]''
|
|
|
|-
| style='text-align:right'| 11434
| ''[[:d:Q47130527|R. Arwel Jones]]''
|
|
|
|-
| style='text-align:right'| 11435
| ''[[:d:Q47228357|Jon Norris]]''
|
|
|
|-
| style='text-align:right'| 11436
| ''[[:d:Q47263904|Connor Lemonheigh-Evans]]''
| [[Coadan:Evans-01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11437
| ''[[:d:Q47436459|Zak Lee-Green]]''
|
|
|
|-
| style='text-align:right'| 11438
| ''[[:d:Q47453910|Kacie Oliver]]''
|
|
|
|-
| style='text-align:right'| 11439
| ''[[:d:Q47460430|Nathan Foy]]''
|
|
|
|-
| style='text-align:right'| 11440
| ''[[:d:Q47467184|Kate McNicol]]''
|
|
|
|-
| style='text-align:right'| 11441
| ''[[:d:Q47476891|Richie Edwards]]''
|
|
|
|-
| style='text-align:right'| 11442
| ''[[:d:Q47476950|Chris Harris]]''
|
|
|
|-
| style='text-align:right'| 11443
| ''[[:d:Q47477003|Bob Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11444
| ''[[:d:Q47482445|Michael Harris]]''
|
|
|
|-
| style='text-align:right'| 11445
| ''[[:d:Q47490670|Ross Owen]]''
|
|
|
|-
| style='text-align:right'| 11446
| ''[[:d:Q47490703|Aaron Wainwright]]''
| [[Coadan:Aaron Wainwright 20250419 173900.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11447
| ''[[:d:Q47490719|Jared Rosser]]''
|
|
|
|-
| style='text-align:right'| 11448
| ''[[:d:Q47490721|Arwel Robson]]''
|
|
|
|-
| style='text-align:right'| 11449
| ''[[:d:Q47490745|Anna Hursey]]''
|
|
|
|-
| style='text-align:right'| 11450
| ''[[:d:Q47492896|Doug Perkins]]''
|
|
|
|-
| style='text-align:right'| 11451
| ''[[:d:Q47517355|Rhys Britton]]''
| [[Coadan:Saint-Amand-les-Eaux - Paris-Roubaix juniors, 9 avril 2017, départ (A38).JPG|center|128px]]
|
|
|-
| style='text-align:right'| 11452
| ''[[:d:Q47542010|Jason Evans]]''
|
|
|
|-
| style='text-align:right'| 11453
| ''[[:d:Q47542123|Frances Mackenzie, Countess of Seaforth]]''
|
|
|
|-
| style='text-align:right'| 11454
| ''[[:d:Q47542236|Nicola Tustain]]''
|
|
|
|-
| style='text-align:right'| 11455
| ''[[:d:Q47656094|Alan Phillips]]''
|
|
|
|-
| style='text-align:right'| 11456
| ''[[:d:Q47658470|Joe Rodon]]''
| [[Coadan:Wales-Switzerland match at Euro 2020 in Baku 5 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11457
| ''[[:d:Q47671584|Ben Hingeley]]''
|
|
|
|-
| style='text-align:right'| 11458
| ''[[:d:Q47995095|Jack Sargeant]]''
| [[Coadan:Jack Sargeant AM (40900021582).png|center|128px]]
|
|
|-
| style='text-align:right'| 11459
| ''[[:d:Q48468627|John Phillips]]''
| [[Coadan:John Phillips at UFC Fight Night 160 in Copenhagen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11460
| ''[[:d:Q48778144|John Welch]]''
|
|
|
|-
| style='text-align:right'| 11461
| ''[[:d:Q48801730|Julian Atterton]]''
|
|
|
|-
| style='text-align:right'| 11462
| ''[[:d:Q48805514|Alexia Pnevmatikos]]''
|
|
|
|-
| style='text-align:right'| 11463
| ''[[:d:Q48816698|Rose Thomas]]''
|
|
|
|-
| style='text-align:right'| 11464
| ''[[:d:Q48816696|Sarah Jones]]''
|
|
|
|-
| style='text-align:right'| 11465
| ''[[:d:Q48844024|Janusz Hryniewicz]]''
|
|
|
|-
| style='text-align:right'| 11466
| ''[[:d:Q48868869|Danny Hughes]]''
|
|
|
|-
| style='text-align:right'| 11467
| ''[[:d:Q48868982|Sarah Connolly]]''
|
|
|
|-
| style='text-align:right'| 11468
| ''[[:d:Q48977772|Dewi Cross]]''
|
|
|
|-
| style='text-align:right'| 11469
| ''[[:d:Q50078331|Elise Hughes]]''
| [[Coadan:Elise Hughes Blackburn (50452093546) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11470
| ''[[:d:Q50173768|Chris Goss]]''
|
|
|
|-
| style='text-align:right'| 11471
| ''[[:d:Q50179243|Rob Sutherland]]''
|
|
|
|-
| style='text-align:right'| 11472
| ''[[:d:Q50217554|Sean Wharton]]''
|
|
|
|-
| style='text-align:right'| 11473
| ''[[:d:Q50296393|Neil Salathiel]]''
|
|
|
|-
| style='text-align:right'| 11474
| ''[[:d:Q50326432|Francesca Rhydderch]]''
| [[Coadan:Francesca Rhydderch large.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11475
| ''[[:d:Q50332139|Lexi Lowe]]''
| [[Coadan:Lexi Lowe - AVN Expo & AVN Awards (8394303962).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11476
| ''[[:d:Q50345115|Aled Miles]]''
|
|
|
|-
| style='text-align:right'| 11477
| ''[[:d:Q50345381|Paul Whitfield]]''
|
|
|
|-
| style='text-align:right'| 11478
| ''[[:d:Q50365542|Sam Moore]]''
|
|
|
|-
| style='text-align:right'| 11479
| ''[[:d:Q50379493|Chelsea Lewis]]''
|
|
|
|-
| style='text-align:right'| 11480
| ''[[:d:Q50404210|Geraldine Norman]]''
|
|
|
|-
| style='text-align:right'| 11481
| ''[[:d:Q50413334|Banita Sandhu]]''
| [[Coadan:Banita Sandhu graces the special screening of October (01).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11482
| ''[[:d:Q50676480|Hayley Parsons]]''
|
|
|
|-
| style='text-align:right'| 11483
| ''[[:d:Q50900421|Emyr Evans]]''
|
|
|
|-
| style='text-align:right'| 11484
| ''[[:d:Q50947577|Ifan G Hughes]]''
|
|
|
|-
| style='text-align:right'| 11485
| ''[[:d:Q51214742|Sam Pearce]]''
|
|
|
|-
| style='text-align:right'| 11486
| ''[[:d:Q51220615|Islwyn Jones]]''
|
|
|
|-
| style='text-align:right'| 11487
| ''[[:d:Q51260242|Alan Couch]]''
|
|
|
|-
| style='text-align:right'| 11488
| ''[[:d:Q51287556|Dino Fetscher]]''
|
|
|
|-
| style='text-align:right'| 11489
| ''[[:d:Q51364729|Sam Fenwick]]''
|
|
|
|-
| style='text-align:right'| 11490
| ''[[:d:Q51573468|Morgan Morris]]''
|
|
|
|-
| style='text-align:right'| 11491
| ''[[:d:Q51611000|Roger A. Falconer]]''
| [[Coadan:RAF India 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11492
| ''[[:d:Q51645970|Bethan Davies]]''
|
|
|
|-
| style='text-align:right'| 11493
| ''[[:d:Q51754219|Liam Hutchinson]]''
|
|
|
|-
| style='text-align:right'| 11494
| ''[[:d:Q51759514|Bill Sweet]]''
|
|
|
|-
| style='text-align:right'| 11495
| ''[[:d:Q51876187|Gemma Evans]]''
| [[Coadan:20241006-Gemma Evans (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11496
| ''[[:d:Q51879759|Graham Sweet]]''
|
|
|
|-
| style='text-align:right'| 11497
| ''[[:d:Q51879898|Jackie Price]]''
|
|
|
|-
| style='text-align:right'| 11498
| ''[[:d:Q51879916|Christopher Frank]]''
|
|
|
|-
| style='text-align:right'| 11499
| ''[[:d:Q51905701|Owen James]]''
|
|
|
|-
| style='text-align:right'| 11500
| ''[[:d:Q51908481|Saint Bilo]]''
|
|
|
|-
| style='text-align:right'| 11501
| ''[[:d:Q51954783|Keneython]]''
|
|
|
|-
| style='text-align:right'| 11502
| ''[[:d:Q51996869|Danielle Lewis]]''
|
|
|
|-
| style='text-align:right'| 11503
| ''[[:d:Q52002304|Dilig]]''
|
|
|
|-
| style='text-align:right'| 11504
| ''[[:d:Q52061534|Eurfyl ach Padarn]]''
|
|
|
|-
| style='text-align:right'| 11505
| ''[[:d:Q52079677|Nathan Wigg]]''
|
|
|
|-
| style='text-align:right'| 11506
| ''[[:d:Q52083916|Eurgain ach Maelgwn Gwynedd]]''
|
|
|
|-
| style='text-align:right'| 11507
| ''[[:d:Q52084553|Kieran Williams]]''
|
|
|
|-
| style='text-align:right'| 11508
| ''[[:d:Q52084831|James Ratti]]''
|
|
|
|-
| style='text-align:right'| 11509
| ''[[:d:Q52084834|Dewi Lake]]''
| [[Coadan:2025 Autumn Nations Series Wales vs New Zealand 20251122 162336 Dewi Lake.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11510
| ''[[:d:Q52084835|Tiaan Thomas-Wheeler]]''
|
|
|
|-
| style='text-align:right'| 11511
| ''[[:d:Q52107245|Judith Ablett-Kerr]]''
| [[Coadan:Judith Ablett-Kerr (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11512
| ''[[:d:Q52120536|Gwenhaf]]''
|
|
|
|-
| style='text-align:right'| 11513
| ''[[:d:Q52157525|Gwenonwy ach Meurig]]''
|
|
|
|-
| style='text-align:right'| 11514
| ''[[:d:Q52470702|Dafydd Tomos]]''
|
|
|
|-
| style='text-align:right'| 11515
| ''[[:d:Q52557168|Llŷr Forwen]]''
|
|
|
|-
| style='text-align:right'| 11516
| ''[[:d:Q52716006|Tudor Evans]]''
|
|
|
|-
| style='text-align:right'| 11517
| ''[[:d:Q52722880|Amy Evans]]''
|
|
|
|-
| style='text-align:right'| 11518
| ''[[:d:Q52724507|Ash Baker]]''
|
|
|
|-
| style='text-align:right'| 11519
| ''[[:d:Q52823870|Daniel Jefferies]]''
|
|
|
|-
| style='text-align:right'| 11520
| ''[[:d:Q53086736|Kelvin Thomas]]''
|
|
|
|-
| style='text-align:right'| 11521
| ''[[:d:Q53191106|Meleri]]''
|
|
|
|-
| style='text-align:right'| 11522
| ''[[:d:Q53570396|Nefyn ach Brychan]]''
|
|
|
|-
| style='text-align:right'| 11523
| ''[[:d:Q53573757|Nwyalen ach Selyf]]''
|
|
|
|-
| style='text-align:right'| 11524
| ''[[:d:Q53718889|Tangwystl ach Brychan]]''
|
|
|
|-
| style='text-align:right'| 11525
| ''[[:d:Q54087307|Alfred Ross Pring]]''
|
|
|
|-
| style='text-align:right'| 11526
| ''[[:d:Q54556080|Kishan Hirani]]''
| [[Coadan:Kishan Hirani PHC 2014-1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11527
| ''[[:d:Q54591108|Noel James]]''
| [[Coadan:Noelcrymych.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11528
| ''[[:d:Q54594287|Marcus Piggott]]''
|
|
|
|-
| style='text-align:right'| 11529
| ''[[:d:Q54598807|Philip Welch]]''
|
|
|
|-
| style='text-align:right'| 11530
| ''[[:d:Q54861310|Taine Basham]]''
|
|
|
|-
| style='text-align:right'| 11531
| ''[[:d:Q54861308|Dan Babos]]''
|
|
|
|-
| style='text-align:right'| 11532
| ''[[:d:Q55006228|Kelly Lee Owens]]''
| [[Coadan:The History of Apple Pie - Kelly Lee Owens (2013).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11533
| ''[[:d:Q55069173|Dianne Rees]]''
|
|
|
|-
| style='text-align:right'| 11534
| ''[[:d:Q55080950|Joel Bennett Ringer]]''
|
|
|
|-
| style='text-align:right'| 11535
| ''[[:d:Q55114646|Prem Sisodiya]]''
|
|
|
|-
| style='text-align:right'| 11536
| ''[[:d:Q55235984|Jessica Warboys]]''
|
|
|
|-
| style='text-align:right'| 11537
| ''[[:d:Q55314922|Caryl Thomas]]''
|
|
|
|-
| style='text-align:right'| 11538
| ''[[:d:Q55363791|Paul Roberts]]''
|
|
|
|-
| style='text-align:right'| 11539
| ''[[:d:Q55364071|Jessica Roberts]]''
| [[Coadan:2024 UEC Track Elite European Championships 082.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11540
| ''[[:d:Q55369925|Chris Sander]]''
|
|
|
|-
| style='text-align:right'| 11541
| ''[[:d:Q55375359|Frank Jones]]''
|
|
|
|-
| style='text-align:right'| 11542
| ''[[:d:Q55391506|Curtis Dodge]]''
|
|
|
|-
| style='text-align:right'| 11543
| ''[[:d:Q55413128|Gwyn Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 11544
| ''[[:d:Q55462126|Andrew Walton]]''
| [[Coadan:WelshWhisperer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11545
| ''[[:d:Q55584143|Kieran Hardy]]''
|
|
|
|-
| style='text-align:right'| 11546
| ''[[:d:Q55584141|Jason Harries]]''
| [[Coadan:Jason Harries 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11547
| ''[[:d:Q55584550|Rio Dyer]]''
| [[Coadan:Rio Dyer 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11548
| ''[[:d:Q55584573|Lennon Greggains]]''
|
|
|
|-
| style='text-align:right'| 11549
| ''[[:d:Q55584576|Connor Edwards]]''
|
|
|
|-
| style='text-align:right'| 11550
| ''[[:d:Q55584580|Joe Goodchild]]''
|
|
|
|-
| style='text-align:right'| 11551
| ''[[:d:Q55605198|Ben Murphy]]''
|
|
|
|-
| style='text-align:right'| 11552
| ''[[:d:Q55607561|Christian Coleman]]''
|
|
|
|-
| style='text-align:right'| 11553
| ''[[:d:Q55615146|John Cockrill]]''
|
|
|
|-
| style='text-align:right'| 11554
| ''[[:d:Q55631619|Rhodri Davies]]''
|
|
|
|-
| style='text-align:right'| 11555
| ''[[:d:Q55632115|Russell Lewis]]''
|
|
|
|-
| style='text-align:right'| 11556
| ''[[:d:Q55652337|Gwrgon]]''
|
|
|
|-
| style='text-align:right'| 11557
| ''[[:d:Q55652826|Ceindrych]]''
|
|
|
|-
| style='text-align:right'| 11558
| ''[[:d:Q55720569|Sue Roderick]]''
|
|
|
|-
| style='text-align:right'| 11559
| ''[[:d:Q55759986|Morgan Webster]]''
|
|
|
|-
| style='text-align:right'| 11560
| ''[[:d:Q55760861|Sophie Mackintosh]]''
|
|
|
|-
| style='text-align:right'| 11561
| ''[[:d:Q55824347|W. Ray Stephens]]''
|
|
|
|-
| style='text-align:right'| 11562
| ''[[:d:Q55844555|Latalia Bevan]]''
|
|
|
|-
| style='text-align:right'| 11563
| ''[[:d:Q55938193|Peter Read]]''
|
|
|
|-
| style='text-align:right'| 11564
| ''[[:d:Q56009287|Meinir Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11565
| ''[[:d:Q56051667|Rhodri ap Dyfrig]]''
| [[Coadan:Rhodri ap Dyfrig (Nwdls, S4C) yn Eisteddfod Genedlaethol Caerdydd 2018 - at the National Eisteddfod, Cardiff 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11566
| ''[[:d:Q56062566|Abbie Trayler-Smith]]''
|
|
|
|-
| style='text-align:right'| 11567
| ''[[:d:Q56118747|Ann Rosalie David]]''
|
|
|
|-
| style='text-align:right'| 11568
| ''[[:d:Q56174090|Derek Baskerville]]''
|
|
|
|-
| style='text-align:right'| 11569
| ''[[:d:Q56174216|Mary Bettiss]]''
|
|
|
|-
| style='text-align:right'| 11570
| ''[[:d:Q56174390|Evan Bowen]]''
|
|
|
|-
| style='text-align:right'| 11571
| ''[[:d:Q56174596|Robert Bulkeley]]''
|
|
|
|-
| style='text-align:right'| 11572
| ''[[:d:Q56175740|Don Dale-Jones]]''
|
|
|
|-
| style='text-align:right'| 11573
| ''[[:d:Q56175882|David Davies]]''
|
|
|
|-
| style='text-align:right'| 11574
| ''[[:d:Q56175946|Gladys Davies]]''
|
|
|
|-
| style='text-align:right'| 11575
| ''[[:d:Q56176003|John Richard Davies]]''
|
|
|
|-
| style='text-align:right'| 11576
| ''[[:d:Q56176053|Price Davies]]''
|
|
|
|-
| style='text-align:right'| 11577
| ''[[:d:Q56176500|Elizabeth Ann Davies]]''
|
|
|
|-
| style='text-align:right'| 11578
| ''[[:d:Q56176529|Llewelyn Edwards]]''
|
|
|
|-
| style='text-align:right'| 11579
| ''[[:d:Q56176718|Robert Ellis]]''
|
|
|
|-
| style='text-align:right'| 11580
| ''[[:d:Q56176777|Elizabeth Enoch]]''
|
|
|
|-
| style='text-align:right'| 11581
| ''[[:d:Q56176912|Dic Evans]]''
|
|
|
|-
| style='text-align:right'| 11582
| ''[[:d:Q56177842|Robert John Griffith]]''
|
|
|
|-
| style='text-align:right'| 11583
| ''[[:d:Q56178156|Elliw Haf]]''
|
|
|
|-
| style='text-align:right'| 11584
| ''[[:d:Q56178193|Frederick Edward Hamer]]''
|
|
|
|-
| style='text-align:right'| 11585
| ''[[:d:Q56178627|Douglas Houston]]''
|
|
|
|-
| style='text-align:right'| 11586
| ''[[:d:Q56178688|David Howell]]''
|
|
|
|-
| style='text-align:right'| 11587
| ''[[:d:Q56178692|Edward Howell]]''
|
|
|
|-
| style='text-align:right'| 11588
| ''[[:d:Q56178698|Lewis Howell]]''
|
|
|
|-
| style='text-align:right'| 11589
| ''[[:d:Q56178696|Evan Howell]]''
|
|
|
|-
| style='text-align:right'| 11590
| ''[[:d:Q56178703|Samuel Howell]]''
|
|
|
|-
| style='text-align:right'| 11591
| ''[[:d:Q56178756|Ann Jones]]''
|
|
|
|-
| style='text-align:right'| 11592
| ''[[:d:Q56178842|Thomas Hughes]]''
|
|
|
|-
| style='text-align:right'| 11593
| ''[[:d:Q56178925|Glyn Ifans]]''
|
|
|
|-
| style='text-align:right'| 11594
| ''[[:d:Q56179243|W. Jones Williams]]''
|
|
|
|-
| style='text-align:right'| 11595
| ''[[:d:Q56179374|Brynmor Pierce Jones]]''
|
|
|
|-
| style='text-align:right'| 11596
| ''[[:d:Q56179448|Dedwydd Jones]]''
|
|
|
|-
| style='text-align:right'| 11597
| ''[[:d:Q56179475|Elinor Jones]]''
|
|
|
|-
| style='text-align:right'| 11598
| ''[[:d:Q56179492|Evan W. Jones]]''
|
|
|
|-
| style='text-align:right'| 11599
| ''[[:d:Q56179743|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 11600
| ''[[:d:Q56179740|Richard Jones]]''
|
|
|
|-
| style='text-align:right'| 11601
| ''[[:d:Q56179787|Thomas Zaccheus Jones]]''
|
|
|
|-
| style='text-align:right'| 11602
| ''[[:d:Q56179800|Thomas Jones]]''
|
|
|
|-
| style='text-align:right'| 11603
| ''[[:d:Q56179862|William Jones]]''
|
|
|
|-
| style='text-align:right'| 11604
| ''[[:d:Q56180075|Henry Leach]]''
|
|
|
|-
| style='text-align:right'| 11605
| ''[[:d:Q56180094|Godfrey Lee]]''
|
|
|
|-
| style='text-align:right'| 11606
| ''[[:d:Q56180262|Rees Lewis]]''
|
|
|
|-
| style='text-align:right'| 11607
| ''[[:d:Q56180667|Posthumus Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11608
| ''[[:d:Q56181414|Kevin Morgan]]''
|
|
|
|-
| style='text-align:right'| 11609
| ''[[:d:Q56181426|Rhian Morgan]]''
|
|
|
|-
| style='text-align:right'| 11610
| ''[[:d:Q56181432|Thomas Morgan]]''
|
|
|
|-
| style='text-align:right'| 11611
| ''[[:d:Q56182025|John Caleb Owen]]''
|
|
|
|-
| style='text-align:right'| 11612
| ''[[:d:Q56182632|Victoria Plucknett]]''
|
|
|
|-
| style='text-align:right'| 11613
| ''[[:d:Q56182984|Emrys Pride]]''
|
|
|
|-
| style='text-align:right'| 11614
| ''[[:d:Q56183197|Mary Louisa Williams]]''
|
|
|
|-
| style='text-align:right'| 11615
| ''[[:d:Q56183252|Ivor Thomas Rees]]''
|
|
|
|-
| style='text-align:right'| 11616
| ''[[:d:Q56183482|David Richards]]''
|
|
|
|-
| style='text-align:right'| 11617
| ''[[:d:Q56183495|John Morgan Richards]]''
|
|
|
|-
| style='text-align:right'| 11618
| ''[[:d:Q56183620|Jane Roberts]]''
|
|
|
|-
| style='text-align:right'| 11619
| ''[[:d:Q56183689|William David Roberts]]''
|
|
|
|-
| style='text-align:right'| 11620
| ''[[:d:Q56183782|David Rowlands]]''
|
|
|
|-
| style='text-align:right'| 11621
| ''[[:d:Q56183975|Dafydd Savage]]''
|
|
|
|-
| style='text-align:right'| 11622
| ''[[:d:Q56184094|Delwyn Sion]]''
|
|
|
|-
| style='text-align:right'| 11623
| ''[[:d:Q56184787|Dyfed Thomas]]''
| [[Coadan:Cwmni Theatr Cymru, presentation of Under Milk Wood by Dylan Thomas (1549401).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11624
| ''[[:d:Q56184797|Gwilym Ivor Thomas]]''
|
|
|
|-
| style='text-align:right'| 11625
| ''[[:d:Q56184842|Mary Thomas]]''
|
|
|
|-
| style='text-align:right'| 11626
| ''[[:d:Q56184909|William Thorne]]''
| [[Coadan:William Thorne.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11627
| ''[[:d:Q56185504|Dorothy Watkins]]''
|
|
|
|-
| style='text-align:right'| 11628
| ''[[:d:Q56185758|David Wigley]]''
|
|
|
|-
| style='text-align:right'| 11629
| ''[[:d:Q56185945|Elizabeth Williams]]''
|
|
|
|-
| style='text-align:right'| 11630
| ''[[:d:Q56186193|Nathaniel Williams]]''
|
|
|
|-
| style='text-align:right'| 11631
| ''[[:d:Q56186247|Thomas Eurwedd Williams]]''
|
|
|
|-
| style='text-align:right'| 11632
| ''[[:d:Q56186304|Ynyr Williams]]''
|
|
|
|-
| style='text-align:right'| 11633
| ''[[:d:Q56186745|William Griffith]]''
|
|
|
|-
| style='text-align:right'| 11634
| ''[[:d:Q56186785|Huw Tudor]]''
| [[Coadan:Beryl Williams and Huw Tudor (1498860).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11635
| ''[[:d:Q56186936|Lisabeth Miles]]''
| [[Coadan:Actress Elisabeth Miles, and a performance of Cwmni THeatr Cymru's 'Byd o Amser' (1545111).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11636
| ''[[:d:Q56187086|Eric Roberts]]''
|
|
|
|-
| style='text-align:right'| 11637
| ''[[:d:Q56187197|Dafydd Glyn Hughes]]''
|
|
|
|-
| style='text-align:right'| 11638
| ''[[:d:Q56224169|Earl Godding]]''
| [[Coadan:Wrexham versus Bradford (1471559).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11639
| ''[[:d:Q56240178|Carlos Uzal]]''
|
|
|
|-
| style='text-align:right'| 11640
| ''[[:d:Q56243394|Eifion Lloyd Jones]]''
| [[Coadan:Eifion Lloyd Jones, HTV, presenting a Chopper bicycle (1519623).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11641
| ''[[:d:Q56248345|Billy Waters]]''
|
|
|
|-
| style='text-align:right'| 11642
| ''[[:d:Q56248414|Alan Jones]]''
|
|
|
|-
| style='text-align:right'| 11643
| ''[[:d:Q56248428|David Jones]]''
|
|
|
|-
| style='text-align:right'| 11644
| ''[[:d:Q56248472|Ken Jones]]''
|
|
|
|-
| style='text-align:right'| 11645
| ''[[:d:Q56254074|Geoff Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11646
| ''[[:d:Q56254201|Steve Morgan]]''
|
|
|
|-
| style='text-align:right'| 11647
| ''[[:d:Q56254266|Ian Hughes]]''
|
|
|
|-
| style='text-align:right'| 11648
| ''[[:d:Q56254267|Ken Hughes]]''
| [[Coadan:Hughes, Ken.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11649
| ''[[:d:Q56254679|Steve Jones]]''
|
|
|
|-
| style='text-align:right'| 11650
| ''[[:d:Q56290679|Brandon Cooper]]''
| [[Coadan:Brandon Cooper 26122024 (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11651
| ''[[:d:Q56291963|Thomas Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11652
| ''[[:d:Q56292794|Liam Cullen]]''
|
|
|
|-
| style='text-align:right'| 11653
| ''[[:d:Q56299224|Tudur Hallam]]''
|
|
|
|-
| style='text-align:right'| 11654
| ''[[:d:Q56412441|Rico Zulkarnain]]''
|
|
|
|-
| style='text-align:right'| 11655
| ''[[:d:Q56416973|Jamie Mathias]]''
| [[Coadan:Bullet for my Valentine - Wacken Open Air 2016-AL2279.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11656
| ''[[:d:Q56434529|Richard Winpenny]]''
|
|
|
|-
| style='text-align:right'| 11657
| ''[[:d:Q56452474|Kathryn Gray]]''
|
|
|
|-
| style='text-align:right'| 11658
| ''[[:d:Q56486681|Ryan Sears]]''
|
|
|
|-
| style='text-align:right'| 11659
| ''[[:d:Q56514940|Ed Holden]]''
| [[Coadan:Mr Phormula yn ystod yr Eisteddfod 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11660
| ''[[:d:Q56557885|Elizabeth Jane De La Hoyde]]''
|
|
|
|-
| style='text-align:right'| 11661
| ''[[:d:Q56598255|William E Watkins]]''
| [[Coadan:Revd W E Watkins, Amlwch (B) NLW3362009.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11662
| ''[[:d:Q56612499|J. Bryan Jones]]''
|
|
|
|-
| style='text-align:right'| 11663
| ''[[:d:Q56630953|Connor Davies]]''
| [[Coadan:Connor Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11664
| ''[[:d:Q56641621|Rhys Carré]]''
|
|
|
|-
| style='text-align:right'| 11665
| ''[[:d:Q56670370|Christopher J. Spiers]]''
|
|
|
|-
| style='text-align:right'| 11666
| ''[[:d:Q56678161|Liza Burgess]]''
|
|
|
|-
| style='text-align:right'| 11667
| ''[[:d:Q56709363|Nickie Aiken]]''
| [[Coadan:Official portrait of Nickie Aiken MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11668
| ''[[:d:Q56709415|Huw Thomas]]''
| [[Coadan:Huw Thomas, Leader of Cardiff Council.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11669
| ''[[:d:Q56752753|Alex Koukouravas]]''
|
|
|
|-
| style='text-align:right'| 11670
| ''[[:d:Q56753470|Peter Tate]]''
|
|
|
|-
| style='text-align:right'| 11671
| ''[[:d:Q56811910|Dai James]]''
|
|
|
|-
| style='text-align:right'| 11672
| ''[[:d:Q56868055|Greg Fitzgerald]]''
|
|
|
|-
| style='text-align:right'| 11673
| ''[[:d:Q57053098|Aaron Lewis]]''
|
|
|
|-
| style='text-align:right'| 11674
| ''[[:d:Q57059048|Aimee Watson]]''
|
|
|
|-
| style='text-align:right'| 11675
| ''[[:d:Q57242836|Jon Morgan]]''
|
|
|
|-
| style='text-align:right'| 11676
| ''[[:d:Q57313836|Stephen Pugh]]''
|
|
|
|-
| style='text-align:right'| 11677
| ''[[:d:Q57313938|Nathan Cadette]]''
|
|
|
|-
| style='text-align:right'| 11678
| ''[[:d:Q57395537|Isaak Davies]]''
| [[Coadan:Isaak Davies 04052025 (4).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11679
| ''[[:d:Q57515716|Anne Boden]]''
| [[Coadan:Anne-Boden-2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11680
| ''[[:d:Q57549384|Ash Dykes]]''
| [[Coadan:Ash Dykes.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11681
| ''[[:d:Q57586301|Cai Evans]]''
|
|
|
|-
| style='text-align:right'| 11682
| ''[[:d:Q57587669|Tommy Reffell]]''
| [[Coadan:Tommy Reffell 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11683
| ''[[:d:Q57603694|Peter Francombe]]''
|
|
|
|-
| style='text-align:right'| 11684
| ''[[:d:Q57710838|Hugh Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 11685
| ''[[:d:Q57731118|Evan Pughe]]''
|
|
|
|-
| style='text-align:right'| 11686
| ''[[:d:Q57741929|Joseph Barclay Jenkins]]''
| [[Coadan:J. Barclay Jenkins (5292158).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11687
| ''[[:d:Q57833991|Matthew Hedges]]''
|
|
|
|-
| style='text-align:right'| 11688
| ''[[:d:Q57908543|Gillian Turner]]''
|
|
|
|-
| style='text-align:right'| 11689
| ''[[:d:Q57983939|Leah Dixon]]''
| [[Coadan:2020 Fleche Wallonne Tibco LeahDixon.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11690
| ''[[:d:Q58007986|Eddie Dennis]]''
|
|
|
|-
| style='text-align:right'| 11691
| ''[[:d:Q58008163|Andy Gorman]]''
|
|
|
|-
| style='text-align:right'| 11692
| ''[[:d:Q58010516|Nick Hencher]]''
|
|
|
|-
| style='text-align:right'| 11693
| ''[[:d:Q58176051|Alec Lucas]]''
|
|
|
|-
| style='text-align:right'| 11694
| ''[[:d:Q58303142|Ian Love]]''
|
|
|
|-
| style='text-align:right'| 11695
| ''[[:d:Q58435926|Sarah Lianne Lewis]]''
|
|
|
|-
| style='text-align:right'| 11696
| ''[[:d:Q58494672|Wayne Matthews]]''
|
|
|
|-
| style='text-align:right'| 11697
| ''[[:d:Q58494918|Kelly Packwood]]''
|
|
|
|-
| style='text-align:right'| 11698
| ''[[:d:Q58494927|Kerry Packwood]]''
|
|
|
|-
| style='text-align:right'| 11699
| ''[[:d:Q58755703|Mark Layton]]''
|
|
|
|-
| style='text-align:right'| 11700
| ''[[:d:Q58882693|Steffan Alun]]''
|
|
|
|-
| style='text-align:right'| 11701
| ''[[:d:Q58898759|Esyllt Sears]]''
|
|
|
|-
| style='text-align:right'| 11702
| ''[[:d:Q58987694|Christopher Jones]]''
|
|
|
|-
| style='text-align:right'| 11703
| ''[[:d:Q59140084|Dan Thomas]]''
| [[Coadan:Dan Thomas, comediwr.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11704
| ''[[:d:Q59179585|Luke Jephcott]]''
|
|
|
|-
| style='text-align:right'| 11705
| ''[[:d:Q59202196|Iwan Arwel Griffith]]''
|
|
|
|-
| style='text-align:right'| 11706
| ''[[:d:Q59262901|Eleri Morgan]]''
| [[Coadan:Eleri Morgan comedi crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11707
| ''[[:d:Q59263349|Hywel Pitts]]''
|
|
|
|-
| style='text-align:right'| 11708
| ''[[:d:Q59263556|Sarah Breese]]''
|
|
|
|-
| style='text-align:right'| 11709
| ''[[:d:Q59268327|Mandy Payne]]''
| [[Coadan:Mandy Payne Artist.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11710
| ''[[:d:Q59548506|Ken Waters]]''
|
|
|
|-
| style='text-align:right'| 11711
| ''[[:d:Q59622229|Benjamin Saunders]]''
|
|
|
|-
| style='text-align:right'| 11712
| ''[[:d:Q59655839|Harold Friend]]''
|
|
|
|-
| style='text-align:right'| 11713
| ''[[:d:Q59655851|Jack McJennett]]''
|
|
|
|-
| style='text-align:right'| 11714
| ''[[:d:Q59655868|Harry Perks]]''
|
|
|
|-
| style='text-align:right'| 11715
| ''[[:d:Q59655874|Doug Redwood]]''
|
|
|
|-
| style='text-align:right'| 11716
| ''[[:d:Q59656121|Medwyn Evans]]''
|
|
|
|-
| style='text-align:right'| 11717
| ''[[:d:Q59656154|Allen Price]]''
|
|
|
|-
| style='text-align:right'| 11718
| ''[[:d:Q59656415|Steve Mackreth]]''
|
|
|
|-
| style='text-align:right'| 11719
| ''[[:d:Q60194679|Callum Sheedy]]''
| [[Coadan:Callum Sheedy LQ 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11720
| ''[[:d:Q60544850|Albert L. Harris]]''
|
|
|
|-
| style='text-align:right'| 11721
| ''[[:d:Q60581700|Megan Barker]]''
| [[Coadan:2024 UEC Track Elite European Championships 083 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11722
| ''[[:d:Q60589082|Mab Jones]]''
|
|
|
|-
| style='text-align:right'| 11723
| ''[[:d:Q60658323|Delyth Jewell]]''
| [[Coadan:Delyth Jewell (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11724
| ''[[:d:Q60685958|Maurice O'Sullivan]]''
|
|
|
|-
| style='text-align:right'| 11725
| ''[[:d:Q60686093|Percy Richards]]''
|
|
|
|-
| style='text-align:right'| 11726
| ''[[:d:Q60733920|Andy Edwards]]''
|
|
|
|-
| style='text-align:right'| 11727
| ''[[:d:Q60733948|Dan Davis]]''
|
|
|
|-
| style='text-align:right'| 11728
| ''[[:d:Q60733994|Ben Williams]]''
|
|
|
|-
| style='text-align:right'| 11729
| ''[[:d:Q60734014|Sion Jones]]''
| [[Coadan:Sion Jones.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11730
| ''[[:d:Q60734062|Luke Morgan]]''
|
|
|
|-
| style='text-align:right'| 11731
| ''[[:d:Q60734191|Curtis Davies]]''
| [[Coadan:Curtis Davies.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11732
| ''[[:d:Q60734266|Scott Williams]]''
|
|
|
|-
| style='text-align:right'| 11733
| ''[[:d:Q60734311|Allan Lewis]]''
|
|
|
|-
| style='text-align:right'| 11734
| ''[[:d:Q60734320|John Smith]]''
|
|
|
|-
| style='text-align:right'| 11735
| ''[[:d:Q60734360|Harri Morgan]]''
|
|
|
|-
| style='text-align:right'| 11736
| ''[[:d:Q60734441|John Davies]]''
|
|
|
|-
| style='text-align:right'| 11737
| ''[[:d:Q60734448|Kevin Jones]]''
|
|
|
|-
| style='text-align:right'| 11738
| ''[[:d:Q60734511|Joe Adams]]''
|
|
|
|-
| style='text-align:right'| 11739
| ''[[:d:Q60734513|Martin Goldsmith]]''
|
|
|
|-
| style='text-align:right'| 11740
| ''[[:d:Q60734569|Alan Jones]]''
|
|
|
|-
| style='text-align:right'| 11741
| ''[[:d:Q60734690|Mike Keen]]''
|
|
|
|-
| style='text-align:right'| 11742
| ''[[:d:Q60734744|Chris Ingram]]''
|
|
|
|-
| style='text-align:right'| 11743
| ''[[:d:Q60735001|Brad Evans]]''
|
|
|
|-
| style='text-align:right'| 11744
| ''[[:d:Q60735037|Peter Morgan]]''
|
|
|
|-
| style='text-align:right'| 11745
| ''[[:d:Q60735114|Steve Scott]]''
|
|
|
|-
| style='text-align:right'| 11746
| ''[[:d:Q60735120|Neil Robinson]]''
|
|
|
|-
| style='text-align:right'| 11747
| ''[[:d:Q60735575|Steve Bray]]''
| [[Coadan:Steve Bray, Stop Brexit Man (48794896706).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11748
| ''[[:d:Q60735660|Jon Roberts]]''
|
|
|
|-
| style='text-align:right'| 11749
| ''[[:d:Q60735930|Will Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11750
| ''[[:d:Q60736661|Dai Evans]]''
|
|
|
|-
| style='text-align:right'| 11751
| ''[[:d:Q60763309|Lew Bowen]]''
|
|
|
|-
| style='text-align:right'| 11752
| ''[[:d:Q60791067|Fred Castle]]''
|
|
|
|-
| style='text-align:right'| 11753
| ''[[:d:Q60791136|Albert Evans]]''
|
|
|
|-
| style='text-align:right'| 11754
| ''[[:d:Q60791390|Ernest Lewis]]''
|
|
|
|-
| style='text-align:right'| 11755
| ''[[:d:Q60791526|Albert Miles]]''
|
|
|
|-
| style='text-align:right'| 11756
| ''[[:d:Q60791589|Eric Morris]]''
|
|
|
|-
| style='text-align:right'| 11757
| ''[[:d:Q60959205|Paul Lamford]]''
|
|
|
|-
| style='text-align:right'| 11758
| ''[[:d:Q61014919|James Wharton]]''
|
|
|
|-
| style='text-align:right'| 11759
| ''[[:d:Q61107154|Mike Crowley]]''
|
|
|
|-
| style='text-align:right'| 11760
| ''[[:d:Q61107392|Gary Lloyd]]''
|
|
|
|-
| style='text-align:right'| 11761
| ''[[:d:Q61107438|Owen Evans]]''
|
|
|
|-
| style='text-align:right'| 11762
| ''[[:d:Q61107823|Santes Marchell o Dalgarth]]''
| [[Coadan:Tal Garth, Garth Madrun.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11763
| ''[[:d:Q61107833|Lleucu]]''
|
|
|
|-
| style='text-align:right'| 11764
| ''[[:d:Q61107844|Anhun de Gwrthyfer]]''
|
|
|
|-
| style='text-align:right'| 11765
| ''[[:d:Q61107961|Betsan Moses]]''
|
|
|
|-
| style='text-align:right'| 11766
| ''[[:d:Q61107968|Gareth Bonello]]''
|
|
|
|-
| style='text-align:right'| 11767
| ''[[:d:Q61107987|Meurig Fychan ap Hywel Sele]]''
|
|
|
|-
| style='text-align:right'| 11768
| ''[[:d:Q61119025|Alison Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11769
| ''[[:d:Q61450736|James Botham]]''
|
|
|
|-
| style='text-align:right'| 11770
| ''[[:d:Q61675797|Liv Hill]]''
|
|
|
|-
| style='text-align:right'| 11771
| ''[[:d:Q61707036|Alys Williams]]''
| [[Coadan:Alys Williams (cantores; Welsh singer) 01.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11772
| ''[[:d:Q61731675|Kylie Nolan]]''
|
|
|
|-
| style='text-align:right'| 11773
| ''[[:d:Q61780191|Cassia Pike]]''
|
|
|
|-
| style='text-align:right'| 11774
| ''[[:d:Q61828492|Josh Reynolds]]''
|
|
|
|-
| style='text-align:right'| 11775
| ''[[:d:Q61828617|Will Kelly]]''
|
|
|
|-
| style='text-align:right'| 11776
| ''[[:d:Q61828912|Benjamin Fry]]''
| [[Coadan:Benjamin Fry 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11777
| ''[[:d:Q61983407|Owain Wyn Evans]]''
| [[Coadan:Owain Wyn Evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11778
| ''[[:d:Q62024163|Dennis Lambourne]]''
|
|
|
|-
| style='text-align:right'| 11779
| ''[[:d:Q62198596|Daniel Sumner]]''
|
|
|
|-
| style='text-align:right'| 11780
| ''[[:d:Q62388891|Roger Mostyn]]''
|
|
|
|-
| style='text-align:right'| 11781
| ''[[:d:Q62513133|Andy Evans]]''
|
|
|
|-
| style='text-align:right'| 11782
| ''[[:d:Q62513940|Alana Spencer]]''
|
|
|
|-
| style='text-align:right'| 11783
| ''[[:d:Q62764975|Ruth Jones]]''
| [[Coadan:Official portrait of Ruth Jones MP crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11784
| ''[[:d:Q62768570|Arthur Smith]]''
|
|
|
|-
| style='text-align:right'| 11785
| ''[[:d:Q62769837|Chris Summers]]''
|
|
|
|-
| style='text-align:right'| 11786
| ''[[:d:Q62858588|Dick Williams]]''
|
|
|
|-
| style='text-align:right'| 11787
| ''[[:d:Q63165862|Paul Karabardak]]''
|
|
|
|-
| style='text-align:right'| 11788
| ''[[:d:Q63184794|Shellyann Evans]]''
| [[Coadan:Shellyann Evans - 53369865382.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11789
| ''[[:d:Q63228559|Lilian Nicholas]]''
|
|
|
|-
| style='text-align:right'| 11790
| ''[[:d:Q63248308|Geraint Evans]]''
|
|
|
|-
| style='text-align:right'| 11791
| ''[[:d:Q63313185|Edwin Rees]]''
|
|
|
|-
| style='text-align:right'| 11792
| ''[[:d:Q63341276|Graham Jones]]''
|
|
|
|-
| style='text-align:right'| 11793
| ''[[:d:Q63391841|Eric Styles]]''
|
|
|
|-
| style='text-align:right'| 11794
| ''[[:d:Q63432097|Prano Bailey-Bond]]''
| [[Coadan:Prano Bailey-Bond 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11795
| ''[[:d:Q63614875|Jaime Gareth Flórez Barreales]]''
|
|
|
|-
| style='text-align:right'| 11796
| ''[[:d:Q63699006|Macauley Southam-Hales]]''
| [[Coadan:Southam, Macauley.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11797
| ''[[:d:Q63699954|Stuart Webber]]''
|
|
|
|-
| style='text-align:right'| 11798
| ''[[:d:Q63874313|Ray Lawrence]]''
|
|
|
|-
| style='text-align:right'| 11799
| ''[[:d:Q63929463|Fay Jones]]''
| [[Coadan:Official portrait of Fay Jones MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11800
| ''[[:d:Q63953173|Seirian Sumner]]''
|
|
|
|-
| style='text-align:right'| 11801
| ''[[:d:Q63993767|Dewi Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11802
| ''[[:d:Q64009025|Felicity Dahl]]''
|
|
|
|-
| style='text-align:right'| 11803
| ''[[:d:Q64009303|Roman Walker]]''
|
|
|
|-
| style='text-align:right'| 11804
| ''[[:d:Q64010406|Tom Booth-Amos]]''
| [[Coadan:Tom Booth Amos 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11805
| ''[[:d:Q64214523|Ella Powell]]''
| [[Coadan:Ella Powell Lewes FC Women v Charlton Ath Women 16 08 20 pre-season-75 (50234968972) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11806
| ''[[:d:Q64358828|Alan Reynolds]]''
|
|
|
|-
| style='text-align:right'| 11807
| ''[[:d:Q64414789|Ruth King]]''
|
|
|
|-
| style='text-align:right'| 11808
| ''[[:d:Q64685172|Sîan Reynolds]]''
|
|
|
|-
| style='text-align:right'| 11809
| ''[[:d:Q64736714|Ben Cambriani]]''
|
|
|
|-
| style='text-align:right'| 11810
| ''[[:d:Q64738481|Cairn Newton-Evans]]''
| [[Coadan:Citizenship cairn newton evans-cropped 3.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11811
| ''[[:d:Q64747491|Tomi Lewis]]''
|
|
|
|-
| style='text-align:right'| 11812
| ''[[:d:Q64748740|Annabel Jones]]''
| [[Coadan:Annabel Jones on MTV UK.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11813
| ''[[:d:Q64853341|Shaun Chapple]]''
|
|
|
|-
| style='text-align:right'| 11814
| ''[[:d:Q64995849|Alice Griffiths]]''
| [[Coadan:Alice Griffiths Lewes FC Women v Charlton Ath Women 16 08 20 pre-season-137 (50234760281).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11815
| ''[[:d:Q65029330|Tom Rogers]]''
|
|
|
|-
| style='text-align:right'| 11816
| ''[[:d:Q65030266|Joseph Lewis]]''
| [[Coadan:2024-12-22 Dresdner Eislöwen gegen ESV Kaufbeuren (DEL2) by Sandro Halank–090.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11817
| ''[[:d:Q65030475|David Rees]]''
|
|
|
|-
| style='text-align:right'| 11818
| ''[[:d:Q65030489|Peter Williams]]''
|
|
|
|-
| style='text-align:right'| 11819
| ''[[:d:Q65030620|Jack Fairweather]]''
|
|
|
|-
| style='text-align:right'| 11820
| ''[[:d:Q65062011|Harry Davies]]''
|
|
|
|-
| style='text-align:right'| 11821
| ''[[:d:Q65178482|Joris Collier]]''
|
|
|
|-
| style='text-align:right'| 11822
| ''[[:d:Q65294945|Carolyn Hitt]]''
|
|
|
|-
| style='text-align:right'| 11823
| ''[[:d:Q65367867|Alice Evans]]''
| [[Coadan:20150922 1656 W AUT WAL 3083.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11824
| ''[[:d:Q65551884|Peter Turnbull]]''
|
|
|
|-
| style='text-align:right'| 11825
| ''[[:d:Q65555292|Emma Jenkins]]''
|
|
|
|-
| style='text-align:right'| 11826
| ''[[:d:Q65624959|Ian Roberts]]''
|
|
|
|-
| style='text-align:right'| 11827
| ''[[:d:Q65665802|Rhian Nokes]]''
|
|
|
|-
| style='text-align:right'| 11828
| ''[[:d:Q65946181|Valerie Mullins]]''
|
|
|
|-
| style='text-align:right'| 11829
| ''[[:d:Q65946185|Margaret Thomas-Neale]]''
|
|
|
|-
| style='text-align:right'| 11830
| ''[[:d:Q65946188|Gwynedd Lewis-Lingard]]''
|
|
|
|-
| style='text-align:right'| 11831
| ''[[:d:Q66023017|Dorothy Summers]]''
|
|
|
|-
| style='text-align:right'| 11832
| ''[[:d:Q66049720|Jo Price]]''
| [[Coadan:20150922 1656 W AUT WAL 3084.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11833
| ''[[:d:Q66105403|Elizabeth Baines]]''
|
|
|
|-
| style='text-align:right'| 11834
| ''[[:d:Q66147583|Guto Dafydd]]''
|
|
|
|-
| style='text-align:right'| 11835
| ''[[:d:Q66241174|Stavros Ambizas]]''
|
|
|
|-
| style='text-align:right'| 11836
| ''[[:d:Q66295328|Pamela Hopkins]]''
|
|
|
|-
| style='text-align:right'| 11837
| ''[[:d:Q66309772|Patrick Killian]]''
|
|
|
|-
| style='text-align:right'| 11838
| ''[[:d:Q66335445|Callum Taylor]]''
|
|
|
|-
| style='text-align:right'| 11839
| ''[[:d:Q66360557|Mike Williams]]''
|
|
|
|-
| style='text-align:right'| 11840
| ''[[:d:Q66364666|Drew Parker]]''
| [[Coadan:Drew Parker 20.02.27.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11841
| ''[[:d:Q66384840|William Smale]]''
|
|
|
|-
| style='text-align:right'| 11842
| ''[[:d:Q66398333|Andrew Morris]]''
|
|
|
|-
| style='text-align:right'| 11843
| ''[[:d:Q66428065|Ben Cabango]]''
| [[Coadan:Ben Cabango playing for Wales.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11844
| ''[[:d:Q66604836|Sonia Lawrence]]''
|
|
|
|-
| style='text-align:right'| 11845
| ''[[:d:Q66689127|Jason Evans]]''
| [[Coadan:Jason Evans Wikimedian 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11846
| ''[[:d:Q66712828|Jamie Slater]]''
|
|
|
|-
| style='text-align:right'| 11847
| ''[[:d:Q66732355|Lewis Thomas]]''
| [[Coadan:Lewis Thomas 11042026 (1).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11848
| ''[[:d:Q66732400|Lee Harris]]''
|
|
|
|-
| style='text-align:right'| 11849
| ''[[:d:Q66734203|Richard Benyon]]''
|
|
|
|-
| style='text-align:right'| 11850
| ''[[:d:Q66737792|Ben Gwalchmai]]''
|
|
|
|-
| style='text-align:right'| 11851
| ''[[:d:Q66762454|Elin Harlow]]''
|
|
|
|-
| style='text-align:right'| 11852
| ''[[:d:Q66823499|Carrie Jones]]''
|
|
|
|-
| style='text-align:right'| 11853
| ''[[:d:Q66841012|Chloe Chivers]]''
|
|
|
|-
| style='text-align:right'| 11854
| ''[[:d:Q66841084|Ffion Morgan]]''
| [[Coadan:Ffion-Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11855
| ''[[:d:Q66844101|Jack Evans]]''
|
|
|
|-
| style='text-align:right'| 11856
| ''[[:d:Q67019082|Jarry Lee]]''
| [[Coadan:Jarry Lee Oscar Blandi 2020.png|center|128px]]
|
|
|-
| style='text-align:right'| 11857
| ''[[:d:Q67117129|Luca Hoole]]''
| [[Coadan:LHooleBRovers.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11858
| ''[[:d:Q67146942|Dom Jefferies]]''
| [[Coadan:Dom Jefferies, Brentford F.C. footballer.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11859
| ''[[:d:Q67146943|Elis Watts]]''
|
|
|
|-
| style='text-align:right'| 11860
| ''[[:d:Q67201474|Clive Davis]]''
|
|
|
|-
| style='text-align:right'| 11861
| ''[[:d:Q67222729|Debbie Wilcox]]''
| [[Coadan:Official portrait of Baroness Wilcox of Newport crop 2, 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11862
| ''[[:d:Q67222739|Hilary Greaves]]''
| [[Coadan:Hilary Greaves (20613169345).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11863
| ''[[:d:Q67599358|Ray Booth]]''
|
|
|
|-
| style='text-align:right'| 11864
| ''[[:d:Q67641500|John Trevelyan]]''
|
|
|
|-
| style='text-align:right'| 11865
| ''[[:d:Q67641543|David John Sully]]''
|
|
|
|-
| style='text-align:right'| 11866
| ''[[:d:Q67790654|Adrian Masters]]''
|
|
|
|-
| style='text-align:right'| 11867
| ''[[:d:Q67802439|Saint Cyndeyrn ap Cyngar]]''
|
|
|
|-
| style='text-align:right'| 11868
| ''[[:d:Q67886292|Geoffrey Cutter]]''
|
|
|
|-
| style='text-align:right'| 11869
| ''[[:d:Q67921919|Tôpher Mills]]''
|
|
|
|-
| style='text-align:right'| 11870
| ''[[:d:Q68065250|Ryan Hillier]]''
|
|
|
|-
| style='text-align:right'| 11871
| ''[[:d:Q68217203|Bob Evans]]''
|
|
|
|-
| style='text-align:right'| 11872
| ''[[:d:Q68585432|John Bassett Trumper]]''
| [[Coadan:John B. Trumper 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11873
| ''[[:d:Q69060453|Tomi Evans]]''
|
|
|
|-
| style='text-align:right'| 11874
| ''[[:d:Q69158102|Sabrina Cohen-Hatton]]''
| [[Coadan:Dr Sabrina Cohen-Hatton-London Fire Brigade, UK.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11875
| ''[[:d:Q70170755|Jacob Draper]]''
|
|
|
|-
| style='text-align:right'| 11876
| ''[[:d:Q70473832|Niki Pilkington]]''
|
|
|
|-
| style='text-align:right'| 11877
| ''[[:d:Q70602412|Malvin Mortimer]]''
|
|
|
|-
| style='text-align:right'| 11878
| ''[[:d:Q71128886|Eloise Laity]]''
|
|
|
|-
| style='text-align:right'| 11879
| ''[[:d:Q71496189|Phoebe Richards]]''
|
|
|
|-
| style='text-align:right'| 11880
| ''[[:d:Q72097669|Geraint Vaughan Jones]]''
|
|
|
|-
| style='text-align:right'| 11881
| ''[[:d:Q72591827|Ria Jones]]''
|
|
|
|-
| style='text-align:right'| 11887
| ''[[:d:Q72835607|Mari Berllan Biter]]''
|
|
|
|-
| style='text-align:right'| 11888
| ''[[:d:Q72921909|Neco Williams]]''
| [[Coadan:2022 FIFA World Cup United States 1–1 Wales - (24) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11889
| ''[[:d:Q72973962|John Hartley]]''
|
|
|
|-
| style='text-align:right'| 11890
| ''[[:d:Q73211440|Louis Gray]]''
|
|
|
|-
| style='text-align:right'| 11891
| ''[[:d:Q73276307|Terry Monaghan]]''
|
|
|
|-
| style='text-align:right'| 11892
| ''[[:d:Q73632769|Jacquie Barnbrook]]''
|
|
|
|-
| style='text-align:right'| 11893
| ''[[:d:Q73855338|Christine Jones]]''
|
|
|
|-
| style='text-align:right'| 11894
| ''[[:d:Q73855341|Dawn Williams]]''
|
|
|
|-
| style='text-align:right'| 11895
| ''[[:d:Q73855347|Dilys Thomas]]''
|
|
|
|-
| style='text-align:right'| 11896
| ''[[:d:Q73855354|Eiry Miles]]''
|
|
|
|-
| style='text-align:right'| 11897
| ''[[:d:Q73855378|Lowri Cynan]]''
|
|
|
|-
| style='text-align:right'| 11898
| ''[[:d:Q73855387|Jane Ellis]]''
|
|
|
|-
| style='text-align:right'| 11899
| ''[[:d:Q73855407|Leusa Fflur Llewelyn]]''
|
|
|
|-
| style='text-align:right'| 11900
| ''[[:d:Q73855404|Laura Sheldon]]''
|
|
|
|-
| style='text-align:right'| 11901
| ''[[:d:Q73855417|Lowri Haf Cooke]]''
|
|
|
|-
| style='text-align:right'| 11902
| ''[[:d:Q73855422|Luned Aaron]]''
|
|
|
|-
| style='text-align:right'| 11903
| ''[[:d:Q73855463|Sheelagh Thomas]]''
|
|
|
|-
| style='text-align:right'| 11904
| ''[[:d:Q74050176|Tom Cutler]]''
|
|
|
|-
| style='text-align:right'| 11905
| ''[[:d:Q74185530|Ioan Lloyd]]''
| [[Coadan:Ioan Lloyd EPCR 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11906
| ''[[:d:Q74817155|Callum Jones]]''
|
|
|
|-
| style='text-align:right'| 11907
| ''[[:d:Q74817195|Joe Woodiwiss]]''
|
|
|
|-
| style='text-align:right'| 11908
| ''[[:d:Q75574815|Samuel James Laurance Mattock]]''
|
|
|
|-
| style='text-align:right'| 11909
| ''[[:d:Q75682717|Sion Wiggin]]''
|
|
|
|-
| style='text-align:right'| 11910
| ''[[:d:Q75817575|Alexander Murray-Threipland]]''
|
|
|
|-
| style='text-align:right'| 11911
| ''[[:d:Q75817581|Alice Murray-Threipland]]''
|
|
|
|-
| style='text-align:right'| 11912
| ''[[:d:Q75866941|William Parry Crawley]]''
|
|
|
|-
| style='text-align:right'| 11913
| ''[[:d:Q76025826|Henry Awbrey]]''
|
|
|
|-
| style='text-align:right'| 11914
| ''[[:d:Q76086417|George Grant Francis]]''
|
|
|
|-
| style='text-align:right'| 11915
| ''[[:d:Q76214693|Iris Lambert Williams]]''
|
|
|
|-
| style='text-align:right'| 11916
| ''[[:d:Q76363017|Katie Wallis]]''
| [[Coadan:Official portrait of Dr Jamie Wallis MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11917
| ''[[:d:Q76363105|Scott Benton]]''
| [[Coadan:Official portrait of Scott Benton MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11918
| ''[[:d:Q76363918|Beth Winter]]''
| [[Coadan:Official portrait of Beth Winter MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11919
| ''[[:d:Q76364874|Alex Davies-Jones]]''
| [[Coadan:Official portrait of Alex Davies-Jones MP crop 2, 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11920
| ''[[:d:Q76450637|Robin Millar]]''
| [[Coadan:Official portrait of Robin Millar MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11921
| ''[[:d:Q76613834|Prydwen Elfed-Owens]]''
|
|
|
|-
| style='text-align:right'| 11922
| ''[[:d:Q76615306|N. A. Pett]]''
|
|
|
|-
| style='text-align:right'| 11923
| ''[[:d:Q76615429|Owen Glyn Roberts]]''
|
|
|
|-
| style='text-align:right'| 11924
| ''[[:d:Q76615797|Neil Trevor Jones]]''
|
|
|
|-
| style='text-align:right'| 11925
| ''[[:d:Q76616291|Michael Tibbott]]''
|
|
|
|-
| style='text-align:right'| 11926
| ''[[:d:Q76616645|Meurig Thomas]]''
|
|
|
|-
| style='text-align:right'| 11927
| ''[[:d:Q76700917|Dylan Levitt]]''
| [[Coadan:Dylan Levitt.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11928
| ''[[:d:Q77215517|James Jones]]''
|
|
|
|-
| style='text-align:right'| 11929
| ''[[:d:Q77359183|Jessica Hemmings]]''
|
|
|
|-
| style='text-align:right'| 11930
| ''[[:d:Q77364621|Graham Oliver Osborne]]''
| [[Coadan:LU MRD G O Osborne chromatograph.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11931
| ''[[:d:Q78155720|Chem Campbell]]''
| [[Coadan:Chem Campbell 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11932
| ''[[:d:Q78828774|Morgan Boyes]]''
|
|
|
|-
| style='text-align:right'| 11933
| ''[[:d:Q79322942|Terry Vaughan]]''
|
|
|
|-
| style='text-align:right'| 11934
| ''[[:d:Q79329132|Louis Rees-Zammit]]''
| [[Coadan:Louis Rees-Zammit March 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11935
| ''[[:d:Q79359895|Anne Burns]]''
|
|
|
|-
| style='text-align:right'| 11936
| ''[[:d:Q79459553|Colin Treharne]]''
|
|
|
|-
| style='text-align:right'| 11937
| ''[[:d:Q79856442|Annes Elwy]]''
|
|
|
|-
| style='text-align:right'| 11938
| ''[[:d:Q80388263|Helen Sullivan]]''
| [[Coadan:Helen Sullivan (born 1966) in the video Rethinking the Future of Australian Defence Industry Policy.png|center|128px]]
|
|
|-
| style='text-align:right'| 11939
| ''[[:d:Q80863365|Ian Davies]]''
|
|
|
|-
| style='text-align:right'| 11940
| ''[[:d:Q81052834|Jac Morgan]]''
| [[Coadan:Jac Morgan 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11941
| ''[[:d:Q81052941|Alun Lawrence]]''
|
|
|
|-
| style='text-align:right'| 11942
| ''[[:d:Q81087079|Ieuan Owen]]''
|
|
|
|-
| style='text-align:right'| 11943
| ''[[:d:Q81147173|David Llewellyn]]''
|
|
|
|-
| style='text-align:right'| 11944
| ''[[:d:Q81191668|Geraint Frowen]]''
|
|
|
|-
| style='text-align:right'| 11945
| ''[[:d:Q81713322|Tweli Griffiths]]''
|
|
|
|-
| style='text-align:right'| 11946
| ''[[:d:Q81749728|Wendy White]]''
|
|
|
|-
| style='text-align:right'| 11947
| ''[[:d:Q81750352|Griff Rowland]]''
|
|
|
|-
| style='text-align:right'| 11948
| ''[[:d:Q82026018|Rupert Shipperley]]''
|
|
|
|-
| style='text-align:right'| 11949
| ''[[:d:Q82736987|Connagh Howard]]''
|
|
|
|-
| style='text-align:right'| 11950
| ''[[:d:Q83222996|Ben Thomas]]''
| [[Coadan:Ben Thomas 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11951
| ''[[:d:Q83289553|Llŷr Titus]]''
|
|
|
|-
| style='text-align:right'| 11952
| ''[[:d:Q83559707|Patrick Harrington]]''
|
|
|
|-
| style='text-align:right'| 11953
| ''[[:d:Q83739297|Sam Costelow]]''
|
|
|
|-
| style='text-align:right'| 11954
| ''[[:d:Q83864687|Carwyn Penny]]''
|
|
|
|-
| style='text-align:right'| 11955
| ''[[:d:Q83875033|Ella Barnwell]]''
| [[Coadan:2021 UEC Track Jun & U23 European Championships 533.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11956
| ''[[:d:Q84048212|Stephen Varney]]''
| [[Coadan:Stephen Varney 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11957
| ''[[:d:Q84078989|Lily Woodham]]''
| [[Coadan:NC Courage vs Seattle Reign (Apr 2024) 016 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11958
| ''[[:d:Q84763454|John Elfed Jones]]''
|
|
|
|-
| style='text-align:right'| 11959
| ''[[:d:Q84893687|James McCarthy]]''
|
|
|
|-
| style='text-align:right'| 11960
| ''[[:d:Q85220401|Emyr Huws Jones]]''
|
|
|
|-
| style='text-align:right'| 11961
| ''[[:d:Q85771463|John Davidson]]''
|
|
|
|-
| style='text-align:right'| 11962
| ''[[:d:Q85792913|Peter Arthur]]''
|
|
|
|-
| style='text-align:right'| 11963
| ''[[:d:Q85828658|Chris Klefenz]]''
|
|
|
|-
| style='text-align:right'| 11964
| ''[[:d:Q85851754|Richard Barnes]]''
|
|
|
|-
| style='text-align:right'| 11965
| ''[[:d:Q85851980|Steve Jones]]''
|
|
|
|-
| style='text-align:right'| 11966
| ''[[:d:Q85874731|Michael Beckett]]''
|
|
|
|-
| style='text-align:right'| 11967
| ''[[:d:Q85984763|Giancarlo Gemin]]''
|
|
|
|-
| style='text-align:right'| 11968
| ''[[:d:Q86445222|Jane Stanness]]''
|
|
|
|-
| style='text-align:right'| 11969
| ''[[:d:Q87296575|Ellie Coster]]''
|
|
|
|-
| style='text-align:right'| 11970
| ''[[:d:Q87355238|Tracy Rees]]''
|
|
|
|-
| style='text-align:right'| 11971
| ''[[:d:Q87474480|Donal Anthony Foley]]''
|
|
|
|-
| style='text-align:right'| 11972
| ''[[:d:Q87740471|Caine Woolerton]]''
|
|
|
|-
| style='text-align:right'| 11973
| ''[[:d:Q87740637|Ioan Davies]]''
|
|
|
|-
| style='text-align:right'| 11974
| ''[[:d:Q87905789|Albert Clifton Kelway]]''
|
|
|
|-
| style='text-align:right'| 11975
| ''[[:d:Q88074967|Ruth May]]''
| [[Coadan:Ruth May CNO.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11976
| ''[[:d:Q88289718|Phil Parry]]''
|
|
|
|-
| style='text-align:right'| 11977
| ''[[:d:Q88360982|Steffan Cennydd]]''
|
|
|
|-
| style='text-align:right'| 11978
| ''[[:d:Q88509572|Rhys Thomas]]''
|
|
|
|-
| style='text-align:right'| 11979
| ''[[:d:Q88527143|Paul Barrow]]''
|
|
|
|-
| style='text-align:right'| 11980
| ''[[:d:Q88590650|Rhodri Thomas]]''
|
|
|
|-
| style='text-align:right'| 11981
| ''[[:d:Q88886811|Denise Hampson]]''
|
|
|
|-
| style='text-align:right'| 11982
| ''[[:d:Q89579900|Dewi Rhys Williams]]''
|
|
|
|-
| style='text-align:right'| 11983
| ''[[:d:Q89891143|Andrew Teilo]]''
|
|
|
|-
| style='text-align:right'| 11984
| ''[[:d:Q89916448|Dannii Harwood]]''
|
|
|
|-
| style='text-align:right'| 11985
| ''[[:d:Q90023497|Amy Boulden]]''
|
|
|
|-
| style='text-align:right'| 11986
| ''[[:d:Q91615685|Lloyd Warburton]]''
| [[Coadan:LloydWarburton.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 11987
| ''[[:d:Q92311589|Debbie Johnsey]]''
|
|
|
|-
| style='text-align:right'| 11988
| ''[[:d:Q92438583|Norman van de Vater]]''
|
|
|
|-
| style='text-align:right'| 11989
| ''[[:d:Q93605036|Leon Stanfield]]''
|
|
|
|-
| style='text-align:right'| 11990
| ''[[:d:Q94005165|Hywel Griffith]]''
|
|
|
|-
| style='text-align:right'| 11991
| ''[[:d:Q94134193|Beryl Baigent]]''
|
|
|
|-
| style='text-align:right'| 11992
| ''[[:d:Q94139976|Colin Palfrey]]''
|
|
|
|-
| style='text-align:right'| 11993
| ''[[:d:Q94579608|Edwina McGrail]]''
|
|
|
|-
| style='text-align:right'| 11994
| ''[[:d:Q94696644|Mandi Haswell]]''
|
|
|
|-
| style='text-align:right'| 11995
| ''[[:d:Q94823364|Christine Jones]]''
|
|
|
|-
| style='text-align:right'| 11996
| ''[[:d:Q94997935|Graham Morris]]''
|
|
|
|-
| style='text-align:right'| 11997
| ''[[:d:Q95188939|Nia Dryhurst]]''
|
|
|
|-
| style='text-align:right'| 11998
| ''[[:d:Q95208143|Eirian James]]''
|
|
|
|-
| style='text-align:right'| 11999
| ''[[:d:Q95230858|Raymond Crompton]]''
|
|
|
|-
| style='text-align:right'| 12000
| ''[[:d:Q95236346|Richard Idwal Hopwood]]''
|
|
|
|-
| style='text-align:right'| 12001
| ''[[:d:Q95287152|Thomas Arthur Rowett Hyndman]]''
|
|
|
|-
| style='text-align:right'| 12002
| ''[[:d:Q95304925|David Kingdon]]''
|
|
|
|-
| style='text-align:right'| 12003
| ''[[:d:Q95335719|Maldwyn Davies]]''
|
|
|
|-
| style='text-align:right'| 12004
| ''[[:d:Q95563204|John Cording]]''
|
|
|
|-
| style='text-align:right'| 12005
| ''[[:d:Q95698426|Joe Talbot]]''
| [[Coadan:Idles - Haldern Pop Festival 2017 - Alexander Kellner - 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12006
| ''[[:d:Q95785749|Ioan Meredith]]''
|
|
|
|-
| style='text-align:right'| 12007
| ''[[:d:Q95826771|Aaron Fuller]]''
|
|
|
|-
| style='text-align:right'| 12008
| ''[[:d:Q96154651|Gareth Brenton]]''
|
|
|
|-
| style='text-align:right'| 12009
| ''[[:d:Q96186370|James Waite]]''
|
|
|
|-
| style='text-align:right'| 12010
| ''[[:d:Q96313660|Layla Saad]]''
|
|
|
|-
| style='text-align:right'| 12011
| ''[[:d:Q96384682|John Tudor]]''
|
|
|
|-
| style='text-align:right'| 12012
| ''[[:d:Q96385713|Kevin James]]''
|
|
|
|-
| style='text-align:right'| 12013
| ''[[:d:Q96398942|Peter Isaac]]''
|
|
|
|-
| style='text-align:right'| 12014
| ''[[:d:Q96401739|Rhys Davies]]''
| [[Coadan:Rhys Davies 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12015
| ''[[:d:Q96401737|Rhys Davies]]''
|
|
|
|-
| style='text-align:right'| 12016
| ''[[:d:Q96402446|Roger Jones]]''
|
|
|
|-
| style='text-align:right'| 12017
| ''[[:d:Q96406533|Steve Hill]]''
|
|
|
|-
| style='text-align:right'| 12018
| ''[[:d:Q96483757|Roger Yeoman]]''
|
|
|
|-
| style='text-align:right'| 12019
| ''[[:d:Q96484421|Sally J. Morgan]]''
| [[Coadan:Sally Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12020
| ''[[:d:Q97010729|Amanda Blanc]]''
| [[Coadan:Amanda Blanc.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12021
| ''[[:d:Q97365110|Freddie John]]''
|
|
|
|-
| style='text-align:right'| 12022
| ''[[:d:Q97452589|Harry Fry]]''
|
|
|
|-
| style='text-align:right'| 12023
| ''[[:d:Q97452647|Matthew Taylor]]''
|
|
|
|-
| style='text-align:right'| 12024
| ''[[:d:Q97467288|Andy Roberton]]''
|
|
|
|-
| style='text-align:right'| 12025
| ''[[:d:Q97486769|Jack Vale]]''
|
|
|
|-
| style='text-align:right'| 12026
| ''[[:d:Q97579239|Ahmed Yasine Ali]]''
|
|
|
|-
| style='text-align:right'| 12027
| ''[[:d:Q97732453|Eluned Gramich]]''
|
|
|
|-
| style='text-align:right'| 12028
| ''[[:d:Q97741582|Rhian Cleverly]]''
| [[Coadan:Lewes FC Women 2 Liverpool Women 2 01 11 2020-242 (50557034961).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12029
| ''[[:d:Q97741605|Ellie Leek]]''
| [[Coadan:Ellie Leek Blackburn Rovers Women 2021 (sq cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12030
| ''[[:d:Q98019030|Rhydian Richards]]''
|
|
|
|-
| style='text-align:right'| 12031
| ''[[:d:Q98076937|Jonathan Denning]]''
|
|
|
|-
| style='text-align:right'| 12032
| ''[[:d:Q98088454|Harry Powell]]''
|
|
|
|-
| style='text-align:right'| 12033
| ''[[:d:Q98098855|Scott Phillips]]''
|
|
|
|-
| style='text-align:right'| 12034
| ''[[:d:Q98104064|Ieuan Owen]]''
|
|
|
|-
| style='text-align:right'| 12035
| ''[[:d:Q98188056|Reuben de Maid]]''
|
|
|
|-
| style='text-align:right'| 12036
| ''[[:d:Q98761657|Ronald Clifford Bateman]]''
|
|
|
|-
| style='text-align:right'| 12037
| ''[[:d:Q98886407|Dafydd Edwards]]''
|
|
|
|-
| style='text-align:right'| 12038
| ''[[:d:Q98968495|Natasha Asghar]]''
| [[Coadan:Natasha-asghar.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12039
| ''[[:d:Q98970349|Sonny Lewis]]''
|
|
|
|-
| style='text-align:right'| 12040
| ''[[:d:Q98971974|Lewys Twamley]]''
|
|
|
|-
| style='text-align:right'| 12041
| ''[[:d:Q99479049|CDawgVA]]''
| [[Coadan:CDawgVA at SMASH 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12042
| ''[[:d:Q99540803|John Woolley]]''
|
|
|
|-
| style='text-align:right'| 12043
| ''[[:d:Q100144360|Casi Wyn]]''
| [[Coadan:Casi Wyn in Capel Moriah 03.JPG|center|128px]]
|
|
|-
| style='text-align:right'| 12044
| ''[[:d:Q100235419|Robert Albert Jones]]''
|
|
|
|-
| style='text-align:right'| 12045
| ''[[:d:Q100243553|Charlie Hulson]]''
|
|
|
|-
| style='text-align:right'| 12046
| ''[[:d:Q100596005|Sarah J. Lloyd]]''
|
|
|
|-
| style='text-align:right'| 12047
| ''[[:d:Q100634638|Jalisa Andrews]]''
|
|
|
|-
| style='text-align:right'| 12048
| ''[[:d:Q100741889|Llinos Medi]]''
| [[Coadan:Official portrait of Llinos Medi MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12049
| ''[[:d:Q100929975|Jamie Hill]]''
|
|
|
|-
| style='text-align:right'| 12050
| ''[[:d:Q100942348|Dai Powell]]''
|
|
|
|-
| style='text-align:right'| 12051
| ''[[:d:Q100951828|Emily Maltman]]''
| [[Coadan:Emily Maltman.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12052
| ''[[:d:Q101054639|Paul Merchant]]''
|
|
|
|-
| style='text-align:right'| 12053
| ''[[:d:Q101090855|Callum Carson]]''
|
|
|
|-
| style='text-align:right'| 12054
| ''[[:d:Q101103863|Reilly Featherstone]]''
|
|
|
|-
| style='text-align:right'| 12055
| ''[[:d:Q101130033|Joe Hawkins]]''
| [[Coadan:Joe Hawkins 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12056
| ''[[:d:Q101221023|Arianwen]]''
|
|
|
|-
| style='text-align:right'| 12057
| ''[[:d:Q101223178|Leighton Alfred]]''
|
|
|
|-
| style='text-align:right'| 12058
| ''[[:d:Q101417848|Jac Price]]''
|
|
|
|-
| style='text-align:right'| 12059
| ''[[:d:Q101513237|Rhys Jenkins]]''
|
|
|
|-
| style='text-align:right'| 12060
| ''[[:d:Q101553967|Russell L. Jones]]''
|
|
|
|-
| style='text-align:right'| 12061
| ''[[:d:Q101915918|Eluned King]]''
| [[Coadan:2019 UCI Juniors Track World Championships 092.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12062
| ''[[:d:Q102036559|Harrison Bright]]''
|
|
|
|-
| style='text-align:right'| 12063
| ''[[:d:Q102036561|Callum Brain]]''
|
|
|
|-
| style='text-align:right'| 12064
| ''[[:d:Q102036566|Aneurin Livermore]]''
|
|
|
|-
| style='text-align:right'| 12065
| ''[[:d:Q102036570|Callum Ryan-Phillip]]''
|
|
|
|-
| style='text-align:right'| 12066
| ''[[:d:Q102046790|Teddy Williams]]''
| [[Coadan:Teddy Williams March 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12067
| ''[[:d:Q102183413|Richard Evans]]''
|
|
|
|-
| style='text-align:right'| 12068
| ''[[:d:Q102229381|A. Thomas Fuller]]''
|
|
|
|-
| style='text-align:right'| 12069
| ''[[:d:Q102245338|Gwilym Bradley]]''
|
|
|
|-
| style='text-align:right'| 12070
| ''[[:d:Q102245350|Iestyn Harris]]''
|
|
|
|-
| style='text-align:right'| 12071
| ''[[:d:Q102289268|Ash Randall]]''
|
|
|
|-
| style='text-align:right'| 12072
| ''[[:d:Q102359203|Stuart Cornes]]''
|
|
|
|-
| style='text-align:right'| 12073
| ''[[:d:Q102428219|James Beaumont]]''
|
|
|
|-
| style='text-align:right'| 12074
| ''[[:d:Q102735094|Mason Grady]]''
| [[Coadan:Mason Grady u20 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12075
| ''[[:d:Q103716744|Taine Plumtree]]''
| [[Coadan:Taine Plumtree 20250419 174612.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12076
| ''[[:d:Q104057253|Scott McGlynn]]''
| [[Coadan:Scott McGlynn.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12077
| ''[[:d:Q104175572|Luke Yendle]]''
|
|
|
|-
| style='text-align:right'| 12078
| ''[[:d:Q104224598|Charlotte Carey]]''
|
|
|
|-
| style='text-align:right'| 12079
| ''[[:d:Q104415876|Pedr Ap Llwyd]]''
| [[Coadan:Pedr ap Llwyd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12080
| ''[[:d:Q104531559|Zoe Bäckstedt]]''
| [[Coadan:2021 UEC Track Jun & U23 European Championships 043.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12081
| ''[[:d:Q104545709|Ian Williams]]''
|
|
|
|-
| style='text-align:right'| 12082
| ''[[:d:Q104590335|Ruben Chorlton-Owen]]''
|
|
|
|-
| style='text-align:right'| 12083
| ''[[:d:Q104655980|Denise Sommers]]''
|
|
|
|-
| style='text-align:right'| 12084
| ''[[:d:Q104719149|Alun Jones]]''
|
|
|
|-
| style='text-align:right'| 12085
| ''[[:d:Q104761963|Cameron Evans]]''
|
|
|
|-
| style='text-align:right'| 12086
| ''[[:d:Q104765398|Matilda Devries]]''
|
|
|
|-
| style='text-align:right'| 12087
| ''[[:d:Q104768094|Kemsley Mathias]]''
| [[Coadan:Kemsley Mathias 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12088
| ''[[:d:Q104839524|James Jones]]''
|
|
|
|-
| style='text-align:right'| 12089
| ''[[:d:Q104906897|Lyndon Simmonds]]''
|
|
|
|-
| style='text-align:right'| 12090
| ''[[:d:Q104907464|Charlie Caton]]''
|
|
|
|-
| style='text-align:right'| 12091
| ''[[:d:Q105070508|Callum Scott Howells]]''
|
|
|
|-
| style='text-align:right'| 12092
| ''[[:d:Q105080581|Ffion Davies]]''
| [[Coadan:Ffion Davies OF 02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12093
| ''[[:d:Q105140904|Rufus Wells]]''
|
|
|
|-
| style='text-align:right'| 12094
| ''[[:d:Q105155401|Carwyn Tuipulotu]]''
|
|
|
|-
| style='text-align:right'| 12095
| ''[[:d:Q105188058|Richard Hermer]]''
| [[Coadan:Richard Hermer Official Cabinet Portrait, July 2024 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12096
| ''[[:d:Q105199556|Dan Hawkins]]''
|
|
|
|-
| style='text-align:right'| 12097
| ''[[:d:Q105298835|Jill Nalder]]''
| [[Coadan:Jill nalder 2022 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12098
| ''[[:d:Q105305836|Steffan Thomas]]''
|
|
|
|-
| style='text-align:right'| 12099
| ''[[:d:Q105319846|Alex George]]''
| [[Coadan:Alex George at the British Library.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12100
| ''[[:d:Q105388992|Rhian Nest James]]''
|
|
|
|-
| style='text-align:right'| 12101
| ''[[:d:Q105437716|Joshua Milton]]''
| [[Coadan:Joshua Milton 2, 2015 Wimbledon Qualifying - Diliff.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12102
| ''[[:d:Q105480896|Rubin Colwill]]''
| [[Coadan:Rubin Colwill 05042025 (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12103
| ''[[:d:Q105560094|Lewy Williams]]''
|
|
|
|-
| style='text-align:right'| 12104
| ''[[:d:Q105753094|Huw Williams]]''
|
|
|
|-
| style='text-align:right'| 12105
| ''[[:d:Q105810383|John P. Mahoney]]''
| [[Coadan:1918 John Mahoney Massachusetts House of Representatives.png|center|128px]]
|
|
|-
| style='text-align:right'| 12106
| ''[[:d:Q105812487|Sam Pearson]]''
|
|
|
|-
| style='text-align:right'| 12107
| ''[[:d:Q105821038|Cai Tomos]]''
|
|
|
|-
| style='text-align:right'| 12108
| ''[[:d:Q105893541|Howard A Barnes]]''
|
|
|
|-
| style='text-align:right'| 12109
| ''[[:d:Q105946397|Gwenan Davies]]''
| [[Coadan:Gwen CS.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12110
| ''[[:d:Q105959279|Ali Kent]]''
|
|
|
|-
| style='text-align:right'| 12111
| ''[[:d:Q105972198|Hugh Jones]]''
|
|
|
|-
| style='text-align:right'| 12112
| ''[[:d:Q105973425|Peter Elliott]]''
| [[Coadan:Peter Elliott.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12113
| ''[[:d:Q105977287|Najla Mangoush]]''
| [[Coadan:Najla Mangoush-Headshot-e1645841738656-332x332.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12114
| ''[[:d:Q105981798|Ursula Martin]]''
| [[Coadan:One Woman Walks - Ursula Martin.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12115
| ''[[:d:Q106096160|Alex Griffiths]]''
|
|
|
|-
| style='text-align:right'| 12116
| ''[[:d:Q106097840|Claire Nicholas]]''
|
|
|
|-
| style='text-align:right'| 12117
| ''[[:d:Q106097845|Lauren Parfitt]]''
|
|
|
|-
| style='text-align:right'| 12118
| ''[[:d:Q106104065|Phil Obbard]]''
|
|
|
|-
| style='text-align:right'| 12119
| ''[[:d:Q106141816|Owen Smith]]''
| [[Coadan:Owen Smith 2019 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12120
| ''[[:d:Q106193204|John Corfe]]''
|
|
|
|-
| style='text-align:right'| 12121
| ''[[:d:Q106193430|John Assiratti]]''
|
|
|
|-
| style='text-align:right'| 12122
| ''[[:d:Q106193530|Paul Linwood]]''
|
|
|
|-
| style='text-align:right'| 12123
| ''[[:d:Q106193983|Terry James]]''
|
|
|
|-
| style='text-align:right'| 12124
| ''[[:d:Q106194128|Liam Meek]]''
|
|
|
|-
| style='text-align:right'| 12125
| ''[[:d:Q106201505|Cavan Phillips]]''
|
|
|
|-
| style='text-align:right'| 12126
| ''[[:d:Q106201762|Justin Smith]]''
|
|
|
|-
| style='text-align:right'| 12127
| ''[[:d:Q106204495|Brian Lashbrook]]''
|
|
|
|-
| style='text-align:right'| 12128
| ''[[:d:Q106254832|Gwenllian Howells]]''
| [[Coadan:Gwenllian Evans (5236480).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12129
| ''[[:d:Q106270402|Angela Hui]]''
| [[Coadan:Angela hui 2022 1.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12130
| ''[[:d:Q106314366|Rosie Andrews]]''
|
|
|
|-
| style='text-align:right'| 12131
| ''[[:d:Q106351904|Adi Taviner]]''
|
|
|
|-
| style='text-align:right'| 12132
| ''[[:d:Q106364026|Kerin Lake]]''
|
|
|
|-
| style='text-align:right'| 12133
| ''[[:d:Q106452516|Ren]]''
|
|
|
|-
| style='text-align:right'| 12134
| ''[[:d:Q106459264|Jack Shore]]''
| [[Coadan:Jack Shore at CAGE Warrior 100.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12135
| ''[[:d:Q106465167|Alisha Butchers]]''
|
|
|
|-
| style='text-align:right'| 12136
| ''[[:d:Q106465379|Sam Jenkins]]''
| [[Coadan:The Great Welsh Revival Mr. Sam Jenkins-- the Sankey of Wales. (5294015).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12137
| ''[[:d:Q106492696|Gwenllian Pyrs]]''
|
|
|
|-
| style='text-align:right'| 12138
| ''[[:d:Q106496101|Robyn Wilkins]]''
|
|
|
|-
| style='text-align:right'| 12139
| ''[[:d:Q106540639|Amber Davies]]''
| [[Coadan:Amber Davies in 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12140
| ''[[:d:Q106604082|Jamie Miller]]''
| [[Coadan:Jamie Miller 2022.png|center|128px]]
|
|
|-
| style='text-align:right'| 12141
| ''[[:d:Q106614747|Immanuel Feyi-Waboso]]''
| [[Coadan:Immanuel Feyi-Waboso LQ Feb 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12142
| ''[[:d:Q106629768|Ann Parry Owen]]''
| [[Coadan:Annparryowen02.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12143
| ''[[:d:Q106629794|Johanna Waters]]''
|
|
|
|-
| style='text-align:right'| 12144
| ''[[:d:Q106645035|Shaquille Wynter-Coles]]''
|
|
|
|-
| style='text-align:right'| 12145
| ''[[:d:Q106687698|Timothy Jones]]''
|
|
|
|-
| style='text-align:right'| 12146
| ''[[:d:Q106754536|Gareth Davies]]''
| [[Coadan:GarethDaviesMS-Castle.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12147
| ''[[:d:Q106761230|Buffy Williams]]''
| [[Coadan:Buffy-williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12148
| ''[[:d:Q106762245|James Evans]]''
| [[Coadan:James-evans.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12149
| ''[[:d:Q106766510|Cefin Campbell]]''
| [[Coadan:Cefin Campbell yng Nghaerfyrddin (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12150
| ''[[:d:Q106808905|Lawrie Hooper]]''
|
|
|
|-
| style='text-align:right'| 12151
| ''[[:d:Q106812083|Lisa Neumann]]''
|
|
|
|-
| style='text-align:right'| 12152
| ''[[:d:Q106814756|Luke Fletcher]]''
| [[Coadan:Luke-fletcher.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12153
| ''[[:d:Q106908968|Barbara Cooper]]''
|
|
|
|-
| style='text-align:right'| 12154
| ''[[:d:Q106935335|Joe Roberts]]''
|
|
|
|-
| style='text-align:right'| 12155
| ''[[:d:Q106940566|Mike Prosser]]''
|
|
|
|-
| style='text-align:right'| 12156
| ''[[:d:Q107012530|Harriet Jones]]''
|
|
|
|-
| style='text-align:right'| 12157
| ''[[:d:Q107021806|Mark Harding]]''
|
|
|
|-
| style='text-align:right'| 12158
| ''[[:d:Q107031300|Mared Jarman]]''
|
|
|
|-
| style='text-align:right'| 12159
| ''[[:d:Q107033474|Hanna Jarman]]''
|
|
|
|-
| style='text-align:right'| 12160
| ''[[:d:Q107062398|Noel Kennedy]]''
|
|
|
|-
| style='text-align:right'| 12161
| ''[[:d:Q107094503|Christopher Williams]]''
|
|
|
|-
| style='text-align:right'| 12162
| ''[[:d:Q107126154|Ntazana Mayembe]]''
|
|
|
|-
| style='text-align:right'| 12163
| ''[[:d:Q107212477|Megan Davies]]''
|
|
|
|-
| style='text-align:right'| 12164
| ''[[:d:Q107244824|Gavin Bilton]]''
|
|
|
|-
| style='text-align:right'| 12165
| ''[[:d:Q107284337|Sarah Green]]''
| [[Coadan:Official portrait of Sarah Green MP crop 2, 2021.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12166
| ''[[:d:Q107355375|Jake Heyward]]''
| [[Coadan:Crop 1500 metres men final Tampere 2018.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12167
| ''[[:d:Q107479464|Jeremiah Azu]]''
| [[Coadan:2022-08-21 European Championships 2022 – Men's 4 x 100 Metres by Sandro Halank–014.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12168
| ''[[:d:Q107521039|Hannah Brier]]''
|
|
|
|-
| style='text-align:right'| 12169
| ''[[:d:Q107559900|Morfudd Strange]]''
|
|
|
|-
| style='text-align:right'| 12170
| ''[[:d:Q107579601|Eric Griffiths]]''
|
|
|
|-
| style='text-align:right'| 12171
| ''[[:d:Q107580139|Andrew York]]''
|
|
|
|-
| style='text-align:right'| 12172
| ''[[:d:Q107583041|Miggs Wynne Morris]]''
|
|
|
|-
| style='text-align:right'| 12173
| ''[[:d:Q107613302|Connor Marshall]]''
|
|
|
|-
| style='text-align:right'| 12174
| ''[[:d:Q107631283|Paula Craig]]''
| [[Coadan:Paula Craig MBE British former detective (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12175
| ''[[:d:Q107820965|Hector Pardoe]]''
| [[Coadan:Team GB Hector Pardoe.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12177
| ''[[:d:Q108115703|Hefin Elis]]''
|
|
|
|-
| style='text-align:right'| 12178
| ''[[:d:Q108155320|Thomas Davies]]''
|
|
|
|-
| style='text-align:right'| 12179
| ''[[:d:Q108183826|Ian Parri]]''
|
|
|
|-
| style='text-align:right'| 12180
| ''[[:d:Q108187231|M. A. Oliver-Semenov]]''
|
|
|
|-
| style='text-align:right'| 12181
| ''[[:d:Q108192429|Trefor Prest]]''
|
|
|
|-
| style='text-align:right'| 12182
| ''[[:d:Q108194762|David Foster-Morgan]]''
|
|
|
|-
| style='text-align:right'| 12183
| ''[[:d:Q108219735|Daniel Williams]]''
|
|
|
|-
| style='text-align:right'| 12184
| ''[[:d:Q108284983|Georgia Wilson]]''
|
|
|
|-
| style='text-align:right'| 12185
| ''[[:d:Q108306292|Cathrin Williams]]''
|
|
|
|-
| style='text-align:right'| 12186
| ''[[:d:Q108313299|Gaynor Madoc Leonard]]''
|
|
|
|-
| style='text-align:right'| 12187
| ''[[:d:Q108314008|Meirion Jordan]]''
|
|
|
|-
| style='text-align:right'| 12188
| ''[[:d:Q108323729|Harri Jenkins]]''
|
|
|
|-
| style='text-align:right'| 12189
| ''[[:d:Q108354160|Zack Maher]]''
|
|
|
|-
| style='text-align:right'| 12190
| ''[[:d:Q108373707|Omid Scobie]]''
| [[Coadan:2022 - Fourth Estate SAM 9975 (52472936660) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12191
| ''[[:d:Q108485535|Jack Jones]]''
|
|
|
|-
| style='text-align:right'| 12192
| ''[[:d:Q108485546|Noel Edwards]]''
|
|
|
|-
| style='text-align:right'| 12193
| ''[[:d:Q108485747|Sam Bowen]]''
|
|
|
|-
| style='text-align:right'| 12194
| ''[[:d:Q108493570|Waseem Abbas]]''
|
|
|
|-
| style='text-align:right'| 12195
| ''[[:d:Q108524848|Josh Tarling]]''
| [[Coadan:2021 UEC Track Jun & U23 European Championships 278.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12196
| ''[[:d:Q108532305|Thomas Matthews]]''
|
|
|
|-
| style='text-align:right'| 12197
| ''[[:d:Q108536009|Kieron Evans]]''
|
|
|
|-
| style='text-align:right'| 12198
| ''[[:d:Q108545267|Patrick Corcoran]]''
|
|
|
|-
| style='text-align:right'| 12199
| ''[[:d:Q108550800|Iestyn Evans]]''
|
|
|
|-
| style='text-align:right'| 12200
| ''[[:d:Q108560477|A.M.C. Nicholl]]''
|
|
|
|-
| style='text-align:right'| 12201
| ''[[:d:Q108566666|J.A. Speed]]''
|
|
|
|-
| style='text-align:right'| 12202
| ''[[:d:Q108736988|Siân Thomas]]''
|
|
|
|-
| style='text-align:right'| 12203
| ''[[:d:Q108828382|Owain Llŷr]]''
|
|
|
|-
| style='text-align:right'| 12204
| ''[[:d:Q108837354|Dylan Emery]]''
|
|
|
|-
| style='text-align:right'| 12205
| ''[[:d:Q108874754|Matt Sargent]]''
|
|
|
|-
| style='text-align:right'| 12206
| ''[[:d:Q109015181|James Rowberry]]''
|
|
|
|-
| style='text-align:right'| 12207
| ''[[:d:Q109296921|Owen Beck]]''
| [[Coadan:Owen Beck.png|center|128px]]
|
|
|-
| style='text-align:right'| 12208
| ''[[:d:Q109442672|Grahame Fox]]''
|
|
|
|-
| style='text-align:right'| 12209
| ''[[:d:Q109567506|Scott Jenkins]]''
|
|
|
|-
| style='text-align:right'| 12210
| ''[[:d:Q109604218|Zac Williams]]''
| [[Coadan:Kidsgrove Athletic v Crewe Alexandra - 5 July 2025 - Zac Williams 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12211
| ''[[:d:Q109733043|Margaret Ellen James]]''
|
|
|
|-
| style='text-align:right'| 12212
| ''[[:d:Q109768829|Shirley Jones]]''
| [[Coadan:Shirley Jones artist 2003.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12213
| ''[[:d:Q109780504|Andreas Christodoulidis]]''
|
|
|
|-
| style='text-align:right'| 12214
| ''[[:d:Q109849817|Pete Williams]]''
|
|
|
|-
| style='text-align:right'| 12215
| ''[[:d:Q109993471|Maureen Rees]]''
|
|
|
|-
| style='text-align:right'| 12216
| ''[[:d:Q110114874|MADDOX]]''
|
|
|
|-
| style='text-align:right'| 12217
| ''[[:d:Q110185703|Cameron Winnett]]''
| [[Coadan:Cameron Winnett 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12218
| ''[[:d:Q110220872|Paul Bowen]]''
|
|
|
|-
| style='text-align:right'| 12219
| ''[[:d:Q110221104|Lex Lamprey]]''
|
|
|
|-
| style='text-align:right'| 12220
| ''[[:d:Q110298824|Alex Mann]]''
| [[Coadan:2025 Autumn Nations Series Wales vs New Zealand 20251122 161654 Alex Mann.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12221
| ''[[:d:Q110400063|Carolina Collet]]''
|
|
|
|-
| style='text-align:right'| 12222
| ''[[:d:Q110440473|David Jones]]''
|
|
|
|-
| style='text-align:right'| 12223
| ''[[:d:Q110622080|Emrys Hughes]]''
|
|
|
|-
| style='text-align:right'| 12224
| ''[[:d:Q110646313|Carys Eleri]]''
|
|
|
|-
| style='text-align:right'| 12225
| ''[[:d:Q110656057|Harri Deaves]]''
|
|
|
|-
| style='text-align:right'| 12226
| ''[[:d:Q110664358|Grace Ellis]]''
|
|
|
|-
| style='text-align:right'| 12227
| ''[[:d:Q110689275|Richard Thomas]]''
|
|
|
|-
| style='text-align:right'| 12228
| ''[[:d:Q110724360|Gwilym Howell Jones]]''
|
|
|
|-
| style='text-align:right'| 12229
| ''[[:d:Q110726191|Evan Thomas]]''
|
|
|
|-
| style='text-align:right'| 12230
| ''[[:d:Q110748385|Efan Daniel]]''
| [[Coadan:Efan Daniel 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12231
| ''[[:d:Q110760139|Calum Kavanagh]]''
|
|
|
|-
| style='text-align:right'| 12232
| ''[[:d:Q110802391|John Ellis Jones]]''
|
|
|
|-
| style='text-align:right'| 12233
| ''[[:d:Q110844810|Beneticta Jane Keene]]''
|
|
|
|-
| style='text-align:right'| 12234
| ''[[:d:Q110859735|Dafydd Jenkins]]''
| [[Coadan:Dafydd Jenkins 2023.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12235
| ''[[:d:Q110918111|Malcolm Williams]]''
|
|
|
|-
| style='text-align:right'| 12236
| ''[[:d:Q110918134|Pamela Field]]''
|
|
|
|-
| style='text-align:right'| 12237
| ''[[:d:Q110939874|David R. Abram]]''
|
|
|
|-
| style='text-align:right'| 12238
| ''[[:d:Q110951897|Robert Rowlands]]''
|
|
|
|-
| style='text-align:right'| 12239
| ''[[:d:Q110952825|Elizabeth Herbert]]''
|
|
|
|-
| style='text-align:right'| 12240
| ''[[:d:Q110987557|Robert Evans]]''
|
|
|
|-
| style='text-align:right'| 12241
| ''[[:d:Q111016512|John Cheshire]]''
|
|
|
|-
| style='text-align:right'| 12242
| ''[[:d:Q111088099|Anna Eliza Pridham]]''
|
|
|
|-
| style='text-align:right'| 12243
| ''[[:d:Q111134348|Rhian Edmunds]]''
| [[Coadan:2021 UEC Track Jun & U23 European Championships 331.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12244
| ''[[:d:Q111170402|Edward Roberts]]''
|
|
|
|-
| style='text-align:right'| 12245
| ''[[:d:Q111206274|Cameron Congreve]]''
| [[Coadan:Cameron Congreve.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12246
| ''[[:d:Q111228239|John N. Jones]]''
|
|
|
|-
| style='text-align:right'| 12247
| ''[[:d:Q111228248|William P. Jones]]''
|
|
|
|-
| style='text-align:right'| 12248
| ''[[:d:Q111228249|William R. Jones]]''
|
|
|
|-
| style='text-align:right'| 12249
| ''[[:d:Q111228454|Robert H. Hughes]]''
|
|
|
|-
| style='text-align:right'| 12250
| ''[[:d:Q111229039|Richard Lewis]]''
|
|
|
|-
| style='text-align:right'| 12251
| ''[[:d:Q111229993|Evan Morgan]]''
|
|
|
|-
| style='text-align:right'| 12252
| ''[[:d:Q111230003|Evan R. Morris]]''
|
|
|
|-
| style='text-align:right'| 12253
| ''[[:d:Q111230638|John T. Williams]]''
|
|
|
|-
| style='text-align:right'| 12254
| ''[[:d:Q111433491|Emma Finucane]]''
| [[Coadan:2024 UEC Track Elite European Championships 091.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12255
| ''[[:d:Q111441867|Lowri Thomas]]''
| [[Coadan:2024 UEC Track Elite European Championships 074.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12257
| ''[[:d:Q111496845|Liam Davies]]''
|
|
|
|-
| style='text-align:right'| 12258
| ''[[:d:Q111635551|Mark McGreal]]''
|
|
|
|-
| style='text-align:right'| 12259
| ''[[:d:Q111692498|Amy Williams]]''
|
|
|
|-
| style='text-align:right'| 12260
| ''[[:d:Q111699970|Salvia]]''
|
|
|
|-
| style='text-align:right'| 12261
| ''[[:d:Q111729269|Margaret Williams]]''
|
|
|
|-
| style='text-align:right'| 12262
| ''[[:d:Q111747294|David Williams]]''
|
|
|
|-
| style='text-align:right'| 12263
| ''[[:d:Q111802911|Lowri Roberts]]''
|
|
|
|-
| style='text-align:right'| 12264
| ''[[:d:Q111805253|Jeanne Le Bars]]''
|
|
|
|-
| style='text-align:right'| 12265
| ''[[:d:Q111843049|Robert Reed]]''
|
|
|
|-
| style='text-align:right'| 12266
| ''[[:d:Q111901957|Tom Sparrow]]''
|
|
|
|-
| style='text-align:right'| 12267
| ''[[:d:Q111902619|Luke Mariette]]''
|
|
|
|-
| style='text-align:right'| 12268
| ''[[:d:Q111907087|Philip Gwynne Jones]]''
|
|
|
|-
| style='text-align:right'| 12269
| ''[[:d:Q111941150|David Hart]]''
|
|
|
|-
| style='text-align:right'| 12270
| ''[[:d:Q111975178|Susannah Owen]]''
|
|
|
|-
| style='text-align:right'| 12271
| ''[[:d:Q111983112|Robert Jones Edwards]]''
|
|
|
|-
| style='text-align:right'| 12272
| ''[[:d:Q112035006|Gina Wilson]]''
|
|
|
|-
| style='text-align:right'| 12273
| ''[[:d:Q112042004|David Marks Jones]]''
|
|
|
|-
| style='text-align:right'| 12274
| ''[[:d:Q112063701|Benjamin Williams]]''
|
|
|
|-
| style='text-align:right'| 12275
| ''[[:d:Q112064480|William Dyfed Parry]]''
|
|
|
|-
| style='text-align:right'| 12276
| ''[[:d:Q112080351|Mimi Xu]]''
| [[Coadan:Xu WMQ22 (14) (52191114756).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12277
| ''[[:d:Q112108323|William Bracewell]]''
|
|
|
|-
| style='text-align:right'| 12278
| ''[[:d:Q112108953|Franco Smith]]''
| [[Coadan:Petrus François Smith 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12279
| ''[[:d:Q112117297|Arwen Banning]]''
|
|
|
|-
| style='text-align:right'| 12280
| ''[[:d:Q112128245|Thomas Lloyd Jones]]''
|
|
|
|-
| style='text-align:right'| 12281
| ''[[:d:Q112169408|Ioan Croft]]''
|
|
|
|-
| style='text-align:right'| 12282
| ''[[:d:Q112180788|Garan Croft]]''
|
|
|
|-
| style='text-align:right'| 12283
| ''[[:d:Q112222252|Tony Luigi Leopoldo Lenza]]''
|
|
|
|-
| style='text-align:right'| 12284
| ''[[:d:Q112224804|Jordan Davies]]''
|
|
|
|-
| style='text-align:right'| 12285
| ''[[:d:Q112334557|Rhuanedd Richards]]''
|
|
|
|-
| style='text-align:right'| 12286
| ''[[:d:Q112371425|David Greenslade]]''
|
|
|
|-
| style='text-align:right'| 12287
| ''[[:d:Q112376926|Keith Bayliss]]''
|
|
|
|-
| style='text-align:right'| 12288
| ''[[:d:Q112440218|Gareth Calway]]''
|
|
|
|-
| style='text-align:right'| 12289
| ''[[:d:Q112525506|Emma Glass]]''
|
|
|
|-
| style='text-align:right'| 12290
| ''[[:d:Q112532075|Roger Branfill-Cook]]''
|
|
|
|-
| style='text-align:right'| 12291
| ''[[:d:Q112583717|Ben Barlow]]''
|
|
|
|-
| style='text-align:right'| 12292
| ''[[:d:Q112630388|Peter Lodwick]]''
| [[Coadan:Peter Lodwick.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12293
| ''[[:d:Q112829353|Megan Carter Davies]]''
| [[Coadan:Megan Carter Davies GBR.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12294
| ''[[:d:Q112893294|Vivienne Soan]]''
|
|
|
|-
| style='text-align:right'| 12295
| ''[[:d:Q112968170|Ben Thompson]]''
|
|
|
|-
| style='text-align:right'| 12296
| ''[[:d:Q113006051|Eric Jones]]''
|
|
|
|-
| style='text-align:right'| 12297
| ''[[:d:Q113230729|Alison Cross]]''
|
|
|
|-
| style='text-align:right'| 12298
| ''[[:d:Q113290489|Carly-Sophia Davies]]''
|
|
|
|-
| style='text-align:right'| 12299
| ''[[:d:Q113384254|Medi Harris]]''
|
|
|
|-
| style='text-align:right'| 12300
| ''[[:d:Q113451866|Jasmine Hacker-Jones]]''
|
|
|
|-
| style='text-align:right'| 12301
| ''[[:d:Q113462988|Ryan Astley]]''
| [[Coadan:Ryan Astley.png|center|128px]]
|
|
|-
| style='text-align:right'| 12302
| ''[[:d:Q113551285|Esyllt Maelor]]''
|
|
|
|-
| style='text-align:right'| 12303
| ''[[:d:Q113566900|Tino Belli]]''
|
|
|
|-
| style='text-align:right'| 12304
| ''[[:d:Q113675788|Emlyn Williams]]''
|
|
|
|-
| style='text-align:right'| 12305
| ''[[:d:Q113782878|Subhamati]]''
|
|
|
|-
| style='text-align:right'| 12306
| ''[[:d:Q113845815|Frank Cranmer]]''
|
|
|
|-
| style='text-align:right'| 12307
| ''[[:d:Q113845816|Celia Kenny]]''
|
|
|
|-
| style='text-align:right'| 12308
| ''[[:d:Q113882702|Emily Phillips]]''
| [[Coadan:2022-08-12 European Championships 2022 – Emily Philipps Sport Climbing Women's Boulder by Sandro Halank–097.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12309
| ''[[:d:Q113955291|Elkka]]''
|
|
|
|-
| style='text-align:right'| 12310
| ''[[:d:Q114212000|Sisilia Tuipulotu]]''
|
|
|
|-
| style='text-align:right'| 12311
| ''[[:d:Q114212177|Megan Webb]]''
|
|
|
|-
| style='text-align:right'| 12312
| ''[[:d:Q114341648|Nathan Stoneman]]''
|
|
|
|-
| style='text-align:right'| 12313
| ''[[:d:Q114560082|Lucy Packer]]''
| [[Coadan:Lucy Packer 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12314
| ''[[:d:Q114589891|Peter Collins]]''
|
|
|
|-
| style='text-align:right'| 12315
| ''[[:d:Q114663477|Anna Morris]]''
| [[Coadan:2024 UEC Track Elite European Championships 081.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12316
| ''[[:d:Q114724934|Siôn Daniel Young]]''
|
|
|
|-
| style='text-align:right'| 12317
| ''[[:d:Q114872525|Max Deeds]]''
|
|
|
|-
| style='text-align:right'| 12318
| ''[[:d:Q115049023|Stephen Nigel Thomas]]''
|
|
|
|-
| style='text-align:right'| 12319
| ''[[:d:Q115097654|Joe Low]]''
|
|
|
|-
| style='text-align:right'| 12320
| ''[[:d:Q115124980|Abbie Hern]]''
|
|
|
|-
| style='text-align:right'| 12321
| ''[[:d:Q115130314|Brendan G. C. Smith]]''
|
|
|
|-
| style='text-align:right'| 12322
| ''[[:d:Q115482387|James Fender]]''
|
|
|
|-
| style='text-align:right'| 12323
| ''[[:d:Q115492510|Tako Taal]]''
|
|
|
|-
| style='text-align:right'| 12324
| ''[[:d:Q115526483|Rachel Dawson]]''
|
|
|
|-
| style='text-align:right'| 12325
| ''[[:d:Q115676843|Richard Gwyn]]''
|
|
|
|-
| style='text-align:right'| 12326
| ''[[:d:Q115794521|Iain Martin]]''
| [[Coadan:Professor Iain Martin (Deakin University Vice-Chancellor).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12327
| ''[[:d:Q115796734|Tim Davies]]''
|
|
|
|-
| style='text-align:right'| 12328
| ''[[:d:Q115929783|Connor Morgans]]''
|
|
|
|-
| style='text-align:right'| 12329
| ''[[:d:Q115931070|Aleighcia Scott]]''
| [[Coadan:Aleighcia Scott (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12330
| ''[[:d:Q116178708|Carl Morris]]''
|
|
|
|-
| style='text-align:right'| 12331
| ''[[:d:Q116717924|Jude Brigley]]''
|
|
|
|-
| style='text-align:right'| 12332
| ''[[:d:Q116717968|Gwyn Briwnant-Jones]]''
|
|
|
|-
| style='text-align:right'| 12333
| ''[[:d:Q116792293|Gareth Haulfryn Williams]]''
| [[Coadan:Llen Natur Wicipedia conference15.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12334
| ''[[:d:Q116933504|M. Peter Middleton]]''
|
|
|
|-
| style='text-align:right'| 12335
| ''[[:d:Q116979530|Stacey Lacey]]''
|
|
|
|-
| style='text-align:right'| 12336
| ''[[:d:Q116980442|Eddie James]]''
| [[Coadan:Eddie James 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12337
| ''[[:d:Q117187572|Josh Hathaway]]''
|
|
|
|-
| style='text-align:right'| 12338
| ''[[:d:Q117290164|Fflyn Edwards]]''
|
|
|
|-
| style='text-align:right'| 12339
| ''[[:d:Q117611477|Scott Oates]]''
|
|
|
|-
| style='text-align:right'| 12340
| ''[[:d:Q117611484|Andrew Oates]]''
|
|
|
|-
| style='text-align:right'| 12341
| ''[[:d:Q117846310|Jean Ross]]''
|
|
|
|-
| style='text-align:right'| 12342
| ''[[:d:Q118203177|Ryan Woodman]]''
| [[Coadan:Ryan Woodman 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12343
| ''[[:d:Q118256271|John Jones]]''
|
|
|
|-
| style='text-align:right'| 12344
| ''[[:d:Q118267620|Mai Jones]]''
|
|
|
|-
| style='text-align:right'| 12345
| ''[[:d:Q118268597|Lewis Williams]]''
|
|
|
|-
| style='text-align:right'| 12346
| ''[[:d:Q118397835|Robert Gwilym Jones]]''
|
|
|
|-
| style='text-align:right'| 12347
| ''[[:d:Q119175309|Hana Lili]]''
|
|
|
|-
| style='text-align:right'| 12348
| ''[[:d:Q119545091|Christina Sewell]]''
|
|
|
|-
| style='text-align:right'| 12349
| ''[[:d:Q119983255|Chelsea Dickenson]]''
|
|
|
|-
| style='text-align:right'| 12350
| ''[[:d:Q120608062|Jo Thomas]]''
|
|
|
|-
| style='text-align:right'| 12351
| ''[[:d:Q120617036|Sophie Anderson]]''
|
|
|
|-
| style='text-align:right'| 12352
| ''[[:d:Q120684883|Robert Williams]]''
|
|
|
|-
| style='text-align:right'| 12353
| ''[[:d:Q120692026|Angharad Penrhyn Jones]]''
|
|
|
|-
| style='text-align:right'| 12354
| ''[[:d:Q120801136|Iona Boggie]]''
|
|
|
|-
| style='text-align:right'| 12355
| ''[[:d:Q120801137|Andy Boggie]]''
|
|
|
|-
| style='text-align:right'| 12356
| ''[[:d:Q121139527|Nathan Sussex]]''
|
|
|
|-
| style='text-align:right'| 12357
| ''[[:d:Q121759228|Eileen Demes]]''
| [[Coadan:Eileen Demes 2023 (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12358
| ''[[:d:Q122051699|Wild Boar]]''
| [[Coadan:Wild Boar wrestler.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12359
| ''[[:d:Q122131298|Art School Girlfriend]]''
| [[Coadan:Art School Girlfriend 2023 Cropped.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12360
| ''[[:d:Q122173702|Kenton Morgan]]''
|
|
|
|-
| style='text-align:right'| 12361
| ''[[:d:Q122228095|Timothy Francis Lee]]''
|
|
|
|-
| style='text-align:right'| 12362
| ''[[:d:Q122577954|Alun ap Brinley]]''
|
|
|
|-
| style='text-align:right'| 12363
| ''[[:d:Q122583506|Catrin Arwel]]''
|
|
|
|-
| style='text-align:right'| 12364
| ''[[:d:Q122583808|Rhys Ap William]]''
|
|
|
|-
| style='text-align:right'| 12365
| ''[[:d:Q122927360|Rosie Hughes]]''
|
|
|
|-
| style='text-align:right'| 12366
| ''[[:d:Q122973319|Andrew Lamerton]]''
|
|
|
|-
| style='text-align:right'| 12367
| ''[[:d:Q123055219|Noha Kaiss]]''
|
|
|
|-
| style='text-align:right'| 12368
| ''[[:d:Q123110921|Edie Bens]]''
|
|
|
|-
| style='text-align:right'| 12369
| ''[[:d:Q123219567|Darcie Davies]]''
|
|
|
|-
| style='text-align:right'| 12370
| ''[[:d:Q123238082|Mark Douglas]]''
|
|
|
|-
| style='text-align:right'| 12371
| ''[[:d:Q123272735|Ian Parry-Jones]]''
|
|
|
|-
| style='text-align:right'| 12372
| ''[[:d:Q123347939|Jetset Andy]]''
| [[Coadan:Jetset Andy onboard Qatar Airways' A380.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12373
| ''[[:d:Q123416849|Emily Bridges]]''
|
|
|
|-
| style='text-align:right'| 12374
| ''[[:d:Q123706189|Molly Reardon]]''
|
|
|
|-
| style='text-align:right'| 12375
| ''[[:d:Q123706787|Rosie Carr]]''
|
|
|
|-
| style='text-align:right'| 12376
| ''[[:d:Q123908302|Evie Rees]]''
|
|
|
|-
| style='text-align:right'| 12377
| ''[[:d:Q123943417|Lauren Drew]]''
| [[Coadan:Lauren drew 2022 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12378
| ''[[:d:Q123943566|Mackenzie Martin]]''
| [[Coadan:Mackenzie Martin 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12379
| ''[[:d:Q124023518|Hannah Grae]]''
|
|
|
|-
| style='text-align:right'| 12380
| ''[[:d:Q124093276|Morgan Morse]]''
| [[Coadan:Morgan Morse 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12381
| ''[[:d:Q124251718|Iwan Teifion Davies]]''
|
|
|
|-
| style='text-align:right'| 12382
| ''[[:d:Q124258738|Gwern Gwynfil]]''
| [[Coadan:GGwynfil2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12383
| ''[[:d:Q124344804|Dan Edwards]]''
| [[Coadan:Dan Edwards LQ 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12384
| ''[[:d:Q124355125|Therese Squires]]''
|
|
|
|-
| style='text-align:right'| 12385
| ''[[:d:Q124357694|Evan Lloyd]]''
|
|
|
|-
| style='text-align:right'| 12386
| ''[[:d:Q124369042|Elin Maher]]''
| [[Coadan:Elin Maher.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12387
| ''[[:d:Q124393203|Siân Rhiannon Williams]]''
| [[Coadan:Siân Rhiannon Williams.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12388
| ''[[:d:Q124433180|Ann Davies]]''
| [[Coadan:Official portrait of Ann Davies MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12389
| ''[[:d:Q124535331|Nel Metcalfe]]''
|
|
|
|-
| style='text-align:right'| 12390
| ''[[:d:Q124658214|James Crole]]''
|
|
|
|-
| style='text-align:right'| 12391
| ''[[:d:Q124684373|Kate Williams]]''
|
|
|
|-
| style='text-align:right'| 12392
| ''[[:d:Q124697774|Thomas Johnson]]''
|
|
|
|-
| style='text-align:right'| 12393
| ''[[:d:Q124830321|Sam Fisher]]''
| [[Coadan:2024 UEC Track Jun & U23 European Championships 074.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12394
| ''[[:d:Q124850599|Jonathan Sergison]]''
|
|
|
|-
| style='text-align:right'| 12395
| ''[[:d:Q125015402|aimsey]]''
| [[Coadan:Aimsey in 2022.png|center|128px]]
|
|
|-
| style='text-align:right'| 12396
| ''[[:d:Q125191138|Anya Paintsil]]''
|
|
|
|-
| style='text-align:right'| 12397
| ''[[:d:Q125216731|Drew Pritchard]]''
|
|
|
|-
| style='text-align:right'| 12398
| ''[[:d:Q125307823|Ronald Barraud]]''
|
|
|
|-
| style='text-align:right'| 12399
| ''[[:d:Q125324831|Henry Edwards]]''
|
|
|
|-
| style='text-align:right'| 12400
| ''[[:d:Q125476789|Carys Davies]]''
|
|
|
|-
| style='text-align:right'| 12401
| ''[[:d:Q125525882|Edward Morus Jones]]''
| [[Coadan:30 Medi 2012 - Dirprwy Lywydd yn Nant Gwrtheyrn 30 September 2012 - Deputy Presiding Officer at Nant Gwrtheyrn (8070076064) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12402
| ''[[:d:Q125543942|Charlie Crew]]''
|
|
|
|-
| style='text-align:right'| 12403
| ''[[:d:Q125635746|Peter Rees]]''
|
|
|
|-
| style='text-align:right'| 12404
| ''[[:d:Q125792432|Mahala Davis]]''
|
|
|
|-
| style='text-align:right'| 12405
| ''[[:d:Q125908048|Ursula Huws]]''
| [[Coadan:Ursula Huws.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12406
| ''[[:d:Q126484833|Sabrina Lee]]''
|
|
|
|-
| style='text-align:right'| 12407
| ''[[:d:Q126501230|Ken Caswell]]''
|
|
|
|-
| style='text-align:right'| 12408
| ''[[:d:Q126847730|Claire Hughes]]''
| [[Coadan:Official portrait of Claire Hughes MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12409
| ''[[:d:Q126848493|Alex Barros-Curtis]]''
| [[Coadan:Official portrait of Alex Barros-Curtis MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12410
| ''[[:d:Q126848741|Becky Gittins]]''
| [[Coadan:Official portrait of Becky Gittins MP crop 2.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12411
| ''[[:d:Q127377863|Lili Jones]]''
|
|
|
|-
| style='text-align:right'| 12412
| ''[[:d:Q127416552|Rhys Thomas]]''
|
|
|
|-
| style='text-align:right'| 12413
| ''[[:d:Q127548319|Catherine George]]''
|
|
|
|-
| style='text-align:right'| 12414
| ''[[:d:Q127592033|Huw Rowlands]]''
|
|
|
|-
| style='text-align:right'| 12415
| ''[[:d:Q129075710|Helen Prosser]]''
|
|
|
|-
| style='text-align:right'| 12416
| ''[[:d:Q129257059|Axel Rudakubana]]''
|
|
|
|-
| style='text-align:right'| 12417
| ''[[:d:Q129485359|Martin Ace]]''
|
|
|
|-
| style='text-align:right'| 12418
| ''[[:d:Q129485603|Dafydd Emyr]]''
|
|
|
|-
| style='text-align:right'| 12419
| ''[[:d:Q129914267|Siân Lewis]]''
| [[Coadan:Siân Lewis 2018, Llanelwedd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12420
| ''[[:d:Q129920146|Macs Page]]''
|
|
|
|-
| style='text-align:right'| 12421
| ''[[:d:Q130218515|Jane Maurice]]''
|
|
|
|-
| style='text-align:right'| 12422
| ''[[:d:Q130238722|Llion Jones]]''
| [[Coadan:Llion Jones, author of Attention is All You Need, at CIC Tokyo speaking about sakana.ai (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12423
| ''[[:d:Q130254772|Dominic Chennell]]''
|
|
|
|-
| style='text-align:right'| 12424
| ''[[:d:Q130259565|Lewis Hopkins]]''
|
|
|
|-
| style='text-align:right'| 12426
| ''[[:d:Q130319607|Julian Webber]]''
|
|
|
|-
| style='text-align:right'| 12427
| ''[[:d:Q130340125|Christopher Edwards]]''
|
|
|
|-
| style='text-align:right'| 12428
| ''[[:d:Q130377526|Morfudd Hughes]]''
|
|
|
|-
| style='text-align:right'| 12429
| ''[[:d:Q130402747|Adam Sylvester]]''
|
|
|
|-
| style='text-align:right'| 12430
| ''[[:d:Q130447044|Jack Can Karadoğan]]''
|
|
|
|-
| style='text-align:right'| 12431
| ''[[:d:Q130458780|Brodie Coghlan]]''
|
|
|
|-
| style='text-align:right'| 12432
| ''[[:d:Q130469355|Tonya Smith]]''
|
|
|
|-
| style='text-align:right'| 12433
| ''[[:d:Q130536171|Ella Lloyd]]''
| [[Coadan:Ella Lloyd Singapore 2025.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12434
| ''[[:d:Q130547278|Deborah Humble]]''
|
|
|
|-
| style='text-align:right'| 12435
| ''[[:d:Q130707271|Dewi Wyn Williams]]''
|
|
|
|-
| style='text-align:right'| 12436
| ''[[:d:Q130750866|Maredudd ap Huw]]''
|
|
|
|-
| style='text-align:right'| 12437
| ''[[:d:Q130778036|David Hieatt]]''
|
|
|
|-
| style='text-align:right'| 12438
| ''[[:d:Q131171335|Jenni Hall]]''
|
|
|
|-
| style='text-align:right'| 12439
| ''[[:d:Q131304634|Hywel Jenkins]]''
|
|
|
|-
| style='text-align:right'| 12440
| ''[[:d:Q131336737|Joe Thomas]]''
|
|
|
|-
| style='text-align:right'| 12441
| ''[[:d:Q131587589|Ronan Kpakio]]''
|
|
|
|-
| style='text-align:right'| 12442
| ''[[:d:Q131598778|Maisie Davies]]''
|
|
|
|-
| style='text-align:right'| 12443
| ''[[:d:Q131629835|Helen Giza]]''
|
|
|
|-
| style='text-align:right'| 12444
| ''[[:d:Q131772384|Vicky Franzinetti]]''
|
|
|
|-
| style='text-align:right'| 12445
| ''[[:d:Q131775524|Adam Gorb]]''
|
|
|
|-
| style='text-align:right'| 12446
| ''[[:d:Q131911160|Oliver Bradley]]''
|
|
|
|-
| style='text-align:right'| 12447
| ''[[:d:Q131993923|Ian Hughes]]''
|
|
|
|-
| style='text-align:right'| 12448
| ''[[:d:Q132159245|Sam Scott]]''
|
|
|
|-
| style='text-align:right'| 12449
| ''[[:d:Q132178548|Ben Warren]]''
|
|
|
|-
| style='text-align:right'| 12450
| ''[[:d:Q132184460|John Michael]]''
|
|
|
|-
| style='text-align:right'| 12451
| ''[[:d:Q132190490|Griffith Jones]]''
|
|
|
|-
| style='text-align:right'| 12452
| ''[[:d:Q132797313|Shea Pita]]''
|
|
|
|-
| style='text-align:right'| 12453
| ''[[:d:Q132858636|Huw Carrod]]''
|
|
|
|-
| style='text-align:right'| 12454
| ''[[:d:Q132862482|Dylan Lawlor]]''
|
|
|
|-
| style='text-align:right'| 12455
| ''[[:d:Q133095940|Phillip Manley]]''
|
|
|
|-
| style='text-align:right'| 12456
| ''[[:d:Q133097679|Mika Watkins]]''
|
|
|
|-
| style='text-align:right'| 12457
| ''[[:d:Q133133006|Hayley Roberts]]''
|
|
|
|-
| style='text-align:right'| 12458
| ''[[:d:Q133189642|Meinir Mathias]]''
|
|
|
|-
| style='text-align:right'| 12459
| ''[[:d:Q133201015|Tegwen Morris]]''
| [[Coadan:Tegwen Morris yn Eisteddfod Genedlaethol Tregaron 2022.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12460
| ''[[:d:Q133266038|Mair Tomos Ifans]]''
|
|
|
|-
| style='text-align:right'| 12461
| ''[[:d:Q133324047|Jonathan Bedford]]''
|
|
|
|-
| style='text-align:right'| 12462
| ''[[:d:Q133333315|Ranjith Viswanathan]]''
|
|
|
|-
| style='text-align:right'| 12463
| ''[[:d:Q133420125|Emma Phillips]]''
|
|
|
|-
| style='text-align:right'| 12464
| ''[[:d:Q133423116|Doreen Cunningham]]''
|
|
|
|-
| style='text-align:right'| 12465
| ''[[:d:Q133473135|Jenni Scoble]]''
|
|
|
|-
| style='text-align:right'| 12466
| ''[[:d:Q133473306|Gwennan Hopkins]]''
|
|
|
|-
| style='text-align:right'| 12467
| ''[[:d:Q133473427|Sian Jones]]''
|
|
|
|-
| style='text-align:right'| 12468
| ''[[:d:Q133584530|Michael Witts]]''
|
|
|
|-
| style='text-align:right'| 12469
| ''[[:d:Q133599218|Phil Knight]]''
|
|
|
|-
| style='text-align:right'| 12470
| ''[[:d:Q133607403|Owen Griffith]]''
|
|
|
|-
| style='text-align:right'| 12471
| ''[[:d:Q133616206|Jeffrey Lloyd-Roberts]]''
|
|
|
|-
| style='text-align:right'| 12472
| ''[[:d:Q133630658|Margaret Simons]]''
|
|
|
|-
| style='text-align:right'| 12473
| ''[[:d:Q133634939|Ifor Ap Gwilym]]''
|
|
|
|-
| style='text-align:right'| 12474
| ''[[:d:Q133638417|Brian Earnshaw]]''
|
|
|
|-
| style='text-align:right'| 12475
| ''[[:d:Q133646647|Joan Davies]]''
|
|
|
|-
| style='text-align:right'| 12476
| ''[[:d:Q133656235|Thomas Goddard]]''
|
|
|
|-
| style='text-align:right'| 12477
| ''[[:d:Q133657213|Judy Taylor]]''
|
|
|
|-
| style='text-align:right'| 12478
| ''[[:d:Q133659331|Eleanor Goldsmith]]''
|
|
|
|-
| style='text-align:right'| 12479
| ''[[:d:Q133673407|Jonathan Lichtenstein]]''
|
|
|
|-
| style='text-align:right'| 12480
| ''[[:d:Q133687251|Tako Taal]]''
|
|
|
|-
| style='text-align:right'| 12481
| ''[[:d:Q133697488|Malcolm Carrick]]''
|
|
|
|-
| style='text-align:right'| 12482
| ''[[:d:Q133702951|Richard Cottle]]''
|
|
|
|-
| style='text-align:right'| 12483
| ''[[:d:Q133705306|Neal Davies]]''
|
|
|
|-
| style='text-align:right'| 12484
| ''[[:d:Q133710497|Pete Davis]]''
|
|
|
|-
| style='text-align:right'| 12485
| ''[[:d:Q133738864|David Peterson]]''
|
|
|
|-
| style='text-align:right'| 12486
| ''[[:d:Q133800806|Brian Minchin]]''
|
|
|
|-
| style='text-align:right'| 12487
| ''[[:d:Q133821219|Siôn Tomos Owen]]''
|
|
|
|-
| style='text-align:right'| 12488
| ''[[:d:Q133822117|Sara Lloyd]]''
|
|
|
|-
| style='text-align:right'| 12489
| ''[[:d:Q134058120|William Owen Thomas]]''
| [[Coadan:W O Thomas, author of "Dwywaith o amgylch y byd" NLW3364433.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12490
| ''[[:d:Q134086321|Richard Winter]]''
| [[Coadan:Revd Richrad Winter, Llangollen (CM) (1870) NLW3361841.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12491
| ''[[:d:Q134087004|Hugh Lloyd]]''
|
|
|
|-
| style='text-align:right'| 12492
| ''[[:d:Q134100727|Ezra Jones]]''
| [[Coadan:Revd Ezra Jones, Prestatyn NLW3365168.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12493
| ''[[:d:Q134113094|Aaron Tamme]]''
|
|
|
|-
| style='text-align:right'| 12494
| ''[[:d:Q134251817|Emyr Davies]]''
|
|
|
|-
| style='text-align:right'| 12495
| ''[[:d:Q134318713|Gareth Noel Williams]]''
|
|
|
|-
| style='text-align:right'| 12496
| ''[[:d:Q134404200|Danielle St James]]''
|
|
|
|-
| style='text-align:right'| 12497
| ''[[:d:Q134437016|Anna Fiteni]]''
|
|
|
|-
| style='text-align:right'| 12498
| ''[[:d:Q134476408|Ann Owen]]''
| [[Coadan:The mother of John Jones (Myrddin Fardd, 1836-1921) NLW3363215.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12499
| ''[[:d:Q134580585|Ted Goddard]]''
|
|
|
|-
| style='text-align:right'| 12500
| ''[[:d:Q134582819|Jonathan Phillip Hicks]]''
|
|
|
|-
| style='text-align:right'| 12501
| ''[[:d:Q134591661|Abigail Bergstrom]]''
|
|
|
|-
| style='text-align:right'| 12502
| ''[[:d:Q134619929|Marilyn Jenkins]]''
|
|
|
|-
| style='text-align:right'| 12503
| ''[[:d:Q134620192|Steve Griffiths]]''
|
|
|
|-
| style='text-align:right'| 12504
| ''[[:d:Q134716062|David Jandrell]]''
|
|
|
|-
| style='text-align:right'| 12505
| ''[[:d:Q134727478|Niels McDonald]]''
|
|
|
|-
| style='text-align:right'| 12506
| ''[[:d:Q134959889|James Rourke]]''
|
|
|
|-
| style='text-align:right'| 12507
| ''[[:d:Q134963596|David Conway]]''
|
|
|
|-
| style='text-align:right'| 12508
| ''[[:d:Q134965930|John Vaughan]]''
|
|
|
|-
| style='text-align:right'| 12509
| ''[[:d:Q134980816|Elizabeth Mary Williams]]''
|
|
|
|-
| style='text-align:right'| 12510
| ''[[:d:Q135001613|Lee David Bowen]]''
| [[Coadan:Lee David Bowen.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12511
| ''[[:d:Q135012716|Letitia Grey]]''
|
|
|
|-
| style='text-align:right'| 12512
| ''[[:d:Q135112405|Sam Locke]]''
| [[Coadan:Sam Locke (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12513
| ''[[:d:Q135256033|David Williams]]''
|
|
|
|-
| style='text-align:right'| 12514
| ''[[:d:Q135350169|Andrew Williams]]''
|
|
|
|-
| style='text-align:right'| 12515
| ''[[:d:Q135443626|Jonathan Nefydd]]''
|
|
|
|-
| style='text-align:right'| 12516
| ''[[:d:Q135493598|Joe Jones]]''
|
|
|
|-
| style='text-align:right'| 12517
| ''[[:d:Q135525890|Jessica Blackler]]''
|
|
|
|-
| style='text-align:right'| 12518
| ''[[:d:Q135671920|Seth Strong]]''
|
|
|
|-
| style='text-align:right'| 12519
| ''[[:d:Q135750503|Megan Purvis]]''
|
|
|
|-
| style='text-align:right'| 12520
| ''[[:d:Q135778232|Dewi Bryn Jones]]''
|
|
|
|-
| style='text-align:right'| 12521
| ''[[:d:Q135889461|Shelagh Williams]]''
|
|
|
|-
| style='text-align:right'| 12522
| ''[[:d:Q135909088|Christine Mills]]''
|
|
|
|-
| style='text-align:right'| 12523
| ''[[:d:Q135912144|Alun Jones]]''
| [[Coadan:Alun Jones, editor.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12524
| ''[[:d:Q135962788|Grey Evans]]''
|
|
|
|-
| style='text-align:right'| 12525
| ''[[:d:Q135987473|Jackie Williams]]''
|
|
|
|-
| style='text-align:right'| 12526
| ''[[:d:Q136030278|Enid R Morgan]]''
| [[Coadan:Enid Morgan.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12527
| ''[[:d:Q136092737|Huw Derfel]]''
|
|
|
|-
| style='text-align:right'| 12528
| ''[[:d:Q136093036|Mirain Haf Roberts]]''
|
|
|
|-
| style='text-align:right'| 12529
| ''[[:d:Q136101442|Emyr Wyn Jones]]''
|
|
|
|-
| style='text-align:right'| 12530
| ''[[:d:Q136101766|Bethan Jones]]''
|
|
|
|-
| style='text-align:right'| 12531
| ''[[:d:Q136154260|Priya Hall]]''
|
|
|
|-
| style='text-align:right'| 12532
| ''[[:d:Q136164691|Buddug James Jones]]''
|
|
|
|-
| style='text-align:right'| 12533
| ''[[:d:Q136193245|J. Glyndwr Davies]]''
|
|
|
|-
| style='text-align:right'| 12534
| ''[[:d:Q136205133|Francesca Reece]]''
|
|
|
|-
| style='text-align:right'| 12535
| ''[[:d:Q136311634|Chris Tandy]]''
|
|
|
|-
| style='text-align:right'| 12536
| ''[[:d:Q136312229|Emlyn Gomer]]''
|
|
|
|-
| style='text-align:right'| 12537
| ''[[:d:Q136341005|Mair James McGeever]]''
|
|
|
|-
| style='text-align:right'| 12538
| ''[[:d:Q136350387|Aled Rheon]]''
|
|
|
|-
| style='text-align:right'| 12539
| ''[[:d:Q136350576|Amanda Prothero Thomas]]''
|
|
|
|-
| style='text-align:right'| 12540
| ''[[:d:Q136350952|Catherine Ayers]]''
|
|
|
|-
| style='text-align:right'| 12541
| ''[[:d:Q136357375|Efa Gruffudd Jones]]''
| [[Coadan:Efa Gruffudd Jones, Comisiynydd y Gymraeg 2024.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12542
| ''[[:d:Q136357821|Geraint Cynan]]''
|
|
|
|-
| style='text-align:right'| 12543
| ''[[:d:Q136358080|Huw Ynyr Evans]]''
|
|
|
|-
| style='text-align:right'| 12544
| ''[[:d:Q136358406|Ioan Lord]]''
|
|
|
|-
| style='text-align:right'| 12545
| ''[[:d:Q136360233|Dafydd Cadwgan]]''
|
|
|
|-
| style='text-align:right'| 12546
| ''[[:d:Q136375395|Joy Cornock]]''
|
|
|
|-
| style='text-align:right'| 12547
| ''[[:d:Q136375625|Deian Gwynne]]''
|
|
|
|-
| style='text-align:right'| 12548
| ''[[:d:Q136375749|Luned Emyr]]''
|
|
|
|-
| style='text-align:right'| 12549
| ''[[:d:Q136375869|Mari Grug]]''
|
|
|
|-
| style='text-align:right'| 12550
| ''[[:d:Q136379771|Nansi Rhys Adams]]''
|
|
|
|-
| style='text-align:right'| 12551
| ''[[:d:Q136379851|Neville Hughes]]''
|
|
|
|-
| style='text-align:right'| 12552
| ''[[:d:Q136399829|Rhian Blythe]]''
|
|
|
|-
| style='text-align:right'| 12553
| ''[[:d:Q136399909|Rhydian Bowen Phillips]]''
|
|
|
|-
| style='text-align:right'| 12554
| ''[[:d:Q136399950|Rhydian Wilson]]''
|
|
|
|-
| style='text-align:right'| 12555
| ''[[:d:Q136399969|Rhys Ap Hywel]]''
|
|
|
|-
| style='text-align:right'| 12556
| ''[[:d:Q136400060|Ywain Myfyr]]''
|
|
|
|-
| style='text-align:right'| 12557
| ''[[:d:Q136413814|Michael J. Webber]]''
|
|
|
|-
| style='text-align:right'| 12558
| ''[[:d:Q136441673|Owain Gwilym]]''
|
|
|
|-
| style='text-align:right'| 12559
| ''[[:d:Q136444225|Alun Harries]]''
|
|
|
|-
| style='text-align:right'| 12560
| ''[[:d:Q136444313|Catrin Aur]]''
|
|
|
|-
| style='text-align:right'| 12561
| ''[[:d:Q136444357|Dafydd Pierce]]''
|
|
|
|-
| style='text-align:right'| 12562
| ''[[:d:Q136444392|David Kempster]]''
|
|
|
|-
| style='text-align:right'| 12563
| ''[[:d:Q136444409|Derec Brown]]''
|
|
|
|-
| style='text-align:right'| 12564
| ''[[:d:Q136444471|Edwin Humphreys]]''
|
|
|
|-
| style='text-align:right'| 12565
| ''[[:d:Q136444492|Eirian Owen]]''
|
|
|
|-
| style='text-align:right'| 12566
| ''[[:d:Q136444599|Geraint Davies]]''
|
|
|
|-
| style='text-align:right'| 12567
| ''[[:d:Q136444602|Geraint Pickard]]''
|
|
|
|-
| style='text-align:right'| 12568
| ''[[:d:Q136444620|Griff Lynch]]''
|
|
|
|-
| style='text-align:right'| 12569
| ''[[:d:Q136444634|Gwawr Edwards]]''
|
|
|
|-
| style='text-align:right'| 12570
| ''[[:d:Q136444713|John Eifion]]''
|
|
|
|-
| style='text-align:right'| 12571
| ''[[:d:Q136444824|Mark Llewelyn Evans]]''
|
|
|
|-
| style='text-align:right'| 12572
| ''[[:d:Q136444967|Robin Eiddior]]''
|
|
|
|-
| style='text-align:right'| 12573
| ''[[:d:Q136444977|Rosalind Owen]]''
|
|
|
|-
| style='text-align:right'| 12574
| ''[[:d:Q136461430|Ben Bawden]]''
|
|
|
|-
| style='text-align:right'| 12575
| ''[[:d:Q136461514|Euros Lyn]]''
|
|
|
|-
| style='text-align:right'| 12576
| ''[[:d:Q136461531|Geraint Morgan]]''
|
|
|
|-
| style='text-align:right'| 12577
| ''[[:d:Q136461634|Michele Ryan]]''
|
|
|
|-
| style='text-align:right'| 12578
| ''[[:d:Q136562835|Karimah Hassan]]''
|
|
|
|-
| style='text-align:right'| 12579
| ''[[:d:Q136633223|Jeremy Huw Williams]]''
|
|
|
|-
| style='text-align:right'| 12580
| ''[[:d:Q136635090|Nick Arden]]''
|
|
|
|-
| style='text-align:right'| 12581
| ''[[:d:Q136640514|Dennis Byron]]''
|
|
|
|-
| style='text-align:right'| 12582
| ''[[:d:Q136651428|Morris Williams]]''
|
|
|
|-
| style='text-align:right'| 12583
| ''[[:d:Q136670448|Jeremy Salt]]''
|
|
|
|-
| style='text-align:right'| 12584
| ''[[:d:Q136673985|Cadfan Roberts]]''
|
|
|
|-
| style='text-align:right'| 12585
| ''[[:d:Q136674057|John Owen (Rhuthun)]]''
|
|
|
|-
| style='text-align:right'| 12586
| ''[[:d:Q136722653|Dilwyn Young-Jones]]''
|
|
|
|-
| style='text-align:right'| 12587
| ''[[:d:Q136854360|Rebecca Gibbon]]''
|
|
|
|-
| style='text-align:right'| 12588
| ''[[:d:Q136913002|Siân Owen]]''
|
|
|
|-
| style='text-align:right'| 12589
| ''[[:d:Q136913153|Ian Rowlands]]''
|
|
|
|-
| style='text-align:right'| 12590
| ''[[:d:Q136914190|David Welch (actor)]]''
|
|
|
|-
| style='text-align:right'| 12591
| ''[[:d:Q136914197|William Owen (Gwilym Gwyrfai)]]''
|
|
|
|-
| style='text-align:right'| 12592
| ''[[:d:Q136914204|Nansi Pritchard]]''
|
|
|
|-
| style='text-align:right'| 12593
| ''[[:d:Q136914236|Arwel Jones (Hogia'r Wyddfa)]]''
|
|
|
|-
| style='text-align:right'| 12594
| ''[[:d:Q136914283|Judith Roberts (cyfarwyddydd)]]''
|
|
|
|-
| style='text-align:right'| 12595
| ''[[:d:Q136914288|Iwan Llewelyn-Jones (cerddor)]]''
|
|
|
|-
| style='text-align:right'| 12596
| ''[[:d:Q136914302|Rhodri Evan]]''
|
|
|
|-
| style='text-align:right'| 12597
| ''[[:d:Q136914489|Menna Trussler]]''
|
|
|
|-
| style='text-align:right'| 12598
| ''[[:d:Q136914510|Maldwyn John]]''
|
|
|
|-
| style='text-align:right'| 12599
| ''[[:d:Q136914525|Siôn Probert]]''
|
|
|
|-
| style='text-align:right'| 12600
| ''[[:d:Q136914537|Buddug Povey]]''
|
|
|
|-
| style='text-align:right'| 12601
| ''[[:d:Q136914569|Geraint Jones (dramodydd)]]''
|
|
|
|-
| style='text-align:right'| 12602
| ''[[:d:Q136987900|Irene Li Krauß]]''
|
|
|
|-
| style='text-align:right'| 12603
| ''[[:d:Q137011833|Gwion Lynch]]''
|
|
|
|-
| style='text-align:right'| 12604
| ''[[:d:Q137015394|William Owen (dramodydd)]]''
|
|
|
|-
| style='text-align:right'| 12605
| ''[[:d:Q137040483|Danny Grehan]]''
|
|
|
|-
| style='text-align:right'| 12606
| ''[[:d:Q137040496|Marion Fenner]]''
|
|
|
|-
| style='text-align:right'| 12607
| ''[[:d:Q137040646|Lindsay Evans (actor)]]''
|
|
|
|-
| style='text-align:right'| 12608
| ''[[:d:Q137090049|Vanessa Gebbie]]''
|
|
|
|-
| style='text-align:right'| 12609
| ''[[:d:Q137109867|Perry Gauci]]''
|
|
|
|-
| style='text-align:right'| 12610
| ''[[:d:Q137116576|Zēnōnas Tzepras]]''
|
|
|
|-
| style='text-align:right'| 12611
| ''[[:d:Q137120466|Nick Gammon]]''
|
|
|
|-
| style='text-align:right'| 12612
| ''[[:d:Q137154045|John Margetts]]''
|
|
|
|-
| style='text-align:right'| 12614
| ''[[:d:Q137163156|Carwyn Leggatt-Jones]]''
|
|
|
|-
| style='text-align:right'| 12615
| ''[[:d:Q137163585|Joe Mitchell]]''
|
|
|
|-
| style='text-align:right'| 12616
| ''[[:d:Q137184255|Ynyr Fychan ap Ynyr]]''
|
|
|
|-
| style='text-align:right'| 12617
| ''[[:d:Q137184279|Meurig Llwyd]]''
|
|
|
|-
| style='text-align:right'| 12618
| ''[[:d:Q137266780|Georgie Grasso]]''
|
|
|
|-
| style='text-align:right'| 12619
| ''[[:d:Q137427377|Jay Joshua]]''
| [[Coadan:Jay Joshua (left) and Connor Mills (right); 2025 (cropped) (2).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12620
| ''[[:d:Q137439130|Lowri-Ann Richards]]''
|
|
|
|-
| style='text-align:right'| 12621
| ''[[:d:Q137593941|Gwawr]]''
|
|
|
|-
| style='text-align:right'| 12622
| ''[[:d:Q137599597|Elis Price]]''
|
|
|
|-
| style='text-align:right'| 12624
| ''[[:d:Q138135153|DovelyTom Tom Davies]]''
| [[Coadan:Dovelytom selfie.png|center|128px]]
|
|
|-
| style='text-align:right'| 12625
| ''[[:d:Q138335527|Lucy Rees]]''
|
|
|
|-
| style='text-align:right'| 12626
| ''[[:d:Q138338094|Alan Jobbins]]''
|
|
|
|-
| style='text-align:right'| 12627
| ''[[:d:Q138338530|Gabriel Eustis]]''
|
|
|
|-
| style='text-align:right'| 12628
| ''[[:d:Q138547140|Iain Quinn]]''
|
|
|
|-
| style='text-align:right'| 12629
| ''[[:d:Q138610790|Leonora Burton]]''
|
|
|
|-
| style='text-align:right'| 12630
| ''[[:d:Q138637323|Jane Moore (1952)]]''
|
|
|
|-
| style='text-align:right'| 12631
| ''[[:d:Q138913503|Delyth Angharad]]''
|
|
|
|-
| style='text-align:right'| 12632
| ''[[:d:Q138999700|Marina Diamandis]]''
|
|
|
|-
| style='text-align:right'| 12633
| ''[[:d:Q139000984|Christopher Williams]]''
|
|
|
|-
| style='text-align:right'| 12634
| ''[[:d:Q139045679|Joseph Davies]]''
|
|
|
|-
| style='text-align:right'| 12635
| ''[[:d:Q139070467|David John Edwards]]''
|
|
|
|-
| style='text-align:right'| 12636
| ''[[:d:Q139070495|Thomas Humphrey Edwards]]''
|
|
|
|-
| style='text-align:right'| 12637
| ''[[:d:Q139104381|Robert Humphrey Morris]]''
|
|
|
|-
| style='text-align:right'| 12638
| ''[[:d:Q139105757|William Lewis Roberts]]''
|
|
|
|-
| style='text-align:right'| 12639
| ''[[:d:Q139189270|Iain Quinn]]''
|
|
|
|-
| style='text-align:right'| 12640
| ''[[:d:Q139205101|Meirion Bowen]]''
|
|
|
|-
| style='text-align:right'| 12641
| ''[[:d:Q139305697|William Owen]]''
|
|
|
|-
| style='text-align:right'| 12642
| ''[[:d:Q139310624|Llewelyn Owen]]''
|
|
|
|-
| style='text-align:right'| 12643
| ''[[:d:Q139372798|James Hugh Ash]]''
|
|
|
|-
| style='text-align:right'| 12644
| ''[[:d:Q139373372|Michelle Louise Ash]]''
|
|
|
|-
| style='text-align:right'| 12645
| ''[[:d:Q139505935|Tom Clarke]]''
|
|
|
|-
| style='text-align:right'| 12646
| ''[[:d:Q139567732|Myles Kamwendo]]''
|
|
|
|-
| style='text-align:right'| 12647
| ''[[:d:Q139672363|Thomas Parcell]]''
|
|
|
|-
| style='text-align:right'| 12648
| ''[[:d:Q139673862|Love Parry]]''
|
|
|
|-
| style='text-align:right'| 12649
| ''[[:d:Q139674766|David Rees]]''
|
|
|
|-
| style='text-align:right'| 12650
| ''[[:d:Q139678615|Elizabeth McKenzie]]''
|
|
|
|-
| style='text-align:right'| 12651
| ''[[:d:Q139679423|John Hughes]]''
|
|
|
|-
| style='text-align:right'| 12652
| ''[[:d:Q139679506|Jay James Picton]]''
|
|
|
|-
| style='text-align:right'| 12653
| ''[[:d:Q139679558|John Griffiths]]''
|
|
|
|-
| style='text-align:right'| 12654
| ''[[:d:Q139679595|Adam Robert Lewis]]''
|
|
|
|-
| style='text-align:right'| 12655
| ''[[:d:Q139679715|John Jones]]''
|
|
|
|-
| style='text-align:right'| 12656
| ''[[:d:Q139691513|Mary Ellen Ellis]]''
|
|
|
|-
| style='text-align:right'| 12657
| ''[[:d:Q139692008|Daniel Anthony]]''
|
|
|
|-
| style='text-align:right'| 12658
| ''[[:d:Q139694048|Thomas Davies]]''
| [[Coadan:Portrait of Thomas Davies Treorci & sister Mrs. David Evans, Penllwyn (4672740).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12659
| ''[[:d:Q139711679|Peter Jones]]''
|
|
|
|-
| style='text-align:right'| 12660
| ''[[:d:Q139712423|Thomas William Hughes]]''
|
|
|
|-
| style='text-align:right'| 12661
| ''[[:d:Q139713038|Catherine Levi]]''
|
|
|
|-
| style='text-align:right'| 12662
| ''[[:d:Q139713902|Mary Hughes]]''
|
|
|
|-
| style='text-align:right'| 12663
| ''[[:d:Q139718198|Mary Jane Wynne Jones]]''
| [[Coadan:Portrait of Mary Wynne-Jones (4670563).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12664
| ''[[:d:Q139718719|J W Lewis]]''
|
|
|
|-
| style='text-align:right'| 12665
| ''[[:d:Q139718742|William Jones]]''
| [[Coadan:Portrait of William Deudraeth Jones (of Caegwyn, Penrhyndeudraeth) with Eisteddfod Chair (4670367).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12666
| ''[[:d:Q139719041|Lydia Parry]]''
| [[Coadan:Portrait of Lydia Parry of Penhafodlas, Llanrug (4670440).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12667
| ''[[:d:Q139730940|Lewis Leigh]]''
|
|
|
|-
| style='text-align:right'| 12668
| ''[[:d:Q139748929|John Hawen Rees]]''
| [[Coadan:Y Parch. J. Hawen Rees Adroddiad Blynyddol Egwlys Gynulleidfaol Marsh Lane Bootle am y flwyddyn 1902 (5293990).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12669
| ''[[:d:Q139750590|John Davis]]''
| [[Coadan:John Davis (Hywel) (5293973).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12670
| ''[[:d:Q139755006|David Davies]]''
| [[Coadan:David Davies (5294004).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12671
| ''[[:d:Q139781933|Hugh Parry]]''
| [[Coadan:Portrait of Rev. Hugh Parry, Llanarmon (4671747).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12672
| ''[[:d:Q139796321|Edward S. Jones]]''
|
|
|
|-
| style='text-align:right'| 12673
| ''[[:d:Q139796414|Eleanor Bond]]''
|
|
|
|-
| style='text-align:right'| 12674
| ''[[:d:Q10524|Ryan Giggs]]''
| [[Coadan:Ryan Giggs in 2008.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12675
| ''[[:d:Q10552|Rob Page]]''
| [[Coadan:Page, Robert.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12676
| ''[[:d:Q10694|Leanne Wood]]''
| [[Coadan:Leanne Wood AM (27555056394).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12677
| ''[[:d:Q16455|John Rhys-Davies]]''
| [[Coadan:(John Rhys-Davies) 2018-02-11 15-35-40 ILCE-6500 DSC07150 (31235662177) (cropped).jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12678
| ''[[:d:Q19397|Alun Michael]]''
| [[Coadan:AlunMichael crop.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12679
| ''[[:d:Q29732|Maggie Jones, Baroness Jones of Whitchurch]]''
| [[Coadan:Official portrait of Baroness Jones of Whitchurch crop 2, 2019.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12680
| ''[[:d:Q34784|David Broome]]''
| [[Coadan:David Broome.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12681
| ''[[:d:Q40005|Sarah Thomas]]''
|
|
|
|-
| style='text-align:right'| 12682
| ''[[:d:Q41233|Timothy Dalton]]''
| [[Coadan:Timothy Dalton 1987.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12683
| ''[[:d:Q41563|Julia Gillard]]''
| [[Coadan:Julia Gillard.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12684
| ''[[:d:Q45772|Christian Bale]]''
| [[Coadan:Christian Bale-7837.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12685
| ''[[:d:Q45909|John Cale]]''
| [[Coadan:John-cale.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12686
| ''[[:d:Q47664|Catherine Zeta-Jones]]''
| [[Coadan:Catherine Zeta-Jones VF 2012 Shankbone.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12687
| ''[[:d:Q48009|Anna Ryder Richardson]]''
|
|
|
|-
| style='text-align:right'| 12688
| ''[[:d:Q49615|Rowan Williams]]''
| [[Coadan:Rowan Williams -001b.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12689
| ''[[:d:Q55282|Peter Greenaway]]''
| [[Coadan:Peter Greenaway in 2007.jpg|center|128px]]
|
|
|}
== human whose existence is disputed ==
{| class='wikitable sortable'
! #
! Ennym
! caslys
! Blein ruggyree
! Blein vaaish
|-
| style='text-align:right'| 1930
| ''[[:d:Q1883439|Madog ab Owain Gwynedd]]''
| [[Coadan:01madog07.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 10297
| ''[[:d:Q13127568|Y Crythor Du]]''
|
|
|
|}
== Misc ==
{| class='wikitable sortable'
! #
! Ennym
! caslys
! Blein ruggyree
! Blein vaaish
|-
| style='text-align:right'| 8363
| ''[[:d:Q2483726|Cadfael]]''
|
|
|
|-
| style='text-align:right'| 8370
| ''[[:d:Q2560424|Pixie]]''
|
|
|
|-
| style='text-align:right'| 9526
| ''[[:d:Q6389447|Kenmare Sorceress]]''
|
|
|
|-
| style='text-align:right'| 9542
| ''[[:d:Q6426771|Edward Kenway]]''
|
|
|
|-
| style='text-align:right'| 12176
| ''[[:d:Q107860434|Trafford, Guy Rawson]]''
|
|
|
|-
| style='text-align:right'| 12256
| ''[[:d:Q111462365|Glassalt]]''
|
|
|
|-
| style='text-align:right'| 12425
| ''[[:d:Q130282161|Cennard Davies]]''
| [[Coadan:Cennard Davies pen ac ysgwydd.jpg|center|128px]]
|
|
|-
| style='text-align:right'| 12623
| ''[[:d:Q137630848|John Hughes (Glan Collen)]]''
|
|
|
|}
{{Wikidata list end}}
[[Ronney:Rollaghyn Bretnee| ]]
[[Ronney:Rollaghyn Goaldee|.]]
qu3glwdp6reqe51b8donfrkrs9xqsc3
Ronney:2h eash
14
21131
379270
349779
2026-05-18T02:32:42Z
MacTire02
219
+clowan
379270
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|2nd century|2h eash}}
[[Ronney:1d villey bleeaney| 02]]
[[Ronney:Eashyn|02]]
1majhu8kih4fr96vl7zx2yovcx8or5w
Ronney:8oo eash
14
21163
379266
349783
2026-05-18T02:31:54Z
MacTire02
219
+clowan
379266
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|8th century|8oo eash}}
[[Ronney:1d villey bleeaney| 08]]
[[Ronney:Eashyn|08]]
gfa1fplsflw4nw3fztnyfo62nwqil7m
Ronney:1d eash
14
21166
379271
349778
2026-05-18T02:32:57Z
MacTire02
219
+clowan
379271
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|1st century|1d eash}}
[[Ronney:1d villey bleeaney| 01]]
[[Ronney:Eashyn|01]]
ru81ediahpbbnw8o28kyvt2xvfieaa4
Ronney:6oo eash
14
21244
379268
349781
2026-05-18T02:32:16Z
MacTire02
219
+clowan
379268
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|6th century|6oo eash}}
[[Ronney:1d villey bleeaney| 06]]
[[Ronney:Eashyn|06]]
sgp1rvin2oc0j7p2e48fwegk94esm16
Ronney:4oo eash
14
28743
379269
349780
2026-05-18T02:32:30Z
MacTire02
219
+clowan
379269
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|4th century|4oo eash}}
[[Ronney:1d villey bleeaney| 04]]
[[Ronney:Eashyn|04]]
ej4e12v22c6laknlhewjiczqjwn4kwd
Ronney:Smooinaghtyn 'sy chemmig
14
29590
379162
323697
2026-05-17T21:26:13Z
MacTire02
219
ronney elley
379162
wikitext
text/x-wiki
{{CategoryTOC}}
[[Ronney:Kemmig]]
[[Ronney:Smooinaghtyn 'syn oaylleeaght rere magher|Chemmig]]
o2f45fn1jq2hgggekim6udlkb7bqnk1
Ronney:9oo eash
14
29934
379265
349777
2026-05-18T02:31:41Z
MacTire02
219
+clowan
379265
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|9th century|9oo eash}}
[[Ronney:1d villey bleeaney| 09]]
[[Ronney:Eashyn|09]]
kbrpijmswkyxdm44hcvwwgdekxdjg9g
WarnerMedia
0
30608
379202
364878
2026-05-18T00:34:07Z
InternetArchiveBot
16702
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379202
wikitext
text/x-wiki
{{WD Kishtey Fys Colught
| ennym = Warner Media, LLC
| logo = WarnerMedia (2019) logo.svg
| fo-heidyl_logo = Y logo jerrinagh, ymmydit eddyr 2019 as 2022
| jalloo = Hudson Yards from Hudson Commons (95131p) (30 Hudson Yards).jpg
| fo-heidyl_jalloo = [[30 Hudson Yards]], kione-cherroo jerrinagh WarnerMedia ayns [[New York City]]
| ennym_traghtee = WarnerMedia
| shenn_enmyn = {{Plainlist|
* Kinney National Company<br />(1966–1972)
* Warner Communications Inc.<br />(1972–1990)
* Time-Warner Inc.<br />(1990–2001)
* Time Warner Entertainment Company, L.P.<br />(1992–2001)
* AOL Time Warner Inc.<br />(2001–2003)
* Time Warner Inc.<br />(2003–2018)
}}
| çhynskyl = {{ubl|[[Covestey meanyn|Ny meanyn]]|[[Giare-choontey yn eunysseyrys|Eunysseyrys]]}}
| roie-immeeaghtyn = {{plainlist|
* [[Kinney National Company]] (1966–1972)
* [[WarnerMedia#Warner Communications (1972–1990)|Warner Communications]] (1972–1990)
* [[Time Inc.]] (1922–1990)
* [[Turner Broadcasting System]] (1965–2019)
}}
| bunnit = {{date toshee|df=y|1990|01|10}}
| bunneydeyryn = {{ubl|[[Steve Ross (businessman)|Steve Ross]]}} (Warner Communications) <br> {{ubl|[[Henry Luce]] <br> (Time Inc.)}}
| eiyrtyssagh = [[Warner Bros. Discovery]]
| ass_bree = {{date toshee|df=y|2022|04|08}}
| cronney = Skyrrit magh ass AT&T as mestit rish [[Discovery, Inc.]]
| kc_soiaghey = [[30 Hudson Yards]]
| kc_soiaghey_caayr = [[Caayr York Noa]]
| kc_soiaghey_çheer = ny Steatyn Unnaneysit
| eaghtyr_obbree = Er feie ny cruinney
| deiney_ogheragh = {{Plainlist|
* [[Jason Kilar]] (AOS)
* Andy Forssell (Kione obbraghyn, Jeeragh)
* [[Ann Sarnoff]] (Ben-chaairliagh as AOS, Seyrlannyn as Moggylyn; Caairliagh as AOS, Warner Bros.)
* Michael Bass, [[Amy Entelis]] as [[Ken Jautz]] (co-ching hallidagh CNN)
* [[Gerhard Zeiler]] (AOC; Caairliagh, Eddyr-ashoonagh)
* Tony Goncalves (Eaghtyrane, Traght; CEO, Otter Media)
}}
| markyn = {{Flatlist|
* [[Adult Swim]]
* [[AT&T SportsNet]]
* [[Boomerang (moggyl çhellveeish)|Boomerang]]
* [[Cartoon Network]]
* [[Cartoonito]]
* [[Cinemax]]
* [[CNN]]
* [[CNN+]]
* [[DC Comics]]
* [[HBO]]
* [[Hanna-Barbera Studios Europe]]
* [[HBO Max]]
* [[HLN (moggyl çhellveeish)|HLN]]
* [[TBS (bollagh çhellveeish Americaanagh)|TBS]]
* [[The CW]] (50%)
* [[TNT (moggyl çhellveeish Americaanagh)|TNT]]
* [[TruTV]]
* [[Turner Classic Movies]]
* [[Warner Bros.]]
* [[Warner TV]]
}}
| çheet_stiagh = {{Increase}} [[Dollar ny Steatyn Unnaneysit|$]]35.63 billoonyn
| blein_çheet_stiagh = 2021
| çheet_stiagh_obbree = {{Decrease}} $7.24 billoonyn
| blein_çheet_stiagh_obbree = 2021
| sorçh = [[Fo-cholught]]
| shellooder = [[AT&T]] (2018–2022)
| rheynnyn = {{Plainlist|
* WarnerMedia Studios & Networks
* WarnerMedia News & Sports
* WarnerMedia Sales & Distribution
* WarnerMedia Direct
* WarnerMedia International
}}
| ynnyd-eggey = {{URL|https://web.archive.org/web/20200210110705/https://www.warnermedia.com/|warnermedia.com}}
| fo-noteyn = <ref name="FY2021">{{Cite web |url=https://investors.att.com/~/media/Files/A/ATT-IR-V2/financial-reports/quarterly-earnings/2021/q421/ATT_4Q21_Financial_and_Operational_Schedules_and_Non_GAAP_Reconciliations.pdf |title=Financial and Operational Schedules & Non-GAAP Reconciliations |date=26 Jerrey Geuree 2022 |website=[[AT&T]] |accessdate= 27 Averil 2022 |archiveurl=https://web.archive.org/web/20220313180330/https://investors.att.com/~/media/Files/A/ATT-IR-V2/financial-reports/quarterly-earnings/2021/q421/ATT_4Q21_Financial_and_Operational_Schedules_and_Non_GAAP_Reconciliations.pdf |archivedate=13 Mayrnt 2022 |url-status=live}}</ref><ref>{{cite news |last=Cohen |first=Roger |title=The Creator of Time Warner, Steven J. Ross, Is Dead at 65 |url=https://www.nytimes.com/1992/12/21/obituaries/the-creator-of-time-warner-steven-j-ross-is-dead-at-65.html |newspaper=The New York Times |date=21 Nollick 1992 |accessdate=11 Averil 2018}}</ref><ref name="xbrlus_1">{{cite web |url=https://ir.timewarner.com/phoenix.zhtml?c=70972&p=quarterlyearnings |title=Time Warner Inc. Reports Fourth-Quarter and Full-Year 2017 Results (10-K) |publisher=Time Warner |date=1 Toshiaght Arree 2018 |accessdate=5 Toshiaght Arree 2018 |archivedate=2 Nollick 2017 |archiveurl=https://web.archive.org/web/20171202002021/http://ir.timewarner.com/phoenix.zhtml?c=70972&p=quarterlyearnings |url-status=dead }}</ref><ref>{{Cite web|url=https://about.att.com/pages/corporate_profile|title=AT&T Corporate Profile|website=about.att.com}}</ref><ref>{{Cite web|url=https://www.warnermediagroup.com/company/business-units|title=Business Units {{!}} WarnerMedia|website=www.warnermediagroup.com|accessdate=25 Averil 2019|archive-date=2020-08-11|archive-url=https://web.archive.org/web/20200811194954/https://www.warnermediagroup.com/company/business-units|url-status=dead}}</ref>
}}
'''Warner Media, LLC''' (hie er [[Ennym traghtee|traghtal myr]] '''WarnerMedia'''), she [[covestey (colught)|covestey]] [[dellal gien|eunysseyrys]] [[cochorp yl-ashoonagh|yl-ashoonagh]] [[ny meanyn mooarey]] ayns shelloo [[AT&T]] v'eh. Va'n kione-cherroo echey soit ec [[30 Hudson Yards]] ayns [[Caayr York Noa]], ny Steatyn Unnaneysit.
V'eh bunnit myr '''Time Warner''' ayns 1990, lurg mestey eddyr [[Time Inc.]] as Warner Communications. Va obbraghyn fillym, çhellveeish, as [[çhellveeish chaabyl|caabyl]] ec y cholught. Va cooid shellooyn y cholught goaill stiagh WarnerMedia Studios & Networks (va jeant ass ny cooid eunysseyrys [[Turner Broadcasting System|Turner Broadcasting]], [[HBO]], as [[Cinemax]], chammah as [[Warner Bros.]], as eh hene jeant ass seyrlannyn fillym, bioghys, çhellveeish, [[Warner Bros. Home Entertainment|rheynn eunysseyrys thie y cholught]], as Studio Distribution Services, e cho-ventyr lesh [[Universal Pictures Home Entertainment]], [[DC Comics]], [[New Line Cinema]], as, myrane lesh [[CBS Entertainment Group]]{{refn|[[CBS Corporation]] roish shen}}, rheynn 50% ayns [[The CW]]); WarnerMedia News & Sports (va jeant ass cooid naight as spoyrtyn jeh Turner Broadcasting, goaill stiagh [[CNN]], [[Turner Sports]], as [[AT&T SportsNet]]); [[Rolley fo-cholughtyn WarnerMedia#WarnerMedia Sales and Distribution|WarnerMedia Sales & Distribution]] (jeant ass y cholught meanyn bun-earrooagh [[Otter Media]]); as WarnerMedia Direct (jeant ass y çhirveish strooanagh [[HBO MAX|HBO Max]]).
Dyn y wooise da [[skyrraghtyn magh cochorpagh|skyrraghtyn magh]] Time Inc. ayns 2014, dreill y colught yn ennym Time-Warner veih 1990, haink dy ve Time Warner ayns 2003, derrey 2018, tra va'n colught aa-enmyssit myr WarnerMedia erreish da row eh kionnit liorish AT&T.<ref>{{cite news|last=Flint|first=Joe|date=March 11, 2014|title=Time Inc. spinoff probably won't mean name change for Time Warner |newspaper=Los Angeles Times |url=https://www.latimes.com/entertainment/envelope/la-xpm-2014-mar-11-la-et-ct-time-warner-name-20140311-story.html |accessdate=6 Averil 2018}}</ref> Er 22 Jerrey Fouyir 2016, ren AT&T fogrey magh dy h-oikoil dy row ad geiyrt er kionneeaght Time Warner er $85.4 billoonyn (goaill stiagh feeaghyn Time Warner), cur leagh er $107.50 'sy rheynn er y cholught.<ref name=":0">{{Cite news|url=https://www.wsj.com/articles/at-t-is-in-advanced-talks-to-acquire-time-warner-1477061850|title=AT&T Is in Advanced Talks to Acquire Time Warner|last1=Hagey|first1=Keach|date=22 Jerrey Fouyir 2016|work=[[The Wall Street Journal]]|accessdate=18 Mayrnt 2019|last2=Sharma|first2=Amol|language=en-US|issn=0099-9660|last3=Cimilluca|first3=Dana|last4=Gryta|first4=Thomas}}</ref><ref>{{cite web|url=https://variety.com/2016/biz/news/att-time-warner-deal-1201897938/|title=AT&T Sets $85.4 Billion Time Warner Deal, CEOs Talks 'Unique' Potential of Combination |last=Littleton |first=Cynthia |work=Variety |date=22 Jerrey Fouyir 2016 |accessdate=23 Jerrey Fouyir 2016}}</ref> Va'n mestey shickyrit er 12 Mean Souree 2018,<ref>{{Cite news |url=https://money.cnn.com/2018/06/12/media/att-time-warner-ruling/index.html |title=Judge approves $85 billion AT&T-Time Warner deal |last=Gold |first=Hadas |work=CNNMoney |accessdate=12 Mean Souree 2018 |archivedate=2018-07-11 |archiveurl=https://web.archive.org/web/20180711204644/https://money.cnn.com/2018/06/12/media/att-time-warner-ruling/index.html }}</ref> lurg ren AT&T cosney cooish leigh [[leigh chohirree|noi-varrantys]] va tashtit liorish [[Rheynn Cairys ny Steatyn Unnaneysit]] ayns 2017 noi'n chionneeaght,<ref>{{Cite news |url=https://www.nytimes.com/2017/11/20/business/dealbook/att-time-warner-merger.html |title=Justice Department Sues to Block AT&T-Time Warner Merger |last1=Kang|first1=Cecilia|date=20 Sauin 2017 |work=The New York Times |accessdate=11 Nollick 2017 |last2=Merced|first2=Michael|language=en-US |issn=0362-4331}}</ref> as haink jerrey lesh daa laa ny yei tra haink y colught dy ve ny 'o-cholught jeh AT&T.<ref>{{cite web |url=http://about.att.com/story/att_completes_acquisition_of_time_warner_inc.html |title=AT&T Completes Acquisition of Time Warner Inc. |work=AT&T |date=15 Mean Souree 2018 |accessdate=15 Mean Souree 2018}}</ref> Va'n ennym jerrinagh doltit liorish y cholught y chied laa elley.<ref name="rebrand">{{Cite web |url=https://www.cnbc.com/2018/06/15/time-warner-is-changing-its-name-to-warnermedia-turner-ceo-to-depart.html |title=Time Warner is changing its name to WarnerMedia; Turner CEO to depart |website=[[CNBC]] |date=15 Mean Souree 2018}}</ref> Fo AT&T, hie yn colught launshey [[Rolley shirveishyn meanyn strooanagh|shirveish strooanagh]] va troggit er stoo yn cholught, enmyssit myr HBO Max. Ren WarnerMedia moggylyn eunysseyrys Turner fo un unnid er 10 Luanistyn 2020 trooid cur-ry-cheilley ny cooid WarnerMedia Entertainment as Warner Bros. Entertainment stiagh ayns un unnid noa, WarnerMedia Studios & Networks Group.<ref name="deadline-wmlayoffs">{{cite web|title=WarnerMedia Begins Layoffs In Latest Streamlining Effort|url=https://deadline.com/2020/08/warnermedia-begins-layoffs-in-latest-streamlining-effort-1203008860/|last=Hayes|first=Dade|work=Deadline Hollywood|date=10 Luanistyn 2020|accessdate=31 Luanistyn 2020}}</ref><ref name="thr-wmlayoffs">{{cite web|title=Bob Greenblatt, Kevin Reilly Out Amid Major WarnerMedia Restructuring|url=https://www.hollywoodreporter.com/live-feed/bob-greenblatt-kevin-reilly-major-warnermedia-restructuring-1306486|last=Goldberg|first=Lesley|work=The Hollywood Reporter|date=7 Luanistyn 2020|accessdate=31 Luanistyn 2020}}</ref> Er 17 Boaldyn 2021, begnagh tree bleeaney lurg y chionneeaght, ren AT&T fogrey magh dy row ad faagail y dellal eunysseyrys trooid creck WarnerMedia ayns mestey rish [[Discovery, Inc.]] son colught traghtee theayagh noa y chroo, [[Warner Bros. Discovery]]. Va'n bargane doont er 8 Averil 2022.
==Imraaghyn==
{{reflist}}
==Kianglaghyn magh==
* {{Official website|https://web.archive.org/web/20200210110705/https://www.warnermediagroup.com/}} (tashtit)
{{Gurneil eaghtyrys}}
[[Ronney:Bunneeaghtyn 'sy vlein 1972]]
[[Ronney:Mestaghyn as kionneeaghtyn 'sy vlein 2018]]
[[Ronney:Mestaghyn as kionneeaghtyn 'sy vlein 2022]]
[[Ronney:Colughtyn Americaanagh bunnit 'sy vlein 1972]]
[[Ronney:Colughtyn Americaanagh jee-vunnit 'sy vlein 2022]]
[[Ronney:Colughtyn bunnit ayns Caayr York Noa]]
[[Ronney:Colughtyn va listit er Boorse York Noa]]
[[Ronney:Colughtyn covestit ny Steatyn Unnaneysit]]
[[Ronney:Colughtyn covestit bunnit 'sy vlein 1972]]
[[Ronney:Colughtyn eunysseyrys ny Steatyn Unnaneysit]]
[[Ronney:Colughtyn eunysseyrys bunnit 'sy vlein 1972]]
[[Ronney:Colughtyn eunysseyrys jee-vunnit 'sy vlein 2022]]
[[Ronney:Aa-ocholughtyn AT&T]]
[[Ronney:Aa-rinkyn y Dow Jones Industrial Average]]
[[Ronney:Colughtyn meanyn mooarey bunnit 'sy vlein 1972]]
[[Ronney:Colughtyn meanyn mooarey jee-vunnit 'sy vlein 2022]]
[[Ronney:Colughtyn meanyn mooarey ny Steatyn Unnaneysit]]
[[Ronney:Colughtyn yl-ashoonagh bunnit ayns ny Steatyn Unnaneysit]]
[[Ronney:Roie-immeeaghtyn Warner Bros. Discovery]]
[[Ronney:Warner Bros. Discovery]]
[[Ronney:Colughtyn soilshee bunnit 'sy vlein 1972]]
[[Ronney:Colughtyn çhellinsh ny Steatyn Unnaneysit]]
[[Ronney:Colughtyn meanyn mooarey ny Steatyn Unnaneysit nagh vel er mayrn]]
n1c1vvyxzluroybpj6wr0pr96u5s5j4
Ronney:1d eash RC
14
32542
379276
332091
2026-05-18T03:25:20Z
MacTire02
219
+clowan
379276
wikitext
text/x-wiki
{{catmore}}
{{category series navigation}}
{{CategoryTOC}}
{{Commonscat|1st century BC|1d eash RC}}
[[Ronney:1d villey bleeaney RC| 1]]
[[Ronney:Eashyn|-01]]
i1x988vkar859ntbcig7pa31i0berfo
Ronney:Smooinaghtyn maddaghtoil
14
33049
379161
334367
2026-05-17T21:24:42Z
MacTire02
219
ronney elley
379161
wikitext
text/x-wiki
{{Commons}}
[[Ronney:Maddaght]]
[[Ronney:Smooinaghtyn 'syn oaylleeaght rere magher|Maddaghtoil]]
cg15rgy9gdmhzysvzu48dfnuta8wfeg
Ronney:Smooinaghtyn sheshoil
14
33474
379165
335438
2026-05-17T21:41:26Z
MacTire02
219
ronney elley
379165
wikitext
text/x-wiki
{{Commons category|Social concepts|Smooinaghtyn sheshoil}}
[[Ronney:Smooinaghtyn rere magher|Sheshoil]]
[[Ronney:Sheshaght]]
[[Ronney:Sheshoaylleeaght]]
d8fc4nv1ibhv34j8lsh109j0cnaqdct
Ronney:Smooinaghtyn 'sy rollageydys
14
33839
379164
337035
2026-05-17T21:35:00Z
MacTire02
219
ronney elley
379164
wikitext
text/x-wiki
{{Commonscat|Concepts in astronomy|Smooinaghtyn 'sy rollageydys}}
[[Ronney:Rollageydys]]
[[Ronney:Smooinaghtyn 'syn ishig|Rollageydys]]
[[Ronney:Smooinaghtyn 'syn oaylleeaght rere magher|Rollageydys]]
m3zz7qiraihjwrtfuk66fshcrj3uvzl
Palak Tiwari
0
35671
379277
346637
2026-05-18T03:33:30Z
~2026-29767-41
23314
379277
wikitext
text/x-wiki
{{WD Kishtey Fys Dooinney
| ennym = Palak Tiwari
| jalloo = Palak Tiwari snapped at Opa Worli in 2022.jpg
| fo-heidyl = Palak Tiwari ayns 2022
| date_ruggyr = {{date_ruggyr|df=yes|2000|10|08}}
| boayl_ruggyr = [[Mumbai]], [[Maharashtra]], yn Injey
}}
She ben-aghteyr Injinagh ee '''Palak Tiwari''' ({{lang-te|పాలక్ తివారీ}}; ruggit er 8 Jerrey Fouyir 2000).<ref>{{cite web|url=https://www.abplive.com/photo-gallery/entertainment/bollywood-palak-tiwari-sets-the-internet-on-fire-with-her-monokini-photos-see-here-2367929|title=Palak Tiwari Photos: मोनोकिनी पहन पूल किनारे पहुंचीं पलक तिवारी, शेयर कर दीं ऐसी तस्वीरें, इंटरनेट पर लग गई आग}}</ref> Ta enney urree kyndagh rish e obbyr ayns [[scannaneaght y Hindish|filmyn Hindish]], goaill stiagh ''[[Kisi Ka Bhai Kisi Ki Jaan]]'' (2023), ''[[Rosie: The Saffron Chapter]]'' (2022), as ''The Virgin Tree'' (2024).<ref>{{cite web|url=https://timesofindia.indiatimes.com/tv/news/hindi/shweta-tiwaris-daughter-palak-tiwari-trolled-for-excess-skin-show-in-purple-bodysuit-a-netizen-says-bbs-dikhake-popularity-nahi-milegi/articleshow/98274144.cms?from=mdr|title=Shweta Tiwari's daughter Palak Tiwari trolled for excess skin show in purple bodysuit; a netizen says, 'B**bs dikhake popularity nahi milegi'}}</ref>
==Bea leah==
Va Palak Tiwari ruggit er 8 Jerrey Fouyir 2000<ref>{{Cite web|url=https://indianexpress.com/article/entertainment/television/shweta-tiwari-daughter-palak-birthday-see-photos-4880436/|title=Shweta Tiwari's daughter Palak turns 17, actor shares special birthday wish for her sweetheart|date=8 Jerrey Fouyir 2017|website=The Indian Express|language=en-IN|access-date=12 Luanistyn 2019}}</ref> lesh y ven-aghteyr [[Shweta Tiwari]] as yn aghteyr [[Raja Chaudhary]].<ref>{{cite news|title=Palak Tiwari Opens Up On Nepotism |url=https://www.thestatesman.com/entertainment/palak-tiwari-1503069737.html|access-date=18 Boaldyn 2022 |work=The Statesman |date=9 Boaldyn 2022}}</ref><ref>{{Cite web|url=https://timesofindia.indiatimes.com/tv/news/hindi/shweta-tiwaris-ex-husband-raja-chaudhary-grooves-to-his-daughter-palak-tiwaris-song-bijlee-the-latter-says-love-you-dad/articleshow/88325060.cms|title=Shweta Tiwari's ex-husband Raja Chaudhary grooves to his daughter Palak Tiwari's song 'Bijlee', the latter says 'Love You Dad'|website=[[द टाइम्स ऑफ़ इण्डिया]]}}</ref>
==Coorse bea==
Ren Palak Tiwari e chied çheet-magh ayns 2021 tra va paart eck 'sy feeshan kiaullee "Bijli Bijli" lesh [[Hardy Sandhu]].<ref>{{cite web|url=https://www.ndtv.com/entertainment/palak-tiwari-and-harrdy-sandhu-set-the-stage-on-fire-in-bijlee-bijlee-2593650|title=Palak Tiwari And Harrdy Sandhu Set The Stage On Fire In Bijlee Bijlee}}</ref><ref>{{cite web|url=https://www.indiatoday.in/television/celebrity/story/harrdy-sandhu-s-pants-slip-off-dancing-to-bijlee-with-palak-tiwari-bts-clip-captures-oops-moment-1913394-2022-02-15|title=Harrdy Sandhu's pants slip off dancing to Bijlee with Palak Tiwari. BTS clip captures 'oops moment'}}</ref> Ayns 2022, chloie ee chammah 'syn 'eeshan kiaullee "Mangta Hai Kya" noi [[Aditya Seal]].<ref>{{cite web|url=https://www.indiatoday.in/television/celebrity/story/palak-tiwari-aditya-seal-s-mangta-hai-kya-crosses-5-million-views-actress-shares-bts-video-1941063-2022-04-23|title=Palak Tiwari, Aditya Seal's Mangta Hai Kya crosses 5 million views. Actress shares BTS video}}</ref> Ayns 2023, ren ee e chied çheet-magh ayns [[Bollywood]] tra chloie ee 'sy fillym lught-thie ''[[Kisi Ka Bhai Kisiki Jaan]]''.<ref>{{Cite web|date=11 June 2022|title=Palak Tiwari to star in Salman Khan starrer Kabhi Eid Kabhi Diwali; to be paired opposite Jassie Gill|url=https://www.bollywoodhungama.com/news/bollywood/palak-tiwari-star-salman-khan-starrer-kabhi-eid-kabhi-diwali-paired-opposite-jassie-gill/|access-date=11 Mean Souree 2022|website=[[बॉलीवुड हँगामा]]}}</ref><ref>{{cite web|url=https://timesofindia.indiatimes.com/videos/entertainment/hindi/palak-tiwari-calls-salman-khan-father-opens-up-about-her-experience-of-working-with-the-superstar/videoshow/98647843.cms?from=mdr|title=Palak Tiwari calls Salman Khan 'father', opens up about her experience of working with the superstar}}</ref> Va paart femoil eck cur liorish [[Venkatesh (aghteyr)|Venkatesh]], [[Jagapathi Babu]], [[Pooja Hegde]], as [[Shehnaaz Gill]].<ref>{{Cite web|date=2023-12-15|title=Palak Tiwari: ఫొటోలపై ట్రోల్.. ‘కామెంట్స్’ ఆపేసిన నటి {{!}} palak tiwari faces excessive trolling and she deactivates comments after users troll her|url=https://www.eenadu.net/telugu-news/movies/palak-tiwari-faces-excessive-trolling-and-she-deactivates-comments-after-users-troll-her/0210/123035526|access-date=2023-12-15|website=web.archive.org|archive-date=2023-12-15|archive-url=https://web.archive.org/web/20231215050517/https://www.eenadu.net/telugu-news/movies/palak-tiwari-faces-excessive-trolling-and-she-deactivates-comments-after-users-troll-her/0210/123035526|url-status=bot: unknown}}</ref>
Ayns 2024, chloie ee 'sy fillym aittys atçhimagh ''The Virgin Tree'' cur liorish [[Sanjay Dutt]].<ref>{{cite web|url=https://www.thehindu.com/entertainment/movies/sanjay-dutt-to-star-in-horror-comedy-the-virgin-tree/article66081144.ece|title=Sanjay Dutt to star in horror comedy 'The Virgin Tree'}}</ref>
'''Movies'''
kisi ka bhai kisi ki jaan
Bhootni
'''Web Series'''
Lukkhe
==Imraaghyn==
{{reflist}}
==Kianglaghyn magh==
{{commonscat}}
* {{IMDb name}}
* {{Instagram}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Tiwari, Palak}}
[[Ronney:Ruggyryn 'sy vlein 2000]]
[[Ronney:Feallee vio]]
[[Ronney:Feallee ass Mumbai]]
[[Ronney:Aghteyryn ass Maharashtra]]
[[Ronney:Aghteyryn fillym bwoirrin Injinagh]]
[[Ronney:Aghteyryn bwoirrin ayns scannaneaght y Hindish]]
ejfr5sd9gm0fscx5qy9n3s9uzzqfxab
John Morris (aghteyr Americaanagh)
0
35769
379149
374270
2026-05-17T18:41:08Z
InternetArchiveBot
16702
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
379149
wikitext
text/x-wiki
{{WD Kishtey Fys Dooinney
| jalloo = John Morris Mouse-Con 2022-11-06 (cropped).jpg
| fo-heidyl = John Morris ec Mouse-Con ayns Mee Houney 2022
| date_ruggyr = {{date ruggyr|1984|9|2}}
| boayl_ruggyr = [[Dallas]], [[Texas]], ny Steatyn Unnaneysit
}}
She aghteyr goo Americaanagh eh '''John Morris'''. Ta enney share er son e phaart myr [[Rolley karacteyryn ayns Toy Story#Andy Davis|Andy Davis]] 'sy [[Toy Story (kiartys mean)|straih fillym ''Toy Story'']].<ref name="auto">{{cite magazine| url=https://ew.com/article/2010/06/18/toy-story-3-john-morris-andy/| title='Toy Story 3': Q&A with the voice of Andy, John Morris| first=Mandi| last=Bierly| date=June 18, 2010| magazine=[[Entertainment Weekly]]| access-date=January 19, 2021| archive-date=December 8, 2020| archive-url=https://web.archive.org/web/20201208145250/https://ew.com/article/2010/06/18/toy-story-3-john-morris-andy/| url-status=live}}</ref><ref>{{cite news| url=http://techland.time.com/2010/11/01/growing-up-toy-story-3s-andy-john-morris-on-the-end-of-everything/| title=Growing Up: Toy Story 3's Andy, John Morris, on the End of Everything| first=Michelle| last=Castillo| date=November 1, 2010| magazine=[[Time (magazine)|Time]]| access-date=January 19, 2021| archive-date=June 30, 2019| archive-url=https://web.archive.org/web/20190630013447/http://techland.time.com/2010/11/01/growing-up-toy-story-3s-andy-john-morris-on-the-end-of-everything/| url-status=live| accessdate=October 14, 2024| archivedate=June 30, 2019| archiveurl=https://web.archive.org/web/20190630013447/http://techland.time.com/2010/11/01/growing-up-toy-story-3s-andy-john-morris-on-the-end-of-everything/}}</ref>
==Bea leah==
Dirree Morris veih [[San Francisco University High School]] ayns [[San Francisco, California]] 'sy vlein 2003.<ref>{{cite news| url=https://www.sfuhs.org/alumni/community/stageandscreen| title=San Francisco University High School| access-date=19 Jerrey Geuree 2021| archive-date=25 Jerrey Geuree 2021| archive-url=https://web.archive.org/web/20210125100735/https://www.sfuhs.org/alumni/community/stageandscreen| url-status=live| accessdate=2024-10-14| archivedate=2024-03-19| archiveurl=https://web.archive.org/web/20240319051407/https://www.sfuhs.org/alumni/community/stageandscreen}}</ref>
==Coorse bea==
Ayns 1991, as eh prowal da paart Andy ayns ''[[Toy Story]]'', hug Morris fir jeh ny [[babban jantys|babbanyn jantys]] ''[[X-Men]]'' lesh as chroo eh gooyn dauesyn; smooinnee fwirran [[Pixar]] dy re red yindyssagh eh shen as hug ad y paart da.<ref>{{cite news| title=Boy, that was a great story| last=Villarreal| first=Yvonne| url=https://www.latimes.com/uncategorized/toy-story-pixar-disney-toy-story-actor-andy-john-morris/amp/| date=8 Jerrey Souree 2010| newspaper=[[Los Angeles Times]]| url-access=subscription| access-date=19 Jerrey Geuree 2021}}</ref><ref>{{cite journal| url=https://chipandco.com/a-bittersweet-toy-story-goodbye-for-john-morris-voice-of-andy-11457/| title=A bittersweet 'Toy Story' Goodbye for John Morris, voice of Andy| date=1 Jerrey Souree 2010| journal=Chip & Co| access-date=30 Mean Souree 2019| archive-date=8 Averil 2023| archive-url=https://web.archive.org/web/20230408113719/https://chipandco.com/a-bittersweet-toy-story-goodbye-for-john-morris-voice-of-andy-11457/| url-status=live}}</ref> Va Morris currit er ash dys ''[[Toy Story 3]]'' rere aghin y stiureyder [[Lee Unkrich]]. Er [[Blu-ray]]/[[DVD]] ''Toy Story 3'', dooyrt Unkrich dy row ad shirrey fysseree choventyn da Morrish hoshiaght, as va imnea orroo bentyn rish sheean e ghoo. S'aighoil, va'n imnea er ny scryssey tra cheayll ad y vannaght er post-coraa Morris.<ref>{{cite news| url=https://archive.sltrib.com/article.php?id=9739966&itype=storyID| title='Toy Story 3' director: Characters 'in my DNA'| first=Sean P.| last=Means| date=17 Mean Souree 2010| newspaper=[[The Salt Lake Tribune]]| access-date=19 Jerrey Geuree 2021}}</ref>
Ta myn-enney er chammah myr goo "Pepper Roni" 'sy ghamman-feeshan ''[[Lego Island]]'' veih'n vlein 1997.<ref name="BTVA"/>
==Bea phersoonagh==
She keimagh veih Scoill Theater, Scannaneaght, as Çhellveeish lesh [[Ollooscoill-Los Angeles]] veih'n vlein 2007 t'eh. Ta Morris beaghey ayns [[Ard Vaie San Francisco]].<ref name="auto"/>
==Scannaneaght==
===Fillym===
{| class="wikitable"
|- style="text-align:center;"
! style="background:#B0C4DE;" | Blein
! style="background:#B0C4DE;" | Enmys
! style="background:#B0C4DE;" | Paart
! style="background:#B0C4DE;" | Noteyn
|-
|1993
|''[[The Nightmare Before Christmas]]''
|[[Rolley karacteyryn ayns The Nightmare Before Christmas#Gaihaghyn bunnit ayns Halloween Town|Santa Boy]]
|Goo
|-
|1995
|''[[Toy Story]]''
| rowspan="4" | [[Rolley karacteyryn ayns Toy Story#Andy Davis|Andy Davis]]
|Goo<ref>{{cite journal| url=http://www.backstage.com/bso/news-and-features-features/third-story-guy-1004083390.story| title=Third-Story Guy| journal=[[Backstage (magazine)|Backstage]]| first=Sarah| last=Kuhn| date= 14 Luanistyn 2012| access-date=15 Averil 2010| archive-date=17 Averil 2010| archive-url=https://web.archive.org/web/20100417072102/http://www.backstage.com/bso/news-and-features-features/third-story-guy-1004083390.story| url-status=live}}</ref><ref name="BTVA">{{cite web|url=https://www.behindthevoiceactors.com/John-Morris/|title=John Morris (visual voices guide)|website=Behind The Voice Actors}}</ref>
|-
|1999
|''[[Toy Story 2]]''
|Goo<ref name="BTVA"/>
|-
| 2010
|''[[Toy Story 3]]''
|Goo<ref name="BTVA"/>
|-
|2019
|''[[Toy Story 4]]''
|Goo<ref name="BTVA"/>
|}
===Çhellveeish===
{| class="wikitable"
|- style="text-align:center;"
! style="background:#B0C4DE;" | Blein
! style="background:#B0C4DE;" | Enmys
! style="background:#B0C4DE;" | Paart
! style="background:#B0C4DE;" | Noteyn
|-
|1997
|''[[The Wonderful World of Disney]]''
|Andy
|Goo, 1 episode
|-
|2001
|''[[Jason and the Heroes of Mount Olympus]]''
|Tooilley gooyn
|Earroo episodeyn gyn fys
|-
|2009
|''Disney Get Connected''
|Eshyn hene
|
|-
|2010
|''That Fellow in the Coat''
|Andy Davis
|Goo, recortyssyn tashtlann<br>Episode: "A Look Back at the Animated Features of 2010"
|-
|2016
|''Greatest Animated Movies''
|Eshyn hene
|Claare feanishagh
|-
|2019
|''Timon and Pumbaa at the Movies''
|Andy Davis
|Goo, recortyssyn tashtlann<br>2 episode
|}
===Gammanyn-feeshan===
{| class="wikitable"
|- style="text-align:center;"
! style="background:#B0C4DE;" | Blein
! style="background:#B0C4DE;" | Enmys
! style="background:#B0C4DE;" | Paart
! style="background:#B0C4DE;" | Noteyn
|-
|1995
|''[[Disney's Animated Storybook|Animated Storybook: Toy Story]]''
|Andy Davis
|
|-
|1997
|''[[Lego Island]]''
|Pepper Roni
|<ref name="BTVA"/>
|-
|2001
|''Nicktoons Nick Tunes''
|Otto Rocket (goo arraneys)
|<ref name="BTVA"/>
|-
|2010
|''[[Toy Story 3: The Video Game]]''
|Andy Davis
|
|}
==Imraaghyn==
{{Reflist}}
==Kianglaghyn magh==
* {{IMDb name|0606658|John Morris}}
* {{Twitter}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Morris, John}}
[[Ronney:Ruggyryn 'sy vlein 1984]]
[[Ronney:Feallee vio]]
[[Ronney:Aghteyryn ass Texas]]
[[Ronney:Feallee ass Dallas]]
[[Ronney:Aghteyryn fillym firryn Americaanagh]]
[[Ronney:Aghteyryn goo firryn Americaanagh]]
[[Ronney:Feallee ass Paris, Texas]]
7ymxtxo3543zueu02xzqzubhl8wt2rp
Module:Category series navigation
828
36546
379215
378194
2026-05-18T00:58:20Z
MacTire02
219
kiartaghey prowallagh
379215
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12oo, etc. (Manx ordinals)
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
-- Manx ordinal suffixes:
-- 1d, 2h, everything else = oo
if n == 1 then
return s .. 'd'
elseif n == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(cpagename, '[:%s](%d+[dho][o])[-%s]') or
mw.ustring.match(cpagename, '[:%s](%d+[dho][o])$')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
0ko1um7imjob3wa0dlc3z5rfau3q7hc
379216
379215
2026-05-18T01:03:49Z
MacTire02
219
kiartaghey prowallagh
379216
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12oo, etc. (Manx ordinals)
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
-- Manx ordinal suffixes:
-- 1d, 2h, everything else = oo
if n == 1 then
return s .. 'd'
elseif n == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[dho]?[o]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[dho]?[o]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'eash') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(cpagename, '[:%s](%d+[dho][o])[-%s]') or
mw.ustring.match(cpagename, '[:%s](%d+[dho][o])$')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
1ml9dvr5s1yrv37mqc64nu9r5f1lz64
379217
379216
2026-05-18T01:08:24Z
MacTire02
219
kiartaghey prowallagh
379217
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12oo, etc. (Manx ordinals)
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
-- Manx ordinal suffixes:
-- 1d, 2h, everything else = oo
if n == 1 then
return s .. 'd'
elseif n == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[dho]?[o]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[dho]?[o]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'eash') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(pagename, '(%d+(?:st|nd|rd|th|d|h|oo))')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
6l6s4w2jtr6z6tia3hbm6vv0gyrvnb6
379218
379217
2026-05-18T01:09:05Z
MacTire02
219
Undid revision [[Special:Diff/379215|379215]] by [[Special:Contributions/MacTire02|MacTire02]] ([[User talk:MacTire02|talk]])
379218
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12th, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local tens = string.match(s, '1%d$')
if tens then return s..'oo' end
local ones = string.match(s, '%d$')
if ones == '1' then return s..'d'
elseif ones == '2' then return s..'h' end
return s..'oo'
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[dho]?[o]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[dho]?[o]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'eash') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(pagename, '(%d+(?:st|nd|rd|th|d|h|oo))')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
s9bg2nzlh6bc865jgdkjn0rmnkhadzp
379219
379218
2026-05-18T01:09:53Z
MacTire02
219
++
379219
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12th, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local tens = string.match(s, '1%d$')
if tens then return s..'oo' end
local ones = string.match(s, '%d$')
if ones == '1' then return s..'d'
elseif ones == '2' then return s..'h' end
return s..'oo'
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(cpagename, '[:%s](%d+[dho][o])[-%s]') or
mw.ustring.match(cpagename, '[:%s](%d+[dho][o])$')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
lc90rt2kbwfmvdptomtwh0f3ebxc47t
379220
379219
2026-05-18T01:17:28Z
MacTire02
219
prowal
379220
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = mw.ustring.match(pagename, '(%d+(?:st|nd|rd|th|oo|[dh]))')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
14436uhmedcj7hax3bc5d4g0t993i2g
379221
379220
2026-05-18T01:20:12Z
MacTire02
219
prowal
379221
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
k3o7knw64tk8l5bqprix377talyd8t2
379224
379221
2026-05-18T01:37:57Z
MacTire02
219
prowal
379224
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, ' (BC|RC)$') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (RC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' RC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, ' (BC|RC)$') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'eash') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, ' (BC|RC)$') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, ' (BC|RC)$', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..RC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
kjxqe0xqnu6b1ezx7ct4thuub4qdnsn
379225
379224
2026-05-18T01:38:26Z
MacTire02
219
Undid revision [[Special:Diff/379224|379224]] by [[Special:Contributions/MacTire02|MacTire02]] ([[User talk:MacTire02|talk]])
379225
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
k3o7knw64tk8l5bqprix377talyd8t2
379231
379225
2026-05-18T01:55:20Z
MacTire02
219
prowal
379231
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'eash') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
ky5ngi99i2oao43t1t4d2sxg9gnfjjz
379232
379231
2026-05-18T02:01:52Z
MacTire02
219
++
379232
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
66b0x9w8pj1ej0mo4ae3wd2zshgtffs
379233
379232
2026-05-18T02:07:41Z
MacTire02
219
prowal
379233
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
azcugu5o5sdelcwx7hu6x2mzl4r32rq
379234
379233
2026-05-18T02:10:08Z
MacTire02
219
prowal
379234
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or (isManxMillenium and 'RC') or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif BC == '' and minord <= osign and osign <= maxord then --e.g. >= "1st parliament"
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise
table.insert(navlist, hidden)
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
jqrfzvvslkee126jokcsx5o4a84t322
379272
379234
2026-05-18T02:39:56Z
MacTire02
219
prowal
379272
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or (isManxMillenium and 'RC') or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and minord < 1 then minord = 1 end --nothing before "1st parliament", etc.
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o --use o for display & osign for logic
if BC ~= '' then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
pc4y68f8i95mc3c7ba153m5wim028yc
379273
379272
2026-05-18T02:52:41Z
MacTire02
219
prowal
379273
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed)
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format
or mw.ustring.match(lastpart, '%s(RC)') --"1d villey bleeaney RC" Manx format
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '') --also strip Manx RC
local BCe = parentBC or ordBCElastparts[lastpartNoBC] or (isManxMillenium and 'RC') or 'BC' --"BC" default
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and not parentBC and minord < 1 then minord = 1 end
if not temporal and parentBC and maxord < 1 then maxord = -1 end
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o
if BC ~= '' and temporal then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
em4uizwhokmwrae7jpmesbne26d640u
379274
379273
2026-05-18T03:19:11Z
MacTire02
219
prowal
379274
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') or string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end
if string.match(maximumord or '', 'BC') or string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)')
or mw.ustring.match(lastpart, '%s(RC)')
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '')
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '')
local BCe = parentBC
or ordBCElastparts[lastpartNoBC]
or (isManxMillenium and 'RC')
or 'BC'
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and not parentBC and minord < 1 then minord = 1 end
if not temporal and parentBC and maxord < 1 then maxord = -1 end
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o
if BC ~= '' and temporal then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
695cgohvoxqducnejw2keu4jxqyq7jx
379275
379274
2026-05-18T03:24:50Z
MacTire02
219
croo isManxCentury
379275
Scribunto
text/plain
require('strict')
local p = {}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation year and range]]
'', --[28] placeholder for [[Category:Category series navigation year and decade]]
'', --[29] placeholder for [[Category:Category series navigation decade and century]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'BC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'BC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = parentBC and 'RC' or 'BC' --use RC for Manx categories, BC otherwise
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'s'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') or string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end
if string.match(maximumord or '', 'BC') or string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney') or
string.match(lastpart, '^eash')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxCentury = string.match(lastpart, '^eash')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)')
or mw.ustring.match(lastpart, '%s(RC)')
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '')
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '')
local BCe = parentBC
or ordBCElastparts[lastpartNoBC]
or ((isManxMillenium or isManxCentury) and 'RC')
or 'BC'
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and not parentBC and minord < 1 then minord = 1 end
if not temporal and parentBC and maxord < 1 then maxord = -1 end
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = p.addord(o)
local osign = o
if BC ~= '' and temporal then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger soft mutation: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
if ones == 1 or ones == 2 then
lastpart = 'villey bleeaney'
else
lastpart = 'milley bleeaney'
end
if BC ~= '' then
lastpart = lastpart .. BC
end
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
local nordinal = string.match(
pagename,
'%d+[snrt]?[tdh]?o?o?'
)
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
firstpart_dec = firstpart_dec..' the'
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0s '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
trackcat(28, 'Category series navigation year and decade')
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)s'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
0wqri1wpm855qywt9la7zbr3lm6ttea
Ronney:Towshanagh
14
36691
379156
347607
2026-05-17T21:13:43Z
MacTire02
219
ronney elley
379156
wikitext
text/x-wiki
{{Commons category|Measurement|Towshanagh}}
{{Catmore}}
[[Ronney:Smooinaghtyn 'syn ishig]]
[[Ronney:Jannooyn deiney]]
0ezjkg5uzq83i5ci3kc0bscebw8xg89
Ronney:Ruggyryn 'sy 2h villey bleeaney
14
36710
379243
348407
2026-05-18T02:14:45Z
MacTire02
219
+clowan
379243
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn 'sy 2h villey bleeaney]]
[[Ronney:Ruggyryn rere milley bleeaney|2]]
owm2l9k9xbty17umtc25tputt2ool20
Ronney:Ruggyryn 'sy 3oo milley bleeaney
14
36711
379245
348409
2026-05-18T02:15:16Z
MacTire02
219
+clowan
379245
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn 'sy 3oo milley bleeaney]]
[[Ronney:Ruggyryn rere milley bleeaney|3]]
4g0rkyq5ewacaw570mn4th2h074of7x
Ronney:Ruggyryn 'sy 1d villey bleeaney
14
36712
379244
348410
2026-05-18T02:14:56Z
MacTire02
219
+clowan
379244
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn 'sy 1d villey bleeaney]]
[[Ronney:Ruggyryn rere milley bleeaney|1]]
jodboxhbyidprnk9swevjn8a0vrcq7i
Ronney:Toshiaghtyn 'sy 1d villey bleeaney
14
36715
379238
348413
2026-05-18T02:13:19Z
MacTire02
219
+clowan
379238
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn rere milley bleeaney|1]]
[[Ronney:1d villey bleeaney]]
g80eytyslfimw9p4yk2shbjjgzadi55
Ronney:1d villey bleeaney
14
36716
379237
348415
2026-05-18T02:12:55Z
MacTire02
219
+clowan
379237
wikitext
text/x-wiki
{{commons cat|1st millennium|1d villey bleeaney}}
{{category series navigation}}
[[Ronney:Milley bleeantyn| 3]]
[[Ronney:Yn Holoseenagh]]
4rz2j7uawxo9ppfzs1fsdmcb0q28d8e
Ronney:Toshiaghtyn 'sy 3oo milley bleeaney
14
36723
379240
348423
2026-05-18T02:13:43Z
MacTire02
219
+clowan
379240
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn rere milley bleeaney|3]]
[[Ronney:3oo milley bleeaney]]
7q9ru8gxy06sob6198ltmbkbwrbhadz
Ronney:Toshiaghtyn 'sy 2h villey bleeaney
14
36724
379239
348424
2026-05-18T02:13:31Z
MacTire02
219
+clowan
379239
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn rere milley bleeaney|2]]
[[Ronney:2h villey bleeaney]]
tohk911zpc1nhrjl2srgf4gbo3o4zm6
Ronney:2h villey bleeaney
14
36725
379235
348425
2026-05-18T02:12:30Z
MacTire02
219
+clowan
379235
wikitext
text/x-wiki
{{Commonscat|2nd millennium|2h villey bleeaney}}
{{category series navigation}}
{{catmore}}
{{CategoryTOC}}
[[Ronney:Milley bleeantyn| 2]]
[[Ronney:Yn Holoseenagh]]
iv25zkxgp2loxdvhhrbkoppfa5km4tx
Ronney:Greesaghtyn rere jeihaght
14
37568
379200
349807
2026-05-18T00:31:23Z
MacTire02
219
ronney elley
379200
wikitext
text/x-wiki
{{see also|Ronney:Greesaghtyn rere blein|Ronney:Greesaghtyn rere eash}}
{{Commonscat|Introductions by decade|Greesaghtyn rere jeihaght}}
{{see also|Ronney:Bunneeaghtyn rere jeihaght}}
{{moir-ronney}}
[[Ronney:Greesaghtyn rere traa|Jeihaght]]
[[Ronney:Ronnaghyn rere jeihaght]]
[[Ronney:Toshiaghtyn rere jeihaght]]
mlhiy8rz6vg8s6cqnxiws26hxgynj80
Ronney:Greesaghtyn rere eash
14
37569
379199
349808
2026-05-18T00:30:49Z
MacTire02
219
ronney elley
379199
wikitext
text/x-wiki
{{see also|Ronney:Greesaghtyn rere blein|Ronney:Greesaghtyn rere jeihaght}}
{{Commonscat|Introductions by century|Greesaghtyn rere eash}}
{{moir-ronney}}
[[Ronney:Ronnaghyn rere eash]]
[[Ronney:Greesaghtyn rere traa|Eash]]
[[Ronney:Toshiaghtyn rere eash]]
rvewhdscva24p9yh66jm7o1t65qs1ml
Ronney:Greesaghtyn rere traa
14
38610
379204
351887
2026-05-18T00:34:59Z
MacTire02
219
+ronney
379204
wikitext
text/x-wiki
{{Commonscat|Introductions by time|Greesaghtyn rere traa}}
{{moir-ronney}}
[[Ronney:Greesaghtyn| Traa]]
[[Ronney:Toshiaghtyn rere traa]]
[[Ronney:Ronnaghyn rere traa]]
3q5eb76xkscw88vppms1v7geztjyfk2
Ronney:Greesaghtyn 'sy 19oo eash
14
38611
379242
351888
2026-05-18T02:14:22Z
MacTire02
219
+clowan
379242
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Greesaghtyn 'sy 2h villey bleeaney|19]]
[[Ronney:Greesaghtyn rere eash|19]]
[[Ronney:Toshiaghtyn 'sy 19oo eash]]
bgbr7lpapq1l6ov0xbpg95yg0rjbr16
Ronney:Greesaghtyn 'sy 2h villey bleeaney
14
38612
379241
351889
2026-05-18T02:14:06Z
MacTire02
219
+clowan
379241
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Toshiaghtyn 'sy 2h villey bleeaney]]
[[Ronney:Greesaghtyn rere milley bleeaney|2]]
h35fau2j0i3ffxge9ya3l4rypoz36nn
Ronney:Far-skeealaght rere soiaghey
14
47163
379147
374230
2026-05-17T18:03:27Z
MacTire02
219
ronney elley
379147
wikitext
text/x-wiki
[[Ronney:Far-skeealaght| Soiaghey]]
[[Ronney:Soiaghey (skeeal-oaylleeaght)|*]]
nh28e18er152mfm2w0apwcjxi3q2nyj
Ronney:Soiaghey (skeeal-oaylleeaght)
14
47164
379146
374231
2026-05-17T18:03:11Z
MacTire02
219
MacTire02 moved page [[Ronney:Soiaghey]] to [[Ronney:Soiaghey (skeeal-oaylleeaght)]] without leaving a redirect: reddaghey
374231
wikitext
text/x-wiki
[[Ronney:Obbraghyn crootagh]]
[[Ronney:Skeeal-oaylleeaght]]
5y6iqsufjhm20n0iglun0321u5ufn4m
Ronney:Çhellmaddaght
14
50203
379143
2026-05-17T18:00:44Z
MacTire02
219
ronney noa
379143
wikitext
text/x-wiki
{{Cat main}}
[[Ronney:Çhellinsh]]
[[Ronney:Reireydys çhaghnoaylleeaght-fysseree]]
[[ROnney:Soiaghey gyn streng]]
2rkz5h1eilf3f807gf5q5ls3f2ralh4
379144
379143
2026-05-17T18:01:31Z
MacTire02
219
catsort
379144
wikitext
text/x-wiki
{{Cat main}}
{{DEFAULTSORT:Chellmaddaght}}
[[Ronney:Çhellinsh]]
[[Ronney:Reireydys çhaghnoaylleeaght-fysseree]]
[[ROnney:Soiaghey gyn streng]]
rs3uoe0xzomf5ax51k2pjriv7vw41j1
Ronney:Soiaghey gyn streng
14
50204
379145
2026-05-17T18:02:13Z
MacTire02
219
ronney noa
379145
wikitext
text/x-wiki
{{Commonscat|Wireless locating|Soiaghey gyn streng}}
[[Ronney:Çhaghnoaylleeaght hooylagh]]
[[Ronney:Çhellinsh gyn streng]]
[[Ronney:Soiaghey|Gyn streng]]
1xypf5jjfrxf7epgdk5rx7c42zdtgj4
Ronney:Soiaghey
14
50205
379148
2026-05-17T18:07:01Z
MacTire02
219
ronney noa
379148
wikitext
text/x-wiki
{{Commonscat|Positioning|Soiaghey}}
{{cat main}}
[[Ronney:Boayl|*]]
[[Ronney:Eiyrt]]
[[Ronney:Saaseyn towse ry-hoi lhiurid, foddeeaght, ny reayn]]
5h65r2asln623chvt4e9wpj7sm5uxcd
Ronney:Boayl
14
50206
379151
2026-05-17T21:08:40Z
MacTire02
219
ronney noa
379151
wikitext
text/x-wiki
{{Cat main|Boayl (towse-oaylleeaght)}}
{{Commons category|Position|Boayl}}
[[Ronney:Towshan towse-oaylleeagh]]
[[Ronney:Spoar]]
[[Ronney:Mooadyn vaghtoor fishigagh]]
[[Ronney:Poynt (towse-oaylleeaght)]]
[[Ronney:Buill]]
e0xlinnqyfzdygidbtndfu5ffzjmbkh
379152
379151
2026-05-17T21:10:09Z
MacTire02
219
aght
379152
wikitext
text/x-wiki
{{Cat main|Boayl (towse-oaylleeaght)}}
{{Commons category|Position|Boayl}}
[[Ronney:Towshanagh towse-oaylleeagh]]
[[Ronney:Spoar]]
[[Ronney:Mooadyn vaghtoor fishigagh]]
[[Ronney:Poynt (towse-oaylleeaght)]]
[[Ronney:Buill]]
p3xkpsre73iion91w15m1to5overdiz
Ronney:Towshanagh towse-oaylleeagh
14
50207
379153
2026-05-17T21:10:31Z
MacTire02
219
ronney noa
379153
wikitext
text/x-wiki
{{Commonscat|Geometric measurement|Towshanagh towse-oaylleeagh}}
[[Ronney:Towse-oaylleeaght]]
[[Ronney:Towshanagh|Towse-oaylleeagh]]
[[Ronney:Mooadyn fishigagh]]
4qxle1zcnvsb1b8rnm0x88pukv6vss5
Ronney:Mooad
14
50208
379155
2026-05-17T21:12:56Z
MacTire02
219
ronney noa
379155
wikitext
text/x-wiki
{{Commons category|Quantity|Mooad}}
{{Cat main}}
[[Ronney:Smooinaghtyn maddaghtoil]]
12s2yhozquegarph4nyrrkrgtlbq5se
Ronney:Mooadyn vaghtoor fishigagh
14
50209
379157
2026-05-17T21:17:42Z
MacTire02
219
ronney noa
379157
wikitext
text/x-wiki
{{Commonscat|Vector physical quantities|Mooadyn vaghtoor fishigagh}}
[[Ronney:Mooadyn fishigagh|Vaghtoor]]
[[Ronney:Vaghtooryn (maddaght as fishig)|Fishigagh]]
8r5oo80uy4ogblrsgt6stsxs4bv2o3e
Ronney:Vaghtooryn (maddaght as fishig)
14
50210
379158
2026-05-17T21:22:07Z
MacTire02
219
ronney noa
379158
wikitext
text/x-wiki
{{cat main|Vaghtoor (maddaght as fishig)}}
{{Commons category|Vectors|Vaghtooryn}}
[[Ronney:Algeerey linnagh]]
[[Ronney:Algeerey foayssagh]]
cf51kgx4499u41rfv15jr3ubt2cuuax
Ronney:Poynt (towse-oaylleeaght)
14
50211
379159
2026-05-17T21:23:39Z
MacTire02
219
ronney noa
379159
wikitext
text/x-wiki
{{Commonscat|Points (mathematics)|Poyntyn (maddaght)}}
{{Cat main|Poynt (towse-oaylleeaght)}}
[[Ronney:Towse-oaylleeaght vunneydaght]]
[[Ronney:Smooinaghtyn maddaghtoil]]
lwev1aexeulztrp9qxvpb3axxooc4gd
379160
379159
2026-05-17T21:24:01Z
MacTire02
219
lettyraghey
379160
wikitext
text/x-wiki
{{Commonscat|Points (mathematics)|Poyntyn (maddaght)}}
{{Cat main|Poynt (towse-oaylleeaght)}}
[[Ronney:Towse-oaylleeaght vunneydagh]]
[[Ronney:Smooinaghtyn maddaghtoil]]
icctx9udjvv4p9jknkmv7zrr25em1n2
Ronney:Eiyrt
14
50212
379168
2026-05-17T23:17:58Z
MacTire02
219
ronney noa
379168
wikitext
text/x-wiki
{{Commonscat|Tracking (hunting)|Lorgey}}
[[Ronney:Towshanagh]]
[[Ronney:Co-earroo ooilley-ynnydagh]]
[[Ronney:Soiaghey gyn streng]]
[[Ronney:Arrey]]
[[Ronney:Preevaadjys]]
7tdr8x1q58y8u49xthunc4zbwpjjhld
Ronney:Saaseyn towse ry-hoi lhiurid, foddeeaght, ny reayn
14
50213
379169
2026-05-17T23:19:41Z
MacTire02
219
ronney noa
379169
wikitext
text/x-wiki
{{Commons category|Length measuring devices|Saaseyn ry-hoi towshanagh lhiurid}}
[[Ronney:Lhiurid]]
[[Ronney:Greieyn towshanagh]]
pv0trdtpgsjg3fnrlnjcgrr2umk4qxv
Ronney:Greieyn towshanagh
14
50214
379170
2026-05-17T23:22:10Z
MacTire02
219
ronney noa
379170
wikitext
text/x-wiki
{{cat main}}
{{category explanation|greieyn towse ta towshanagh ny ooley towshanyn fishigagh lheead as yrjid, lheead, çheeid, a.r.e.}}
{{Commons cat|Measuring instruments (dimension)|Greieyn towse}}
[[Ronney:Mooadys]]
[[Ronney:Greieyn towshanagh twose-oaylleeagh|Towshanagh]]
sh6mobt62mxk5pny6hkfyrsenxofnos
379171
379170
2026-05-17T23:22:34Z
MacTire02
219
ronney elley
379171
wikitext
text/x-wiki
{{cat main}}
{{category explanation|greieyn towse ta towshanagh ny ooley towshanyn fishigagh lheead as yrjid, lheead, çheeid, a.r.e.}}
{{Commons cat|Measuring instruments (dimension)|Greieyn towse}}
[[Ronney:Mooadys]]
[[Ronney:Greieyn towshanagh towse-oaylleeagh|Towshanagh]]
k877xg7uyl3dx1b0xg1jswpbaboek49
Ronney:Greieyn towshanagh towse-oaylleeagh
14
50215
379172
2026-05-17T23:23:32Z
MacTire02
219
ronney noa
379172
wikitext
text/x-wiki
[[Ronney:Greieyn towse|Towshanagh]]
[[Ronney:Towshanagh towse-oaylleeagh]]
tnx5lfpo1u92o73xjt8ee1uapm91gom
Ronney:Mooadys
14
50216
379173
2026-05-17T23:24:48Z
MacTire02
219
ronney noa
379173
wikitext
text/x-wiki
{{Commonscat|Size|Mooadys}}
{{Cat main}}
{{Cat see also|Towshan}}
[[Ronney:Mooad]]
[[Ronney:Mooadyn fishigagh]]
[[Ronney:Towshanagh towse-oaylleeagh]]
c8pkshpm4rzxig1yhcuny91po0lql5x
Ronney:Lhiurid
14
50217
379174
2026-05-17T23:26:46Z
MacTire02
219
ronney noa
379174
wikitext
text/x-wiki
{{Commons category|Length|Lhiurid}}
{{Cat main}}
[[Ronney:Mooadyn fishigagh scaillear]]
[[Ronney:Foddeeaght]]
[[Ronney:Mooadys]]
bhnkxp2x79p1hzbgfwxvy8zkv0m8wcw
Ronney:Foddeeaght
14
50218
379177
2026-05-17T23:30:16Z
MacTire02
219
ronney noa
379177
wikitext
text/x-wiki
{{Commons category|Distance|Foddeeaght}}
{{cat main}}
[[Ronney:Towse-oaylleeaght veadragh]]
[[Ronney:Leodys]]<!-- fo meadragh ennagh as ynrican my vel eh meenit -->
[[Ronney:Mooadyn fishigagh]]
[[Ronney:Mooadys]]
[[Ronney:Spoar]]
rcte8aoelhyuvjn0zjftj9zp52jnut3
Ronney:Towse-oaylleeaght veadragh
14
50219
379178
2026-05-17T23:37:03Z
MacTire02
219
ronney noa
379178
wikitext
text/x-wiki
{{Commons category|Metric geometry|Towse-oaylleeaght veadragh}}
Ta '''towse-oaylleeaght veadragh''' çheet er banglane jeh'n towse-oaylleeaght lesh [[spoar meadragh|spoaryn meadragh]] myr ard-focus studeyrys. Er y chooid smoo, t'eh currit da [[towse-oaylleeaght Riemann]] as [[sheiltynys possan]].
{{CatAutoTOC}}
[[Ronney:Magheryn y towse-oaylleeaght|Veadragh]]
7099ad37opvevttxcvcqg6tftf458pn
Ronney:Cooid vog ghellal
14
50220
379181
2026-05-17T23:39:06Z
MacTire02
219
ronney noa
379181
wikitext
text/x-wiki
{{Commons category|Business software|Cooid vog ghellal}}
{{Cat main}}
{{CatAutoTOC}}
[[Ronney:Cooid vog applacaid]]
[[Ronney:Co-earroo dellal]]
[[Ronney:Cooid vog rere sorçh|Ghellal]]
dsh6v6l4761qdbx2s8quslipmdj26ol
Ronney:Moggylyn sheshoil
14
50221
379182
2026-05-17T23:41:48Z
MacTire02
219
ronney noa
379182
wikitext
text/x-wiki
{{Commonscat|Social networks|Moggylyn sheshoil}}
{{Cat main|Moggyl sheshoil}}
[[Ronney:Çhaghteraght deiney]]
[[Ronney:Reagheydyssyn er-linney]]
[[Ronney:Sheiltynys reagheydyssagh]]
[[Ronney:Hene-reaghey]]
[[Ronney:Loaghtey fysseree heshoil]]
[[Ronney:Cleaney sheshoil]]
[[Ronney:Moggylyn|Sheshoil]]
[[Ronney:Possanyn sheshoil]]
fw5ydf81luegnr700yazxgzctucvl8p
379183
379182
2026-05-17T23:42:27Z
MacTire02
219
lettyraghey
379183
wikitext
text/x-wiki
{{Commonscat|Social networks|Moggylyn sheshoil}}
{{Cat main|Moggyl sheshoil}}
[[Ronney:Çhaghteraght deiney]]
[[Ronney:Reagheydyssyn er-linney]]
[[Ronney:Sheiltynys reagheydyssagh]]
[[Ronney:Hene-reaghey]]
[[Ronney:Loaghtey fysseree heshoil]]
[[Ronney:Cleayney sheshoil]]
[[Ronney:Moggylyn|Sheshoil]]
[[Ronney:Possanyn sheshoil]]
qsrur7j3p7015o7tpycezemiliemd8t
Ronney:Hene-reaghey
14
50222
379184
2026-05-17T23:46:34Z
MacTire02
219
ronney noa
379184
wikitext
text/x-wiki
{{Commons category|Self-organization|Hene-reaghey}}
{{Cat main}}
[[Ronney:Coryssyn gleashaghtagh]]
[[Ronney:Reaghey]]
[[Ronney:Cur sheese er hene]]
5loe4nm05wfdy3rx1d0yqhn31svp9fq
Ronney:Cur sheese er hene
14
50223
379185
2026-05-17T23:48:48Z
MacTire02
219
ronney noa
379185
wikitext
text/x-wiki
{{cat main}}
[[Ronney:Glare]]
[[Ronney:Hene]]
[[Ronney:Çhaghnyssyn meta-farskeealagh]]
ky2sngcf279yucav2ja6lszrl96skw4
Ronney:Çhaghnyssyn meta-farskeealagh
14
50224
379186
2026-05-17T23:50:57Z
MacTire02
219
ronney noa
379186
wikitext
text/x-wiki
[[Ronney:Meta-farskeealaght|Chaghnyssyn]]
[[Ronney:Çhaghnyssyn skeealagh]]
[[Ronney:Ellyn cloie]]
e62ejxrc6je3pbugv7ai2tpvadl2jsf
379187
379186
2026-05-17T23:51:56Z
MacTire02
219
catsort
379187
wikitext
text/x-wiki
[[Ronney:Meta-farskeealaght|Chaghnyssyn]]
[[Ronney:Çhaghnyssyn skeealagh|Meta-farskeealagh]]
[[Ronney:Ellyn cloie|Chaghnyssyn meta-farskeealagh]]
fohc6cy1cft29d1004wc4lxnbdrrtiq
Ronney:Ellyn cloie
14
50225
379188
2026-05-17T23:53:48Z
MacTire02
219
ronney noa
379188
wikitext
text/x-wiki
{{Cat main}}
{{Category distinguish|Ny h-ellynyn cloie}}
{{Commons category|Performing art|Ellyn cloie}}
[[Ronney:Ny h-ellynyn cloie]]
[[Ronney:Eear-noa-emshiraght]]
[[Ronney:Ellyn eear-noa-emshiragh|Cloie]]
[[Ronney:Shaanraghyn theateragh]]
0km4m1ysbysz9654zwugrrw8d5a86qg
Ronney:Ellyn eear-noa-emshiragh
14
50226
379189
2026-05-17T23:58:05Z
MacTire02
219
ronney noa
379189
wikitext
text/x-wiki
{{Commons category|Postmodern art|Ellyn eear-noa-emshiragh}}
{{Cat main}}
{{-}}
::{{For|ellyneyryn/obbraghyn elley yn eash|Ronney:Ellyn co-emshiragh}}
::::::{{Category pair|Ellyn noa-emshiragh|Seihll ry-heet}}
{{DEFAULTSORT:Eear-noa-emshiragh}}
[[Ronney:Eear-noa-emshiraght|Ellyn]]
[[Ronney:Ellyn rere earish chrooaght]]
[[Ronney:Ny h-ellynyn 'sy 20oo eash]]
[[Ronney:Ny h-ellynyn 'sy 21d eash]]
[[Ronney:Gleashaghtyn ellyn co-emshiragh]]
[[Ronney:Gleashaghtyn ellyn y 20d eash]]
[[Ronney:Gleashaghtyn ellyn y 21d eash]]
0x68j8bgssz31fcg877m84daptvx25t
379230
379189
2026-05-18T01:47:37Z
MacTire02
219
ronney elley
379230
wikitext
text/x-wiki
{{Commons category|Postmodern art|Ellyn eear-noa-emshiragh}}
{{Cat main}}
{{-}}
::{{For|ellyneyryn/obbraghyn elley yn eash|Ronney:Ellyn co-emshiragh}}
::::::{{Category pair|Ellyn noa-emshiragh|Seihll ry-heet}}
{{DEFAULTSORT:Eear-noa-emshiragh}}
[[Ronney:Eear-noa-emshiraght|Ellyn]]
[[Ronney:Ellyn rere earish chrooaght]]
[[Ronney:Ny h-ellynyn 'sy 20oo eash]]
[[Ronney:Ny h-ellynyn 'sy 21d eash]]
[[Ronney:Gleashaghtyn ellyn co-emshiragh]]
[[Ronney:Gleashaghtyn ellyn y 20oo eash]]
[[Ronney:Gleashaghtyn ellyn y 21d eash]]
nb72y54h2iquwf8b2lnyixvdtiyj6sq
Ronney:Gleashaghtyn ellyn y 21d eash
14
50227
379190
2026-05-17T23:59:20Z
MacTire02
219
ronney noa
379190
wikitext
text/x-wiki
[[Ronney:Ellyn 'sy 21d eash]]
[[Ronney:Gleashaghtyn ellyn| 21]]
86x6j2gqk0lpdnupkgy7o3uk8sk3p5f
379226
379190
2026-05-18T01:45:53Z
MacTire02
219
+clowan
379226
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Ellyn 'sy 21d eash]]
[[Ronney:Gleashaghtyn ellyn| 21]]
omf1mrhaz85omfmjmm4ymn0y6auoxnl
Ronney:Ellyn 'sy 21d eash
14
50228
379191
2026-05-18T00:00:56Z
MacTire02
219
ronney noa
379191
wikitext
text/x-wiki
{{Commons category|21st-century in visual arts|Ny h-ellynyn sooilley 'sy 21d eash}}
[[Ronney:Ny h-ellynyn 'sy 21d eash]]
[[Ronney:Ellyn rere eash|21]]
nfi276wgsla000e1ieho6xwbiey38rk
379250
379191
2026-05-18T02:25:07Z
MacTire02
219
+clowan
379250
wikitext
text/x-wiki
{{Commons category|21st-century in visual arts|Ny h-ellynyn sooilley 'sy 21d eash}}
{{category series navigation}}
[[Ronney:Ny h-ellynyn 'sy 21d eash]]
[[Ronney:Ellyn rere eash|21]]
jkraz90zwjznb4q3fwvxwjf7fanm7i4
Ronney:Ellyn rere eash
14
50229
379192
2026-05-18T00:16:57Z
MacTire02
219
ronney noa
379192
wikitext
text/x-wiki
{{Commons category|Art by century|Ellyn rere eash}}
::{{See also|Ronney:Ny h-ellynyn rere eash}}
[[Ronney:Ellyn rere earish chrootaght| 01]]
[[Ronney:Shennaghys yn ellyn| C]]
[[Ronney:Ny h-ellynyn rere eash]]
[[Ronney:Obbraghyn rere eash]]
r9peukl0ym3pvqvmg72izjrw5j932ds
379207
379192
2026-05-18T00:37:43Z
MacTire02
219
lettyraghey
379207
wikitext
text/x-wiki
{{Commons category|Art by century|Ellyn rere eash}}
::{{See also|Ronney:Ny h-ellynyn rere eash}}
[[Ronney:Ellyn rere earish chrooaght| 01]]
[[Ronney:Shennaghys yn ellyn| C]]
[[Ronney:Ny h-ellynyn rere eash]]
[[Ronney:Obbraghyn rere eash]]
r7sk7sjou2pinnmf3xfrsgimvc8bsa4
Ronney:Obbraghyn rere eash
14
50230
379193
2026-05-18T00:18:49Z
MacTire02
219
ronney noa
379193
wikitext
text/x-wiki
{{Commons category|Works by century|Obbraghyn rere eash}}
{{moir-ronney}}
[[Ronney:Obbraghyn rere date| 1]]
[[Ronney:Ronnaghyn rere eash]]
bp7nmsyugvh6q39pai2ax1b2b80bufd
Ronney:Ny h-ellynyn rere eash
14
50231
379194
2026-05-18T00:21:25Z
MacTire02
219
ronney noa
379194
wikitext
text/x-wiki
*'''{{C|Ny h-ellynyn}}''' rere '''{{C|Obbraghyn rere eash|eash}}'''.
[[Ronney:Ny h-ellynyn rere earish| 01]]
[[Ronney:Ronnaghyn rere eash|Ellynyn]]
ap05knkgv7zpcd5bsjrsa7amc6mnvqb
Ronney:Obbraghyn rere sorçh as eash
14
50232
379196
2026-05-18T00:26:13Z
MacTire02
219
ronney noa
379196
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Obbraghyn rere eash| Sorch]]
[[Ronney:Obbraghyn rere sorçh| Eash]]
8tzypoh4mkiwyd77d0lqel2p1onrvna
Ronney:Feeshanyn rere eash
14
50233
379197
2026-05-18T00:27:43Z
MacTire02
219
ronney noa
379197
wikitext
text/x-wiki
[[Ronney:Feeshan| Eash]]
[[Ronney:Obbraghyn rere sorçh as eash]]
1kbhpm6mp71yfb6owe2jtjgfdej3d7c
Ronney:Troaryn rere eash ghreesaght
14
50234
379198
2026-05-18T00:29:39Z
MacTire02
219
ronney noa
379198
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Greesaghtyn rere sorçh as eash|*]]
[[Ronney:Greesaghtyn rere eash]]
[[Ronney:Troaryn rere earish ghreesaght|Eash]]
[[Ronney:Shennaghys tarmaynagh rere eash]]
jihq0yawajyx2rbwt7jjx2vqam3qgga
Ronney:Greesaghtyn rere sorçh as eash
14
50235
379201
2026-05-18T00:32:41Z
MacTire02
219
ronney noa
379201
wikitext
text/x-wiki
{{moir-ronney}}
{{Category see also|Greesaghtyn rere sorçh as blein|Greesaghtyn rere sorçh as jeihaght}}
[[Ronney:Greesaghtyn rere eash| Sorch]]
[[Ronney:Greesaghtyn rere sorçh| Eash]]
2rdcbzvuypd6eim00d2ke8kvrvvg20x
Ronney:Troaryn rere earish ghreesaght
14
50236
379203
2026-05-18T00:34:15Z
MacTire02
219
ronney noa
379203
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Troaryn| Earish]]
[[Ronney:Greesaghtyn rere traa|*]]
[[Ronney:Shennaghys y çhaghnoaylleeaght]]
ewb3iszonaqlvyk3qun9hnqvcd5llwq
Ronney:Shennaghys tarmaynagh rere eash
14
50237
379205
2026-05-18T00:35:42Z
MacTire02
219
ronney noa
379205
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Ronnaghyn rere eash]]
[[Ronney:Shennaghys tarmaynagh rere earish|.Eash]]
9uxta4952bj81qlogntd2xioehtzmdq
Ronney:Shennaghys yn ellyn
14
50238
379206
2026-05-18T00:36:50Z
MacTire02
219
ronney noa
379206
wikitext
text/x-wiki
[[Ronney:Ellyn]]
[[Ronney:Shennaghys cultooragh|Ellyn]]
m9bqipnvtgqjepf83gb0j6v0mjwdeyx
Ronney:Ellyn rere earish chrooaght
14
50239
379208
2026-05-18T00:39:10Z
MacTire02
219
ronney noa
379208
wikitext
text/x-wiki
{{Commons category|Works of art by period|Obbraghyn ellyn rere earish}}
{{category see also|Gleashaghtyn ellyn}}
[[Ronney:Ny h-ellynyn rere earish]]
[[Ronney:Obbraghyn rere earish chrooaght| Ellyn]]
[[Ronney:Shennaghys yn ellyn]]
t1v3ctxgp1180cpmmt6o9tuyae0kjpw
Ronney:Obbraghyn rere earish chrooaght
14
50240
379209
2026-05-18T00:41:59Z
MacTire02
219
ronney noa
379209
wikitext
text/x-wiki
{{Commonscat|Works by period of creation|Obbraghyn rere earish chrooaght}}
{{moir-ronney}}
{{Cat see also|Obbraghyn rere shaanrey|Obbraghyn rere earish hoiaghey|Obbraghyn bentyn rish lhingyn shenndeeagh|Obbraghyn bentyn rish shaanraghyn ellyn}}
[[Ronney:Obbraghyn crootagh| Earish]]
[[Ronney:Ny h-ellynyn rere earish]]
8vst87w3mzhr3kvrjx4lim5j2awj9pc
Ronney:Ny h-ellynyn 'sy 21d eash
14
50241
379210
2026-05-18T00:44:19Z
MacTire02
219
ronney noa
379210
wikitext
text/x-wiki
{{CatAutoTOC}}
[[Ronney:21d eash|Ellynyn]]
[[Ronney:Ny h-ellynyn rere eash|21]]
[[Ronney:Ny h-ellynyn 'sy 3oo milley bleeaney|21]]
j4bjy921m5m3cb6b29kxbdk0wibmm98
379222
379210
2026-05-18T01:20:42Z
MacTire02
219
++
379222
wikitext
text/x-wiki
{{CatAutoTOC}}
{{Navseasoncats}}
[[Ronney:21d eash|Ellynyn]]
[[Ronney:Ny h-ellynyn rere eash|21]]
[[Ronney:Ny h-ellynyn 'sy 3oo milley bleeaney|21]]
orhsw6qnee1rx507x16hfee9trmbgj1
Ronney:Ny h-ellynyn 'sy 3oo milley bleeaney
14
50242
379211
2026-05-18T00:45:36Z
MacTire02
219
ronney noa
379211
wikitext
text/x-wiki
[[Ronney:3oo milley bleeaney|Ellynyn]]
[[Ronney:Ny h-ellynyn rere milley bleeaney|3]]
0gzh1rgensp0ymu9fnt6fgahe8tmjdq
Ronney:Ny h-ellynyn rere milley bleeaney
14
50243
379212
2026-05-18T00:47:18Z
MacTire02
219
ronney noa
379212
wikitext
text/x-wiki
{{moir-ronney}}
*'''{{C|Ny h-ellynyn}}''' rere '''{{C|Obbraghyn rere milley bleeaney|milley bleeaney}}'''.
[[Ronney:Ny h-ellynyn rere earish|.Milley bleeaney]]
[[Ronney:Obbraghyn rere milley bleeaney| Ellynyn]]
[[Ronney:Ronnaghyn rere milley bleeaney|Ellynyn]]
p1vujmsept6n8dtp626vp59t9cfd4vb
Ronney:Obbraghyn rere milley bleeaney
14
50244
379213
2026-05-18T00:48:26Z
MacTire02
219
ronney noa
379213
wikitext
text/x-wiki
{{Commons category|Works by millennium|Obbraghyn rere milley bleeaney}}
{{moir-ronney}}
[[Ronney:Obbraghyn rere date| 0]]
[[Ronney:Ronnaghyn rere milley bleeaney]]
mkx7orjdg0l6g0lp26qo6ux3px2cn22
Ronney:Ny h-ellynyn 'sy 20oo eash
14
50245
379214
2026-05-18T00:50:38Z
MacTire02
219
ronney noa
379214
wikitext
text/x-wiki
{{Navseasoncats}}
{{CatAutoTOC}}
[[Ronney:20oo eash|Ellynyn]]
[[Ronney:Ny h-ellynyn rere eash|20]]
[[Ronney:Ny h-ellynyn 'sy 2h villey bleeaney|20]]
mf3e7cjuopdfameu7ytjrghaa3bpcun
Ronney:Ny h-ellynyn 'sy 2h villey bleeaney
14
50246
379223
2026-05-18T01:22:11Z
MacTire02
219
ronney noa
379223
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:2h villey bleeaney|Ellynyn]]
[[Ronney:Ny h-ellynyn rere milley bleeaney|2]]
m4mg6cqbvqccqqa44l9t02yyqcp2r5r
Ronney:Gleashaghtyn ellyn y 20oo eash
14
50247
379227
2026-05-18T01:46:19Z
MacTire02
219
ronney noa
379227
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Ellyn 'sy 20oo eash]]
[[Ronney:Gleashaghtyn ellyn| 20]]
8hykavau26t3zxyj59z2xe01wvswffs
379228
379227
2026-05-18T01:47:18Z
MacTire02
219
MacTire02 moved page [[Ronney:Gleashaghtyn ellyn y 20d eash]] to [[Ronney:Gleashaghtyn ellyn y 20oo eash]]: elley
379227
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Ellyn 'sy 20oo eash]]
[[Ronney:Gleashaghtyn ellyn| 20]]
8hykavau26t3zxyj59z2xe01wvswffs
Ronney:Gleashaghtyn ellyn y 20d eash
14
50248
379229
2026-05-18T01:47:18Z
MacTire02
219
MacTire02 moved page [[Ronney:Gleashaghtyn ellyn y 20d eash]] to [[Ronney:Gleashaghtyn ellyn y 20oo eash]]: elley
379229
wikitext
text/x-wiki
#REDIRECT [[:Ronney:Gleashaghtyn ellyn y 20oo eash]]
arqx43ibi5ui619ircjjitfupil6b6q
Ronney:Gleashaghtyn ellyn co-emshiragh
14
50249
379246
2026-05-18T02:18:32Z
MacTire02
219
ronney noa
379246
wikitext
text/x-wiki
{{Commons category|Contemporary art movements|Gleashaghtyn ellyn co-emshiragh}}
[[Ronney:Ellyn co-emshiragh| Gleashaghtyn]]
4edatug2qga4k1j4xz8dyda60tx42lc
Ronney:Ellyn co-emshiragh
14
50250
379247
2026-05-18T02:21:32Z
MacTire02
219
ronney noa
379247
wikitext
text/x-wiki
{{Cat main}}
{{Category see also|Eear-noa-emshiraght}}
{{Commons category|Contemporary art|Ellyn co-emshiragh}}
[[Ronney:Ellyn rere earish chrooaght|Co-emshiragh]]
[[Ronney:Gleashaghtyn ellyn| Co-emshiragh]]
[[Ronney:Ellyn noa-emshiragh|Co-emshiragh]]
[[Ronney:Ny h-ellynyn co-emshiragh]]
{{CatAutoTOC}}
thdlbq3jdbxcz6fnzyg8lxsegn9qpjq
Ronney:Ellyn noa-emshiragh
14
50251
379248
2026-05-18T02:23:45Z
MacTire02
219
ronney noa
379248
wikitext
text/x-wiki
{{Commons category|Modern art|Ellyn noa-emshiragh}}
{{Cat main}}
{{CatAutoTOC}}
[[Ronney:Gleashaghtyn ellyn|Noa-emshiragh]]
[[Ronney:Noaght]]
[[Ronney:Ellyn 'sy 19oo eash|Noa-emshiragh]]
[[Ronney:Ellyn 'sy 20oo eash|Noa-emshiragh]]
lu8ztr0fu95pzbribouri5omy0l3thh
Ronney:Ellyn 'sy 19oo eash
14
50252
379249
2026-05-18T02:24:45Z
MacTire02
219
ronney noa
379249
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Ny h-ellynyn 'sy 19oo eash]]
[[Ronney:Ellyn rere eash|19]]
o4t93f2vh2p6bwi9qelmt3jcyax19c5
Ronney:Ny h-ellynyn 'sy 19oo eash
14
50253
379251
2026-05-18T02:26:36Z
MacTire02
219
ronney noa
379251
wikitext
text/x-wiki
{{Navseasoncats}}
{{CatAutoTOC}}
[[Ronney:19oo eash|Ellynyn]]
[[Ronney:Ny h-ellynyn rere eash|19]]
[[Ronney:Ny h-ellynyn 'sy 2h villey bleeaney|19]]
d8o0v38n023nxv8s09c5br0ma8zzxti
Ronney:Ellyn 'sy 20oo eash
14
50254
379252
2026-05-18T02:28:30Z
MacTire02
219
ronney noa
379252
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Ny h-ellynyn 'sy 20oo eash]]
[[Ronney:Ellyn rere eash|20]]
b4dcdowlfg3ce94zhomvyjhh4nfko8k