Wikipedia
gvwiki
https://gv.wikipedia.org/wiki/Ard-ghuillag
MediaWiki 1.47.0-wmf.22
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
Pobblaght Nerin
0
1883
393695
393371
2026-10-01T21:36:54Z
MacTire02
219
++
393695
wikitext
text/x-wiki
{{Ymmydcosoylagh|yn steat as y phobblaght 'syn Oarpey Heear Hwoaie|yn ellan ta enmyssit "Nerin", "Éire", ny "Ireland"|Nerin}}
{{Art reiht rollage}}
{{Kishtey fys çheer
|ennym = Nerin{{Efn|name=enmys}}
|ennym_foddey_cadjincliaghtagh= {{nobold|Éire {{small|([[Yernish]])}}<br/>Ireland {{small|([[Baarle]])}}}}
|ennym_gienneydagh = Nerin
|jalloo_caslys = EU-Ireland.svg
|jarroo-raa = none
|arrane_ashoonagh = [[Amhrán na bhFiann]]
|coadan_arrane_ashoonagh = United States Navy Band - Amhrán na bhFiann.ogg
|çhyndaa_arrane_ashoonagh = Arrane ny Fenee
|çhengey_arrane_ashoonagh = Yernish
|çhengaghyn_oikoil = {{hlist|[[Yernish]]{{Efn|name=çhengey ashoonagh}}|[[Baarle]]<ref>{{Cite web |url=https://www.irishstatutebook.ie/eli/cons/en/html#article8_1 |title=Article 8, Constitution of Ireland |access-date=4 Toshiaght Arree 2022 |website=Irish Statute Book |archive-date=23 Averil 2022 |archive-url=https://web.archive.org/web/20220423200419/https://www.irishstatutebook.ie/eli/cons/en/html |url-status=live }}</ref>}}
|sorçh_reiltys = [[Pobblaght pharlamaidagh unnaneagh]]
|ushtey_sy_cheead = 2.00
|blein_LTS_CCK = 2023
|LTS_CCK = $722.929 billoon
|LTS_CCK_yn_dooinney = $137,638
|sorçh_kiondeeaght = [[Shennaghys Nerin|Seyrsnys]]
|note_kiondeeaght = veih'n [[Reeriaght Unnaneysit]]
|taghyrt1_bunnit = [[Fogrey magh Phobblaght Nerin|Fogrit magh]]
|date1_bunnit = 24 Averil 1916
|taghyrt2_bunnit = [[Fogrey yn Teyrsnys (Nerin)|Shickyrit]]
|date2_bunnit = 21 Jerrey Geuree 1919
|taghyrt3_bunnit = [[Conaant Anglo-Yernagh|Currit er enney]]
|date3_bunnit = 6 Mee ny Nollick 1922
|taghyrt4_bunnit = [[Bunraght Nerin|Bunraght roie]]
|date4_bunnit = 29 Mee ny Nollick 1937
|noteyn_argid = Va'n [[punt Yernagh]] ymmydit roish 1999.
|traa_ynnydagh = [[Traa ynnydagh yn Oarpey Heear|WET]]
|ashchur_utc = +00:00
|traa_ynnydagh_TTLS = [[Traa Chadjinit Nerin|IST]] ([[Traa houree yn Oarpey Heear|WEST]])
|ashchur_utc_TTLS = +01:00
|tld = [[.ie]]
|noteyn_tld = Ta [[.eu]] ymmydit chammah, myrane lesh çheeraghyn-oltey elley [[yn Unnaneys Oarpagh]]
|coad_çhellvane = 353
}}
Ta '''Nerin''' ({{langx|ga|Éire}}, {{langx|en|Ireland}}) ny çheer ayns sheear hwoaie ny [[Yn Oarpey|h-Oarpey]]. Ta'n steat seyr noa-emshiragh goaill stiagh 5/6 ellan [[Nerin]]. Ta'n çheer çhemmit liorish [[Nerin Hwoaie]] (ny cooid jeh'n [[Reeriaght Unnaneysit]]) da'n twoaie, y [[Yn Keayn Sheear|Cheayn Sheear]] da'n sheear, [[Mooir Vannin]] da'n shiar, as [[Yn Vooir Cheltiagh|y Vooir Cheltiagh]] as [[Mooir Vretyn]] da'n jiass as y shiar yiass. Dy leighoil, she cur sheese y steat ee '''Pobblaght Nerin''' ({{langx|ga|Poblacht na hÉireann}}, {{langx|en|Republic of Ireland}}) agh she ''Nerin'' yn ennym eck.
Ta Nerin ny h-oltey jeh'n [[Yn Unnaneys Oarpagh|UO]], [[Reagheydys ry hoi Co-obbraghey Tarmaynys as Lhiasaghey|RCTL]] as [[ny h-Ashoonyn Unnaneysit|AU/UN]].
== Shennaghys ==
::''Ard-art: [[Shennaghys Nerin]], [[Shennaghys Phobblaght Nerin]]''
Ta Nerin ny steat eiyrtyssagh da'n çhiarnys [[Seyr Steat Nerin]]. Va'n çhiarnys shen currit er bun traa scarr en ellan er feie rish [[Reeriaght Unnaneysit ny Bretyn Mooar as Nerin]] er 6 Nollick 1922. Er y laa er giyn ren [[Ard-whaiyl Nerin Hwoaie]] yeearreydys, rere y [[Conaant Anglo-Yernagh]], çheet stiagh 'sy [[Reeriaght Unnaneysit]] reesht. Va ny taghyrtyn shen, lesh yn ennym [[Rheynn magh Nerin]], ny eiyrtys er kiare eabyn reiltys hene-reiragh jeeveanit y chur er Nerin lane (ayns 1886, 1893, 1914 as 1920). Va [[Seyr Steat Nerin]] astyrit er 29 Nollick 1937, traa haink y bunraght noa ayns bree.
Va seyrsnys Nerin fogrit magh ayns [[Irree magh ny Caisht]] ayns 1916, shey bleeaney roish bunneeaght y seyr steat. Ec y traa shen ren arryltee Yernagh as Armee Seyranagh Nerin cummaltys er ynnydyn ennagh ayns Divlyn as [[Galliu]] fo coryn [[Fockley magh Phobblaght Nerin]]. Va ny shiaght fo-screeuderyn yn 'ockley magh, [[Patrick Pearse]], [[Thomas MacDonagh]], [[Thomas Clarke (irreyder magh)|Thomas Clarke]], [[Sean MacDiarmada]], [[Joseph Mary Plunkett]], [[Eamonn Ceannt]] as [[James Connolly]] currit gy baase, chammah as nuy persoonyn elley. Va thousaneyn dy 'leih currit fo'n 'oaid, as va ny taghyrtyn shen ny lheimmeyder da [[Caggey ny Seyrsnys (Nerin)|Caggey ny Seyrsnys]].
=== Cooylrey ===
Veih [[Aght yn Unnaneys, 1800|Aght yn Unnaneys]] er 1 Jerrey Geuree 1801 derrey 6 Nollick 1922, va Nerin ny cooid jeh [[Reeriaght Unnaneysit ny Bretyn Mooar as Nerin]]. Car [[Gortey Mooar Nerin|y Ghortey Vooar]] veih 1845 derrey 1849 huitt sleih-earroo yn ellan veih 8 millioonyn cummaltee gys 5.6 millioonyn. Hooar millioon dy 'leih baase as hie 1.5 millioonyn gys çheeraghyn elley myr eiyrtys. Derrey ny 1960-yn va tuittym beayn ayns sleih-earroo ny çheerey ry-akin ec dagh coontey-sleih. Veih 1874, as veih 1880 er lheh fo stiurey [[Charles Stewart Parnell]], haink [[Partee Ard-whaiylagh Nerin]] dy ve ny chied phartee 'sy çheer trooid jeean-ghleashaght hallooinagh lheeadagh. Va aachummaghyn thallooin tannysagh cosnit ec y phartee as va eiyrtyssyn ennagh currit ec y phartee ayns [[Ard-whaiyl Hostyn]] ry hoi hene-reiltys Nerin.
=== Slattys Reill Thie ===
Traa chaill [[Quaiyl ny Çhiarnyn]] y lhiettal oc as traa va [[Billey Reill Thie 1914]] shickyrit ec [[John Redmond]], va ram sleih credjal dy vel hene-reiltys çheet. Ansherbee, mastey lught Protestoonagh Nerin, va gleashaght unnaneysagh gaase ny yei cur stiagh y chied villey ry hoi Reill Thie. V'ad goaill aggle roish coayl vondeishyn tarmaynagh as soshiallagh. Va'n ghleashaght unnaneysagh ry-gheddyn er yn ellan er feie agh v'ee ny stroshey ayns [[Ullee]] raad dy vel y çhynskylaght ny scadjin. Myrane as shen, va'n chooid smoo jeh'n lught Protestoonagh ry-gheddyn ayns Ullee.
=== Shassoo noi ===
Fo stiureydys y Ghivlynagh [[Edward Carson]] jeh [[Partee Unnaneysagh Nerin]] as y twoaieagh [[James Craig]] jeh [[Partee Unnaneysagh Ullee]] haghyr er ny h-unnaneysee dy ve caggoil noi ''Co-eignaghey Ullee''. Ny yei çheet lesh Billey Reill Thie trooid yn ard-whaiyl ayns Boaldyn 1914, hugg yn Ard-vinishter [[H. H. Asquith]] Billey Lhiasaghey trooid yn ard-whaiyl. Faagail magh dy vel stiureydys y Phartee Yernagh noi yn lhiasaghey, hoie ad lesh. Hug y billey shoh giarrey magh shallidagh da Ullee faagail magh ass Reill Thie er feie shey bleeaney, lesh coryn neuvriwnyssit da'n wheiggey. Hooar y billey Coardail Reeoil agh v'eh currit er y skelloo lesh brishey magh [[Yn Chied Chaggey Dowanagh|y Chied Chaggey Dowanagh]] (v'eh er chredjal dy beagh y caggey creaghnit roish jerrey ny bleeaney 1915). Son shickyraghey cur rish yn Aght ec jerrey y chaggey hie 175,000 arryltee Yernagh fo coyrle Redmond stiagh ayns rejimentyn Yernagh y 10-oo (Yernagh) as y 16-oo (Yernagh) rheynnyn, as hie Unnaneysee stiagh ayns y 36-oo (Ullee) rheynn ayns Armee Noa ny Bretyn Mooar.
[[Coadan:Laatste pagina van het document waarbij op 6 december 1921 de Ierse Vrijstaat werd opgericht, SFA022823706.jpg|thumb|upright|left|Duillag enmyn screeuit y [[Conaant Anglo-Yernagh|Chonaant Anglo-Yernagh]]]]
Ayns Jerrey Geuree 1919 ny yei ard-reihys ny bleeaney 1918, va 76 jeh ny 106 [[Oltey yn Ard-whaiyl|MP]]-yn ny olteynyn jeh [[Sinn Féin]]. Dob ad nyn soiagyn ayns [[Ard-whaiyl Hostyn]]. Hug ad ard-whaiyl Yernagh er bun, [[Dáil Éireann (1919-1922)|Dáil Éireann]]. Hug ad magh [[Fogrey ny Seyrsnys]] as va [[Pobblaght Nerin (1919-1922)|Pobblaght Nerin]] fogrit magh. Va'n fogrey ny aaraa yn 'ogrey magh veih [[Irree magh ny Caisht]] 'sy vlein 1916 lesh y chiarail elley nagh row Nerin ny cooid jeh'n Reeriaght Unnaneysit. Cha row y phobblaght noa currit er enney ec çheer elley, faagail magh [[Pobblaght Hoveidjagh Chonastagh Hoshiallagh ny Roosh|Pobblaght ny Roosh]]. Va cur magh [[Aireacht]] (Airaght) ny pobblaght currit gys [[Co-choyrle Shee Phaarys]] fo stiurey yn [[Ceann Comhairle]] [[Seán T. O'Kelly]] agh cha row yn cur magh lhiggit stiagh.
Ny yei [[Caggey ny Seyrsnys (Nerin)|Caggey ny Seyrsnys]] as y scuirr caggee ny lurg ayns Mean Souree 1921, haink reihdee jeh [[Reiltys y Reeriaght Unnaneysit]] as çhaghteryn Yernagh fo stiurey [[Arthur Griffith]], [[Robert Barton]] as [[Michael Collins (irreyder magh Yernagh)|Michael Collins]], ry-cheilley dy varganey y [[Conaant Anglo-Yernagh]] ayns [[Lunnin]] veih 11 Jerrey Fouyir derrey 6 Mee ny Nollick 1921. Ec 11:15 'sy voghrey er 5 Nollick ayns kione cherroo y chur magh Yernagh, v'eh reiht y Conaant y chur er-ash gys Dáil Éireann dys y Conaant y hickyraghey. Rere coryn y Chonaant, va steat seyr noa currit er bun, [[Seyr Steat Nerin]] lesh stayd çhiarnys eck.
Haink Nerin dy ve rheynnit magh ayns daa heer rere coryn y Chonaant. Hooar [[Nerin Hwoaie]] (ny shey coondaeghyn da'n twoaie) reiltys er lheh as hannee ee ny cooid jeh'n Reeriaght Unnaneysit. Haink Nerin Yiass (ny 23 coondaeghyn ayns Lion, Connaghtey as y Vooan chammah as tree coondaeghyn jeh Ullee, [[Coontae Ghoon ny Ghoal|Doon ny Ghoal]], [[Coontae yn Chavan|Yn Cavan]] as [[Coontae Vuinaghan|Muinaghan]]) dy ve ny reeriaght vunraghtoil fo [[Ree Nerin]] (veih 1927) myr [[Seyr Steat Nerin]]. Va [[Ard-chiannoort Heyr Steat Nerin|Ard-chiannoort]], ard-whaiyl daa-hamyragh, airaght lesh yn ennym "[[Cooinseil Chiannoortagh Nerin|Cooinseil Chiannoortagh]]" as ard-vinishter fo'n ennym "[[Eaghtyrane Chooinseil Chiannoortagh Heyr Steat Nerin]]".
=== Eiyrtyssyn y rheynn magh ===
[[Coadan:Eamon de Valera c 1922-30.jpg|right|upright|thumb|[[Éamon de Valera]]]]
Va [[Caggey Theayagh Nerin]] ny eiyrtys jeeragh jeh vunneeaght y Seyr Steat. Va ny forseyn fo stiurey [[Éamonn de Valera]] shassoo noi soiaghey jeh'n Conaant va astyral [[Pobblaght Nerin (1919-1922)|Pobblaght Nerin]]. Cha row ad saasit lesh y fys dy vel Nerin tannaghtyn ny cooid jeh [[Co-unnaneys Ghoal]] as er y fys dy row er olteynyn y Dáil breearrey loo da Ree ny Bretyn Mooar as ny h-eiyrtyssee echey.
Ec toshiaght y chaggee, scarr [[Armee Pobblaghtagh Nerin|Armee Pobblaghtagh Nerin (IRA)]] ayns daa chologid: yn IRA currit rish y Conaant, as yn IRA currit noi'n Conaant. Skeayll yn IRA currit rish y Conaant as hie ad stiagh ayns [[Armee Nerin]]. Trooid dolley troggal kioneyssagh breeoil yn IRA currit noi'n Conaant, haink Collins as ny forseyn echey dy ve abyl armee lesh thousaneyn shenn-sidooryn ass rejimentyn Yernagh yn Armee Ghoaldagh jeh'n Chied Chaggey Dowanagh. Hug y Reeriaght Unnaneysit gunnaghyn, etlanyn, gunnaghyn jeshaght as tastey caggee dys armee y Seyr Steat. Lesh baggyrtys çheet er-ash ny forseyn crooinagh, as neu-ymmyrkey yn phobble, haink jerrey lesh y chaggee 'sy vlein 1923.
=== Bunraght 1937 ===
Er 29 Mee ny Nollick 1937, va bunraght noa, [[Bunraght Nerin]] (Bunreacht na hÉireann), currit ayns bree. Va'n bunraght shen currit ayns ynnyd [[Bunraght Heyr Steat Nerin|Vunraght y Seyr Steat]] as, myr eiyrtys, va steat noa currit er bun lesh yn ennym "[[Éire]]" ny "Ireland" ayns Baarle. Ayns ny meeghyn roish y vunraght noa, va oik yn Ard-chiannoort scrysst.
Faagail magh dy row oik [[Eaghtyrane Nerin]] currit er bun, cha row yn çheer ny pobblaght dy leighoil eddyr ny bleeantyn 1937 as 1949. Hannee yn paart ogheragh da fer steat ec Ree Nerin fo leigh slattyssagh myr organe reiltys Nerin.
Hannee Nerin neaghtyragh rish [[Yn Nah Chaggey Dowanagh|y Nah Chaggey Dowanagh]], as ta'n traa shen soilshaghit myr [[Yn Egin (Nerin)|yn Egin]].
Haink jerrey lesh ynnyd Ree Nerin lesh Aght Phobblaght Nerin 1948. V'eh currit ayns bree er 18 Averil 1949 traa va oik yn Eaghtyrane currit ayns ynnyd y Ree. Hoilshee yn Aght dy vel Nerin ny pobblaght. Ny s'anmey Aght Chrooin Nerin neuyeant rere Aght Aavriwnys Leigh Slattyssagh (Slattyssyn Roie-unnaneys Nerin) 1962.
Hannee Nerin ny oltey jeh [[Co-unnaneys Ghoal]] veih seyrsnys ny çheerey derrey fogrey magh ny pobblaght er 18 Averil 1949. Hie Nerin stiagh ayns yn [[Ny h-Ashoonyn Unnaneysit|AU]] 'sy vlein 1955.
=== Fosley tarmaynagh ===
Veih ny 1920-yn va cleighyn traghtee ardey ec Nerin, lhieed as custymyn ardey as roonaghtyn maylartey er kionnaghey stiagh. Darragh ram sleih magh ass y çheer. Ayns ny 1950-yn darragh 400,000 cummaltee magh. Hoig y reiltys nagh vel yn ashoonaghys tayrmanagh so-stiurey. Traa dy row bishaghey tappee ry-akin ayns çheeraghyn elley ny h-Oarpey, cha row ayns Nerin agh neughleashaght tayrmanagh, arraghey magh, as olkyn elley.
Va caghlaaghyn roonaghtyn currit ry-cheilley ayns ''Economic Development'', pabyr oikoil va currit magh ayns 1958. Va'n pabyr shen moylley son traght seyr, argid baiht joarree, argid baiht bishee, as bishaghey myr dean y stiureydys tayrmanagh. Hie Nerin stiagh gys [[Yn Cohionnal Oarpagh|y Chohionnal Oarpagh]] ([[yn Unnaneys Oarpagh]] noa-emshyragh) ayns 1973.
Car ny 1970-yn, haghyr bishaghey ayns sleih-earroo ny çheerey, y chied vishaghey veih seyrsnys ny çheerey. Haghyr bishaghey ayns çheet stiagh argidoil ny çheerey ec cormid mygeayrt 4% myrgeddin. Rish ny bleeaney 1980 va trass y lugh obbyr faillit ayns y shirveish theayagh. Haghyr bishaghey ayns baarnaghyn y chlaare argidoil as lhiastynys ny çheerey, as ad leeideil gys geyre-ghaue ny 1980yn.
Ayns feysht Nerin Hwoaie, hoshee Reiltys Nerin geearree aa-unnaneaghey sheeoil Nerin as, son y chooid smoo, va'n çheer co-obbraghey lesh reiltys ny Bretyn Mooar ayns y chaggey 'sy twoaie lesh ny fo-hidooryn as [[yn Armee Ghoaldagh]] ayn. Va reagheydys ry hoi shee, [[Coardailys Veeal Feirshtey]], fo-screeuit ayns 1998 ny lurg refraneyn ayns Pobblaght Nerin as Nerin Hwoaie.
=== Shennaghys jeianagh ===
Rish ny 1980-yn va feyshtyn tayrmanagh cur magh. Haink mee-staartaght ard er-ash, chammah as arraghey magh as lhiastanys theayagh. Va 60% çheet stiagh argidoil lught obbyr y vean-ynnyd fo cheesh. Va 20% y phobble gyn obbyr, as va 1% pobble ny çheerey garraghey magh ass y çheer. Heeyn lhiastanyssyn theayagh gys 15% LTS. Va [[Fianna Fáil]] reiht ayns 1987 as hoilshee ad magh leaystey gys reiltys beg.
Va baarail theayagh giarrit as keeshyn leodaghit. Va cohirrey currit er toshiaght ayns dagh ynnydyn. Va argid baiht joarree cleaynit hug y tarmaynys cohirreydagh. Ren [[Intel]] baihaghey ayns 1989, as haink ram colughtyn elley, lhieed as [[Microsoft]] as [[Google]], ny lurg.
== Politickaght ==
{{ardart|Politickaght Phobblaght Nerin}}
Ta Nerin ny [[pobblaght]] lesh corys ard-whaiylagh myr reiltys eck. Ta [[Eaghtyrane Nerin]], quoi ta myr fer ny ben toshee, reiht dagh shiaght bleeaney as foddee eh ny ee ve reiht er feie un traa elley. Cha nel ayns yn eaghtyraneys er-e-skyn ooilley agh ennym eaghtyrane, agh ta currymyn bunraghtoil ennagh echey, as eh coonit liorish [[Coonseil y Steat (Nerin)|Coonseil y Steat]]. Ta'n [[Taoiseach]] pointit liorish yn eaghtyrane fo enmysaght yn ard-whaiyl. Va'n chooid smoo jeh ny Taoisigh n'ir toshee er y phartee politickagh smoo 'syn ard-whaiyl. T'eh er ve cadjin dy vel ny reiltyssyn jeant sheose jeh [[cochiangley (politickaght)|cochianglaghyn]]. Cha row reiltys un-pharteeagh veih'n vlein 1989.
Ta'n ''[[Oireachtas]]'', yn ard-whaiyl daa-hamyragh, jeant sheose jeh Eaghtyrane Nerin, y shannad, [[Seanad Éireann]], as eh ny whaiyl s'yrjey, as quaiyl ny reihdee, [[Dáil Éireann]], as eh ny whaiyl s'inshley. Ta tree feed olteynyn ayns y Seanad; ta un oltey jeig enmyssit ec y Taoiseach, shey jeu reiht ec daa ollooscoillyn, as 43 jeu quoi ta reiht liorish reihdee theayagh ass pannylyn shirreyderyn ta bunnit er bunneydys bentyn da keird. Ta 166 olteynyn, ''[[Teachta Dála|Teachtaí Dála]]'', ayns y Dáil. Dy chadjin, ta ny h-olteynyn reiht dagh queig bleeaney veih co-heiyderyssyn yl-ynnydagh fo corys tuarastyl freggyrtagh.
[[Coadan:Leinsterhouseirl.jpg|left|thumb|[[Teach Laighean]], soiaghey ''[[Oireachtas Éireann]]'' (ard-whaiyl Nerin)]]
Rere y vunraght, cha nel agh queig olteynyn jeig ayns y Reiltys. Foddee er daa oltey jeh'n Seanad dy ve ny olteynyn y Reiltys, agh sheggin da'n Taoiseach, y ''[[Tánaiste]]'' (lhiass ard-vinishter) as Shirveishagh yn Argidys dy ve nyn olteynyn jeh'n Dáil. Ta'n reiltys roie jeant sheose jeh tree parteeyn politickagh: [[Fine Gael]] fo stiurey yn Taoiseach [[Simon Harris]], [[Fianna Fáil]] fo stiurey [[Micheál Martin]], as [[Yn Partee Glass (Nerin)|y Partee Glass]] fo stiurey [[Eamon Ryan]]. Haghyr yn ard-reihys jerrinagh da'n Dáil er 8 Toshiaght Arree 2020.
Ta ny preeu-pharteeyn er y chondaigys jeant sheose jeh [[Sinn Féin]] fo stiurey [[Mary Lou McDonald]], [[Partee yn Lught Obbyr (Nerin)|Partee yn Lught Obbyr]] fo stiurey [[Brendan Howlin]], [[Ny Deynlaghteyryn Soshiallagh (Nerin)|ny Deynlaghteyryn Soshiallagh]] fo stiurey [[Catherine Murphy (politickeyr)|Catherine Murphy]] as [[Róisín Shortall]], chammah's myn-pharteeyn as politickeyryn neu-chrogheydagh eigsoylagh.
Hie Nerin stiagh gys [[yn Unnaneys Oarpagh]] ayns 1973, agh t'ee çheumooie jeh [[Conaant Schengen]] rere reih. Foddee da seyranee y [[Reeriaght Unnaneysit]] goll stiagh ayns Nerin gyn lioar hroailtys bwooise lesh yn [[Eaghtyr Troailtys Cadjin]], agh ta enneydys ennagh ry-laccal ec puirt aeragh as puirt varrey.
== Ardjyn reiragh ==
Ta'n ellan dy slane rheynnit ayns 32 [[Ardjyn Nerin|choontae]] rere tradishoon, agh cha nel agh 26 jeu soit ayns Pobblaght Nerin. T'ad ymmydit foast ayns nheeghyn cultooragh, shendeeagh as spoyrt. Er çheu ny politickaght, ta ny coondaeghyn son y chooid smoo ymmydit son gurneilys ynnydagh, agh ta daa choontae rheynnit ayns slystyn ny s'loo, t'ad shenn Coontae Çhybbyrt Aarey as Coontae Aah Cleeah.
{| align="center" cellpadding="10"
| [[Coadan:Ireland Numbered.png|thumb|250px|Earrooyn coondaeghyn ayns Pobblaght Nerin]]
|style="font-size: 90%;"| '''Pobblaght Nerin'''
# [[Coontae Aah Cleeah|Divlyn]]<br /><small>— [[Divlyn]]<br />— [[Coontae Ghoon Laoire-Raah yn Doon|Doon Laoire-Raah yn Doon]]<br />— [[Coontae 'ine Goal|Fine Goal]]<br />— [[Coontae Aah Cleeah Yiass|Divlyn Yiass]]</small>
# [[Coontae Cheeill Mantan|Keeill Mantan]]
# [[Coontae Logh Garman|Logh Garman]]<br /><small>— [[Logh Garman|Balley Logh Garman]] (Cochorp)</small>
# [[Coontae Cheatharlach|Ceatharlach]]
# [[Coontae Cheeill Darey|Keeill Darey]]
# [[Coontae ny Mee|Yn Vee]]
# [[Coontae Lhoo|Lhoo]]<br /><small>— [[Droghad Aah|Balley Ghroghad Aah]] (Cochorp)</small>
# [[Coontae Vuinaghan|Muinaghan]]
# [[Coontae yn Chavan|Yn Cavan]]
# [[Coontae Lhongfort|Lhongfort]]
# [[Coontae ny h-Eearvee|Yn Eearvee]]
# [[Coontae Uíbh Fhailí|Uíbh Fhailí]]
# [[Coontae Leesh|Leesh]]
# [[Coontae Cheeill Chennee|Keeill Chennee]]<br /><small>— [[Keeill Chennee|Balley Cheeill Chennee]] (Cochorp)</small>
|style="font-size: 90%;"| <ol start=15>
<li>[[Coontae Phurt Largey|Purt Largey]]<br /><small>— [[Purt Largey|Balley Phurt Largey]]</small>
<li>[[Coontae Chorkee|Corkee]]<br /><small>— [[Corkee|Balley Chorkee]]</small>
<li>[[Coontae Cherree|Kerree]]
<li>[[Coontae Limmeragh|Limmeragh]]<br /><small>— [[Limmeragh]]</small>
<li>[[Coontae Hybbyrt Aarey|Çhybbyrt Aarey]]<br /><small>— [[Çhybbyrt Aarey Hwoaie]]</small><br /><small>— [[Çhybbyrt Aarey Yiass]]</small><br /> <small>— [[Cluain Meala]] (Cochorp)</small>
<li>[[Coontae yn Chlaair|Yn Claar]]
<li>[[Coontae ny Galliu|Galliu]]<br /><small>— [[Galliu|Balley ny Galliu]]</small>
<li>[[Coontae Vay Eo|May Eo]]
<li>[[Coontae Ros Comain|Ros Comain]]
<li>[[Coontae Cliggee|Shliggagh]]<br /><small>— [[Shliggagh|Balley Cliggee]] (Cochorp)</small>
<li>[[Coontae Lheeahtrim|Lheeahtrim]]
<li>[[Coontae Ghoon ny Ghoal|Doon ny Ghoal]]
</ol>
|}
== Çheer-oaylleeaght ==
[[Coadan:Topography Ireland.jpg|thumb|upright|Boayloaylleeaght Nerin]]
{{ardart|Çheer-oaylleeaght Nerin|Çheer-oaylleeaght Phobblaght Nerin|Speyr Nerin}}
[[Coadan:Cliffsmohersunset.jpg|thumb|left|150px|Aillte an Mhothair, Co. yn Chlaair]]
Ta ellan Nerin 84,421 [[kilometer kerrinagh|km²]] (32,556 mi ker) er eaghtyr, as ta 83% jeh'n eaghtyr fo stiurey ny Pobblaght (70,280 km²; 27,103 mi ker). Ta'n cooid elley fo stiurey y Reeriaght Unnaneysit myr Nerin Hwoaie. T'ee caglit da'n sheear liorish [[Yn Keayn Sheear|y Cheayn Sheear]], da'n shiar hwoaie liorish [[Ammyr ny h-Albey]], da'n shiar liorish [[Mooir Vannin]], da'n shiar yiass liorish [[Mooir Vretin]] as [[Yn Vooir Cheltiagh|y Vooir Cheltiagh]]. Ta slyst heear ny çheerey jeant seose jeh eayninyn, cruink as sleityn injil (she [[Corrán Tuathail]] y boayl s'yrjey as eh 1,038 m er yrjid). Ta antraie ny çheerey jeant seose jeh claareyn injil, as ta awinyn, lhied as [[Yn Çhannon|y Çhannon]], as loghyn mooarey ennagh ry-gheddyn. Ta çheshvean ny çheerey ny cooid jeh dreeym ushtey ny Shannon, as t'ee jeant seose jeh bogleeghyn. T'ad ymmydit son tayrn magh as gientyn moain. Ta tashtaghyn ooill as gas ry-gheddyn magh 'syn 'aarkey myrgeddin.
Ta speyr ynnydagh ny çheerey kiartit liorish [[Stroo yn Atlantagh Hwoaie]]. Cha nel çhiassid ny çheerey goll harrish 30 °[[keim Kel|C]] (86 °F) car y Touree agh keayrt ayns dagh jeihaght, agh bee çhiassid sheeyney gys 29 °C (84 °F) dagh Sourey. Car y Gheuree cha nel y çhiassid goll fo -6 °C (21 °F). Ta'n fliaghey ry-gheddyn dy mennick, as ta ram ynnydyn cur failt er 275 laaghyn dy 'liaghey.
T'ad ny ard-chovaljyssyn ayns y çheer na'n preeu-valley [[Divlyn]] (1,045,769) er y clyst hiar, [[Corkee]] (190,384) er y clyst yiass, [[Lhimnagh]] (90,757) ayns sheear meanagh ny çheerey, [[Galliu]] (72,729) er y clyst heear, as [[Purt Largey]] (49,213) er y clyst hiar yiass.
<div style="clear:left"></div>
== Ynsagh ==
{{ardart|Ynsagh ayns Pobblaght Nerin}}
Ta ny coryssyn ynsee, son y chooid smoo, fo stiurey y reiltys trooid [[Shirveishagh Ynsee as Oaylleeaght]]. Shegin da bun-scoillyn as ard-scoillyn greimmey lesh y choorse ta bunnit ec y lught-reill.
Ta [[Claare PISA|Claare ry hoi Scrutaght Eddyrashoonagh ny Scollagyn]], ta co-oardit liorish yn [[Reagheydys ry hoi Co-obbraghey Tarmaynys as Lhiasaghey|RCTL]], rang-oardraghey corys ynsee Nerin ayns oaylleeaght myr y 20-oo çheer share mastey ny çheeraghyn commee.
Ta bun-ynsagh, ard-ynsagh as ynsagh ollooscoillagh seyr da seyranee Nerin as [[yn Unnaneys Oarpagh]].
== Tarmaynys ==
{{ardart|Tarmaynys Phobblaght Nerin}}
Ta tarmaynys Nerin caghlaait rish ny bleeantyn shoh chaie veih fer eirinagh gys fer ta bunnit er fys, as eh jeeraghey er shirveishyn as çhynskylyn ard-çhaghnoaylleeagh as croghit er traght, çhynskyl as argid baiht. Va aase tarmaynagh ayns Nerin er hroggal mean er 10% veih 1995-2000, as er 7% veih 2001-2004. Ta'n çhynskyl ny rheynnag toshee ayns ynnyd yn eirinys lesh 46% [[Lane Troar Sthie|LTS]], 80% dy assphurtanyn, as 29% y lught obbyr.
T'eh ny phaart ogheragh ayns roonaght tarmaynagh Nerin veih 1987 na [[Copharteeys Soshiallagh]], as eh ny phossan noa-volgagh 'conaantyn faill arryltagh' eddyr y Reiltys, failleyderyn as keird-chummynyn. V'ad jannoo coardailys rish bishaghey faillyn er feie tree bleeaney.
Va Nerin ny kiaddeyder yn [[euro]] ayns Jerrey Geuree 1999 (faagail y [[punt Yernagh]]) chammah as un heer jeig yn Unnaneys Oarpagh. Er yn oyr dy vel cormidyn aase cha ard as v'ayn, va'n ennym "Y Teigyr Celtiagh" currit urree.
Ayns 2006, va Nerin ayns y nah ynnyd ayns y theihll rere LTS y dooiney (US$43,600) ny yei [[Lucsemburg]]. Rere Lane Çheet stiagh Ashoonagh (LCI) ayns 2005 va Nerin ayns y shiaghtoo ynnyd mastey çheeraghyn y theihill, y sheyoo mastey çheeraghyn ny h-Oarpey as ayns y treeoo ynnyd mastey olteynyn yn UO lesh çheet stiagh $41,140 y dooiney.
=== Argid ===
[[Coadan:Eurocoin ie 100.gif|thumb|right|110px|Cooiney lesh kiaddey Yernagh]]
Roish çheet stiagh yn Euro ayns Jerrey Geuree ny bleeaney 2002 (argid-neu-laue: 1999) v'eh [[punt Nerin]] yn argid oikoil.
Ta'n [[euro]] (coad argid yn ISO: EUR) ny argid oikoil ayns Nerin nish. T'ad ny noataghyn banc ta currit magh na €5, €10, €20, €50, €100, €200 as €500.
Ta dagh noatey banc cosoylagh ayns dagh çheer [[Cryss yn Euro|Chryss yn Euro]], agh ta cowraghyn ashoonagh er lheh er ny cooinaghyn. Ren rieltys Nerin briwnys er kiaddey ashoonagh ynrican da chooilley chooiney. Ta ny cooinaghyn Yernagh taishbyney claasagh Yernagh, cowrey ashoonagh ny çheerey, as ee jesheenaghit lesh blein y chur magh as y fockle "Éire".
<div style="clear:right"></div>
== Caggeeaght ==
{{ardart|Forseyn Coadee Nerin}}
{{jeeagh|Neuchommeeaght Nerin}}
Ta forseyn armit Nerin reaghit fo [[Forseyn Coadee Nerin]] (''[[Óglaigh na hÉireann]]''). Ta'n armee beg dy lioor myr t'ad cosoylagh rish armeeghyn gerroil ayns yn ard, agh t'ad mie-armit, lesh 8,500 sidooryn lane-emshiraghey (13,000 ayns y chooyl-armee). T'eh myr shen er yn oyr dy vel Nerin ny çheer neuchommeeagh, as dy vel commeeys ayns caggaghyn fo reillyn "tree-ghlass" dy vel coontey mie ymmyrçhagh veih'n AU, y Reiltys as y Dáil roish scarrey magh ny sidooryn ayns cryssyn caggeeaghey. Ta sidooryn Yernagh scarrit magh dy chooney yn AU ayns currymyn coadee shee, dy choadey ushtaghyn çheerey Nerin ([[Shirveish Marrey Nerin]]), as myr ta cooney da reirid theayagh ry-laccal.
Ta ny Forseyn Coadee goaill stiagh [[Corps Aeragh Nerin]], [[Shirveish Marrey Nerin]], as [[Cooyl-orseyn Coadee Nerin]] ([[Cooyl-armee Nerin]] as [[Cooyl-hirveish Marrey Nerin]]). Ta [[Rouailtee Armee Nerin]] nyn ming forseyn er lheh fo fascaidagh yn armee.
Va so-lhoobaghtyn ny Pobblaght ymmydit liorish forseyn caggeeagh yn S.U. son livrey-ys sidooryn as ad er n'gholl gys y caggey 'syn Earack ayns 2003 trooid [[Purt aeragh ny Shannon]]. Va'n phurt aeragh ymmydit son ruegys ny h-Afghanistaan 'sy vlein 2001, chammah as ayns [[Kied Chaggey Cheayn ny h-Arabaght]]. T'eh ny chooid jeh shennaghys ymmyd ny Shannon son livrey-ys caggeeagh ny s'odjey.
== Sleih ==
Rere aaronsaghey gienoaylleeagh, haink ny kied deiney gys Nerin trooid arraghey veih'n [[Yn Ibeir|Ibeir]] ny yei jerrey [[yn Eash Rioee]] jeianagh.<ref>[https://web.archive.org/web/20060926181227/http://www.prospect-magazine.co.uk/article_details.php?id=7817 Myths of British ancestry] - Prospect Magazine</ref> Hug arraghee ny h-Eashyn [[Yn Eash Noalittagh|Noalittagh]] as [[Yn Eash Ooha|Ooha]] cultoor as çhengaghyn [[Ny Celtiee|Celtiagh]] stiagh gys Nerin. Ta ny h-arraghee shoh foast ny mynlagh ayns eiraght gienoaylleeagh ny Yernee.<ref>[http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=15309688 The Longue Durée of Genetic Ancestry: Multiple Genetic Marker Systems and Celtic Origins on the Atlantic Facade of Europe] - PUBMED</ref> Skeayll y cultoor magh er feie yn ellan, as haink y tradishoon Gaelgagh dy ve ny chroo kionyssagh ayns y çheer. Jiu, ta ny Yernee, son y chooid smoo jeh'n sluight Gaelgagh, as faagail magh dy vel cooid y phobble jeh'n sluight Loghlynagh, Anglo-Normanagh, Sostynagh, Albinagh, Frangagh, as Bretnagh, va y possanyn shoh cosoylaghit stiagh ayns yn enney Yernagh as cha nel ad jannoo possanyn mynlaghey er lheh. Ta'n cultoor as y çhengey Gaelgagh croo paart scanshoil yn enney ashoonagh. Ayns y [[Reeriaght Unnaneysit]], ta'n [[Lught Shooyl]] ny ny Fir Troailtey currit er enney myr possan mynlagh kynneeagh, as t'ad kianglt dy pholitickagh (agh nee rere kynney) lesh Romanee ny h-Oarpey Mooarheeragh,<ref>{{Cite web |title=''Commission for Racial Equality:'' Gypsies and Irish Travellers: The facts |url=http://www.cre.gov.uk/gdpract/g_and_t_facts.html |accessdate=2008-10-15 |archivedate=2007-05-02 |archiveurl=https://web.archive.org/web/20070502020917/http://www.cre.gov.uk/gdpract/g_and_t_facts.html }}</ref> agh ayns Nerin t'ad currit er enney myr "possan soshiallagh", ansherbee.<ref>{{Cite web |title=''Irish Travellers Movement:'' Traveller Legal Resource Pack 2 - Traveller Culture |url=http://www.itmtrav.com/Legal-ResourcePack2.html |access-date=2008-10-15 |archive-date=2008-05-28 |archive-url=https://web.archive.org/web/20080528195727/http://www.itmtrav.com/Legal-ResourcePack2.html |url-status=dead }}</ref>
=== Çhengaghyn ===
{{ardart|Çhengaghyn Nerin|Yernish|Baarle Yernagh|Baarle Ullee Meanagh}}
T'ad [[Yernish]] as [[Baarle]] ny çhengaghyn oikoil. Shegin da scoillyn ta cur failt er cooney argidoil ny er enney yn steat yn Yernish as y Vaarle dynsaghey. Ta'n Vaarle ny çhengey ard-chionyssagh er feie ny çheerey. Ta cohionnalyn Yernisheyryn ry-gheddyn ayns ynnydyn Gaelgaghey ([[Gaeltaght Nerin]]) er slystyn heear, heear hwoaie as heear yiass ny çheerey, chammah as ayns [[Coontae ny Mee]], agh cha nel ayn agh thousaneyn dy chummaltee ayndaue. Dy mennick ta ny cowraghyn raaidey ayns daa hengey, faagail magh ny Gaeltaght raad dy vel ayns Yernish ynrican. Va stayd leighoil enmyn ynnyd ny chooish arganys er y gherrid, er yn oyr dy row oardagh currit magh fo [[Aght ny Çhengaghyn Oikoil 2003]] as eh çhyndaa enmyn ynnyd ennagh er-ash veih'n Vaarle gys yn Yernish (myr sambyl, va ''[[Yn Dein|Dingle]]'' (Yn Dein) çhyndaait er-ash gys ''An Daingean'' dyn y wooise da contraartys ynnydagh as pobble-vriwnys yeearree çhyndaa dys lhieggan daa-hengagh: ''Dingle Daingean Uí Chúis''). Ta'n chooid smoo jeh fograghyn theayagh ayns Baarle ynrican, myrane lesh ny pabyryn naight. Ta'n chooid smoo jeh cur magh y Reiltys ayns Baarle as Yernish, as ta kiart ec peiagh erbee dellal lesh y reiltys ayns Yernish my vel ad er-laccal. Ta ymysseraght ayns Yernish ry-gheddyn er y çhellveeish ([[TG4]]), er y radio (myr sambyl [[Raidió na Gaeltachta]]) as ayns pabyryn naight (myr sambyl [[Lá Nua]] as [[Foinse]])
Rere coontey-pobble ny bleeaney 2006, va'n Yernish ec 1,656,790 (39%) cummaltee ny çheerey; cha nel errooyn ry-gheddyn er earrooyn ny Baarleyryn agh t'eh er-chredjal dy vel ish ec begnagh 100% sleih-earroo ny çheerey.
Ta'n [[Polynnish|Pholynnish]] nane jeh ny çhengaghyn smoo loayrit ayns Nerin, ny lurg ny Yernish as ny Baarle: ta mygeayrt 63,000 Polynnee nyn gummal ayns Nerin rere staydraa yn choontey-pobble. T'ad [[Sheltish]], ta loayrit ec y [[Lught Shooyl]], as [[Baarle Albinagh Ultagh]], abbyrt ny Baarle Albinagh, ny çhengaghyn smoo scanshoil elley 'sy çheer.
Ta'm chooid smoo jeh scollagyn ayns ny h-ard-scoillyn reih un ny daa hengey joarree dynsaghey. Da'n [[Scrutaght Phoinnaragh (Nerin)|Scrutaght Phoinnaragh]] as yn [[Ardscrutaght (Nerin)|Ardscrutaght]] foddee scollagyn studeyrys y yannoo er [[Frangish]], [[Germaanish]], [[Iddaalish]] as y [[Spaainish]]; foddee scollagyn yn ardscrutaght studeyrys y yannoo er [[Arabish]], [[Shapaanish]] as [[Rooshish]]. Ta [[Shenn-Ghreagish]], [[Studeyryssyn Ewagh]] as [[Ladjyn]] ry-gheddyn ayns ard-scoillyn ennagh, myrgeddin.
=== Craueeaght ===
[[Coadan:DublinStPatricksCathedral.jpg|thumb|left|Ard-agglish Noo Perick ayns Divlyn, Ard-agglish Ashoonagh jeh cooid [[Agglish Nerin]] (cooid jeh'n [[Creestiaght Anglicaanagh|Chreestiaght Anglicaanagh]])]]
Rere y leigh, ta'n çheer ny steat neuvonnagh, as ta'n bunraght gra dy vel feoiltaghey yn steat da craueeaght erbee neulhiggit. Ta mygeayrt 86.8% earroo yn phobble nyn [[Yn Agglish Chatoleagh|Greesteenyn Raueagh]].<ref>{{PDFlink|[http://www.cso.ie/census/documents/Final%20Principal%20Demographic%20Results%202006.pdf Final Principal Demographic Results 2006]|894 [[Kibibyte|KiB]]<!-- application/pdf, 916355 bytes -->}}</ref> Ta [[Agglish Nerin]] ny nah agglish smoo ayns y çheer. Va'n agglish cribbey derrey coontey-pobble ny bleeaney 2002 tra haink bishaghey ayns earrooyn ny h-Agglish, red er haghyr lesh enmyssyn credjue Creestee elley as lesh yn [[Hindooaghys]]. T'ad ny h-enmyssyn credjue Creestee smoo elley na [[Agglish Chleragh Nerin]] as [[Agglish Haasilagh Nerin]] ny yei. Eddyr ny bleeantyn 2002 as 2006 haghyr bishaghey fo 69% ayns earrooyn ny [[Islamaghys|h-Islamee]], as ee nish ny treeoo craueeaght smoo ayns y çheer. Haghyr bishaghey beg ayns earrooyn [[ny h-Ewnyn]] ayns y traa cheddin.
T'ad [[Noo Perick]] as [[Noo Breeshey]] ard-nooghyn ny çheerey.
Rere coontey-pobble ny bleeaney 2006, va 186,318 (ny 4.4%) dy chummaltee ny çheerey gyn chraueeaght. Ren 1,515 cummaltee cur sheese orroo hene myr meechredjuee, as 929 cummaltee myr anjee. Ta ny h-earrooyn shen taishbyney nagh vel craueeaght erbee ec 4.5% sleih-earroo ny çheerey. Cha row craueeaght raait ec 70,322 (1.7%) dy chummaltee ny çheerey.<ref>[http://www.cso.ie/census/documents/Final%20Principal%20Demographic%20Results%202006.pdf Final Principal Demographic Results 2006]</ref>
<div style="clear:left"></div>
== Cultoor ==
{{ardart|Cultoor Nerin}}
[[Coadan:Oscar Wilde 3g07095u-adjust.jpg|thumb|right|150px|Y draameyder, bard, as screeudeyr Yernagh, [[Oscar Wilde]].]]
Dymmyrk ellan Nerin [[Lioar Cheanannas]], as screeudeyryn lhied as [[George Berkeley]], [[Sheridan le Fanu]], [[Jonathan Swift]], [[James Joyce]], [[George Bernard Shaw]], [[Richard Brinsley Sheridan]], [[Oliver Goldsmith]], [[Oscar Wilde]], [[William Butler Yeats|W.B. Yeats]], [[Patrick Kavanagh]], [[Samuel Beckett]], Brian O'Nolan, as eh soilshit magh myr [[Flann O'Brien]], [[John Millington Synge]], [[Seán O'Casey]], [[Seamus Heaney]], [[Bram Stoker]], [[Elizabeth Bowen]], [[Kate O'Brien]], [[Seán Ó Faoláin]], [[Frank O'Connor]], [[William Trevor]] as screeudeyryn elley. Ta Shaw, Yeats, Beckett as Heaney fo laurys [[Aundyr Nobel ayns Lettyraght]]. Ta ram screeudeyryn elley lhied as [[John Banville]], [[Roddy Doyle]], [[Pádraic Ó Conaire]], [[Máirtín Ó Cadhain]], [[Séamus Ó Grianna]], [[Dermot Bolger]], [[Maeve Binchy]], [[Frank McCourt]], [[Edna O'Brien]], [[Nuala Ní Dhomhnaill]], [[Paul Muldoon]], [[Thomas McCarthy]], [[Joseph O'Connor]], [[Eoin Colfer]], [[John McGahern]] as [[Colm Tóibín]].
Ta ellyneyryn ard-ghooagh Nerin goaill stiagh [[Nathaniel Hone]], [[James Arthur O'Connor]], [[Roderick O'Conor]], [[Jack Yeats]], [[William Orpen]], [[Mainie Jellett]], [[Louis le Brocquy]], [[Anne Madden]], [[Robert Ballagh]], [[James Coleman]], [[Dorothy Cross]] as [[John Gerrard]].
Ta enney share er Nerin son [[Kiaull çheerey Nerin|kiaull tradishoonagh Nerin]], agh va ram ellyneyryn elley lesh cleayney eddyr-ashoonagh ayns genreyn elley currit magh ec yn ellan, lhied as [[U2]], [[Westlife]], [[Thin Lizzy]], [[The Pogues]], [[The Corrs]], [[The Cranberries]], y cloieder gitar [[Rory Gallagher]], yn arraneyder çheerey [[Christy Moore]], [[Celtic Woman]], [[The Chieftains]], [[Glen Hansard]] jeh [[The Frames]], [[Chris de Burgh]] as arraneyderyn [[Enya]] as [[Sinéad O'Connor]].
Ayns [[Kiaull classicagh ny h-Oarpey|kiaull classicagh]], ta ellan Nerin ny boayl ruggyree cummeyderyn ard-ghooagh lhied as [[Turlough O'Carolan]], [[John Field (cummeyder)|John Field]] (cummeyder yn [[Arrane oie (kiaull classicagh)|Arrane oie]]), [[Gerald Barry (cummeyder)|Gerald Barry]], [[Michael William Balfe]], y Reejerey [[Charles Villiers Stanford]] as [[Charles Wood (cummeyder)|Charles Wood]].
Va [[Robert Boyle]] ny 'ishigagh jeh'n shiaghtoo eash jeig as eh n'er ren feddyn magh [[Leigh Boyle]]. Va [[Aundyr Nobel ayns Fishag]] rheynnit magh dys [[Ernest Walton]] jeh [[Colaashtey ny Trinaid Divlyn]] ayns 1951 er yn oyr dy row yn "breneen skeilt" echey. Va [[William Rowan Hamilton]] ny vaddaghteyr ard-ghooagh. Va'n fallsoonagh as y jeeaghteyr Yernagh [[Eriugena]], briwnyssit myr nane jeh lught yn tushtey leeideilagh jeh'n rey echey. Va [[John Tyndall]] (1820-1893) veih [[Liehghlion y Droghad]], [[Coontae Cheatharlach]], [[Nerin]], ny 'ishigagh ard-ghooagh veih Nerin as eh n'er ren feddyn magh er eiyrtys Tyndall, as yn eiyrtys shen ny chur sheese er cre'n fa dy vel daah gorrym er y speyr.
== Eunysseyrys ==
[[Coadan:2005-11-21 U2 @ MSG by ZG.JPG|thumb|left|150px|[[U2]], y bann Yernagh smoo ladoosagh]]
Ta assphurtanyn ladoosaghey eunysseyraghey y 20-oo eash jeianagh goaill stiagh aghtaghyn lhied as [[U2]], [[Thin Lizzy]], [[The Pogues]], [[My Bloody Valentine]], [[Rory Gallagher]], [[Sinéad O'Connor]], [[Boomtown Rats]], [[The Corrs]], [[Horslips]], [[Boyzone]], [[Ronan Keating]], [[The Cranberries]], [[Clannad]], [[Gilbert O'Sullivan]], [[Westlife]] as [[Enya]], as ny taishbynyssyn ard-ghooagh ''[[Riverdance]]'' as ''[[Lord of the Dance (cloie chiaullee)|Lord of the Dance]]''.
Ayns y 21-oo eash beg, dirree [[Damien Rice]] as [[The Thrills]] gys ard-ghoo eddyr-ashoonagh. Ta [[The Frames]] ny vann ennoil ayns Nerin as eh gaase er yn ardane eddyr-ashoonagh, agh ta'n stayd oc myr y bann smoo ennoil fo baggyrtys rish bannaghyn noa elley lhied as [[Bell X1 (bann)|Bell X1]], ansherbee.
Ta aghteyryn Hollywood cronnaley veih Pobblaght Nerin goaill stiagh [[Maureen O'Hara]], [[Barry Fitzgerald]], [[George Brent]], [[Arthur Shields]], [[Maureen O'Sullivan]], [[Richard Harris]], [[Peter O'Toole]], [[Pierce Brosnan]], [[Gabriel Byrne]], [[Brendan Gleeson]], [[Daniel Day Lewis]] (rere seyraanaght), [[Colm Meaney]], [[Colin Farrell]], [[Brenda Fricker]], [[Jonathan Rhys-Meyers]], [[Stuart Townsend]] as [[Cillian Murphy]].
Hug çhynskyl bishagh ny scannaneyn Yernagh, meansalit liorish [[Bord Scannán na hÉireann]], cooney da ny stiureyderyn [[Neil Jordan]] as [[Jim Sheridan]], as hug eh cooney da scannaneyn Yernagh lhied as ''[[Intermission (scannane)|Intermission]]'' liorish [[John Crowley (stiureyder)|John Crowley]], ''[[Breakfast on Pluto (scannane)|Breakfast on Pluto]]'' liorish Neil Jordan, as scannaneyn elley. Fo roonaghtyn barnaghyn keeshaghey as oyryn elley va ram scannaneyn cleaynit gys Nerin, goaill stiagh ''[[Braveheart]]'' liorish [[Mel Gibson]] as ''[[Saving Private Ryan]]'' liorish [[Steven Spielberg]].
== Spoyrt ==
{{ardart|Spoyrt ayns Nerin}}
T'ad [[Bluckaneyrys Gaelgagh|bluckaneyrys]] as [[immanaght Ghaelgagh]] ny preeu-spoyrtyn ayns Nerin son y chooid smoo. Ta'n daa spoyrt shen, myrane lesh [[bluckan laue Gaelgagh]] stiurit ec [[Cumann Lúthchleas Gael]]. Ta shenn-chloiederyn y CLG goaill stiagh [[DJ Carey]] as [[Peter Canavan]]. Va'n shenn-Taoiseach [[Jack Lynch]] ny immanee ennymoil as cosneyder y chohirrey ooilley-Nerin roish y çheet stiagh echey 'sy pholitickaght. Ta cloiederyn ard-ghooagh roie goaill stiagh [[Henry Shefflin]], [[Sean Cavanagh]] as [[Colm Cooper]].
Va ram spoyrteyryn gientit ayns Nerin. Ayns soccer ta shenn-vluckaneyryn goaill stiagh [[Roy Keane]], [[Johnny Giles]], [[Liam Brady]], [[Denis Irwin]], [[Packie Bonner]], [[Niall Quinn]], as [[Paul McGrath (bluckaneyr)|Paul McGrath]] as ta bluckaneyryn roie goaill stiagh lheid as [[Lee Carsley]], [[Steve Finnan]], [[Shay Given]], [[Damien Duff]], [[John O'Shea]] as [[Robbie Keane]]. Ayns ruggyr ta bluckaneyryn lheid as [[Brian O'Driscoll]], [[Ronan O'Gara]], [[Paul O'Connell]], [[David Wallace]] as [[Keith Wood]] gientit eck.
Ayns roortaghys, va aundyryn cosnit ayns cohirraghyn eddyr-ashoonagh ec [[Sonia O'Sullivan]], [[Eamonn Coghlan]], [[Catherina McKiernan]], [[Ronnie Delaney]], [[John Treacy]], [[David Gillick]] as [[Derval O'Rourke]].
== Arraghey ==
[[Coadan:Citadis dublin.jpg|thumb|upright|LUAS]]
{{jeeagh|Arraghey ayns Nerin|Arraghey raad yiarn ayns Nerin|Raaidyn ayns Pobblaght Nerin}}
Ta tree [[Purt aeragh eddyr-ashoonagh|puirt aeragh eddyr-ashoonagh]] ([[Purt aeragh Ghivlyn|Divlyn]], [[Purt aeragh ny Shannon|Y Çhannon]], as [[Purt aeragh Chorkee|Corkee]]) ayns Pobblaght Nerin as ad kianglt lesh arraghys bollee Oarpagh as eddyr-vooarheeragh lesh bollee skedjalit as kaartit. She [[Aer Lingus]] y lhuingys aer ashoonagh, agh ta'n lhuingys aer costys injil [[Ryanair]] ny lhuingys aer smoo. Ta'n bollagh eddyr [[Lunnin]] as [[Divlyn]] ny vollagh smoo tarroogh ayns yn Oarpey, lesh 4.5 millioonyn troailtee ayns 2006.
Ta shirveishyn raad yiarn kiarit ec [[Iarnród Éireann]]. She Divlyn çheshvean y ghreasane, lesh daa phreeu-stashoonyn ([[Stashoon Heuston|Heuston]] as [[Stashoon Connolly|Connolly]]) as t'ad kianglt lesh ny baljyn as ard-valjyn smoo. Ta shirveish yn [[Enterprise (traen)|Enterprise]], lesh cooidjaght [[Northern Ireland Railways]], jannoo kiangley eddyr Divlyn as Beeal Feirshtey. Ta greasane ymmyrkey lhiassagh ayns Divlyn as eh goaill stiagh [[Dublin Area Rapid Transit|DART]], [[LUAS]], [[Dublin Bus|bus baljagh]] as shirveish raad yiarn lhiasagh.
Ta ny bayryn gleashtanagh as ny preeu-raaidyn fo stiurey yn [[National Roads Authority]]. Ta ny raaidyn elley fo stiurey ny cooinseilyn ynnydagh.
Ta shirveishyn assaig jannoo kianglaghyn eddyr Pobblaght Nerin, [[Yn Vretyn Vooar|y Vretyn Vooar]], [[Mannin]] as [[Yn Rank|y Rank]].
== Jeeagh er neesht ==
* [[Rolley bratteeyn Phobblaght Nerin]]
* [[Fwirran bluckan-coshey ashoonagh Phobblaght Nerin]]
== Noteyn ==
{{Notelist|refs=
{{Efn|name=enmys|[Ta https://www.irishstatutebook.ie/eli/cons/en/html#part2 Banglane 4] jeh [[Bunraght Nerin]] gra dy nee ''Nerin'' ennym y steat; ta [http://www.irishstatutebook.ie/1948/en/act/pub/0022/sec0002.html Olt 2] jeh [[Slattys Phobblaght Nerin, 1948]] gra dy nee "cur sheese er y steat" eh ''Pobblaght Nerin''.<ref name="Coakley2009">{{cite book |first=John |last=Coakley |title=Politics in the Republic of Ireland |url=https://books.google.com/books?id=fzFPQ2pZgd0C&pg=PA76 |access-date=2 Boaldyn 2011 |date=20 August 2009 |publisher=Taylor & Francis |isbn=978-0-415-47672-0 |page=76 |archive-date=25 Nollik 2018 |archive-url=https://web.archive.org/web/20181225081937/https://books.google.com/books?id=fzFPQ2pZgd0C&pg=PA76%20 |url-status=live }}</ref>}}
{{Efn|name=çhengey ashoonagh|Ta [https://www.irishstatutebook.ie/eli/cons/en/html#part2 Banglane 8] jeh'n Vunraght gra dy nee Yernish y "çhengey ashoonagh" as y "chied çhengey oikoil" as dy nee "aa-hengey oikoil" ee yn Vaarle.}}
}}
== Imraaghyn ==
{{reflist}}
== Kianglaghyn magh ==
* [https://web.archive.org/web/20050403211720/http://www.gov.ie/aras/ ''Áras an Uachtaráin''] – Ynnyd-eggey oikoil yn Eaghtyrane
* [https://web.archive.org/web/20081108001743/http://www.irlgov.ie/ Oayllys er Steat Nerin] – giat y Reiltys
* [https://www.gov.ie/en/organisation/department-of-the-taoiseach/ Taoiseach] – Ynnyd-eggey oikoil yn ard-vinishter
* [https://web.archive.org/web/20080611071209/http://www.gov.ie/oireachtas/frame.htm Tithe an Oireachtais] – Thieyn yn Ard-whaiyl, ynnyd-eggey oikoil yn ard-whaiyl
{{Çheeraghyn yn Unnaneys Oarpagh}}
{{Yn Europey}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Nerin, Pobblaght}}
[[Ronney:Pobblaght Nerin| ]]
[[Ronney:Çheeraghyn yn Oarpey]]
[[Ronney:Çheeraghyn ellanagh]]
[[Ronney:Çheeraghyn-oltey yn Unnaneys Oarpagh]]
[[Ronney:Çheeraghyn-oltey Choonseil yn Oarpey]]
[[Ronney:Çheeraghyn-oltey ny h-Ashoonyn Unnaneysit]]
[[Ronney:Çheeraghyn-oltey yn RCTL]]
[[Ronney:Ardjyn staddyssaghtoil NUTS 1 yn Unnaneys Oarpagh]]
[[Ronney:Pobblaghtyn]]
[[Ronney:Steatyn as thallooyn bunnit 'sy vlein 1949]]
[[Ronney:Bunneeaghtyn ayns Nerin 'sy vlein 1949]]
2b0qa3zzn0cws2ixnams5dy6f0cucvw
Montenegro
0
2451
393690
393443
2026-10-01T21:29:40Z
MacTire02
219
parameadaryn noa 'sy chishtey fys nish
393690
wikitext
text/x-wiki
{{Kishtey fys çheer
|ennym = Montenegro
|ennym_foddey_cadjincliaghtagh= {{nobold|Crna Gora<br />Црна Гора {{small|([[Montenegrish]])}}}}
|ennym_gienneydagh = Montenegro
|jalloo_brattagh = Flag of Montenegro.svg
|jalloo_cleinney = Coat of arms of Montenegro.svg
|jalloo_caslys = Europe-Montenegro.svg
|jarroo-raa = none
|arrane_ashoonagh = [[Oj, svijetla majska zoro]]
|çhyndaa_arrane_ashoonagh = O, Madran Gial dy Voaldyn
|coadan_arrane_ashoonagh = National Anthem of Montenegro.ogg
|çhengaghyn_oikoil = [[Montenegrish]]
|sorçh_çhengaghyn = Çhengaghyn as<br/>ymmyd oikoil oc
|çhengaghyn = {{hlist|[[Serbish]]|[[Bosnish]]|[[Croitish]]|[[Albaanish]]}}<ref name="Constitution of Montenegro">{{cite book|url=http://www.wipo.int/wipolex/en/text.jsp?file_id=187544|title=Bunraght Montenegro|chapter-url=http://www.wipo.int/wipolex/en/text.jsp?file_id=187544#LinkTarget_1506|chapter=Language and alphabet Article 13 |publisher=[[WIPO]]|date=19 Jerrey Fouyir 2007}}</ref>
|preeu-valley = [[Podgorica]]
|noteyn_preeu-valley =She Podgorica yn preeu-valley reiragh as ta [[Cetinje]] coontit myr y shenn phreeu-valley reeoil.
|latd=42 |latm=47 |latNS=N |longd=19 |longm=28 |longEW=E |latNSgael=Hwoaie |longEWgael=Hiar
|balley_smoo = preeu-valley
|sorçh_reiltys = [[Pobblaght pharlamaidagh unnaneagh]]
|ushtey_sy_cheead = 1.5
|blein_LTS_CCK = 2007
|LTS_CCK = $6.135 billioon
|LTS_CCK_yn_dooinney = $10,225
|LTS_ennymagh = $3.557 billioon
|sorçh_kiondeeaght = Bunneeaght
|taghyrt1_bunnit = [[Prinsaght Zeta|Zeta]]
|date1_bunnit = 1356
|taghyrt2_bunnit = [[Prinse-aspickys Montenegro]]
|date2_bunnit = 1516
|taghyrt3_bunnit = [[Prinsaght Montenegro]]
|date3_bunnit = 13 Mayrnt 1852
|taghyrt4_bunnit = [[Conaant Verleen (1878)|Conaant Verleen]]
|date4_bunnit = 13 Jerrey Souree 1878
|taghyrt5_bunnit = [[Reeriaght Montenegro]]
|date5_bunnit = 28 Luanistyn 1910
|taghyrt6_bunnit = [[Reeriaght yn Yugoslaavey]]
|date6_bunnit = 26 Mee Houney 1918
|taghyrt7_bunnit = [[Pobblaght Chonastagh Hoshiallagh yn Yugoslaavey|PCH yn Yugoslaavey]]
|date7_bunnit = 29 Mee Houney 1945
|taghyrt8_bunnit = [[Yn Serb as Montenegro|Y Serb as Montenegro]]
|date8_bunnit = 27 Averil 1992
|taghyrt9_bunnit = [[Refrane cour Neuchrogheydys Montenegro, 2006|Refrane neuchrogheydys]]
|date9_bunnit = 21 Boaldyn 2006
|argid = [[euro]]
|noteyn_argid = Va'n [[euro]] doltit dy un-çheuagh; cha nel Montenegro coontit myr ayrn jeh [[cryss yn oarey]]
|traa_ynnydagh = [[Traa ynnydagh yn Oarpey Veanagh|CET]]
|ashchur_utc = +01:00
|traa_ynnydagh_TTLS = [[Traa souree yn Oarpey Veanagh|CEST]]
|ashchur_utc_TTLS = +2
|cctld = [[.me]]
|coad_çhellvane = 382
}}
She çheer 'syn [[yn Oarpey|Oarpey]] eh '''Montenegro'''.{{efn|[[Montenegrish]], [[Bosnish]], as [[Serbish]]: {{lang|cnr|Црна Гора}} ny {{lang|cnr|Crna Gora|italics=no}}; {{langx|hr|Crna Gora}}; {{langx|sq|Mali i Zi}}.}} T'eh çhemmit liorish [[Bosnia as Herzegovina]] 'sy twoaie, [[Yn Serb|y Serb]] 'sy niar hwoaie, [[Kosovo]] 'sy niar, [[yn Albaan]] 'sy niar yiass, as [[Yn Chroit|y Chroit]] 'sy neear hwoaie. She [[Podgorica]] ([[Abbyrlhit Kyrillagh|Kyrillagh]]: Подгорица) yn preeu-valley.
== Bun-ocklaght ==
Ta'n fockle "Montenegro" hene çheet ass çhyndaays lettyroil [[Veneeshish]] jeh'n abbyrt Herbagh "''Crna Gora''", ta meanal "Slieau Doo."
== Noteyn ==
{{notelist}}
== Imraaghyn ==
{{reflist}}
{{Yn Europey}}
{{RCAH}}
{{Gurneil eaghtyrys}}
{{bun}}
[[Ronney:Montenegro| ]]
[[Ronney:Ny çheeraghyn Balkanagh]]
[[Ronney:Çheeraghyn yn Oarpey]]
[[Ronney:Çheeraghyn-oltey Reagheydys Chonaant yn Atlantagh Hwoaie]]
[[Ronney:Çheeraghyn-oltey Unnaneys y Veanvooir]]
[[Ronney:Çheeraghyn-oltey Choonseil yn Oarpey]]
[[Ronney:Çheeraghyn-oltey ny h-Ashoonyn Unnaneysit]]
[[Ronney:Steatyn as thallooyn bunnit 'sy vlein 2006]]
[[Ronney:Pobblaghtyn]]
[[Ronney:Bunneeaghtyn 'syn Oarpey 'sy vlein 2006]]
3beuhheoxwrhrhib6rd8ioo12me19fe
Monaco
0
2639
393812
393669
2026-10-02T02:56:53Z
MacTire02
219
lettyraghey
393812
wikitext
text/x-wiki
{{Kishtey fys çheer
|ennym = Prinsaght Monaco
|ennym_foddey_cadjincliaghtagh= {{nobold|Principauté de Monaco {{small|([[Frangish]])}}}}
|ennym_gienneydagh = Monaco
|jalloo_caslys = Monaco_Europe_Location.svg
|jarroo-raa = Deo Juvante
|çhyndaa_jarroo-raa = Lesh Cooney Yee
|çhengey_jarroo-raa = Ladjyn
|arrane_ashoonagh = [[Hymne Monégasque]]
|çhyndaa_arrane_ashoonagh = Hymn Monaco
|coadan_arrane_ashoonagh = Monaco National Anthem.ogg
|çhengey_arrane_ashoonagh = Frangish
|çhengaghyn_oikoil = [[Frangish]]<ref>{{cite web |access-date=22 Boaldyn 2008 |url=http://www.gouv.mc/devwww/wwwnew.nsf/1909$/036c62fe5f92f2efc1256f5b0054fa42gb?OpenDocument&3Gb |archive-url=https://web.archive.org/web/20110722170607/http://www.gouv.mc/devwww/wwwnew.nsf/1909$/036c62fe5f92f2efc1256f5b0054fa42gb?OpenDocument&3Gb |archive-date=22 Jerrey Souree 2011 |title=Constitution de la Principauté |publisher=[[Coonseil y Reiltys (Monaco)|Coonseil y Reiltys]] |url-status=dead}}</ref>
| sorçh_çhengaghyn = [[Eddyr-hengey|Çhengaghyn cadjin]]
| çhengaghyn = {{hlist|[[Iddaalish]]|[[Monacish]]}}
|sorçh_reiltys = [[Monarkaght lieh-vunraghtoil pharlamaidagh]] unnaneagh
|blein_LTS_CCK = 2015
|LTS_CCK = $7.672 billoon
|LTS_CCK_yn_dooinney = $115,700
|sorçh_kiondeeaght = Neuchrogheydys
|taghyrt1_bunnit = [[Reeraghtys Grimaldi]] (fo kionedeeaght [[Pobblaght Genova|Phobblaght Genova]])
|date1_bunnit = 8 Jerrey Geuree 1297
|taghyrt2_bunnit = veih [[Kied Impiraght y Rank|Impiraght y Rank]]
|date2_bunnit = 17 Boaldyn 1814
|taghyrt3_bunit = veih cummaltys y [[Caggey yn Çheyoo Cochiangley|Çheyoo Cochiangley]]
|date3_bunnit = 17 Mean Souree 1814
|taghyrt4_bunnit = [[Ny Conaantyn Frangagh-Monacagh]]
|date4_bunnit = 2 Toshiaght Arree 1861
|taghyrt5_bunnit = [[Bunraght Monaco|Bunraght]]
|date5_bunnit = 5 Jerrey Geuree 1911
|traa_ynnydagh = [[Traa ynnydagh yn Oarpey Veanagh|CET]]
|ashchur_utc = +01:00
|traa_ynnydagh_TTLS = [[Traa houree yn Oarpey Veanagh|CEST]]
|ashchur_utc_TTLS = +02:00
|cctld = [[.mc]]
|coad_çhellvane = 377
}}
Ta '''Monaco''', ny '''Prinsaght Monaco'''{{efn|{{langx|fr|Principauté de Monaco}}; {{langx|lij-MC|Prinçipatu de Mu̍negu}}; {{langx|lij|Prinçipato de Mónego}}; {{langx|oc|Principat de Mónegue}}; {{langx|it|Principato di Monaco}}}} ny steat ard-valjagh veg 'syn [[Yn Oarpey Heear|Oarpey Heear]] er coose hwoaie meanagh ny [[Yn Veanvooir|Meanvooir]], as joarey eck lesh [[Yn Rank|y Rank]] er tree çheughyn, as ny soie mygeayrt 16 km veih'n [[Yn Iddaal|Iddaal]]. Ta'n çheer beggan ny sloo na 2 km² er eaghtyr lesh begnagh 33,000 cummaltee. Ta Monaco [[Rolley çheeraghyn as croghaneyn rere glooaght y phobble|ny çheer smoo cummaltit rere glooaght y phobble 'sy theihll]], as t'ee ny çheer Frangish sloo 'sy theihll. She Monaco ennym ny çheerey myrane lesh ennym y phreeu-valley. Dy mennick t'eh er credjal dy vel ee ny [[pargys-keesh]], as ta shiartanse dy ny cummaltee nyn gummaltee feer verçhagh as ad çheet ass çheeraghyn joarree. Ta yn sleih shen jannoo seose mooar-chooid jeh'n sleih-earroo ec mygeayrt 84% earroo yn phobble.<ref>{{en jalloo}} [http://www.state.gov/r/pa/ei/bgn/3397.htm Rheynn y Steat S.U.] Per capita purchasing power parity GDP (US dept. of State 2006 est.): $30,000</ref>
Ta Monaco ny [[reeriaght vunraghtoil]] as ny [[prinsaght]], as she [[Albert II, Flah Monaco|y Flah Albert II]] fer toshee yn steat. Ta Monaco er ny ve reirit ec [[Reeraghtys Grimaldi]] veih'n vlein 1297, as va seyrsnys y steat currit er enney dy h-oikoil liorish [[ny Conaantyn Frangagh-Monacagh]] 'sy vlein 1861. Faagail magh dy vel Monaco ny steat seyr, ta coadey ny çheerey ny reggyrtys Frangagh. Cha nel Monaco ny h-oltey jeh'n [[Yn Unnaneys Oarpagh|Unnaneys Oarpagh]] agh ta'n [[oarey]] eck myr argid cadjin ny çheerey.
== Noteyn ==
{{notelist}}
== Imraaghyn ==
{{rolleyimraaghyn}}
{{Yn Europey}}
{{Preeu-valjyn ny h-Oarpey}}
{{Gurneil eaghtyrys}}
{{bun}}
[[Ronney:Monaco| ]]
[[Ronney:Preeu-valjyn 'syn Oarpey]]
[[Ronney:Steatyn Creestee]]
[[Ronney:Steatyn ard-valjagh]]
[[Ronney:Çheeraghyn yn Oarpey]]
[[Ronney:Coloinyn Massaliagh]]
[[Ronney:Çheeraghyn-oltey Choonseil yn Oarpey]]
[[Ronney:Çheeraghyn-oltey Organisation internationale de la Francophonie]]
[[Ronney:Çheeraghyn-oltey Unnaneys y Veanvooir]]
[[Ronney:Çheeraghyn-oltey ny h-Ashoonyn Unnaneysit]]
[[Ronney:Ard-valjyn purtey er y Veanvooir]]
[[Ronney:Prinsaghtyn]]
[[Ronney:Steatyn as thallooyn bunnit 'sy vlein 1297]]
[[Ronney:Thallooyn Phobblaght Genova]]
[[Ronney:Meegrasteatyn yn Oarpey]]
qtqb6ebeyw2wpfigfbb7lvk9faz82iy
Ronney:Bunneeaghtyn ayns ny 1910yn
14
6598
393743
381284
2026-10-01T23:51:12Z
MacTire02
219
-ronney
393743
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 10]]
[[Ronney:Toshiaghtyn ayns ny 1910yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1910]]
5vlz91o6lyl07rljqrwcts4kwnu1nkk
Ronney:Bunneeaghtyn ayns ny 1940yn
14
13127
393745
380494
2026-10-02T00:11:06Z
MacTire02
219
-ronney
393745
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1940s establishments|Bunneeaghtyn ayns ny 1940yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 40]]
[[Ronney:Toshiaghtyn ayns ny 1940yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1940]]
a6nnr4up61ekhnjcssi2cxrqxstz0q7
Ronney:Bunneeaghtyn ayns ny 1800yn
14
13269
393732
380943
2026-10-01T23:48:20Z
MacTire02
219
++
393732
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1800s establishments|Bunneeaghtyn ayns ny 1800yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1800yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1800]]
piwjwexe02vow72vwhmku8dpnxg96yh
Ronney:Feaillaghyn ayns Mannin
14
15345
393783
170531
2026-10-02T00:41:19Z
MacTire02
219
ronney noa
393783
wikitext
text/x-wiki
[[Ronney:Taghyrtyn eunysseyrys ayns Mannin]]
[[Ronney:Feaillaghyn 'sy Reeriaght Unnaneysit rere ard|Mannin]]
d8ihonysup1xjikmyd0j9232xyg2z56
UTC+0
0
18574
393694
285419
2026-10-01T21:36:08Z
MacTire02
219
kiartaghey yn duillag aa-enmyssit
393694
wikitext
text/x-wiki
#REDIRECT [[UTC+00:00]]
p70j3m213hg338610uwcrxiaivwfqz5
UTC+00:00
0
18575
393692
290096
2026-10-01T21:35:25Z
MacTire02
219
MacTire02 moved page [[UTC±00:00]] to [[UTC+00:00]]: rere ny stundayrtyn
290096
wikitext
text/x-wiki
[[Coadan:Timezones2011 UTC+0.png|right|thumb|300px|UTC - 2010: Gorrym (J. Geuree), jiarg-vuigh (J. Souree), buigh (car y vlein), bane-ghorrym (ardjyn 'syn 'aarkey)]]
She '''UTC±00:00''' y traa shoh:
* [[Traa Chadjin Cho-oardit]] (UTC), bun chorys traa yn dowan.
* [[Traa ynnydagh ny h-Oarpey Heear]] ([[Yn Phortiugal|y Phortiugal]], y [[Reeriaght Unnaneysit]] as [[Pobblaght Nerin|Nerin]]).
{{bun}}
{{DEFAULTSORT:Utc±0}}
[[Ronney:Cryssyn UTC]]
bwrb4zio9ak92qfqp6c0n9femw2xxvq
Module:Lang
828
30693
393696
392737
2026-10-01T21:51:01Z
MacTire02
219
prowal
393696
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl()
local yesno = require ('Module:Yesno');
local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration
local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization
local is_latn_data = mw.loadData ('Module:Lang/data/is latn data');
local sizeof_ranges_t = is_latn_data.sizeof_ranges_t;
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< M A K E _ E R R O R _ S P A N >--------------------------------------------------
]]
local function make_error_span (template, msg)
return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'})
end
--[[--------------------------< S U B S T I T U T E >----------------------------------------------------------
Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when
<data_t> not nil; returns <message> else.
]]
local function substitute (message, data_t)
return data_t and mw.message.newRawMessage (message, data_t):plain() or message;
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
Assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args_t, template)
local category;
local text; -- handle the oddity that is {{langx}}
if cfg.templates_t.langxx == template then
text = args_t.text or args_t[1]; -- for {{lang-xx}}
else
text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}}
end
if cfg.templates_t.transliteration == template then
category = cfg.make_error_msg_t.xlit_err_cat;
else
category = cfg.make_error_msg_t.lang_err_cat;
end
local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or '';
return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: {{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- { prevents template name from being treated as a template call in certain situations
{
text or cfg.make_error_msg_t.undefined,
cfg.misc_text_t.error,
template,
msg,
category,
cfg.misc_text_t.help,
category_link
})
end
--[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------
]]
local function parameter_validate (args_t, template)
local err_msg = cfg.parameter_validate_t.invalid_param;
if cfg.templates_t.lang == template then -- for {{lang}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
elseif cfg.templates_t.langx == template then -- for {{langx}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters
not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}}
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
elseif cfg.templates_t.langxx == template then -- for {{lang-xx}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters
not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}}
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
end
end
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not
an empty string.
]]
local function is_set (var)
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
Validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on
the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-??}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, cfg.validate_italic_t.multi_italic;
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack.
]]
local function in_array (needle, haystack)
if needle == nil then
return false;
end
for n,v in ipairs (haystack) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
Prettify IETF tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
Extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid.
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=).
Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1.
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- IETF tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag;
end
local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code}));
table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported.
]]
local function div_markup_add (text, style)
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
HTML markup. This because the lang= attribute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag.
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default HTML tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages
else
title_text = substitute ('$2 $1', {language, cfg.make_text_html_t.individual});
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Ronney:Artyn goaill stiagh teks ayns <language>]]
For English:
[[Ronney:Artyn goaill stiagh teks ayns Baarle]]
For ISO 639-2 collective languages (and for 639-1 bh):
[[Ronney:Artyn goaill stiagh teks ayns <language>]]
]=]
local function make_category (code, language_name, nocat, name_get)
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name});
end
if this_wiki_lang_tag == code then
return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language
cfg.make_category_t.cat_prefix,
language_name,
cfg.make_category_t.explicit_cat,
});
else
return substitute ('[[$1 $2$3]]', {
cfg.make_category_t.cat_prefix,
language_name,
cfg.make_category_t.cat_postfix
});
end
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string.
The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript).
This function is used by both lang_xx() and xlit()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transliteration}}, style only applies when a language code is provided.
]]
local function make_translit (code, language_name, translit, std, tscript, style, engvar)
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only)
end
title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip
title_text,
title_t[std][tscript:lower()],
script_table[tscript],
cfg.make_translit_t.script,
cfg.make_translit_t.transliteration,
});
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code)
local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip
if language_name:match ('languages') then
fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip
end
title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip
title_text,
title_t[std][code:lower()],
language_name,
cfg.misc_text_t.language,
cfg.make_translit_t.transliteration,
});
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip
title_text,
language_name,
cfg.make_translit_t.script,
cfg.make_translit_t.transliteration,
});
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only)
title_text,
cfg.misc_text_t.language,
});
end
title_text = substitute ('$1 $2', { -- finish the tool tip
title_text,
cfg.make_translit_t.transliteration,
});
else
title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?)
title_text,
cfg.make_translit_t.transliteration,
});
end
end
end
local tag
if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
tag = '<i lang="%s-Latn">%s</i>'
else
tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it
tag = string.format(tag, style, "%s", "%s")
end
tag = string.format(tag, code, "%s")
else
tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only)
end
tag = string.format(tag, translit) -- add the translit text
if '' == title_text then -- when there is no need for a tool-tip
return tag; -- done
else
title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else
return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg (cfg.validate_text_t.no_text, args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg (cfg.validate_text_t.malformed_markup, args, template);
end
local style = args.italic;
if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg (cfg.validate_text_t.italic_markup, args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
Render mainenance messages and categories.
]]
local function render_maint (nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing.
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac.
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
Looks for a poem strip marker in text; returns true when found; false else.
Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second
return value for use in error message.
]]
local function validate_proto (proto_param)
if cfg.keywords_t.affirmative == proto_param then
return true;
elseif cfg.keywords_t.negative == proto_param then
return false;
elseif is_set (proto_param) then
return nil, proto_param; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
Common function to return language name from the data set according to IETF tag.
Returns language name if found in data tables; nil else.
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to IANA active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code}));
table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >----------------------------------
IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and
what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn
script, the IETF script subtag, if present, should not be Latn.
Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn.
For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because
unicode treats these two scripts as font-specific variants of Latn.
Returns an error message when mismatch detected; nil else.
]]
local function text_script_match_test (script, is_latn_text, pos, char)
local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints
if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string
script = script:lower(); -- lower case to index into <scripts_t>
if is_latn_text then -- when text is wholly Latn script
if not scripts_t[script] then -- but a non-Latn script is specified
return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message
end
else -- when text is not wholly Latn script
if scripts_t[script] then -- but a Latn script is specified
return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character
end
end
end
end
--[[--------------------------< B I N A R Y _ S E A R C H >---------------------------------------------------
conducts a binary search of <ranges_t> for a sub-range that holds <target>.
returns boolean true if a sub-range holding <target> is found; boolean false else.
]]
local function binary_search (target, ranges_t)
local idx_bot = 1; -- initialize to index of first key
local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys)
if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range
return; -- abandon
end
local idx_mid; -- calculated index of range midway between top index and bottom index
local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t>
while 1 do
idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence
if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value
return true; -- we found the range that holds the <target> character; return true
elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value?
idx_bot = idx_mid; -- adjust <idx_bot> up
else -- here when <target> less than indexed range low value
idx_top = idx_mid - 1; -- adjust <idx_top> down
end
if flag then
break; -- here when we just evaluated the last range and <target> not found
end
if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t>
flag = true;
end
end
end
--[[--------------------------< I S _ L A T I N >--------------------------------------------------------------
compare <text> as codepoints to lists of known codepoints accepted as Latn script
returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup
returns boolean true and <text> when codepoint is known
returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character
when codepoint is not known
TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly
latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really
latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes)
]]
local function is_latin (text, tag)
local count;
text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present
if 0 ~= count then
return true, text; -- markup present so assume that <text> is Latn-script
end
local pos = 0; -- position counter for error messaging
for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point
pos = pos + 1; -- bump the position counter
if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list?
not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range?
not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint?
return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation
end
end
return true, text; -- is known; return <text>
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
Entry point for {{lang}}.
There should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
Parameters are received from the template's frame (parent frame).
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or cfg.templates_t.lang;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly
args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg (msg, args, template);
end
local is_latn_text, pos, char;
is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean
msg = text_script_match_test (subtags.script, is_latn_text, pos, char)
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
Entry point for {{lang}}.
There should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
Parameters are received from the template's frame (parent frame).
]]
local function lang (frame)
local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}}
local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message
end
return _lang (args_t);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
Stand-alone function to create literal translation of main text.
Also used by {{lang-x2}}.
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> HTML tag
if cfg.keywords_t.negative == args_t.link then
table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form
else
table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> HTML tag
end
table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}}
'<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion
'<span class="gloss-text">', -- open user styling span for the translation
args_t.translation, -- the translation
'</span>', -- close user styling span for the translation
'<span class="gloss-quot">\'</span>' -- user styling span for quote marks
}));
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< _ L A N G _ X X >--------------------------------------------------------------
For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-??}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx'
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or base_template;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2'
local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2;
local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3;
if args[text_idx] and args.text then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template);
else
args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly
if args[translit_idx] and args.translit then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template);
else
args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter
end
args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else
if args[xlate_idx] and (args.translation or args.lit) then
return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template);
elseif args.translation and args.lit then
return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template);
else
args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter
end
if args.links and args.link then
return make_error_msg (cfg.lang_xx_t.conflict_link, args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
if args.translit then
local latn, pos, char;
latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code);
if not latn then
return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template);
end
end
local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean
args.text = text; -- may have been modified (accept-as-written markup removed)
msg = text_script_match_test (subtags.script, is_latn_text, pos, char)
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag)
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics)
args.italic = 'italic'; -- set font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}}
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if cfg.keywords_t.negative == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride?
table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data
elseif lang_data.article_name[code] then -- is language tag in article override
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name, language_name)); -- Manx language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if cfg.keywords_t.invert == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling
if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then
table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}),
substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text
else
table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar)
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template);
end
elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text>
return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
Common function to get args table from {{lang-??}} templates.
Returns table of args.
Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select().
]]
local function lang_xx_args_get (frame, base_template)
local args_t = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space
return value; -- return untrimmed 'text' positional parameter
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args_t;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame, cfg.templates_t.langxx);
args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}}
local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message
end
initial_style_state = 'italic';
return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point from another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args, cfg.templates_t.langxx);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame, cfg.templates_t.langxx);
args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}}
local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message
end
initial_style_state = 'inherit';
return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args, cfg.templates_t.langxx);
end
--[[--------------------------< _ L A N G X >------------------------------------------------------------------
Entry point from another module.
]]
local function _langx (args_t)
local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data
local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left
local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something>
local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something>
local msg = parameter_validate (args_t, cfg.templates_t.langx);
if msg then
return make_error_msg (msg, args_t, cfg.templates_t.langx);
end
args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code=
if not args_t.code then
return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx);
end
args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else
args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse
args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else
args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx
local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc
return _lang_xx (args_t, cfg.templates_t.langx);
end
--[[--------------------------< L A N G X >--------------------------------------------------------------------
Entry point for {{langx}}.
this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters
but {{langx}} has four:
| 1 | 2 | 3 | 4
{{lang-xx |<text> |<xlit> |<xlat> }}
{{langx |<tag> |<text> |<xlit> |<xlat> }}
The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper
positional parameters.
{{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering.
{{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx)
scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now
uses auto-italics code adapted from {{lang}} (doesn't support poem tags).
]]
local function langx (frame)
local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit'
return _langx (args_t);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Module entry point from another module.
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module.
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return make_error_span (template, msg);
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
if 'yes' ~= args.raw then
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
end
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override?
language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data
elseif lang_data.article_name[code] then -- is language tag in article name override?
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name, label or language_name); -- Manx language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the IETF language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module.
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message
end
else
msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return make_error_span (template, msg);
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ X L I T >--------------------------------------------------------------------
Module entry point from another module.
]]
local function _xlit (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
local template = args.template or cfg.templates_t.transliteration;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template);
end
else
if is_set (args[2]) then -- [2] set when {{transliteration|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg (cfg.transl_t.missing_lang_scr, args, template);
end
end
end
if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code
end
else
return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit
end
local is_latn_text, pos, char;
is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup
if not is_latn_text then -- when text is not latn
return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar);
end
--[[--------------------------< X L I T >----------------------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function xlit (frame)
return _xlit (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Module entry point from another module.
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return make_error_span (template, msg);
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext
lang = lang, -- entry point for {{lang}}
langx = langx, -- entry point for {{langx}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns IETF tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
xlit = xlit, -- entry point for {{transliteration}}
_category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules
_lang = _lang,
_langx = _langx,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_xlit = _xlit,
_translation_make = translation_make,
};
jsqrc30emdj82pvdrlfjfliwlkemjlp
393697
393696
2026-10-01T21:52:18Z
MacTire02
219
ren mee jarrood y $4 dy ghoaill magh
393697
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl()
local yesno = require ('Module:Yesno');
local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration
local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization
local is_latn_data = mw.loadData ('Module:Lang/data/is latn data');
local sizeof_ranges_t = is_latn_data.sizeof_ranges_t;
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< M A K E _ E R R O R _ S P A N >--------------------------------------------------
]]
local function make_error_span (template, msg)
return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'})
end
--[[--------------------------< S U B S T I T U T E >----------------------------------------------------------
Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when
<data_t> not nil; returns <message> else.
]]
local function substitute (message, data_t)
return data_t and mw.message.newRawMessage (message, data_t):plain() or message;
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
Assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args_t, template)
local category;
local text; -- handle the oddity that is {{langx}}
if cfg.templates_t.langxx == template then
text = args_t.text or args_t[1]; -- for {{lang-xx}}
else
text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}}
end
if cfg.templates_t.transliteration == template then
category = cfg.make_error_msg_t.xlit_err_cat;
else
category = cfg.make_error_msg_t.lang_err_cat;
end
local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or '';
return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: {{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- { prevents template name from being treated as a template call in certain situations
{
text or cfg.make_error_msg_t.undefined,
cfg.misc_text_t.error,
template,
msg,
category,
cfg.misc_text_t.help,
category_link
})
end
--[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------
]]
local function parameter_validate (args_t, template)
local err_msg = cfg.parameter_validate_t.invalid_param;
if cfg.templates_t.lang == template then -- for {{lang}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
elseif cfg.templates_t.langx == template then -- for {{langx}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters
not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}}
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
elseif cfg.templates_t.langxx == template then -- for {{lang-xx}}
for param, _ in pairs (args_t) do
if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters
not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}}
not cfg.known_params_t.common_params_all_t[param] then -- common to all
return substitute (err_msg, {param}); -- <param> not found so abandon
end
end
end
end
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not
an empty string.
]]
local function is_set (var)
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
Validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on
the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-??}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, cfg.validate_italic_t.multi_italic;
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack.
]]
local function in_array (needle, haystack)
if needle == nil then
return false;
end
for n,v in ipairs (haystack) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
Prettify IETF tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
Extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid.
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=).
Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1.
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- IETF tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag;
end
local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code}));
table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported.
]]
local function div_markup_add (text, style)
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
HTML markup. This because the lang= attribute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag.
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default HTML tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages
else
title_text = substitute ('$2 $1', {language, cfg.make_text_html_t.individual});
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Ronney:Artyn goaill stiagh teks ayns <language>]]
For English:
[[Ronney:Artyn goaill stiagh teks ayns Baarle]]
For ISO 639-2 collective languages (and for 639-1 bh):
[[Ronney:Artyn goaill stiagh teks ayns <language>]]
]=]
local function make_category (code, language_name, nocat, name_get)
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name});
end
if this_wiki_lang_tag == code then
return substitute ('[[$1 $2 $3]]', { -- unique category name for the local language
cfg.make_category_t.cat_prefix,
language_name,
cfg.make_category_t.explicit_cat,
});
else
return substitute ('[[$1 $2$3]]', {
cfg.make_category_t.cat_prefix,
language_name,
cfg.make_category_t.cat_postfix
});
end
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string.
The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript).
This function is used by both lang_xx() and xlit()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transliteration}}, style only applies when a language code is provided.
]]
local function make_translit (code, language_name, translit, std, tscript, style, engvar)
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only)
end
title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip
title_text,
title_t[std][tscript:lower()],
script_table[tscript],
cfg.make_translit_t.script,
cfg.make_translit_t.transliteration,
});
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code)
local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip
if language_name:match ('languages') then
fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip
end
title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip
title_text,
title_t[std][code:lower()],
language_name,
cfg.misc_text_t.language,
cfg.make_translit_t.transliteration,
});
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip
title_text,
language_name,
cfg.make_translit_t.script,
cfg.make_translit_t.transliteration,
});
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only)
title_text,
cfg.misc_text_t.language,
});
end
title_text = substitute ('$1 $2', { -- finish the tool tip
title_text,
cfg.make_translit_t.transliteration,
});
else
title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?)
title_text,
cfg.make_translit_t.transliteration,
});
end
end
end
local tag
if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
tag = '<i lang="%s-Latn">%s</i>'
else
tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it
tag = string.format(tag, style, "%s", "%s")
end
tag = string.format(tag, code, "%s")
else
tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only)
end
tag = string.format(tag, translit) -- add the translit text
if '' == title_text then -- when there is no need for a tool-tip
return tag; -- done
else
title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else
return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg (cfg.validate_text_t.no_text, args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg (cfg.validate_text_t.malformed_markup, args, template);
end
local style = args.italic;
if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg (cfg.validate_text_t.italic_markup, args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
Render mainenance messages and categories.
]]
local function render_maint (nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing.
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac.
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
Looks for a poem strip marker in text; returns true when found; false else.
Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second
return value for use in error message.
]]
local function validate_proto (proto_param)
if cfg.keywords_t.affirmative == proto_param then
return true;
elseif cfg.keywords_t.negative == proto_param then
return false;
elseif is_set (proto_param) then
return nil, proto_param; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
Common function to return language name from the data set according to IETF tag.
Returns language name if found in data tables; nil else.
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to IANA active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code}));
table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >----------------------------------
IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and
what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn
script, the IETF script subtag, if present, should not be Latn.
Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn.
For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because
unicode treats these two scripts as font-specific variants of Latn.
Returns an error message when mismatch detected; nil else.
]]
local function text_script_match_test (script, is_latn_text, pos, char)
local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints
if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string
script = script:lower(); -- lower case to index into <scripts_t>
if is_latn_text then -- when text is wholly Latn script
if not scripts_t[script] then -- but a non-Latn script is specified
return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message
end
else -- when text is not wholly Latn script
if scripts_t[script] then -- but a Latn script is specified
return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character
end
end
end
end
--[[--------------------------< B I N A R Y _ S E A R C H >---------------------------------------------------
conducts a binary search of <ranges_t> for a sub-range that holds <target>.
returns boolean true if a sub-range holding <target> is found; boolean false else.
]]
local function binary_search (target, ranges_t)
local idx_bot = 1; -- initialize to index of first key
local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys)
if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range
return; -- abandon
end
local idx_mid; -- calculated index of range midway between top index and bottom index
local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t>
while 1 do
idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence
if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value
return true; -- we found the range that holds the <target> character; return true
elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value?
idx_bot = idx_mid; -- adjust <idx_bot> up
else -- here when <target> less than indexed range low value
idx_top = idx_mid - 1; -- adjust <idx_top> down
end
if flag then
break; -- here when we just evaluated the last range and <target> not found
end
if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t>
flag = true;
end
end
end
--[[--------------------------< I S _ L A T I N >--------------------------------------------------------------
compare <text> as codepoints to lists of known codepoints accepted as Latn script
returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup
returns boolean true and <text> when codepoint is known
returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character
when codepoint is not known
TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly
latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really
latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes)
]]
local function is_latin (text, tag)
local count;
text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present
if 0 ~= count then
return true, text; -- markup present so assume that <text> is Latn-script
end
local pos = 0; -- position counter for error messaging
for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point
pos = pos + 1; -- bump the position counter
if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list?
not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range?
not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint?
return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation
end
end
return true, text; -- is known; return <text>
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
Entry point for {{lang}}.
There should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
Parameters are received from the template's frame (parent frame).
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or cfg.templates_t.lang;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly
args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg (msg, args, template);
end
local is_latn_text, pos, char;
is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean
msg = text_script_match_test (subtags.script, is_latn_text, pos, char)
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
Entry point for {{lang}}.
There should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
Parameters are received from the template's frame (parent frame).
]]
local function lang (frame)
local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}}
local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message
end
return _lang (args_t);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
Stand-alone function to create literal translation of main text.
Also used by {{lang-x2}}.
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> HTML tag
if cfg.keywords_t.negative == args_t.link then
table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form
else
table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> HTML tag
end
table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}}
'<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion
'<span class="gloss-text">', -- open user styling span for the translation
args_t.translation, -- the translation
'</span>', -- close user styling span for the translation
'<span class="gloss-quot">\'</span>' -- user styling span for quote marks
}));
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< _ L A N G _ X X >--------------------------------------------------------------
For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-??}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx'
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or base_template;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2'
local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2;
local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3;
if args[text_idx] and args.text then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template);
else
args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly
if args[translit_idx] and args.translit then
return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template);
else
args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter
end
args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else
if args[xlate_idx] and (args.translation or args.lit) then
return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template);
elseif args.translation and args.lit then
return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template);
else
args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter
end
if args.links and args.link then
return make_error_msg (cfg.lang_xx_t.conflict_link, args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
if args.translit then
local latn, pos, char;
latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code);
if not latn then
return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template);
end
end
local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean
args.text = text; -- may have been modified (accept-as-written markup removed)
msg = text_script_match_test (subtags.script, is_latn_text, pos, char)
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag)
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics)
args.italic = 'italic'; -- set font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}}
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if cfg.keywords_t.negative == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride?
table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data
elseif lang_data.article_name[code] then -- is language tag in article override
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name, language_name)); -- Manx language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if cfg.keywords_t.invert == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling
if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then
table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}),
substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text
else
table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar)
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template);
end
elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text>
return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
Common function to get args table from {{lang-??}} templates.
Returns table of args.
Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select().
]]
local function lang_xx_args_get (frame, base_template)
local args_t = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space
return value; -- return untrimmed 'text' positional parameter
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args_t;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame, cfg.templates_t.langxx);
args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}}
local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message
end
initial_style_state = 'italic';
return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point from another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args, cfg.templates_t.langxx);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame, cfg.templates_t.langxx);
args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}}
local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}}
if msg then
return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message
end
initial_style_state = 'inherit';
return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args, cfg.templates_t.langxx);
end
--[[--------------------------< _ L A N G X >------------------------------------------------------------------
Entry point from another module.
]]
local function _langx (args_t)
local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data
local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left
local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something>
local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something>
local msg = parameter_validate (args_t, cfg.templates_t.langx);
if msg then
return make_error_msg (msg, args_t, cfg.templates_t.langx);
end
args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code=
if not args_t.code then
return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx);
end
args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else
args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse
args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else
args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx
local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc
return _lang_xx (args_t, cfg.templates_t.langx);
end
--[[--------------------------< L A N G X >--------------------------------------------------------------------
Entry point for {{langx}}.
this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters
but {{langx}} has four:
| 1 | 2 | 3 | 4
{{lang-xx |<text> |<xlit> |<xlat> }}
{{langx |<tag> |<text> |<xlit> |<xlat> }}
The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper
positional parameters.
{{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering.
{{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx)
scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now
uses auto-italics code adapted from {{lang}} (doesn't support poem tags).
]]
local function langx (frame)
local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit'
return _langx (args_t);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Module entry point from another module.
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module.
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return make_error_span (template, msg);
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
if 'yes' ~= args.raw then
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
end
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override?
language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data
elseif lang_data.article_name[code] then -- is language tag in article name override?
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name, label or language_name); -- Manx language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the IETF language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module.
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message
end
else
msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return make_error_span (template, msg);
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ X L I T >--------------------------------------------------------------------
Module entry point from another module.
]]
local function _xlit (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
local template = args.template or cfg.templates_t.transliteration;
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template);
end
else
if is_set (args[2]) then -- [2] set when {{transliteration|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg (cfg.transl_t.missing_lang_scr, args, template);
end
end
end
if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code
end
else
return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit
end
local is_latn_text, pos, char;
is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup
if not is_latn_text then -- when text is not latn
return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar);
end
--[[--------------------------< X L I T >----------------------------------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function xlit (frame)
return _xlit (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function.
Module entry point from another module.
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return make_error_span (template, msg);
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}.
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext
lang = lang, -- entry point for {{lang}}
langx = langx, -- entry point for {{langx}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns IETF tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
xlit = xlit, -- entry point for {{transliteration}}
_category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules
_lang = _lang,
_langx = _langx,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_xlit = _xlit,
_translation_make = translation_make,
};
dowhx1laqy8vqvojwjfh6utmn1ejo40
Ronney:Toshiaghtyn rere traa
14
30941
393765
348549
2026-10-02T00:19:45Z
MacTire02
219
-ronney
393765
wikitext
text/x-wiki
{{see also|Ronney:Jerraghyn rere traa}}
{{Commonscat|Beginnings by time|Toshiaghtyn rere traa}}
{{Moir-ronney}}
[[Ronney:Toshiaghtyn| Traa]]
[[Ronney:Ronnaghyn rere traa]]
kk7zx0u2wg25v013vsijvf0wn4a0fay
Ronney:Toshiaghtyn
14
30942
393805
341061
2026-10-02T02:43:50Z
MacTire02
219
++
393805
wikitext
text/x-wiki
{{commons category|Beginnings|Toshiaghtyn}}
{{category see also|Jerraghyn}}
[[Ronney:Traa]]
[[Ronney:Brennyn]]
[[Ronney:Kied reddyn]]
cahju9u0fkbzapnsangkfhprxbw7vdi
Ronney:Streeughyn rere traa
14
31519
393764
328969
2026-10-02T00:19:27Z
MacTire02
219
-ronney
393764
wikitext
text/x-wiki
{{Commons category|Conflicts by date|Streeughyn rere date}}
{{moir-ronney}}
[[Ronney:Streeughyn| Traa]]
[[Ronney:Ronnaghyn rere traa]]
ivfha5yl1gdran6t93r1lmjh3cvyddk
Ronney:Bunneeaghtyn ayns Mannin
14
32967
393771
334182
2026-10-02T00:28:12Z
MacTire02
219
ronnaghyn elley
393771
wikitext
text/x-wiki
[[Ronney:Shennaghys Vannin]]
[[Ronney:Bunneeaghtyn rere croghane y Reeriaght Unnanesit|Mannin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Mannin]]
pzpdpotn1ngwqwg9wh6l7q7gmk0bk8y
393773
393771
2026-10-02T00:30:19Z
MacTire02
219
neeym eh shoh ny s'anmee
393773
wikitext
text/x-wiki
[[Ronney:Shennaghys Vannin]]
[[Ronney:Bunneeaghtyn ayns croghaneyn y Reeriaght Unnanesit|Mannin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Mannin]]
koibx7daxws90ec9nhx6rn5lzro1yc3
393774
393773
2026-10-02T00:30:54Z
MacTire02
219
Undid revision [[Special:Diff/393773|393773]] by [[Special:Contributions/MacTire02|MacTire02]] ([[User talk:MacTire02|talk]])
393774
wikitext
text/x-wiki
[[Ronney:Shennaghys Vannin]]
[[Ronney:Bunneeaghtyn rere croghane y Reeriaght Unnanesit|Mannin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Mannin]]
pzpdpotn1ngwqwg9wh6l7q7gmk0bk8y
393777
393774
2026-10-02T00:32:32Z
MacTire02
219
ronney elley
393777
wikitext
text/x-wiki
[[Ronney:Shennaghys Vannin]]
[[Ronney:Bunneeaghtyn ayns croghaneyn y Reeriaght Unnanesit|Mannin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Mannin]]
koibx7daxws90ec9nhx6rn5lzro1yc3
393778
393777
2026-10-02T00:33:07Z
MacTire02
219
lettyraghey
393778
wikitext
text/x-wiki
[[Ronney:Shennaghys Vannin]]
[[Ronney:Bunneeaghtyn ayns croghaneyn y Reeriaght Unnaneysit|Mannin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Mannin]]
icoi2phszsb66ff3ya3jvuwxdepn834
Ronney:Taghyrtyn reaghit ayns Mannin
14
32970
393779
334185
2026-10-02T00:33:54Z
MacTire02
219
MacTire02 moved page [[Ronney:Taghyrtyn ayns Mannin]] to [[Ronney:Taghyrtyn reaghit ayns Mannin]] without leaving a redirect: aght
334185
wikitext
text/x-wiki
{{CategoryTOC}}
{{Commons category|Events in the Isle of Man|Taghyrtyn ayns Mannin}}
[[Ronney:Cultoor Vannin]]
[[Ronney:Taghyrtyn 'syn Oarpey rere çheer|Mannin]]
[[Ronney:Taghyrtyn rere croghane|Mannin]]
[[Ronney:Taghyrtyn 'sy Reeriaght Unnaneysit|+Mannin]]
716farfgbuhwkfr8zduugc8v29ooly0
393780
393779
2026-10-02T00:36:00Z
MacTire02
219
ronnaghyn elley
393780
wikitext
text/x-wiki
{{CatAutoTOC}}
{{Commons category|Events in the Isle of Man|Taghyrtyn ayns Mannin}}
[[Ronney:Cultoor Vannin]]
[[Ronney:Shennaghys Vannin]]
[[Ronney:Taghyrtyn reaghit rere croghane y Reeriaght Unnaneysit|Mannin]]
[[Ronney:Taghyrtyn reaghit 'syn Oarpey rere çheer|+Mannin]]
7zqxztttilj3b1tuioel9e8y9jqt5y2
Ronney:Jerraghyn rere traa
14
36817
393763
348550
2026-10-02T00:19:02Z
MacTire02
219
-ronney
393763
wikitext
text/x-wiki
{{see also|Ronney:Toshiaghtyn rere traa}}
{{Commonscat|Endings by time|Jerraghyn rere traa}}
{{Moir-ronney}}
[[Ronney:Jerraghyn| Traa]]
[[Ronney:Ronnaghyn rere traa]]
naodb31hxq8hvg65srzxk1zbo4lgqch
Ronney:Jerraghyn
14
36818
393804
348551
2026-10-02T02:42:00Z
MacTire02
219
-ronney
393804
wikitext
text/x-wiki
{{commonscat|Ends|Jerraghyn}}
[[Ronney:Traa]]
[[Ronney:Shagh-heihll]]
fr9n33xkrrrey64q4rnwme3x7hw90k7
Ronney:Bunneeaghtyn ayns ny 2000yn
14
37561
393751
380583
2026-10-02T00:12:25Z
MacTire02
219
-ronney
393751
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|2000s establishments|Bunneeaghtyn ayns ny 2000yn}}
[[Ronney:Bunneeaghtyn 'sy 21d eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 2000yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|2000]]
80pwbe9gy34q67y2bpola4m5otg19ax
Ronney:Bunneeaghtyn rere jeihaght
14
37562
393702
349800
2026-10-01T23:35:24Z
MacTire02
219
-ronney
393702
wikitext
text/x-wiki
{{Commons category|Establishments by decade|Bunneeaghtyn rere jeihaght}}
{{moir-ronney}}
{{see also|Ronney:Greesaghtyn rere jeihaght}}
{{see also|Ronney:Jee-vunneeaghtyn rere jeihaght}}
[[Ronney:Bunneeaghtyn rere traa|Jeihaght]]
[[Ronney:Ronnaghyn rere jeihaght]]
[[Ronney:Toshiaghtyn rere jeihaght]]
{{CategoryTOC}}
lxpz7avrlci8dxqpfgpu9ru8v45gc8g
Ronney:Jee-vunneeaghtyn rere jeihaght
14
37563
393756
349806
2026-10-02T00:16:05Z
MacTire02
219
-ronney
393756
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Disestablishments by decade|Jee-vunneeaghtyn rere jeihaght}}
{{see also|Ronney:Bunneeaghtyn rere jeihaght}}
[[Ronney:Jee-vunneeaghtyn rere traa|Jeihaght]]
[[Ronney:Ronnaghyn rere jeihaght]]
[[Ronney:Jerraghyn rere jeihaght]]
oq2lsj8di7o2ds8f4706lur0toooy8c
Ronney:Bunneeaghtyn rere eash
14
37570
393757
349809
2026-10-02T00:17:15Z
MacTire02
219
-ronney
393757
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Establishments by century|Bunneeaghtyn rere eash}}
{{see also|Ronney:Jee-vunneeaghtyn rere eash}}
[[Ronney:Bunneeaghtyn rere traa|Eash]]
[[Ronney:Toshiaghtyn rere eash]]
3hfxa1ci4w10rsb2tdmu9sqx6g1xw0m
Ronney:Jee-vunneeaghtyn rere eash
14
37571
393758
349810
2026-10-02T00:17:27Z
MacTire02
219
-ronney
393758
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Disestablishments by century|Jee-vunneeaghtyn rere eash}}
{{see also|Ronney:Bunneeaghtyn rere eash}}
[[Ronney:Jee-vunneeaghtyn rere traa|Eash]]
[[Ronney:Jerraghyn rere eash]]
am52n97fjw6thczontt3kc531y2t1eb
Ronney:Bunneeaghtyn ayns ny 1850yn
14
37604
393737
360393
2026-10-01T23:49:51Z
MacTire02
219
ronnaghyn
393737
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1850s establishments|Bunneeaghtyn ayns ny 1850yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 50]]
[[Ronney:Toshiaghtyn ayns ny 1850yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1850]]
0ccxzj7ghc3xep2hdyuoz6wxjd9g4xf
Ronney:Bunneeaghtyn rere milley bleeaney
14
37614
393760
349879
2026-10-02T00:18:14Z
MacTire02
219
-ronney
393760
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Establishments by millennium|Bunneeaghtyn rere milley bleeaney}}
{{see also|Ronney:Jee-vunneeaghtyn rere milley bleeaney}}
[[Ronney:Bunneeaghtyn rere traa|Milley bleeaney]]
[[Ronney:Ronnaghyn rere milley bleeaney]]
[[Ronney:Toshiaghtyn rere milley bleeaney]]
gy8r1s31ce2oqo5dduoxc5qs3809ml9
Ronney:Jee-vunneeaghtyn rere milley bleeaney
14
37615
393762
349880
2026-10-02T00:18:47Z
MacTire02
219
-ronney
393762
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Disestablishments by millennium|Jee-vunneeaghtyn rere milley bleeaney}}
{{see also|Ronney:Bunneeaghtyn rere milley bleeaney}}
[[Ronney:Jee-vunneeaghtyn rere traa|Milley bleeaney]]
[[Ronney:Ronnaghyn rere milley bleeaney]]
[[Ronney:Jerraghyn rere milley bleeaney]]
6ufq608dvin8tlql8lnlvzehr61rzmk
Ronney:Bunneeaghtyn ayns ny 1880yn
14
37619
393740
360390
2026-10-01T23:50:37Z
MacTire02
219
ronnaghyn
393740
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1880s establishments|Bunneeaghtyn ayns ny 1880yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 80]]
[[Ronney:Toshiaghtyn ayns ny 1880yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1880]]
2nz3qj0veb77n7btfspw3pzy86z1rf8
Ronney:Bunneeaghtyn ayns ny 2010yn
14
37632
393752
380549
2026-10-02T00:12:36Z
MacTire02
219
-ronney
393752
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|2010s establishments|Bunneeaghtyn ayns ny 2010yn}}
[[Ronney:Bunneeaghtyn 'sy 21d eash| 10]]
[[Ronney:Toshiaghtyn ayns ny 2010yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|2010]]
q2apxpcsr0zdrthx1lj80w2cjajhxx0
Ronney:Bunneeaghtyn ayns ny 1510yn
14
37657
393719
349973
2026-10-01T23:41:07Z
MacTire02
219
ronnaghyn
393719
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 16oo eash| 10]]
[[Ronney:Toshiaghtyn ayns ny 1510yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1510]]
0fswqev8i4yilahv2t9xcj81yflbujs
Ronney:Bunneeaghtyn ayns ny 1920yn
14
37722
393744
381283
2026-10-01T23:51:34Z
MacTire02
219
-ronney
393744
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1920s establishments|Bunneeaghtyn ayns ny 1920yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 20]]
[[Ronney:Toshiaghtyn ayns ny 1920yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1920]]
1aec6ewex9m0ywk1ksy50ywenrin316
Ronney:Bunneeaghtyn rere mooar-rheynn
14
37748
393800
350174
2026-10-02T02:35:37Z
MacTire02
219
ronney elley
393800
wikitext
text/x-wiki
{{CategoryTOC}}
{{moir-ronney}}
{{Commons category|v|{{PAGENAME}}}}
{{Category explanation|'''bunneeaghtyn''' rere '''[[mooar-rheynn]]'''}}
{{see also|Ronney:Jee-vunneeaghtyn rere mooar-rheynn}}
[[Ronney:Bunneeaghtyn| Mooar-rheynn]]
[[Ronney:Shennaghys rere mooar-rheynn| Bunneeaghtyn]]
8z7u4vkcw72jn78yw41d16rlfys6p6j
Ronney:Bunneeaghtyn 'syn Oarpey
14
37752
393801
350178
2026-10-02T02:36:50Z
MacTire02
219
ronney elley
393801
wikitext
text/x-wiki
{{commonscat|Establishments in Europe|{{PAGENAME}}}}
[[Ronney:Shennaghys yn Oarpey]]
[[Ronney:Bunneeaghtyn rere mooar-rheynn|Oarpey]]
o3u6n6nj1tttedlo7f11vvj9fywip8j
Ronney:Bunneeaghtyn ayns Nerin
14
37754
393770
350180
2026-10-02T00:26:34Z
MacTire02
219
++
393770
wikitext
text/x-wiki
{{commonscat|Establishments in Ireland|Bunneeaghtyn ayns Nerin}}
{{see also|Ronney:Jee-vunneeaghtyn ayns Nerin}}
[[Ronney:Shennaghys Nerin]]
[[Ronney:Bunneeaghtyn 'syn Oarpey|Nerin]]
[[Ronney:Bunneeaghtyn rere çheer|Nerin]]
fqo50a3dcenu39wthw72ndd258hqo6b
Ronney:Taghyrtyn reaghit ayns Nerin
14
37758
393768
350186
2026-10-02T00:23:37Z
MacTire02
219
ronnaghyn elley
393768
wikitext
text/x-wiki
{{Commonscat|Events in Ireland|Taghyrtyn ayns Nerin}}
[[Ronney:Cultoor Nerin]]
[[Ronney:Taghyrtyn reaghit rere ard|+Nerin]]
[[Ronney:Taghyrtyn reaghit 'syn Oarpey|+]]
crae2eqbls5ch43zdwh060d07ykw84j
393769
393768
2026-10-02T00:24:53Z
MacTire02
219
MacTire02 moved page [[Ronney:Taghyrtyn ayns Nerin]] to [[Ronney:Taghyrtyn reaghit ayns Nerin]] without leaving a redirect
393768
wikitext
text/x-wiki
{{Commonscat|Events in Ireland|Taghyrtyn ayns Nerin}}
[[Ronney:Cultoor Nerin]]
[[Ronney:Taghyrtyn reaghit rere ard|+Nerin]]
[[Ronney:Taghyrtyn reaghit 'syn Oarpey|+]]
crae2eqbls5ch43zdwh060d07ykw84j
Ronney:Taghyrtyn reaghit rere ard
14
37759
393766
350187
2026-10-02T00:21:47Z
MacTire02
219
ronnaghyn elley
393766
wikitext
text/x-wiki
{{Commons category|Events by region|Taghyrtyn rere ard}}
{{moir-ronney}}
[[Ronney:Ronnaghyn rere ard]]
[[Ronney:Taghyrtyn reaghit rere boayl| Ard]]
kajgzobxyqp345q0krnkysre86ova6q
393767
393766
2026-10-02T00:21:58Z
MacTire02
219
MacTire02 moved page [[Ronney:Taghyrtyn rere ard]] to [[Ronney:Taghyrtyn reaghit rere ard]] without leaving a redirect
393766
wikitext
text/x-wiki
{{Commons category|Events by region|Taghyrtyn rere ard}}
{{moir-ronney}}
[[Ronney:Ronnaghyn rere ard]]
[[Ronney:Taghyrtyn reaghit rere boayl| Ard]]
kajgzobxyqp345q0krnkysre86ova6q
Ronney:Bunneeaghtyn ayns ny 1860yn
14
37801
393738
381264
2026-10-01T23:50:11Z
MacTire02
219
-ronney
393738
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1860s establishments|Bunneeaghtyn ayns ny 1860yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 1860yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1860]]
pxjgbxg733ntjbiwd36x1bghfys60od
Ronney:Bunneeaghtyn ayns ny 1990yn
14
37805
393750
381277
2026-10-02T00:12:15Z
MacTire02
219
-ronney
393750
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1990s establishments|Bunneeaghtyn ayns ny 1990yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 1990yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1990]]
nysrxhtszctpxyn9r8h136cy6n9ps6h
Ronney:Bunneeaghtyn ayns ny 1870yn
14
37809
393739
381507
2026-10-01T23:50:22Z
MacTire02
219
-ronney
393739
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1870s establishments|Bunneeaghtyn ayns ny 1870yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 70]]
[[Ronney:Toshiaghtyn ayns ny 1870yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1870]]
crsod041cb806zc982i6hqtcxo4n4rg
Ronney:Bunneeaghtyn ayns ny 1930yn
14
37912
393701
381282
2026-10-01T23:34:31Z
MacTire02
219
-ronney
393701
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1930s establishments|Bunneeaghtyn ayns ny 1930yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 30]]
[[Ronney:Toshiaghtyn ayns ny 1930yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1930]]
43fqwueh1bsppizxyh33prqo62gseri
Ronney:Bunneeaghtyn ayns ny 960yn
14
38001
393711
381250
2026-10-01T23:38:19Z
MacTire02
219
ronnaghyn
393711
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|960s establishments|Bunneeaghtyn ayns ny 960yn}}
[[Ronney:Bunneeaghtyn 'sy 10oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 960yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0960]]
4q0r142dxkjqzz4igg8k8sjmhext62h
Ronney:Bunneeaghtyn ayns ny 800yn
14
38006
393705
381188
2026-10-01T23:36:19Z
MacTire02
219
-ronney
393705
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|800s establishments|Bunneeaghtyn ayns ny 800yn}}
[[Ronney:Bunneeaghtyn 'sy 9oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 800yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0800]]
g99m00ywirb5l0foyabk8afu779ul58
Ronney:Bunneeaghtyn ayns ny 840yn
14
38044
393706
381390
2026-10-01T23:36:29Z
MacTire02
219
-ronney
393706
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|840s establishments|Bunneeaghtyn ayns ny 840yn}}
[[Ronney:Bunneeaghtyn 'sy 9oo eash| 40]]
[[Ronney:Toshiaghtyn ayns ny 840yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0840]]
8bt0owa1fsfpel4tvpue9w8gjldapys
Ronney:Bunneeaghtyn ayns ny 1660yn
14
38074
393725
350693
2026-10-01T23:45:33Z
MacTire02
219
ronnaghyn
393725
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1660s establishments|Bunneeaghtyn ayns ny 1660yn}}
[[Ronney:Bunneeaghtyn 'sy 17oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 1660yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1660]]
sqton0j6pawuywm0hihkqblz5m6u9re
Ronney:Bunneeaghtyn ayns ny 1700yn
14
38087
393726
350714
2026-10-01T23:46:00Z
MacTire02
219
ronnaghyn
393726
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1700s establishments|Bunneeaghtyn ayns ny 1700yn}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1700yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1700]]
dfka9yryhe1i0wli0xs6pqjzio9xq4j
Ronney:Bunneeaghtyn ayns ny 1540yn
14
38154
393721
350845
2026-10-01T23:41:40Z
MacTire02
219
ronnaghyn
393721
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1540s establishments|Bunneeaghtyn ayns ny 1540yn}}
[[Ronney:Bunneeaghtyn 'sy 16oo eash| 40]]
[[Ronney:Toshiaghtyn ayns ny 1540yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1540]]
9fodeinqgdv19w1zwnl244vm5k50nbj
Ronney:Bunneeaghtyn ayns ny 880yn
14
38170
393708
350869
2026-10-01T23:37:07Z
MacTire02
219
ronnaghyn
393708
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|880s establishments|Bunneeaghtyn ayns ny 880yn}}
[[Ronney:Bunneeaghtyn 'sy 9oo eash|80]]
[[Ronney:Toshiaghtyn ayns ny 880yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0880]]
ovqek5itoett0hefc8cksmp647vixqj
Ronney:Bunneeaghtyn ayns ny 1320yn
14
38191
393682
350912
2026-10-01T15:16:19Z
MacTire02
219
+catnav
393682
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1320s establishments|Bunneeaghtyn ayns ny 1320yn}}
[[Ronney:Bunneeaghtyn 'sy 14oo eash| 20]]
[[Ronney:Toshiaghtyn ayns ny 1320yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1320]]
[[Ronney:Taghyrtyn ayns ny 1320yn]]
3eoxk6reyk09a3x8wlrdd5kb43fwk2b
393716
393682
2026-10-01T23:40:10Z
MacTire02
219
-ronney
393716
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1320s establishments|Bunneeaghtyn ayns ny 1320yn}}
[[Ronney:Bunneeaghtyn 'sy 14oo eash| 20]]
[[Ronney:Toshiaghtyn ayns ny 1320yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1320]]
0lq6m3o7i5s7z42nsqe6yax5nrl8dkz
Ronney:Bunneeaghtyn ayns ny 1890yn
14
38304
393741
380689
2026-10-01T23:50:49Z
MacTire02
219
-ronney
393741
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 1890yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1890]]
hbw18h5wicv4x6sm9zymzoizv3ofk6s
Ronney:Bunneeaghtyn ayns ny 1520yn
14
38319
393720
351247
2026-10-01T23:41:21Z
MacTire02
219
ronnaghyn
393720
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 16oo eash| 20]]
[[Ronney:Toshiaghtyn ayns ny 1520yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1520]]
1omho8ou6nvn4he3if9txax3cmwwgp6
Ronney:Bunneeaghtyn ayns ny 1780yn
14
38329
393730
351262
2026-10-01T23:47:06Z
MacTire02
219
ronnaghyn
393730
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 80]]
[[Ronney:Toshiaghtyn ayns ny 1780yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1780]]
hyiopsvxbeyjupa4g8l61op7hmrtm63
Ronney:Bunneeaghtyn ayns ny 1430yn
14
38588
393717
351841
2026-10-01T23:40:32Z
MacTire02
219
ronnaghyn
393717
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1430s establishments|Bunneeaghtyn ayns ny 1430yn}}
[[Ronney:Bunneeaghtyn 'sy 15oo eash| 30]]
[[Ronney:Toshiaghtyn ayns ny 1430yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1430]]
tbjeql6f2pevk4mr2m3ylw96o60k188
Ronney:Bunneeaghtyn ayns ny 1810yn
14
38601
393733
380936
2026-10-01T23:48:43Z
MacTire02
219
-ronney
393733
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1810s establishments|Bunneeaghtyn ayns ny 1810yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 10]]
[[Ronney:Toshiaghtyn ayns ny 1810yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1810]]
gh7srpqk5vzs32x7ihd9q4ksnfngi17
Ronney:Greesaghtyn ayns ny 1860yn
14
38609
393688
351886
2026-10-01T15:42:42Z
MacTire02
219
+catnav
393688
wikitext
text/x-wiki
{{category series navigation}}
{{Commons category|1860s introductions|Greesaghtyn ayns ny 1860yn}}
[[Ronney:Toshiaghtyn ayns ny 1860yn]]
[[Ronney:Greesaghtyn rere jeihaght|1860]]
[[Ronney:Greesaghtyn 'sy 19oo eash| 60]]
[[Ronney:Taghyrtyn ayns ny 1860yn]]
d4ikocvvc8x7npuuqyhksvo3udi4hff
393753
393688
2026-10-02T00:14:35Z
MacTire02
219
-ronney
393753
wikitext
text/x-wiki
{{category series navigation}}
{{Commons category|1860s introductions|Greesaghtyn ayns ny 1860yn}}
[[Ronney:Toshiaghtyn ayns ny 1860yn]]
[[Ronney:Greesaghtyn rere jeihaght|1860]]
[[Ronney:Greesaghtyn 'sy 19oo eash| 60]]
5ca4sattxea82yguzhlp6w4yp9uigq3
Ronney:Greesaghtyn rere milley bleeaney
14
38613
393761
351890
2026-10-02T00:18:35Z
MacTire02
219
-ronney
393761
wikitext
text/x-wiki
{{Commonscat|Introductions by millennium|Greesaghtyn rere milley bleeaney}}
{{moir-ronney}}
[[Ronney:Greesaghtyn rere traa|Milley bleeaney]]
[[Ronney:Toshiaghtyn rere milley bleeaney]]
5avaq93m1dioyd6oj1wczudnsr7mcsu
Ronney:Streeughyn ayns ny 1930yn
14
38708
393700
380773
2026-10-01T23:34:18Z
MacTire02
219
-ronney
393700
wikitext
text/x-wiki
{{category series navigation}}
{{Commons category|1930s conflicts|Streeughyn ayns ny 1930yn}}
[[Ronney:Streeughyn 'sy 20oo eash rere jeihaght| 30]]
[[Ronney:Shennaghys caggee ayns ny 1930yn]]
[[Ronney:Streeughyn rere jeihaght|1930]]
8pbukiep7drgh6jowe8pvhhdx4hgo4y
Ronney:Streeughyn rere jeihaght
14
38709
393755
352077
2026-10-02T00:15:32Z
MacTire02
219
-ronney
393755
wikitext
text/x-wiki
{{CategoryTOC}}
[[Ronney:Streeughyn rere traa| Jeihaght]]
[[Ronney:Ronnaghyn rere jeihaght]]
110gh61jixgrm791261pz32rav3eny0
Ronney:Cron-oaylleeaght chaggaghyn
14
38713
393803
383096
2026-10-02T02:40:50Z
MacTire02
219
-ronney
393803
wikitext
text/x-wiki
[[Ronney:Caggaghyn]]
[[Ronney:Cron-oaylleeaght y chaggey|:]]
[[Ronney:Linnaghyn-traa caggee]]
awgk43y92zqtg1ta8jiuhwdr51s7ps3
Ronney:Streeughyn rere eash
14
38734
393759
352109
2026-10-02T00:17:42Z
MacTire02
219
-ronney
393759
wikitext
text/x-wiki
{{moir-ronney}}
{{Commons category|Conflicts by century|Streeughyn rere eash}}
[[Ronney:Streeughyn rere traa| eash]]
[[Ronney:Craghyn laue-jeant rere eash]]
18skxamgfwtdz68566kko4pkvtu7y9k
Ronney:Streeughyn ayns ny 1940yn
14
38745
393754
380771
2026-10-02T00:15:12Z
MacTire02
219
-ronney
393754
wikitext
text/x-wiki
{{category series navigation}}
{{Commons category|1940s conflicts|Streeughyn ayns ny 1940yn}}
[[Ronney:Streeughyn 'sy 20oo eash rere jeihaght| 40]]
[[Ronney:Shennaghys caggee ayns ny 1940yn]]
[[Ronney:Streeughyn rere jeihaght|1940]]
p16wqlen9wi9ulj8hhmj38ov0oe4vnx
Ronney:Bunneeaghtyn ayns ny 930yn
14
38784
393710
352168
2026-10-01T23:38:04Z
MacTire02
219
ronnaghyn
393710
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|930s establishments|Bunneeaghtyn ayns ny 930yn}}
[[Ronney:Bunneeaghtyn 'sy 10oo eash| 30]]
[[Ronney:Toshiaghtyn ayns ny 930yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0930]]
se4b1m5ydgdnp66mdrruk6ia8i8lvwm
Ronney:Bunneeaghtyn ayns ny 750yn
14
38805
393704
381231
2026-10-01T23:36:09Z
MacTire02
219
-ronney
393704
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|750s establishments|Bunneeaghtyn ayns ny 750yn}}
[[Ronney:Bunneeaghtyn 'sy 8oo eash| 50]]
[[Ronney:Toshiaghtyn ayns ny 750yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0750]]
ierz3mgk6gxydbrb2oi02qkhpx3yzjs
Ronney:Bunneeaghtyn ayns ny 1790yn
14
38812
393731
352205
2026-10-01T23:47:30Z
MacTire02
219
ronnaghyn
393731
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 1790yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1790]]
pmo2we5s53injal8xzpk855dv4r6lop
Ronney:Bunneeaghtyn ayns ny 1840yn
14
38816
393736
360392
2026-10-01T23:49:37Z
MacTire02
219
ronnaghyn
393736
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1840s establishments|Bunneeaghtyn ayns ny 1840yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 40]]
[[Ronney:Toshiaghtyn ayns ny 1840yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1840]]
jclfo3yiovpf66zv57ls8646bjq78s8
Ronney:Bunneeaghtyn ayns ny 1960yn
14
39547
393747
381280
2026-10-02T00:11:34Z
MacTire02
219
-ronney
393747
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1960s establishments|Bunneeaghtyn ayns ny 1960yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 1960yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1960]]
4a5ua0agfnufeqerovsth13wdtzkcgp
Ronney:Bunneeaghtyn ayns ny 1980yn
14
39555
393749
381278
2026-10-02T00:11:58Z
MacTire02
219
-ronney
393749
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1980s establishments|Bunneeaghtyn ayns ny 1980yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 80]]
[[Ronney:Toshiaghtyn ayns ny 1980yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1980]]
4trjvz4cpecybhm0isscy8p2uzfk0rn
Ronney:Bunneeaghtyn ayns ny 1970yn
14
39575
393748
381279
2026-10-02T00:11:48Z
MacTire02
219
-ronney
393748
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1970s establishments|Bunneeaghtyn ayns ny 1970yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 70]]
[[Ronney:Toshiaghtyn ayns ny 1970yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1970]]
e977es0j9wuodezo23jhv3hd0pc35dv
Ronney:Bunneeaghtyn ayns ny 1820yn
14
40048
393734
356453
2026-10-01T23:49:04Z
MacTire02
219
ronnaghyn
393734
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1820s establishments|Bunneeaghtyn ayns ny 1820yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 20]]
[[Ronney:Toshiaghtyn ayns ny 1820yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1820]]
0nae1zgvgsyappvjf8b1i0a2ko3m8p4
Ronney:Bunneeaghtyn ayns ny 1950yn
14
40373
393746
381281
2026-10-02T00:11:18Z
MacTire02
219
-ronney
393746
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1950s establishments|Bunneeaghtyn ayns ny 1950yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 50]]
[[Ronney:Toshiaghtyn ayns ny 1950yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1950]]
2m0s4fmpdfxe36g0vqiobt0xjis7jul
Ronney:Bunneeaghtyn ayns ny 1500yn
14
40392
393718
357761
2026-10-01T23:40:51Z
MacTire02
219
ronnaghyn
393718
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1500s establishments|Bunneeaghtyn ayns ny 1500yn}}
[[Ronney:Bunneeaghtyn 'sy 16oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1500yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1500]]
4i49y190vrbwp7kxhhd5yzpo00kqjg7
Ronney:Bunneeaghtyn ayns ny 1900yn
14
40490
393742
381285
2026-10-01T23:51:01Z
MacTire02
219
-ronney
393742
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1900s establishments|Bunneeaghtyn ayns ny 1900yn}}
[[Ronney:Bunneeaghtyn 'sy 20oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1900yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1900]]
rjqrx3aep38kwzw6zjj0bcuthugi6dm
Ronney:Bunneeaghtyn ayns ny 1740yn
14
40505
393727
358213
2026-10-01T23:46:16Z
MacTire02
219
ronnaghyn
393727
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1740s establishments|Bunneeaghtyn ayns ny 1740yn}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 40]]
[[Ronney:Toshiaghtyn ayns ny 1740yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1740]]
dyzdub814ldlh9x4bqza4bg0vnfqi41
Ronney:Bunneeaghtyn ayns ny 1560yn
14
40561
393722
358380
2026-10-01T23:42:03Z
MacTire02
219
ronnaghyn
393722
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1560s establishments|Bunneeaghtyn ayns ny 1560yn}}
[[Ronney:Bunneeaghtyn 'sy 16oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 1560yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1560]]
9gug58xmprjm450ub1ifvr4yl5x9xwx
Ronney:Bunneeaghtyn ayns ny 1760yn
14
40571
393728
358404
2026-10-01T23:46:30Z
MacTire02
219
ronnaghyn
393728
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1760s establishments|Bunneeaghtyn ayns ny 1760yn}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 1760yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1760]]
i2rvrf8x5od0e7x1t3cy6g5llh64t5w
Ronney:Bunneeaghtyn ayns ny 1270yn
14
40609
393684
358558
2026-10-01T15:18:17Z
MacTire02
219
+catnav
393684
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1270s establishments|Bunneeaghtyn ayns ny 1270yn}}
[[Ronney:Bunneeaghtyn 'sy 13oo eash| 70]]
[[Ronney:Toshiaghtyn ayns ny 1270yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1270]]
[[Ronney:Taghyrtyn ayns ny 1270yn]]
6xm1z1obkxmscp62mgi05df1b9n1mfy
393714
393684
2026-10-01T23:39:27Z
MacTire02
219
-ronney
393714
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1270s establishments|Bunneeaghtyn ayns ny 1270yn}}
[[Ronney:Bunneeaghtyn 'sy 13oo eash| 70]]
[[Ronney:Toshiaghtyn ayns ny 1270yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1270]]
t1d1djqxmhkgqy0hpgt0uv7so6n8h2s
Ronney:Bunneeaghtyn ayns ny 680yn
14
40618
393703
381221
2026-10-01T23:35:58Z
MacTire02
219
-ronney
393703
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|680s establishments|Bunneeaghtyn ayns ny 680yn}}
[[Ronney:Bunneeaghtyn 'sy 7oo eash| 80]]
[[Ronney:Toshiaghtyn ayns ny 680yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0680]]
byy00e4s9wgfe0cxl3vtvwekrcpgck6
Ronney:Bunneeaghtyn ayns ny 1830yn
14
40630
393735
358598
2026-10-01T23:49:23Z
MacTire02
219
ronnaghyn
393735
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1830s establishments|Bunneeaghtyn ayns ny 1830yn}}
[[Ronney:Bunneeaghtyn 'sy 19oo eash| 30]]
[[Ronney:Toshiaghtyn ayns ny 1830yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1830]]
c8v6mq1tk1niipzigda8r72fogzvnfv
Ronney:Bunneeaghtyn ayns ny 1000yn
14
40644
393712
358660
2026-10-01T23:38:41Z
MacTire02
219
ronnaghyn
393712
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1000s establishments|Bunneeaghtyn ayns ny 1000yn}}
[[Ronney:Bunneeaghtyn 'sy 11d eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1000yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1000]]
iwgpmtbs0ma1lbdxh6s3aygy9jm2q90
Ronney:Bunneeaghtyn ayns ny 890yn
14
40650
393709
358671
2026-10-01T23:37:38Z
MacTire02
219
ronnaghyn
393709
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|890s establishments|Bunneeaghtyn ayns ny 890yn}}
[[Ronney:Bunneeaghtyn 'sy 9oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 890yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0890]]
45hyxheogcjfx8ynr4mkprweoik2slg
Ronney:Bunneeaghtyn ayns ny 860yn
14
40672
393707
381391
2026-10-01T23:36:40Z
MacTire02
219
-ronney
393707
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|860s establishments|Bunneeaghtyn ayns ny 860yn}}
[[Ronney:Bunneeaghtyn 'sy 9oo eash| 60]]
[[Ronney:Toshiaghtyn ayns ny 860yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0860]]
l5g713dqrp9g9fz8ud8g4c71m6owsri
Ronney:Bunneeaghtyn ayns ny 300yn
14
40743
393699
381260
2026-10-01T23:32:55Z
MacTire02
219
-ronney
393699
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|300s establishments|Bunneeaghtyn ayns ny 300yn}}
[[Ronney:Bunneeaghtyn 'sy 4oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 300yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|0300]]
ivpu79r9wru804ehtq5xhc1krmfrtzh
Ronney:Bunneeaghtyn ayns ny 1770yn
14
40775
393729
360389
2026-10-01T23:46:48Z
MacTire02
219
ronnaghyn
393729
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1770s establishments|Bunneeaghtyn ayns ny 1770yn}}
[[Ronney:Bunneeaghtyn 'sy 18oo eash| 70]]
[[Ronney:Toshiaghtyn ayns ny 1770yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1770]]
7u3552ugv06zj7r1itwpkk74c8i5wlv
Ronney:Bunneeaghtyn ayns ny 1610yn
14
40856
393723
359541
2026-10-01T23:42:40Z
MacTire02
219
ronnaghyn
393723
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1610s establishments|Bunneeaghtyn ayns ny 1610yn}}
[[Ronney:Bunneeaghtyn 'sy 17oo eash| 10]]
[[Ronney:Toshiaghtyn ayns ny 1610yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1610]]
gged1mpynrjt5cx3rp799mx6ucxve0v
Ronney:Bunneeaghtyn ayns ny 1650yn
14
40926
393698
359803
2026-10-01T23:32:13Z
MacTire02
219
-ronney
393698
wikitext
text/x-wiki
{{Commonscat|1650s establishments|Bunneeaghtyn ayns ny 1650yn}}
[[Ronney:Bunneeaghtyn 'sy 17oo eash| 50]]
[[Ronney:Toshiaghtyn ayns ny 1650yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1650]]
91nl02rpe4693873r2iw19v4umucpmr
393724
393698
2026-10-01T23:45:19Z
MacTire02
219
+clowan
393724
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1650s establishments|Bunneeaghtyn ayns ny 1650yn}}
[[Ronney:Bunneeaghtyn 'sy 17oo eash| 50]]
[[Ronney:Toshiaghtyn ayns ny 1650yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1650]]
95qujjzg6ql2tb7dnr740s2e30gok5y
Ronney:Bunneeaghtyn ayns ny 1200yn
14
41061
393713
360388
2026-10-01T23:39:06Z
MacTire02
219
ronnaghyn
393713
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1200s establishments|Bunneeaghtyn ayns ny 1200yn}}
[[Ronney:Bunneeaghtyn 'sy 13oo eash| 00]]
[[Ronney:Toshiaghtyn ayns ny 1200yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1200]]
lu3wnn0zl6hqibtkvieuudk3m3cmy5a
Ronney:Eiyrtys taghyrtyn
14
51019
393802
382797
2026-10-02T02:37:54Z
MacTire02
219
-ronney
393802
wikitext
text/x-wiki
{{CatRel|Cooishyn taghyrtyn|Eiyrtyssyn}}
[[Ronney:Eiyrtyssyn|-]]
cnajbcqcuebh2kwgdmh62a58qfob4gw
Ronney:Steatyn as thallooyn bunnit ayns ny 1290yn
14
55984
393680
2026-10-01T14:58:51Z
MacTire02
219
ronney noa
393680
wikitext
text/x-wiki
{{Stateestdecade|12|9|13oo}}
ry8tlmpd2cn5drzok12ghm8gz0ob7pj
Ronney:Bunneeaghtyn ayns ny 1290yn
14
55985
393681
2026-10-01T15:00:40Z
MacTire02
219
r
393681
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1290s establishments|Bunneeaghtyn ayns ny 1290yn}}
[[Ronney:Bunneeaghtyn 'sy 13oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 1290yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1290]]
[[Ronney:Taghyrtyn ayns ny 1290yn]]
79ao1l891ws38gnp0xz5lelfscqwmkt
393715
393681
2026-10-01T23:39:44Z
MacTire02
219
-ronney
393715
wikitext
text/x-wiki
{{category series navigation}}
{{Commonscat|1290s establishments|Bunneeaghtyn ayns ny 1290yn}}
[[Ronney:Bunneeaghtyn 'sy 13oo eash| 90]]
[[Ronney:Toshiaghtyn ayns ny 1290yn]]
[[Ronney:Bunneeaghtyn rere jeihaght|1290]]
k4vt54r6d6tykh84zfh8rc5cf7hg5lq
Ronney:Artyn lesh teks ayns Montenegrish
14
55991
393691
2026-10-01T21:32:06Z
MacTire02
219
ronney noa
393691
wikitext
text/x-wiki
{{Non-Manx-language text category}}
ftm4vo8zcojmgp8zf3wygcgvg0ztoi7
UTC±00:00
0
55992
393693
2026-10-01T21:35:25Z
MacTire02
219
MacTire02 moved page [[UTC±00:00]] to [[UTC+00:00]]: rere ny stundayrtyn
393693
wikitext
text/x-wiki
#REDIRECT [[UTC+00:00]]
p70j3m213hg338610uwcrxiaivwfqz5
Ronney:Taghyrtyn reaghit rere croghane y Reeriaght Unnaneysit
14
55994
393781
2026-10-02T00:37:32Z
MacTire02
219
ronney noa
393781
wikitext
text/x-wiki
[[Ronney:Cultoor rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Shennaghys rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn reaghit 'sy Reeriaght Unnaneysit|^Croghane]]
[[Ronney:Taghyrtyn reaghit rere croghane|*Reeriaght Unnaneysit]]
lp414orgccvpk61kbejmedel2z4obi6
393793
393781
2026-10-02T02:24:16Z
MacTire02
219
catsort
393793
wikitext
text/x-wiki
[[Ronney:Cultoor rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Shennaghys rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn reaghit 'sy Reeriaght Unnaneysit|,Croghane]]
[[Ronney:Taghyrtyn reaghit rere croghane|*Reeriaght Unnaneysit]]
4k584hsnxshokg8fgit71isho73w7hq
Ronney:Taghyrtyn reaghit rere croghane
14
55995
393782
2026-10-02T00:38:56Z
MacTire02
219
ronney elley
393782
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Taghyrtyn reaghit rere çheer|-Croghane]]
[[Ronney:Cultoor rere croghane| Taghyrtyn reaghit]]
oq1ljhsetkb0dp7q87otqnstp1m448i
Ronney:Feaillaghyn 'sy Reeriaght Unnaneysit rere ard
14
55996
393784
2026-10-02T00:42:38Z
MacTire02
219
ronney noa
393784
wikitext
text/x-wiki
[[Ronney:Feaillaghyn 'sy Reeriaght Unnaneysit| Ard]]
[[Ronney:Ardjyn y Reeriaght Unnaneysit]]
[[Ronney:Feaillaghyn rere çheer as ard|Reeriaght Unnaneysit]]
[[Ronney:Feaillaghyn 'syn Oarpey rere çheer as ard|Reeriaght Unnaneysit]]
0a3gk0orqz451bpqoq14quzkafjlrja
Ronney:Feaillaghyn rere çheer as ard
14
55997
393785
2026-10-02T00:43:51Z
MacTire02
219
ronney noa
393785
wikitext
text/x-wiki
{{CatAutoTOC}}
[[Ronney:Feaillaghyn rere çheer| Ard]]
[[Ronney:Feaillaghyn rere ard|+Cheer]]
a7f2jeidaktd5jbbfjqysiz5gn13v33
Ronney:Feaillaghyn rere ard
14
55998
393786
2026-10-02T01:06:02Z
MacTire02
219
ronney noa
393786
wikitext
text/x-wiki
{{Commons category|Festivals by region|Feaillaghyn rere ard}}
{{moir-ronney}}
[[Ronney:Feaillaghyn| Ard]]
[[Ronney:Eunysseyrys rere ard| Feaillaghyn]]
[[Ronney:Taghyrtyn reaghit rere ard]]
9k4jqg61pat5drtwrn8iwxxu2mrwzbm
Ronney:Feaillaghyn 'syn Oarpey rere çheer as ard
14
55999
393787
2026-10-02T01:08:10Z
MacTire02
219
ronney noa
393787
wikitext
text/x-wiki
{{CatAutoTOC}}
[[Ronney:Feaillaghyn 'syn Oarpey rere çheer|+Ard]]
[[Ronney:Feaillaghyn 'syn Oarpey rere ard|+Cheer]]
[[Ronney:Ardjyn yn Oarpey rere çheer|+Feaillaghyn]]
bs1y0j6f6njm1hioulewfpggde4ox1d
Ronney:Feaillaghyn 'syn Oarpey rere ard
14
56000
393788
2026-10-02T01:09:23Z
MacTire02
219
ronney noa
393788
wikitext
text/x-wiki
[[Ronney:Feaillaghyn 'syn Oarpey| Ard]]
[[Ronney:Feaillaghyn rere mooar-rheynn as ard|Oarpey]]
[[Ronney:Cultoor yn Oarpey rere ard| Feaillaghyn]]
gf01s04olox8p28zshdgy3n4krebt07
Ronney:Feaillaghyn rere mooar-rheynn as ard
14
56001
393789
2026-10-02T01:10:54Z
MacTire02
219
ronney noa
393789
wikitext
text/x-wiki
{{CatAutoTOC}}
{{moir-ronney}}
[[Ronney:Feaillaghyn rere mooar-rheynn| Ard]]
[[Ronney:Feaillaghyn rere ard|+Mooar-rheynn]]
[[Ronney:Ardjyn rere mooar-rheynn|+]]
bq6apojx7lvtavrimmzjk802trgx07u
Ronney:Feaillaghyn 'sy Reeriaght Unnaneysit
14
56002
393790
2026-10-02T01:13:11Z
MacTire02
219
ronney noa
393790
wikitext
text/x-wiki
{{Commons category|Festivals in the United Kingdom|Feaillaghyn 'sy Reeriaght Unnaneysit}}
[[Ronney:Taghyrtyn eunysseyrys 'sy Reeriaght Unnaneysit]]
[[Ronney:Feaillaghyn rere çheer|Reeriaght Unnaneysit]]
[[Ronney:Feaillaghyn 'syn Oarpey rere çheer|Reeriaght Unnaneysit]]
7mbj5mk75y8rmcgz1c0pe253jv4asps
Ronney:Taghyrtyn eunysseyrys 'sy Reeriaght Unnaneysit
14
56003
393791
2026-10-02T02:21:50Z
MacTire02
219
ronney noa
393791
wikitext
text/x-wiki
[[Ronney:Eunysseyrys 'sy Reeriaght Unnaneysit]]
[[Ronney:Cleaynyn turryssagh 'sy Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn eunysseyrys rere çheer|Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn reaghit 'sy Reeriaght Unnaneysit|Eunysseyrys]]
[[Ronney:Taghyrtyn eunysseyrys 'syn Oarpey rere çheer|Reeriaght Unnaneysit]]
i058g3sloq5hz201a28afi6k1u0gvf7
Ronney:Taghyrtyn reaghit 'sy Reeriaght Unnaneysit
14
56004
393792
2026-10-02T02:23:42Z
MacTire02
219
ronney noa
393792
wikitext
text/x-wiki
{{Commons category|Events in the United Kingdom|Taghyrtyn 'sy Reeriaght Unnaneysit}}
[[Ronney:Cultoor y Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn reaghit 'syn Oarpey rere çheer|Reeriaght Unnaneysit]]
[[Ronney:Taghyrtyn reaghit rere çheer|Reeriaght Unnaneysit]]
htivo6bg25eviwkrfzp2rya84z1p269
Ronney:Taghyrtyn eunysseyrys ayns Mannin
14
56005
393794
2026-10-02T02:27:00Z
MacTire02
219
ronney noa
393794
wikitext
text/x-wiki
[[Ronney:Taghyrtyn eunysseyrys rere croghane y Reeriaght Unnaneysit|Mannin]]
[[Ronney:Taghyrtyn reaghit ayns Mannin|Eunysseyrys]]
[[Ronney:Eunysseyrys ayns Mannin]]
[[Ronney:Cleaynyn turryssagh ayns Mannin]]
[[Ronney:Taghrtyn eunysseyrys 'syn Oarpey rere çheer|+Mannin]]
1nfg16ivkvbwzjojrapps2r6n0440h8
Ronney:Taghyrtyn eunysseyrys rere croghane y Reeriaght Unnaneysit
14
56006
393795
2026-10-02T02:30:19Z
MacTire02
219
ronney noa
393795
wikitext
text/x-wiki
[[Ronney:Taghyrtyn eunysseyrys 'sy Reeriaght Unnaneysit|,]]
[[Ronney:Taghyrtyn reaghit rere croghane y Reeriaght Unnaneysit| Eunysseyrys]]
[[Ronney:Eunysseyrys rere croghane y Reeriaght Unnaneysit|+Taghyrtyn]]
[[Ronney:Taghyrtyn eunysseyrys rere croghane|-]]
[[Ronney:Cleaynyn turryssagh rere croghane y Reeriaght Unnaneysit| Taghyrtyn eunysseyrys]]
oymr79t7j8c0o7bpl88gm2vs9ggoftx
393796
393795
2026-10-02T02:30:56Z
MacTire02
219
catsort
393796
wikitext
text/x-wiki
[[Ronney:Taghyrtyn eunysseyrys 'sy Reeriaght Unnaneysit|,]]
[[Ronney:Taghyrtyn reaghit rere croghane y Reeriaght Unnaneysit| Eunysseyrys]]
[[Ronney:Eunysseyrys rere croghane y Reeriaght Unnaneysit|+Taghyrtyn]]
[[Ronney:Taghyrtyn eunysseyrys rere croghane|-]]
[[Ronney:Cleaynyn turryssagh rere croghane y Reeriaght Unnaneysit|*Taghyrtyn eunysseyrys]]
4t1toezkykvmf00g8vsdzll370hgy12
Ronney:Eunysseyrys rere croghane y Reeriaght Unnaneysit
14
56007
393797
2026-10-02T02:32:35Z
MacTire02
219
ronney noa
393797
wikitext
text/x-wiki
[[Ronney:Eunysseyrys 'sy Reeriaght Unnaneysit|.croghane]]
[[Ronne:Cultoor rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Eunysseyrys rere croghane|-Reeriaght Unnaneysit]]
lgg99pujx8u8zkrmx4k7lyszks1sr7q
393798
393797
2026-10-02T02:32:47Z
MacTire02
219
lettyraghey
393798
wikitext
text/x-wiki
[[Ronney:Eunysseyrys 'sy Reeriaght Unnaneysit|.croghane]]
[[Ronney:Cultoor rere croghane y Reeriaght Unnaneysit]]
[[Ronney:Eunysseyrys rere croghane|-Reeriaght Unnaneysit]]
m5msyp4sqsyhi0fgabourunkb2o3y65
Ronney:Eunysseyrys rere croghane
14
56008
393799
2026-10-02T02:33:55Z
MacTire02
219
ronney noa
393799
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Eunysseyrys rere çheer|/Croghane]]
[[Ronney:Cultoor rere croghane| Eunysseyrys]]
t10sg9hu3ulx4sdvkcam1qdx86rpn7n
Ronney:Kied reddyn
14
56009
393806
2026-10-02T02:45:09Z
MacTire02
219
ronney noa
393806
wikitext
text/x-wiki
[[Ronney:Sur-cheimyn traa]]
[[Ronney:1 (earroo)]]
py6sq5f0i54z64o6i2yrgcd5mh60qwg
Ronney:Sur-cheimyn traa
14
56010
393807
2026-10-02T02:45:52Z
MacTire02
219
ronney noa
393807
wikitext
text/x-wiki
[[Ronney:Traa]]
[[Ronney:Sur-cheimyn|Traa]]
n0ar1ilrxpw9im8b008wwej67b86ybc
Ronney:Sur-cheimyn
14
56011
393808
2026-10-02T02:48:34Z
MacTire02
219
ronney noa
393808
wikitext
text/x-wiki
{{Commonscat|Superlatives|Sur-cheimyn}}
{{Cat main}}
[[Ronney:Rhenkalyn]]
ce45fwlo7a4j0u4nyrni7b7l6cgf8wr
Ronney:Rhenkalyn
14
56012
393809
2026-10-02T02:53:06Z
MacTire02
219
ronney noa
393809
wikitext
text/x-wiki
{{cat main|Rhenkal}}
{{cat see also|Recortyssyn}}
{{distinguish|Ronney:Rheynkyn}}
{{commons category|Rankings|Rhenkalyn}}
[[Ronney:Cosoylaght (maddaght)]]
[[Ronney:Earrooyn ayndagh]]
[[Ronney:Staddyssaght neu-pharameadragh]]
[[Ronney:Oardaghey]]
[[Ronney:Coryssyn raatys|*]]
[[Ronney:Sorçhyn fysseree staddyssaghtoil]]
d9rh24xlhfuq5j0s9wspphwujjejj0o
393810
393809
2026-10-02T02:54:10Z
MacTire02
219
lettyraghey
393810
wikitext
text/x-wiki
{{cat main|Rhenkal}}
{{cat see also|Recortyssyn}}
{{distinguish|Ronney:Rhenkyn}}
{{commons category|Rankings|Rhenkalyn}}
[[Ronney:Cosoylaght (maddaght)]]
[[Ronney:Earrooyn ayndagh]]
[[Ronney:Staddyssaght neu-pharameadragh]]
[[Ronney:Oardaghey]]
[[Ronney:Coryssyn raatys|*]]
[[Ronney:Sorçhyn fysseree staddyssaghtoil]]
g55d33hyoto2yuqyj1zwnuqbzu3igjx
Ronney:Sorçhyn fysseree staddyssaghtoil
14
56013
393811
2026-10-02T02:54:52Z
MacTire02
219
ronney noa
393811
wikitext
text/x-wiki
{{Commons category|Statistical data types|Sorçhyn fysseree staddyssaghtoil}}
[[Ronney:Fysseree staddyssaghtoil|Sorchyn]]
aulknnic5taztrrxerti1oue506vqja