Wikipedia
gvwiki
https://gv.wikipedia.org/wiki/Ard-ghuillag
MediaWiki 1.48.0-wmf.3
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
Dia Mirza
0
4724
396353
346900
2026-11-06T12:12:39Z
CommonsDelinker
117
Goaill magh Dia_Mirza_in_grace_the_IIFA_2020_press_conference_(5).jpg, scryss Moheen eh veih'n Chadjinaght by chyndagh rish y chooish shoh: Unused and implausible [[:c:COM:REDIRECT|redirect]] ([[:c:COM:CSD#G2|G2]]): File:Dia Mirza in grace the IIFA 2020 p
396353
wikitext
text/x-wiki
{{WD Kishtey Fys Dooinney
| ennym = Dia Mirza<br />दिया मिर्ज़ा
| jalloo =
| fo-heidyl = Dia Mirza ayns 2020
| ennym_ruggyr = Dia Handrick
| date_ruggyr = {{date ruggyr|1981|12|9|df=y}}
| boayl_ruggyr = [[Hyderabad]], [[Andhra Pradesh]] (jiu [[Telangana]]), yn Injey
| ashoonaght = [[Injinee|Injinagh]]
}}
Ta '''Dia Mirza''' ny '''Diya Mirza Handrich''' ([[Hindish]]: दिया मिर्ज़ा) ny ben-chloieder fillym Injinagh. V'ee ruggit ayns [[Hyderabad]], [[Andhra Pradesh]] er 9 Mee ny Nollick 1981.
== Kianglaghyn magh ==
* {{IMDb name|id=1069850|name=Dia Mirza}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Mirza, Dia}}
{{bun}}
[[Ronney:Ruggyryn 'sy vlein 1981]]
[[Ronney:Feallee vio]]
[[Ronney:Aghteyryn fillym bwoirrin Injinagh]]
[[Ronney:Injinee jeh sluight Germaanagh]]
[[Ronney:Feallee ass Hyderabad]]
[[Ronney:Feallee ass Andhra Pradesh]]
[[Ronney:Gienteyderyn fillym Injinagh]]
[[Ronney:Craishteyderyn bwoirrin Injinagh]]
[[Ronney:Co-streeuderyn tostyl aalid Injinagh]]
[[Ronney:Cosneyderyn Femina Miss India]]
[[Ronney:Aghteyryn bwoirrin ayns scannaneaght y Hindish]]
[[Ronney:Aghteyryn bwoirrin ayns scannaneaght y Vengaalish]]
[[Ronney:Injinee jeh sluight Germaanagh]]
[[Ronney:Bengaalee]]
[[Ronney:Craishteyderyn ass Hyderabad]]
[[Ronney:Aghteyryn ass Hyderabad]]
[[Ronney:Gienteyderyn fillym bwoirrin Injinagh]]
[[Ronney:Gienteyderyn fillym ass Hyderabad]]
[[Ronney:Delleyderyn bwoirrin Injinagh]]
[[Ronney:Delleyderyn ass Andhra Pradesh]]
[[Ronney:Cosneyderyn Miss Asia Pacific International]]
[[Ronney:Ambasseydeyryn jeih-aigney ny h-Ashoonyn Unnaneysit]]
ryjfquhnztb58fpupuhld761z3ahzw2
396357
396353
2026-11-06T13:00:24Z
MacTire02
219
--
396357
wikitext
text/x-wiki
{{WD Kishtey Fys Dooinney
| ennym = Dia Mirza<br />दिया मिर्ज़ा
| jalloo =
| fo-heidyl =
| ennym_ruggyr = Dia Handrick
| date_ruggyr = {{date ruggyr|1981|12|9|df=y}}
| boayl_ruggyr = [[Hyderabad]], [[Andhra Pradesh]] (jiu [[Telangana]]), yn Injey
| ashoonaght = [[Injinee|Injinagh]]
}}
Ta '''Dia Mirza''' ny '''Diya Mirza Handrich''' ([[Hindish]]: दिया मिर्ज़ा) ny ben-chloieder fillym Injinagh. V'ee ruggit ayns [[Hyderabad]], [[Andhra Pradesh]] er 9 Mee ny Nollick 1981.
== Kianglaghyn magh ==
* {{IMDb name|id=1069850|name=Dia Mirza}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Mirza, Dia}}
{{bun}}
[[Ronney:Ruggyryn 'sy vlein 1981]]
[[Ronney:Feallee vio]]
[[Ronney:Aghteyryn fillym bwoirrin Injinagh]]
[[Ronney:Injinee jeh sluight Germaanagh]]
[[Ronney:Feallee ass Hyderabad]]
[[Ronney:Feallee ass Andhra Pradesh]]
[[Ronney:Gienteyderyn fillym Injinagh]]
[[Ronney:Craishteyderyn bwoirrin Injinagh]]
[[Ronney:Co-streeuderyn tostyl aalid Injinagh]]
[[Ronney:Cosneyderyn Femina Miss India]]
[[Ronney:Aghteyryn bwoirrin ayns scannaneaght y Hindish]]
[[Ronney:Aghteyryn bwoirrin ayns scannaneaght y Vengaalish]]
[[Ronney:Injinee jeh sluight Germaanagh]]
[[Ronney:Bengaalee]]
[[Ronney:Craishteyderyn ass Hyderabad]]
[[Ronney:Aghteyryn ass Hyderabad]]
[[Ronney:Gienteyderyn fillym bwoirrin Injinagh]]
[[Ronney:Gienteyderyn fillym ass Hyderabad]]
[[Ronney:Delleyderyn bwoirrin Injinagh]]
[[Ronney:Delleyderyn ass Andhra Pradesh]]
[[Ronney:Cosneyderyn Miss Asia Pacific International]]
[[Ronney:Ambasseydeyryn jeih-aigney ny h-Ashoonyn Unnaneysit]]
inpacsmedu4pqg2k1x7dgnbrmjnii1h
Mwaagh slieau
0
12781
396434
322497
2026-11-06T17:19:00Z
MacTire02
219
ronnaghyn elley
396434
wikitext
text/x-wiki
{{Kishtey fys baagh
| daah = #D3D3A4
| ennym = Mwaagh slieau
| jalloo = Mountain Hare Scotland.jpg
| lheead_jalloo = 210px
| fo-heidyl_jalloo= Mwaagh slieau lesh y chlooie houree er
| reeriaght = [[Animalia]]
| phylum = [[Chordata]]
| rang = [[Sheeintagh|Mammalia]]
| oardagh = [[Lagomorpha]]
| kynney = [[Leporidae]]
| genus = ''[[Mwaagh|Lepus]]''
| dooie = '''''L. timidus'''''
| daaennymagh = ''Lepus timidus''
| imraa_daaennymagh = [[Carolus Linnaeus|L.]], 1758
}}
Ta'n '''mwaagh slieau''' ny yn '''mwaagh Yernagh''' (''Lepus timidus'') ny [[mwaagh|waagh]] ta cormit rish oayldyn sleitagh as poullagh. T'eh ry-akin veih [[Fennoscandia]] gys [[Yn Çhibbeyr|y Çhibbeyr]] hiar; ayns bishaghey rish shen, ta possanyn anerit ry-akin ayns [[ny Beinnyn Alpagh]], ayns [[Nerin]], 'sy [[Yn Pholynn|Pholynn]], 'sy [[Reeriaght Unnaneysit]] as ayns [[Hokkaidō]]. T'eh er ny ve currit stiagh ayns [[Shetlynn]] as [[Ellanyn ny Geyrragh]]. Foddee mwaagh slieau aase gys 45-65 kentimedaryn (18-26 oar) er lhiurid as gys 2-3 kilogramyn (4.4-6.6 lb) er trimmid, as dy cadjin, ta ny mwaaee woirrinagh ny s'trimmey na ny mwaaee 'irrynagh.<ref name="ARKive">{{cite web |url=http://www.arkive.org/mountain-hare/lepus-timidus/ |title=Mountain Hare |publisher=[[ARKive]] |accessdate=28 Jerrey Geuree, 2010 |language=Baarle |archivedate=2010-03-28 |archiveurl=https://web.archive.org/web/20100328144826/http://www.arkive.org/mountain-hare/lepus-timidus/ }}</ref>.
== Imraaghyn ==
{{rolleyimraaghyn}}
{{gurneil eaghtyrys}}
{{bun}}
[[Ronney:Mwaaee|Slieau]]
[[Ronney:Sheeintee yn Aishey]]
[[Ronney:Sheeintee yn Oarpey]]
[[Ronney:Sheeintee yn Çheen]]
[[Ronney:Sheeintee yn Çhapaan]]
[[Ronney:Sheeintee yn Aishey Veanagh]]
[[Ronney:Sheeintee yn Roosh]]
[[Ronney:Bieyn thallooin Arctagh]]
[[Ronney:Sheeintee soilshit 'sy vlein 1758]]
[[Ronney:Tacsyn beiyn enmyssit lesh Carl Linnaeus]]
[[Ronney:Cowraghyn ashoonagh Phobblaght Nerin]]
[[Ronney:Sheeintee yn Vongoil]]
[[Ronney:Dooieyn Oardagh ny h-Oayldyn]]
afp0nuppg50wia5i244ptzvts3zdkq5
Ronney:Mwaaee
14
12784
396435
281353
2026-11-06T17:20:04Z
MacTire02
219
ronney elley
396435
wikitext
text/x-wiki
{{catmore|mwaagh}}
{{Commonscat|Lepus}}
[[Ronney:Leporidae]]
l9zkyq27er5a9e737s50zwckfcly7m0
The Fox and the Hound
0
15285
396437
396242
2026-11-06T18:02:43Z
~2026-58972-40
24080
/* Kianglaghyn magh */
396437
wikitext
text/x-wiki
{{ennym iddaalagh}}
{{WD Kishtey Fys Fillym
| aghteyryn = {{ubl|[[Mickey Rooney]]|[[Kurt Russell]]|[[Pearl Bailey]]|[[Jack Albertson]]|[[Sandy Duncan]]|[[Jeanette Nolan]]|[[Pat Buttram]]|[[John Fiedler]]|[[John McIntire]]|[[Richard Bakalyan|Dick Bakalyan]]|[[Paul Winchell]]|[[Keith Coogan|Keith Mitchell]]|[[Corey Feldman]]}}
| skeaylley = 10 Jerrey Souree 1981
| traa_roie = 83 minnidyn
| bushaid = $12 villioon
| çheet_stiagh = $63.5 millioonyn
}}
She [[fillym drama]] [[fillym bioghit|bioghit]] Americaanagh veih'n vlein 1981 eh '''''The Fox and the Hound'''''. Hie yn fillym er ny ghientyn ec [[Walt Disney Animation Studios|Walt Disney Productions]] as bunnit dy anhickyr er y noaskeeal liorish [[Daniel P. Mannix]] fo'n [[The Fox and the Hound (noaskeeal)|ennym cheddin]]. Y 24oo [[Rolley filmyn lesh Walt Disney Animation Studios|ard-fillym bioghit Disney]], ta'n fillym goll er gra skeeal er daa charrey neulicklee, [[shynnagh ruy]] ta enmyssit Tod as [[coo]] ta enmyssit Copper. Ta'n daa jeu streeu yn chaarjys eddyr oc y 'reill gyn y wooise da nyn nooghys ta girree as ny broojyn sheshoil mygeayrt-y-moosyn.
Va'n fillym stiurit ec [[Ted Berman]], [[Richard Rich (stiureyder)|Richard Rich]], as [[Art Stevens]] as chur ny h-aghteyryn [[Kurt Russell]], [[Mickey Rooney]], [[Pearl Bailey]], [[Pat Buttram]], [[Sandy Duncan]], [[Richard Bakalyan]], [[Paul Winchell]], [[Jack Albertson]], [[Jeanette Nolan]], [[John Fiedler]], [[John McIntire]], [[Keith Coogan]], as [[Corey Feldman]] nyn ghoo lesh y fillym. Hie yn fillym er ny skeaylley magh er 10 Jerrey Souree 1981. Tra haink eh magh v'eh ny fillym bioghit smoo costallagh mastey ny filmyn rieau, as $12 millioonyn y costys echey.
== Skimmee ghoo ==
* [[Mickey Rooney]] myr Tod
** [[Keith Coogan|Keith Mitchell]] myr Tod Aeg
* [[Kurt Russell]] myr Copper
** [[Corey Feldman]] myr Copper Aeg
* [[Pearl Bailey]] myr Big Mama
* [[Jack Albertson]] myr Amos Slade
* [[Sandy Duncan]] myr Vixey
* [[Jeanette Nolan]] myr Widow Tweed
* [[Pat Buttram]] myr Chief
* [[John Fiedler]] myr The Porcupine
* [[John McIntire]] myr The Badger
* [[Richard Bakalyan|Dick Bakalyan]] myr Dinky
* [[Paul Winchell]] myr Boomer
== Kianglaghyn magh ==
{{Commons}}
{{Wikiquote}}
* {{Official website}}
* {{DisneyAtoZ}}
* {{IMDb title}}
* {{AllMovie title}}
* {{Mojo title}}
* {{Rotten Tomatoes}}
* {{TCMDb title}}
{{Ard-filmyn bioghit theateragh Disney}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Fox and the Hound, The}}
[[Ronney:Filmyn veih'n vlein 1981]]
[[Ronney:Filmyn bioghit veih'n vlein 1981]]
[[Ronney:Filmyn bioghit Americaanagh veih ny 1980yn]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn drama caarjys veih ny 1980yn]]
[[Ronney:Filmyn bioghit da paitçhyn veih ny 1980yn]]
[[Ronney:Filmyn drama appee veih ny 1980yn]]
[[Ronney:Filmyn 'sy Vaarle]]
[[Ronney:Filmyn drama veih'n vlein 1981]]
[[Ronney:Filmyn drama caarjys Americaanagh]]
[[Ronney:Filmyn drama bioghit Americaanagh da paitçhyn]]
[[Ronney:Filmyn drama appee Americaanagh]]
[[Ronney:Filmyn caarjys bioghit]]
[[Ronney:Filmyn appee bioghit]]
[[Ronney:Filmyn drama bioghit]]
[[Ronney:Filmyn Walt Disney Animation Studios]]
[[Ronney:Filmyn bioghit Walt Disney Pictures]]
sa53yj25aa8onafjkzbeh5djhfcibsq
396440
396437
2026-11-06T18:07:31Z
~2026-58972-40
24080
/* Kianglaghyn magh */
396440
wikitext
text/x-wiki
{{ennym iddaalagh}}
{{WD Kishtey Fys Fillym
| aghteyryn = {{ubl|[[Mickey Rooney]]|[[Kurt Russell]]|[[Pearl Bailey]]|[[Jack Albertson]]|[[Sandy Duncan]]|[[Jeanette Nolan]]|[[Pat Buttram]]|[[John Fiedler]]|[[John McIntire]]|[[Richard Bakalyan|Dick Bakalyan]]|[[Paul Winchell]]|[[Keith Coogan|Keith Mitchell]]|[[Corey Feldman]]}}
| skeaylley = 10 Jerrey Souree 1981
| traa_roie = 83 minnidyn
| bushaid = $12 villioon
| çheet_stiagh = $63.5 millioonyn
}}
She [[fillym drama]] [[fillym bioghit|bioghit]] Americaanagh veih'n vlein 1981 eh '''''The Fox and the Hound'''''. Hie yn fillym er ny ghientyn ec [[Walt Disney Animation Studios|Walt Disney Productions]] as bunnit dy anhickyr er y noaskeeal liorish [[Daniel P. Mannix]] fo'n [[The Fox and the Hound (noaskeeal)|ennym cheddin]]. Y 24oo [[Rolley filmyn lesh Walt Disney Animation Studios|ard-fillym bioghit Disney]], ta'n fillym goll er gra skeeal er daa charrey neulicklee, [[shynnagh ruy]] ta enmyssit Tod as [[coo]] ta enmyssit Copper. Ta'n daa jeu streeu yn chaarjys eddyr oc y 'reill gyn y wooise da nyn nooghys ta girree as ny broojyn sheshoil mygeayrt-y-moosyn.
Va'n fillym stiurit ec [[Ted Berman]], [[Richard Rich (stiureyder)|Richard Rich]], as [[Art Stevens]] as chur ny h-aghteyryn [[Kurt Russell]], [[Mickey Rooney]], [[Pearl Bailey]], [[Pat Buttram]], [[Sandy Duncan]], [[Richard Bakalyan]], [[Paul Winchell]], [[Jack Albertson]], [[Jeanette Nolan]], [[John Fiedler]], [[John McIntire]], [[Keith Coogan]], as [[Corey Feldman]] nyn ghoo lesh y fillym. Hie yn fillym er ny skeaylley magh er 10 Jerrey Souree 1981. Tra haink eh magh v'eh ny fillym bioghit smoo costallagh mastey ny filmyn rieau, as $12 millioonyn y costys echey.
== Skimmee ghoo ==
* [[Mickey Rooney]] myr Tod
** [[Keith Coogan|Keith Mitchell]] myr Tod Aeg
* [[Kurt Russell]] myr Copper
** [[Corey Feldman]] myr Copper Aeg
* [[Pearl Bailey]] myr Big Mama
* [[Jack Albertson]] myr Amos Slade
* [[Sandy Duncan]] myr Vixey
* [[Jeanette Nolan]] myr Widow Tweed
* [[Pat Buttram]] myr Chief
* [[John Fiedler]] myr The Porcupine
* [[John McIntire]] myr The Badger
* [[Richard Bakalyan|Dick Bakalyan]] myr Dinky
* [[Paul Winchell]] myr Boomer
== Kianglaghyn magh ==
{{Commons}}
{{Wikiquote}}
* {{Official website}}
* {{DisneyAtoZ}}
* {{IMDb title}}
* {{AllMovie title}}
* {{Mojo title}}
* {{Rotten Tomatoes}}
* {{TCMDb title}}
{{Ard-filmyn bioghit theateragh Disney}}
{{Gurneil eaghtyrys}}
{{DEFAULTSORT:Fox and the Hound, The}}
[[Ronney:Filmyn veih'n vlein 1981]]
[[Ronney:Filmyn bioghit veih'n vlein 1981]]
[[Ronney:Filmyn bioghit Americaanagh veih ny 1980yn]]
[[Ronney:Filmyn drama caarjys veih ny 1980yn]]
[[Ronney:Filmyn bioghit da paitçhyn veih ny 1980yn]]
[[Ronney:Filmyn drama appee veih ny 1980yn]]
[[Ronney:Filmyn drama veih'n vlein 1981]]
[[Ronney:Filmyn 'sy Vaarle]]
[[Ronney:Filmyn Americaanagh]]
[[Ronney:Filmyn drama caarjys Americaanagh]]
[[Ronney:Filmyn drama bioghit Americaanagh da paitçhyn]]
[[Ronney:Filmyn drama appee Americaanagh]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn caarjys bioghit]]
[[Ronney:Filmyn appee bioghit]]
[[Ronney:Filmyn drama bioghit]]
[[Ronney:Filmyn Walt Disney Animation Studios]]
[[Ronney:Filmyn bioghit Walt Disney Pictures]]
r2bar5zzfg34a5fwc3uduy6davprzue
Clowan:Son
10
15414
396403
171766
2026-11-06T14:37:02Z
MacTire02
219
MacTire02 moved page [[Clowan:Er son]] to [[Clowan:Son]]
171766
wikitext
text/x-wiki
{{dablink|Er son {{#if:{{{1|}}}|{{{1}}}|ymmydyn elley}}, jeeagh er [[:{{{2|{{PAGENAME}} (reddaghey)}}}]]{{#if:{{{3|}}}|{{#if:{{{4|}}}|, [[:{{{3}}}]], as [[:{{{4}}}]]| as [[:{{{3}}}]]}}}}.}}<noinclude>
{{docamadys}}</noinclude>
nlpduwyoqo5jxjijem4yshja10hqjb6
396407
396403
2026-11-06T14:37:17Z
MacTire02
219
ny share
396407
wikitext
text/x-wiki
{{dablink|Son {{#if:{{{1|}}}|{{{1}}}|ymmydyn elley}}, jeeagh er [[:{{{2|{{PAGENAME}} (reddaghey)}}}]]{{#if:{{{3|}}}|{{#if:{{{4|}}}|, [[:{{{3}}}]], as [[:{{{4}}}]]| as [[:{{{3}}}]]}}}}.}}<noinclude>
{{docamadys}}</noinclude>
1g6rxd81fqln0cwksqwq5vq0mrvurgl
Clowan:Son/doc
10
15415
396405
360361
2026-11-06T14:37:02Z
MacTire02
219
MacTire02 moved page [[Clowan:Er son/doc]] to [[Clowan:Son/doc]]
360361
wikitext
text/x-wiki
<includeonly>
<!-- RONNAGHYN -->
[[Ronney:Clowanyn reddaghey|Er son]]
[[Ronney:Clowanyn heose]]
</includeonly>
6kxk0lystw24t1ecqsh46syj5e1e0p0
Ronney:Filmyn veih'n 21d eash
14
23412
396381
380820
2026-11-06T13:42:40Z
MacTire02
219
ronney elley
396381
wikitext
text/x-wiki
{{category series navigation}}
[[Ronney:Obbraghyn veih'n 21d eash]]
[[Ronney:Filmyn rere eash|21]]
[[Ronney:Scannaneaght 'sy 21d eash]]
ss1mkvkjrf943433d7yoavz7t7cpf45
Lady and the Tramp II: Scamp's Adventure
0
23854
396439
396161
2026-11-06T18:06:00Z
~2026-58972-40
24080
/* Kianglaghyn magh */
396439
wikitext
text/x-wiki
{{ennym iddaalagh}}
{{WD Kishtey Fys Scannane
| ennym = ''Lady and the Tramp II: Scamp's Adventure''
| skeaylley = 27 Toshiaght Arree 2001
| aghteyryn = {{ubl|[[Scott Wolf]]|[[Alyssa Milano]]|[[Chazz Palminteri]]|[[Jeff Bennett]]|[[Jodi Benson]]}}
| traa_roie = 69 minnidyn
}}
She [[fillym contoyrtys]] [[fillym bioghit|bioghit]] Americaanagh veih'n vlein 2001 eh '''''Lady and the Tramp II: Scamp's Adventure'''''. Hie yn fillym er ny ghientyn liorish [[Walt Disney Television Animation]] as er ny skeaylley jeeragh er feeshan. T'eh eiyrtyssagh er y fillym bioghit Disney veih'n vlein 1955, ''[[Lady and the Tramp]]''. Hie eh magh er ny skeaylley er 27 Toshiaght Arree 2001, 46 bleeaney lurg e roie-immeeaghtagh ayns 1955.
== Kianglaghyn magh ==
{{Wikiquote}}
* {{Official website}}
* {{DisneyAtoZ}}
* {{IMDb title}}
* {{AllMovie title}}
* {{Mojo title}}
* {{Rotten Tomatoes}}
* {{TCMDb title}}
{{Disney Television Animation}}
{{Gurneil eaghtyrys}}
[[Ronney:Filmyn bioghit veih'n vlein 2001]]
[[Ronney:Filmyn aittys veih'n vlein 2001]]
[[Ronney:Filmyn veih'n vlein 2001]]
[[Ronney:Filmyn Americaanagh]]
[[Ronney:Filmyn 'sy Vaarle]]
[[Ronney:Filmyn bioghit Americaanagh veih ny 2000yn]]
[[Ronney:Filmyn bioghit da paitçhyn veih ny 2000yn]]
[[Ronney:Filmyn drama aittys veih ny 2000yn]]
[[Ronney:Filmyn aittys kiaullee veih ny 2000yn]]
[[Ronney:Filmyn aittys romansagh veih ny 2000yn]]
[[Ronney:Filmyn contoyrtys bioghit Americaanagh da paitçhyn]]
[[Ronney:Filmyn kiaullee bioghit Americaanagh da paitçhyn]]
[[Ronney:Filmyn drama aittys Americaanagh]]
[[Ronney:Filmyn appee Americaanagh]]
[[Ronney:Filmyn aittys kiaullee Americaanagh]]
[[Ronney:Filmyn aittys romansagh Americaanagh]]
[[Ronney:Filmyn kiaullee romansagh Americaanagh]]
[[Ronney:Filmyn eiyrtyssagh Americaanagh]]
[[Ronney:Filmyn appee bioghit]]
[[Ronney:Filmyn drama aittys da paitçhyn]]
[[Ronney:Filmyn Disney Television Animation]]
[[Ronney:Filmyn bioghit Walt Disney Pictures]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn bentyn rish Laa yn Neuchrogheydys (ny Steatyn Unnaneysit)]]
rdpqo1itme09fqn331m2s6a3iup46ar
Paws of Fury: The Legend of Hank
0
31472
396441
379557
2026-11-06T18:10:41Z
~2026-58972-40
24080
396441
wikitext
text/x-wiki
{{ennym iddaalagh}}
{{WD Kishtey Fys Scannane
|jalloo=
|aghteyryn={{Ubl
|[[Michael Cera]]
|[[Ricky Gervais]]
|[[Mel Brooks]]
|[[George Takei]]
|[[Aasif Mandvi]]
|[[Gabriel Iglesias]]
|[[Djimon Hounsou]]
|[[Michelle Yeoh]]
|[[Samuel L. Jackson]]
}}
|skeaylley=10 Jerrey Souree 2022 ([[Los Angeles]])<br>15 Jerrey Souree 2022 (Steatyn Unnaneysit America)<br>22 Jerrey Souree 2022 (Reeriaght Unnaneysit)
|traa_roie=98 minnidyn
|bushaid=$45 millioonyn<ref name="SD">{{cite news|url=https://www.screendaily.com/news/gfm-animations-long-gestating-blazing-samurai-is-back-in-the-saddle-exclusive/5144435.article|title=GFM Animation's long-gestating ''Blazing Samurai'' is back in the saddle (exclusive)|date=November 6, 2019|website=[[Screen Daily]]|last=Macnab|first=Geoffrey|access-date=November 13, 2019|archive-date=17 Jerrey Geuree 2022|archive-url=https://web.archive.org/web/20220117015026/https://www.screendaily.com/news/gfm-animations-long-gestating-blazing-samurai-is-back-in-the-saddle-exclusive/5144435.article|url-status=live}}</ref>|çheet_stiagh=$42.5 millioonyn<ref name="BOM">{{Cite web |url=https://www.boxofficemojo.com/title/tt4428398/|title=Paws of Fury: The Legend of Hank (2022) |access-date=2024-03-21|work=[[Box Office Mojo]]}}</ref>
}}
She [[fillym aittys]] veih'n vlein 2022 ta [[bioghit lesh co-earrooder]] eh '''''Paws of Fury: The Legend of Hanky'''''. Va'n fillym stiurit ec Rob Minkoff, Mark Koetsier, as Chris Bailey. Ta'n fillym goaill stiagh gooyn [[Michael Cera]], [[Ricky Gervais]], [[Mel Brooks]], [[George Takei]], [[Aasif Mandvi]], [[Gabriel Iglesias]], [[Djimon Hounsou]], [[Michelle Yeoh]], as [[Samuel L. Jackson]].
== Imraaghyn ==
{{Reflist}}
== Kianglaghyn magh ==
* {{IMDb title|4428398}}
{{gurneil eaghtyrys}}
{{bun}}
[[Ronney:Filmyn veih'n vlein 2022]]
[[Ronney:Filmyn 'sy Vaarle]]
[[Ronney:Filmyn Americaanagh bioghit lesh co-earrooder]]
[[Ronney:Filmyn Americaanagh]]
[[Ronney:Filmyn Goaldagh]]
[[Ronney:Filmyn aittys jantys Americaanagh]]
[[Ronney:Filmyn aittys contoyrtys Americaanagh]]
[[Ronney:Filmyn Goaldagh bioghit lesh co-earrooder]]
[[Ronney:Filmyn Paramount Pictures]]
[[Ronney:Filmyn Huayi Brothers]]
[[Ronney:Filmyn Nickelodeon Movies]]
[[Ronney:Filmyn bioghit Americaanagh veih ny 2020yn]]
[[Ronney:Filmyn bioghit Goaldagh veih ny 2020yn]]
[[Ronney:Filmyn bioghit paitçhyn veih ny 2020yn]]
[[Ronney:Filmyn aittys contoyrtys 2022]]
[[Ronney:Filmyn contoyrtys 2022]]
[[Ronney:Filmyn bioghit lesh co-earrooder veih'n vlein 2022]]
[[Ronney:Filmyn ellynyn caggoil veih'n vlein 2022]]
[[Ronney:Filmyn ellynyn caggoil veih ny 2020yn]]
[[Ronney:Filmyn bioghit bentyn rish kiyt]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn aittys jantys Goaldagh]]
[[Ronney:Filmyn aittys contoyrtys Goaldagh]]
[[Ronney:Filmyn aittys jantys Sheenagh]]
[[Ronney:Filmyn bioghit Sheenagh]]
[[Ronney:Filmyn Sheenagh]]
[[Ronney:Filmyn aittys contoyrtys Sheenagh]]
[[Ronney:Filmyn Sheenagh bioghit lesh co-earrooder]]
[[Ronney:Filmyn stiurit lesh Rob Minkoff]]
[[Ronney:Filmyn scoarit lesh Bear McCreary]]
[[Ronney:Filmyn bioghit Nickelodeon]]
[[Ronney:Filmyn bioghit Paramount Pictures]]
[[Ronney:Filmyn Paramount Pictures]]
[[Ronney:Filmyn bentyn rish samurai]]
8g9p0yyck3mpl56v447p7ca16d4xka0
Module:Category series navigation
828
36546
396388
388276
2026-11-06T13:57:19Z
MacTire02
219
++
396388
Scribunto
text/plain
require('strict')
local p = {}
-- Manx: the linking words change between a year category and its decade category
local DECADE_LINKERS = {
["veih'n vlein"] = "veih ny", -- Filmyn X veih'n vlein 1995 -> Filmyn X veih ny 1990yn
["'sy vlein"] = "ayns ny", -- Scannaneaght 'sy vlein 1995 -> Scannaneaght ayns ny 1990yn
}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation blein as reayn]]
'', --[28] placeholder for [[Category:Category series navigation blein as jeihaght]]
'', --[29] placeholder for [[Category:Category series navigation jeihaght as eash]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'RC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'RC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = 'RC' --use RC for Manx categories, BC never used
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'yn'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'yn'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'RC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'RC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') or string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end
if string.match(maximumord or '', 'BC') or string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney') or
string.match(lastpart, '^eash')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxCentury = string.match(lastpart, '^eash')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)')
or mw.ustring.match(lastpart, '%s(RC)')
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '')
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '')
local BCe = parentBC
or ordBCElastparts[lastpartNoBC]
or ((isManxMillenium or isManxCentury) and 'RC')
or 'BC'
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and not parentBC and minord < 1 then minord = 1 end
if not temporal and parentBC and maxord < 1 then maxord = -1 end
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = (isManxMillenium or isManxCentury) and p.addord(o) or tostring(o)
local osign = o
if BC ~= '' and temporal then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger lenition: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
local correct_form
if ones == 1 or ones == 2 then
correct_form = 'villey bleeaney'
else
correct_form = 'milley bleeaney'
end
local replacement = correct_form
if BC ~= '' then
replacement = replacement .. BC
end
lastpart = string.gsub(lastpart, temporal, replacement, 1) --swap in the correct mutation, preserving the rest of lastpart
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760yn in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
-- Require at least the two-character core of an ordinal suffix (st, nd, rd, th)
-- so that bare numbers and yn-suffixed decades do not match as nordinals.
local nordinal = string.match(pagename, '%d+[snrt][tdh]') or
string.match(pagename, '%d+oo%f[%A]') or
string.match(pagename, '%d+[dh]%f[%A]')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
local swapped
for from, to in pairs(DECADE_LINKERS) do
local stem = mw.ustring.match(firstpart_dec,
'^(.-)%s*' .. mw.ustring.gsub(from, '%p', '%%%0') .. '$')
if stem then swapped = mw.text.trim(stem .. ' ' .. to) break end
end
firstpart_dec = swapped or (firstpart_dec..' the')
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0yn '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0yn", "2010yn"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)yn'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
local clastpart = ' century '..lastpart
local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
local exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
fhhb4gz6ep7nja63tt731tsckpfzqhb
396389
396388
2026-11-06T14:00:21Z
MacTire02
219
++
396389
Scribunto
text/plain
require('strict')
local p = {}
-- Manx: the linking words change between a year category and its decade category
local DECADE_LINKERS = {
["veih'n vlein"] = "veih ny", -- Filmyn X veih'n vlein 1995 -> Filmyn X veih ny 1990yn
["'sy vlein"] = "ayns ny", -- Scannaneaght 'sy vlein 1995 -> Scannaneaght ayns ny 1990yn
}
-- Manx: decade category wording -> century category wording
local CENTURY_LINKERS = {
["veih ny"] = "veih'n", -- Filmyn X veih ny 1990yn -> Filmyn X veih'n 20oo eash
["ayns ny"] = "'sy", -- Scannaneaght ayns ny 1990yn -> Scannaneaght 'sy 20oo eash
}
local horizontal = require('Module:List').horizontal
local rtarget = require('Module:Resolve category redirect').rtarget
--[[==========================================================================]]
--[[ Globals ]]
--[[==========================================================================]]
local currtitle = mw.title.getCurrentTitle()
local nexistingcats = 0
local errors = ''
local testcasecolon = ''
local testcases = string.match(currtitle.subpageText, '^testcases')
if testcases then testcasecolon = ':' end
local navborder = true
local followRs = true
local skipgaps = false
local skipgaps_limit = 50
local term_limit = 10
local hgap_limit = 6
local ygap_limit = 5
local listall = false
local tlistall = {}
local tlistallbwd = {}
local tlistallfwd = {}
local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]'
'', -- [1] placeholder for [[Category:Category series navigation using cat parameter]]
'', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]]
'', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]]
'', -- [4] placeholder for [[Category:Category series navigation range not using en dash]]
'', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]]
'', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]]
'', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]]
'', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]]
'', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]]
'', --[10] placeholder for [[Category:Category series navigation range redirected (other)]]
'', --[11] placeholder for [[Category:Category series navigation range gaps]]
'', --[12] placeholder for [[Category:Category series navigation range irregular]]
'', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]]
'', --[14] placeholder for [[Category:Category series navigation range ends (present)]]
'', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]]
'', --[16] placeholder for [[Category:Category series navigation isolated]]
'', --[17] placeholder for [[Category:Category series navigation default season gap size]]
'', --[18] placeholder for [[Category:Category series navigation decade redirected]]
'', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]]
'', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]]
'', --[21] placeholder for [[Category:Category series navigation year redirected (other)]]
'', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]]
'', --[23] placeholder for [[Category:Category series navigation nordinal redirected]]
'', --[24] placeholder for [[Category:Category series navigation wordinal redirected]]
'', --[25] placeholder for [[Category:Category series navigation TV season redirected]]
'', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]]
'', --[27] placeholder for [[Category:Category series navigation blein as reayn]]
'', --[28] placeholder for [[Category:Category series navigation blein as jeihaght]]
'', --[29] placeholder for [[Category:Category series navigation jeihaght as eash]]
'', --[30] placeholder for [[Category:Category series navigation in mainspace]]
'', --[31] placeholder for [[Category:Category series navigation redirection error]]
}
local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and
not string.match(currtitle.text, 'Category series navigation.*/doc') and
not string.match(currtitle.text, 'Category series navigation.*/sandbox') and
currtitle.text ~= 'Category series navigation' and
currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]]
currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and
(currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}})
--[[==========================================================================]]
--[[ Utility & category functions ]]
--[[==========================================================================]]
--Determine if a category exists (in a function for easier localization).
local function catexists( title )
return mw.title.new( title, 'Category' ).exists
end
--Error message handling.
function p.errorclass( msg )
return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '<b>Error!</b> '..string.gsub(msg, '&#', '&#') )
end
--Failure handling.
function p.failedcat( errors, sortkey )
if avoidself then
return (errors or '')..'***Category series navigation failed to generate navbox***'..
'[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n'
end
return ''
end
--Tracking cat handling.
-- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' & 'ttrackingcats[16]')
-- cat: 'Category series navigation isolated'; '' to remove
--Used by main, all nav_*(), & several utility functions.
local function trackcat( key, cat )
if avoidself and key and cat then
if cat ~= '' then
ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]'
else
ttrackingcats[key] = ''
end
end
return
end
--Check for unknown parameters.
--Used by main only.
local function checkforunknownparams( tbl )
local knownparams = { --parameter whitelist
['min'] = 'min',
['max'] = 'max',
['cat'] = 'cat',
['show'] = 'show',
['testcase'] = 'testcase',
['testcasegap'] = 'testcasegap',
['skip-gaps'] = 'skip-gaps',
['list-all-links'] = 'list-all-links',
['follow-redirects'] = 'follow-redirects',
}
for k, _ in pairs (tbl) do
if knownparams[k] == nil then
trackcat(3, 'Category series navigation using unknown parameter')
break
end
end
end
--Check for nav_*() navigational isolation (not necessarily an error).
--Used by all nav_*().
local function isolatedcat()
if nexistingcats == 0 then
trackcat(16, 'Category series navigation isolated')
end
end
--Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists;
--if it doesn't exist, just display the greyed link title without linking.
--Follows {{Category redirect}}s.
--Returns {
-- ['cat'] = cat,
-- ['catexists'] = true,
-- ['rtarget'] = <#R target>,
-- ['navelement'] = <#R target navelement>,
-- ['displaytext'] = displaytext,
-- }
-- if #R followed;
--returns {
-- ['cat'] = cat,
-- ['catexists'] = <true|false>,
-- ['rtarget'] = nil,
-- ['navelement'] = <cat navelement>,
-- ['displaytext'] = displaytext,
-- }
-- otherwise.
--Used by all nav_*().
local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride )
cat = mw.text.trim(cat or '')
displaytext = mw.text.trim(displaytext or '')
displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–")
local disp = cat
if displaytext ~= '' then --use 'displaytext' parameter if present
disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator
end
local link, nilorR
local exists = catexists(cat)
if exists then
nexistingcats = nexistingcats + 1
if followRs then
local R = rtarget(cat, frame) --find & follow #R
if R ~= cat then --#R followed
nilorR = R
end
if displayend then
local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$')
if ending == 'present' then
disp = y..hyph..ending
elseif ending == '' then
disp = y..hyph..'<span style="visibility:hidden">'..y..'</span>' --hidden y to match spacing
end
end
link = '[[:Category:'..R..'|'..disp..']]'
else
link = '[[:Category:'..cat..'|'..disp..']]'
end
else
link = '<span class="categorySeriesNavigation-item-inactive">'..disp..'</span>'
end
if listall and listoverride == nil then
if nilorR then --#R followed
table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' )
else --no #R
table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' )
end
end
return {
['cat'] = cat,
['catexists'] = exists,
['rtarget'] = nilorR,
['navelement'] = link,
['displaytext'] = disp,
}
end
--Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget().
--For a nav_hyphen() cat, also returns a formatted list of all cats searched for & found, & all loop indices.
--Used by all nav_*().
local function listalllinks()
local nl = '\n# '
local out = ''
if currtitle.nsText == 'Category' then
errors = p.errorclass('The <b><code>|list-all-links=yes</code></b> parameter/utility '..
'should not be saved in category space, only previewed.')
out = p.failedcat(errors, 'Z')
end
local bwd, fwd = '', ''
if tlistallbwd[1] then
bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl)
end
if tlistallfwd[1] then
fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl)
end
if tlistall[1] then
return out..nl..table.concat(tlistall, nl)..bwd..fwd
else
return out..nl..'No links found!?'..bwd..fwd
end
end
--Returns the difference b/w 2 ints separated by endash|hyphen, nil if error.
--Used by nav_hyphen() only.
local function find_duration( cat )
local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)')
if from and to then
if to == '00' then return nil end --doesn't follow MOS:DATERANGE
if (#from == 4) and (#to == 2) then --1900-01
to = string.match(from, '(%d%d)%d%d')..to --1900-1901
elseif (#from == 2) and (#to == 4) then -- 01-1902
from = string.match(to, '(%d%d)%d%d')..from --1901-1902
end
return (tonumber(to) - tonumber(from))
end
return 0
end
--Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil.
--Used by nav_hyphen() only.
local function find_terminaltxt( cat )
local terminaltxt = nil
if mw.ustring.match(cat, '%d+[–-]present$') then
terminaltxt = 'present'
trackcat(14, 'Category series navigation range ends (present)')
elseif mw.ustring.match(cat, '%d+[–-]$') then
terminaltxt = ''
trackcat(15, 'Category series navigation range ends (blank, MOS)')
end
return terminaltxt
end
--Returns an unsigned string of the 1-4 digit decade ending in "0", else nil.
--Used by nav_decade() only.
local function sterilizedec( decade )
if decade == nil or decade == '' then
return nil
end
local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or
string.match(decade, '^[-%+]?(%d?%d?%d?0)%D')
if dec then
return dec
else
--fix 2-4 digit decade
local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or
string.match(decade, '^[-%+]?(%d%d?%d?)%d%D')
if decade_fixed234 then
return decade_fixed234..'0'
end
--fix 1-digit decade
local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or
string.match(decade, '^[-%+]?(%d)%D')
if decade_fixed1 then
return '0'
end
--unfixable
return nil
end
end
--Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error).
--Used by nav_hyphen() only.
local function defaultgapcat( bool )
if bool and nexistingcats == 0 then
--using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked
trackcat(17, 'Category series navigation default season gap size')
end
end
--12 -> 12h, etc.
--Used by nav_nordinal() & nav_wordinal().
function p.addord( i )
if tonumber(i) then
local s = tostring(i)
local n = tonumber(i)
local ones = n % 10
if ones == 1 then
return s .. 'd'
elseif ones == 2 then
return s .. 'h'
else
return s .. 'oo'
end
end
return i
end
--Returns the properly formatted central nav element.
--Expects an integer i, and a catlinkfollowr() table.
--Used by nav_decade() & nav_ordinal() only.
local function navcenter( i, catlink )
if i == 0 then --center nav element
if navborder == true then
return '<b>'..catlink.displaytext..'</b>'
else
return '<b>'..catlink.navelement..'</b>'
end
else
return catlink.navelement
end
end
--Wrap one or two navs in a <div> with ARIA attributes; add TemplateStyles
--before it. This also aligns the navs in case some floating element (like a
--portal box) breaks their alignment.
--Used by main only.
local function wrap( nav1, nav2 )
local templatestyles = require("Module:TemplateStyles")(
"Module:Category series navigation/styles.css"
)
local prepare = function (nav)
if nav then
nav = '\n'..nav
else
nav = ''
end
return nav
end
return templatestyles..
'<div class="categorySeriesNavigation" role="navigation" aria-label="Range">'..
prepare(nav1)..prepare(nav2)..
'\n</div>'
end
--[[==========================================================================]]
--[[ Formerly separated templates/modules ]]
--[[==========================================================================]]
--[[==========================={{ nav_hyphen }}=============================]]
local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap )
--Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where
-- start = 2015
-- hyph = –
-- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005")
-- firstpart = Some sequential
-- lastpart = example cat
-- minseas = 1800 ('min' starting season shown; optional; defaults to -9999)
-- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01)
-- testgap = 0 (testcasegap parameter for easier testing; optional)
--sterilize start
if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only
local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D')
if start_fixed then
start = start_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '..
'in the first part of the "season" that was passed to it. '..
'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'H')
end
end
local nstart = tonumber(start)
--en dash check
if hyph ~= '–' then
trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track
end
--sterilize finish & check for weird parents
local tgaps = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for -3 <= j <= 3
local tgapsj4 = {} --table of gap sizes found b/w terms { [<gap size found>] = 1 } for j = { -4, 4 }
local ttlens = {} --table of term lengths found w/i terms { [<term length found>] = 1 }
local tirregs = {} --table of ir/regular-term-length cats' "from"s & "to"s found
local regularparent = true
if (finish == -1) or --"Members of the Scottish Parliament 2021–present"
(finish == 0) --"Members of the Scottish Parliament 2021–"
then
regularparent = false
if maxseas == nil or maxseas == '' then
maxseas = start --hide subsequent ranges
end
if finish == -1 then trackcat(14, 'Category series navigation range ends (present)')
else trackcat(15, 'Category series navigation range ends (blank, MOS)') end
elseif (start == finish) and
(ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974)
then
trackcat(16, '') --reset for another check later
trackcat(13, 'Category series navigation range irregular, 0-length')
ttlens[0] = 1 --calc ttlens for std cases below
regularparent = 'isolated'
end
if (string.match(finish or '', '^%d+$') == nil) and
(string.match(finish or '', '^%-%d+$') == nil)
then
local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D')
if finish_fixed then
finish = finish_fixed
else
errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '..
'in the second part of the "season" that was passed to it. '..
'For e.g. "2015–16", "16" is expected via "|2015|–|16|".')
return p.failedcat(errors, 'I')
end
else
if string.len(finish) >= 5 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '..
'See [[MOS:DATERANGE]] for details.')
return p.failedcat(errors, 'J')
end
end
local nfinish = tonumber(finish)
--save sterilized parent range for easier lookup later
tirregs['from0'] = nstart
tirregs['to0'] = nfinish
--sterilize min/max
local nminseas_default = -9999
local nmaxseas_default = 9999
local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year
local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year
if nminseas > nstart then nminseas = nstart end
if nmaxseas < nstart then nmaxseas = nstart end
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats
--calculate term length/intRAseason size & finishing year
local t = 1
while t <= term_limit and regularparent == true do
local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes
if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then
ttlens[t] = 1
break
end
if t == term_limit then
errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".')
return p.failedcat(errors, 'K')
end
t = t + 1
end
--apply MOS:DATERANGE to parent
local lenstart = string.len(start)
local lenfinish = string.len(finish)
if lenstart == 4 and regularparent == true then --"2001–..."
if t == 1 then --"2001–02" & "2001–2002" both allowed
if lenfinish ~= 2 and lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".')
return p.failedcat(errors, 'L')
end
else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error
if lenfinish == 2 then
trackcat(5, 'Category series navigation range abbreviated (MOS)')
elseif lenfinish ~= 4 then
errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".')
return p.failedcat(errors, 'M')
end
end
if finish == '00' then --full year required regardless of term length
trackcat(5, 'Category series navigation range abbreviated (MOS)')
end
end
--calculate intERseason gap size
local hgap_default = 0 --assume & start at the most common case: 2001–02 -> 2002–03, etc.
local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4)
local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11))
local hgap_success = false
local hgap = hgap_default
while hgap <= hgap_limit_reg and regularparent == true do --verify
local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart
local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart
local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart
local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart
if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions
if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason4) or
catexists(nextseason4)
then
hgap_success = true
break
end
elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions
if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure,
catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side
catexists(prevseason2) or
catexists(nextseason2)
then
hgap_success = true
break
end
end
hgap = hgap + 1
end
if hgap_success == false then
hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat()
end
--preliminary scan to determine ir/regular spacing of nearby cats;
--to limit expensive function calls, MOS:DATERANGE-violating cats are ignored;
--an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout
local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between
if hgap <= hgap_limit_reg then --also to isolate temp vars
--find # of nav-visible ir/regular-term-length cats
local bwanchor = nstart --backward anchor/common year
local fwanchor = bwanchor + t --forward anchor/common year
if regularparent == 'isolated' then
fwanchor = bwanchor
end
local spangreen = '[<span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes
local spanblue = '<span style="color:blue">'
local spanred = ' (<span style="color:red">'
local span = '</span>'
local lastg = nil --to check for run-on searches
local lastk = nil --to check for run-on searches
local endfound = false --switch used to stop searching forward
local iirregs = 0 --index of tirregs[] for j < 0, since search starts from parent
local j = -jlimit --index of tirregs[] for j > 0 & pseudo navh position
while j <= jlimit do
if j < 0 then --search backward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = 0 --term length: 0 = "0-length", 1+ = normal
while k <= term_limit do
local from = bwanchor - k - g
local to = bwanchor - g
local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
if k == 0 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to = '0-length'
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= 1) or --the normal case; only continue k = 0 if 0-length found
(to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball")
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
local to2 = string.match(to, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
to = to2
full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart )
table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to == '0-length' then
trackcat(13, 'Category series navigation range irregular, 0-length')
end
tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1
else tgaps[g] = 1 end
iirregs = iirregs + 1
tirregs['from-'..iirregs] = from
tirregs['to-'..iirregs] = to
bwanchor = from --ratchet down
if to ~= '0-length' then
gbreak = true
break
else
g = 0 --soft-reset g, to keep stepping thru k
j = j + 1 --save, but keep searching thru k
if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd & finding 0-length cats ("MEPs for the Republic of Ireland 1973" & down)
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end
elseif (j >= 0) and
(lastg and lastk) and
((lastg >= hgap_limit_irreg) or
(lastk >= term_limit))
then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season")
j = -1 --allow a normal, full search fwd after break
gbreak = true
break
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j < 0
if j > 0 and endfound == false then --search forward from parent
local gbreak = false --switch used to break out of g-loop
local g = 0 --gap size
while g <= hgap_limit_irreg do
local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal
while k <= term_limit do
local from = fwanchor + g
local to4 = fwanchor + k + g --override carefully
local to2 = nil --last 2 digits of to4, IIF exists
if k == -1 then to4 = 'present' --see if end-cat exists (present)
elseif k == 0 then to4 = '' end --see if end-cat exists (blank)
local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart )
if k == -2 then
if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise
to4 = '0-length' --see if 0-length cat exists
full = mw.text.trim( firstpart..lspace..from..tspace..lastpart )
if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' )
full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy
end
end
end
if (k >= -1) or --only continue k = -2 if 0-length found
(to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc.
then
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
if (k == 1) and
-- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football"
(catexists(full) == false)
then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series
to2 = string.match(to4, '%d%d$')
if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000)
full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart )
table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full )
end
end
if catexists(full) then
if to4 == '0-length' then
if rtarget(full, frame) == full then --only use 0-length cats that don't #R
trackcat(13, 'Category series navigation range irregular, 0-length')
end
end
tirregs['from'..j] = from
tirregs['to'..j] = (to2 or to4)
if (k == -1) or (k == 0) then
endfound = true --tentative
else --k == { -2, > 0 }
tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)'
ttlens[ find_duration(full) ] = 1
if j == 4 then tgapsj4[g] = 1
else tgaps[g] = 1 end
endfound = false
if to4 ~= '0-length' then --k > 0
fwanchor = to4 --ratchet up
gbreak = true
break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–"
else --k == -2
j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979"
if j > jlimit then --lest we keep searching & finding 0-length cats ("2018 CONCACAF Champions League" & up)
gbreak = true
break
elseif g == hgap_limit_irreg then
--keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season")
hgap_limit_irreg = hgap_limit_irreg + 1
end
end
end
end
end --ghetto "continue"
k = k + 1
lastk = k
end --while k <= term_limit do
if gbreak == true then break end
g = g + 1
lastg = g
end --while g <= hgap_limit_irreg do
end --if j > 0 and endfound == false then
if (lastg and lastk) and
(lastg > hgap_limit_irreg) and
(lastk > term_limit)
then --search exhausted
if j < 0 then j = 0 --bwd search exhausted; continue fwd
elseif j > 0 then break end --fwd search exhausted
end
j = j + 1
end --while j <= jlimit
end --if hgap <= hgap_limit_reg
--determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts
local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333
local Ycount = 0 --"Y" count
local ycount = 0 --tirregs counter; # of contiguous #s
for k, v in pairs (tirregs) do
local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table??
Ycount = Ycount + dunce
ycount = ycount + 1
end
local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18
if ycount < ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs
local dummy_finish = finish
if not regularparent then dummy_finish = start end
local dummy, dunce_from = mw.ustring.gsub(start, '%d', '')
local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '')
local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3
Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount))
ycount = ycount_limit
end
local iwidth = 3 --default to 3-a-side, 7 total
local Y_per_y = Ycount / ycount --normalized range: [3-4]
if Y_per_y < Ythreshold then
iwidth = 4 --extend to 4-a-side, 9 total
end
--begin navhyphen
local navh = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local terminalcat = false --switch used to hide future cats
local terminaltxt = nil
local i = -iwidth --nav position
while i <= iwidth do
local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from'
if tirregs['from'..i] then --prefer the irregular term table
from = tonumber(tirregs['from'..i])
else --fallback to lazy/naive 'from'
if i > 0 and
tirregs['from'..(i-1)] and
tirregs['from'..(i-1)] >= from
then --end of the line: avoid dups/past, and create reasonable grey'd ranges
local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999
local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999
local grey = greyto --prefer 'to'
if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc.
if grey > -9999 then
if grey ~= greyto then
from = grey + t + hgap --account for missing/incomplete 'to'
else
from = grey + hgap
end
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
elseif i < 0 then
local greyfrom
local ii = 0
while ii < 3 do
ii = ii + 1
greyfrom = tonumber(tirregs['from'..(i+ii)])
if greyfrom then break end
end
from = (greyfrom or nstart) - ii*(t+hgap)
tirregs['from'..i] = from --remember
tirregs['to' .. i] = from + t
end
end
local from2 = string.match(from, '%d?%d$')
local to = tostring(from+t) --the logical, naive range, but
if tirregs['to'..i] then --prefer irregular term table
to = tirregs['to'..i]
elseif regularparent == false and tirregs and i > 0 then
to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to'
end
local to2 = string.match(to, '%d?%d$')
local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case)
if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004)
(from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000)
then
tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found
end
if to == '0-length' then
tofinal = to
end
--check existance of 4-digit, MOS-correct range, with abbreviation fallback
if tofinal ~= '0-length' then
if t > 1 and string.len(from) == 4 then --e.g. 1999-2004
--determine which link exists (full or abbr)
local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
if not catexists(full) then
local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart
if catexists(abbr) then
tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format
end
end
elseif t == 1 then --full-year consecutive ranges are also allowed
local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format
if not catexists(abbr) and tofinal ~= to then
local full = firstpart..lspace..from..hyph..to..tspace..lastpart
if catexists(full) then
tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition)
end end end end
--populate navh
if i ~= 0 then --left/right navh
local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart
local disp = from..hyph..tofinal
if tofinal == '0-length' then
orig = firstpart..lspace..from..tspace..lastpart
disp = from
end
local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display
if terminalcat == false then
terminaltxt = find_terminaltxt( disp ) --also sets tracking cats
terminalcat = (terminaltxt ~= nil)
end
if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why
--determine new term length & gap size
ttlens[ find_duration( catlink.rtarget ) ] = 1
if i > -iwidth then
local lastto = tirregs['to'..(i-1)]
if lastto == nil then
local lastfrom = nstart + (i-1)*(t+hgap)
lastto = lastfrom+t --use last logical 'from' to calc lastto
end
if lastto then
local gapcat = lastto..'-'..from --dummy cat to calc with
local gap = find_duration(gapcat) or -1 --in case of nil,
if iwidth == 4 then
tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later
else
tgaps[ gap ] = 1 --tgaps[-1] are ignored later
end
end
end
--display/tracking handling
local base_regex = '%d+[–-]%d+'
local origbase = mw.ustring.gsub(orig, base_regex, '')
local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '')
if rtarbase_success == 0 then
local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat
rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '')
end
local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux
if mw.ustring.match(orig, terminal_regex) then
origbase = mw.ustring.gsub(orig, terminal_regex, '')
end
if mw.ustring.match(catlink.rtarget, terminal_regex) then
--finagle/overload terminalcat type to set nmaxseas on 1st occurence only
if terminalcat == false then terminalcat = 1 end
local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats
rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '')
end
origbase = mw.text.trim(origbase)
rtarbase = mw.text.trim(rtarbase)
if origbase ~= rtarbase then
trackcat(6, 'Category series navigation range redirected (base change)')
elseif terminalcat == 1 then
trackcat(8, 'Category series navigation range redirected (end)')
else --origbase == rtarbase
local all4s_regex = '%d%d%d%d[–-]%d%d%d%d'
local orig_all4s = mw.ustring.match(orig, all4s_regex)
local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex)
if orig_all4s and rtar_all4s then
trackcat(10, 'Category series navigation range redirected (other)')
else
local year_regex1 = '%d%d%d%d$'
local year_regex2 = '%d%d%d%d[%s%)]'
local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or
mw.ustring.match(catlink.rtarget, year_regex2)
if orig_all4s and year_rtar then
trackcat(7, 'Category series navigation range redirected (var change)')
else
trackcat(9, 'Category series navigation range redirected (MOS)')
end
end
end
end
if terminalcat then --true or 1
if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once
terminalcat = true --done finagling/overloading
end
if (from >= 0) and (nminseas <= from) and (from <= nmaxseas) then
table.insert(navlist, catlink.navelement)
if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges
else
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navh
if finish == -1 then finish = 'present'
elseif finish == 0 then finish = '<span style="visibility:hidden">'..start..'</span>' end
local disp = start..hyph..finish
if regularparent == 'isolated' then disp = start end
table.insert(navlist, '<b>'..disp..'</b>')
end
i = i + 1
end
-- add the list
navh = navh..horizontal(navlist)..'\n'
--tracking cats & finalize
if avoidself then
local igaps = 0 --# of diff gap sizes > 0 found
local itlens = 0 --# of diff term lengths found
for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable
igaps = igaps + (tgaps[s] or 0)
end
if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962")
for s = 1, hgap_limit_reg do
igaps = igaps + (tgapsj4[s] or 0)
end
end
for s = 0, term_limit do
itlens = itlens + (ttlens[s] or 0)
end
if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end
if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length"
trackcat(12, 'Category series navigation range irregular')
end
end
isolatedcat()
defaultgapcat(not hgap_success)
if listall then
return listalllinks()
else
return navh..'</div>'
end
end
--[[=========================={{ nav_tvseason }}============================]]
local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv )
--Expects a PAGENAME of the form "Futurama season 1 episodes", where
-- firstpart = Futurama season
-- tv = 1
-- lastpart = episodes
-- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999)
tv = tonumber(tv)
if tv == nil then
errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.')
return p.failedcat(errors, 'T')
end
--"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC:
--[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]]
-- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]]
local tspace = ' ' --"season 1 episodes"
local parenth_check = string.match(lastpart, '^%)')
if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case
local maxtv_default = 9999
local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier
if maxtv < tv then maxtv = tv end --input error; maxtv should be >= parent
--begin navtvseason
local navt = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local t = tv + i
if i ~= 0 then --left/right navt
local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t )
if t >= 1 and t <= maxtv then --hardcode mintv
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(25, 'Category series navigation TV season redirected')
end
if catlink.catexists or
(maxtv ~= maxtv_default and t <= maxtv)
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
elseif t < 1 then
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
else --t > maxtv
local postpad = '<span style="visibility:hidden"> • '..t..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navt
table.insert(navlist, prepad..'<b>'..tv..'</b>')
prepad = ''
end
i = i + 1
end
-- add the list
navt = navt..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navt..'</div>'
end
end
--[[==========================={{ nav_decade }}=============================]]
local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade )
--Expects a PAGENAME of the form "Some sequential 2000 example cat", where
-- firstpart = Some sequential
-- decade = 2000
-- lastpart = example cat
-- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999)
-- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999)
--sterilize dec
local dec = sterilizedec(decade)
if dec == nil then
errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '..
'but expects a 1 to 4-digit year ending in "0".')
return p.failedcat(errors, 'D')
end
local ndec = tonumber(dec)
--sterilize mindecade & determine AD/BC
local mindefault = '-9999'
local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil
if mindec then
if string.match(mindecade, '-%d') or
string.match(mindecade, 'RC')
then
mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...)
end
elseif mindec == nil and mindecade and mindecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.')
return p.failedcat(errors, 'E')
else --mindec == nil
mindec = mindefault --tonumber() later, after error checks
end
--sterilize maxdecade & determine AD/BC
local maxdefault = '9999'
local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error
if maxdec then
if string.match(maxdecade, '-%d') or
string.match(maxdecade, 'RC')
then --better +/-0 behavior with strings (0-initialized int == "-0" string...),
maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0",
end --and a "0" string -> tonumber() -> tostring() = "0"
elseif maxdec == nil and maxdecade and maxdecade ~= '' then
errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '..
'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.')
return p.failedcat(errors, 'F')
else --maxdec == nil
maxdec = maxdefault
end
local tspace = ' ' --assume trailing space for "1950s in X"-type cats
if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats
--AD/BC switches & varR
local parentBC = string.match(lastpart, '^RC') --following the "0s BC" convention for all years BC
local BCe = 'RC' --use RC for Manx categories, BC never used
lastpart = mw.ustring.gsub(lastpart, '^RC%s*', '') --handle BC separately; AD never used
--TODO?: handle BCE, but only if it exists in the wild
local dec0to40AD = (ndec >= 0 and ndec <= 40 and not parentBC) --special behavior in this range
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local BCdisp = ''
local D = -math.huge --secondary switch & iterator for AD/BC transition
--check non-default min/max more carefully
if mindec ~= mindefault then
if tonumber(mindec) > ndec*switchADBC then
mindec = tostring(ndec*switchADBC) --input error; mindec should be <= parent
end
end
if maxdec ~= maxdefault then
if tonumber(maxdec) < ndec*switchADBC then
maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent
end
end
local nmindec = tonumber(mindec) --similar behavior to nav_year & nav_nordinal
local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal
--begin navdecade
local bnb = '' --border/no border
if navborder == false then --for Category series navigation year and decade
bnb = 'categorySeriesNavigation-range-transparent'
end
local navd = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -50 --nav position x 10
while i <= 50 do
local d = ndec + i*switchADBC
local BC = ''
BCdisp = ''
if dec0to40AD then
if D < -10 then
d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" & "0s" (AD)
BC = 'RC '
if d == 0 then
D = -10 --track 1st d = 0 use (BC)
end
elseif D >= -10 then
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use
end
elseif parentBC then
if switchADBC == -1 then --parentBC looking at the BC side (the common case)
BC = 'RC '
if d == 0 then --prepare to switch to the AD side on the next iteration
switchADBC = 1 --1st d = 0 use (BC)
D = -10 --prep
end
elseif switchADBC == 1 then --switched to the AD side
D = D + 10 --now iterate from 0s AD
d = D --2nd d = 0 use (on first use)
end
end
if BC ~= '' and ndec <= 50 then
BCdisp = ' '..BCe --show BC/RC for all BC decades whenever a "0yn" is displayed on the nav
end
--determine target cat
local disp = d..'yn'..BCdisp
local catlink = catlinkfollowr( frame, firstpart..' '..d..'yn'..tspace..BC..lastpart, disp )
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(18, 'Category series navigation decade redirected')
end
--populate left/right navd
local shown = navcenter(i, catlink)
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
local dsign = d --use d for display & dsign for logic
if BC ~= '' then dsign = -dsign end
if (nmindec <= dsign) and (dsign <= nmaxdec) then
if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) & 0 (AD)
--"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing
local zsign, zmin, zmax = 1, nmindec, nmaxdec
if BC ~= '' then zsign = -1 end
if mindec == '-0' then zmin = -1
elseif mindec == '0' then zmin = 1 end
if maxdec == '-0' then zmax = -1
elseif maxdec == '0' then zmax = 1 end
if (zmin <= zsign) and (zsign <= zmax) then
table.insert(navlist, shown)
hidden = nil
else
table.insert(navlist, hidden)
end
else
table.insert(navlist, shown)--the common case
hidden = nil
end
else
table.insert(navlist, hidden)
end
if listall and hidden then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
i = i + 10
end
-- add the list
navd = navd..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navd..'</div>'
end
end
--[[============================{{ nav_year }}==============================]]
local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear )
--Expects a PAGENAME of the form "Some sequential 1760 example cat", where
-- firstpart = Some sequential
-- year = 1760
-- lastpart = example cat
-- minimumyear = 1758 ('min' year parameter; optional)
-- maximumyear = 1800 ('max' year parameter; optional)
local minyear_default = -9999
local maxyear_default = 9999
year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)'))
local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier
local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier
if string.match(minimumyear or '', 'RC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed)
if string.match(maximumyear or '', 'RC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed)
if year == nil then
errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.')
return p.failedcat(errors, 'Y')
end
--AD/BC switches & vars
local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['example_Hebrew people_example'] = 'BCE', --example entry format; add to & adjust as needed
}
local parentAD = string.match(firstpart, 'BNJ$') --following the "AD 1" convention from AD 1 to AD 10
local parentBC = string.match(lastpart, '^RC?') --following the "1 BC" convention for all years BC
firstpart = mw.ustring.gsub(firstpart, '%s*BNJ$', '') --handle AD/BC separately for easier & faster accounting
lastpart = mw.ustring.gsub(lastpart, '^RC?%s*', '')
local BCe = parentBC or yearBCElastparts[lastpart] or 'RC' --"BC" default
local year1to10 = (year >= 1 and year <= 10)
local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series
local year1to15AD = (year >= 1 and year <= 15 and not parentBC) --special behavior 1-15 for AD/BC display
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local Y = 0 --secondary iterator for AD-on-a-BC-parent
if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be <= parent
if maxyear < year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent
local lspace = ' ' --leading space before year, after firstpart
if string.match(firstpart, '[%-VW]$') then
lspace = '' --e.g. "Straight-8 engines"
end
local tspace = ' ' --trailing space after year, before lastpart
if string.match(lastpart, '^-') then
tspace = '' --e.g. "2018-related timelines"
end
--determine interyear gap size to condense special category types, if possible
local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc.
local ygap = ygapdefault
if string.match(lastpart, 'presidential') then
local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous & next year gaps indepedently
local ygap1_success, ygap2_success = false, false
local prevseason = nil
while ygap1 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart
if catexists(prevseason) then
ygap1_success = true
break
end
ygap1 = ygap1 + 1
end
local nextseason = nil
while ygap2 <= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms
nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart
if catexists(nextseason) then
ygap2_success = true
break
end
ygap2 = ygap2 + 1
end
if ygap1_success and ygap2_success then
if ygap1 == ygap2 then ygap = ygap1 end
elseif ygap1_success then ygap = ygap1
elseif ygap2_success then ygap = ygap2
end
end
--skip non-existing years, if requested
local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)]
if skipgaps then
if minyear == minyear_default then
minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway
end
if (year > 70) or --add support for AD/BC (<= AD 10) if/when needed
(minyear >= 0 and --must be a non-year series like "AC with 0 elements"
not parentAD and not parentBC)
then
local yskipped = {} --track skipped y's to avoid double-checking
local cat, found, Yeary
--populate nav element queue outwards positively from the parent
local Year = year --to save/ratchet progression
local i = 1
while i <= 5 do
local y = 1
while y <= skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y + 1
end
if found then Year = Yeary
else Year = Year + 1 end
ynogaps[i] = Year
i = i + 1
end
ynogaps[0] = year --the parent
--populate nav element queue outwards negatively from the parent
Year = year --reset ratchet
i = -1
while i >= -5 do
local y = -1
while y >= -skipgaps_limit do
found = false
Yeary = Year + y
if yskipped[Yeary] == nil then
yskipped[Yeary] = Yeary
cat = firstpart..lspace..Yeary..tspace..lastpart
found = catexists(cat)
if found then break end
end
y = y - 1
end
if found then Year = Yeary
else Year = Year - 1 end
ynogaps[i] = Year
i = i - 1
end
else
skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] & [[Template:Year category header/core]]
end
end
--begin navyears
local navy = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local y
local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022"
local i = -5 --nav position
while i <= 5 do
if skipgaps then
y = ynogaps[i]
else
y = year + i*ygap*switchADBC - j
end
local BCdisp = ''
if i ~= 0 then --left/right navy
local AD = ''
local BC = ''
if year1to15AD and not
(year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC
then
if year >= 11 then --parent = AD 11-15
if y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
elseif year >= 1 then --parent = AD 1-10
if y <= 0 then
BC = BCe..' '
y = math.abs(y - 1) --skip y = 0 (DNE)
elseif y >= 1 and y <= 10 then --prepend AD on y = 1-10 cats only, per existing cats
AD = 'AD '
end
end
elseif parentBC then
if switchADBC == -1 then --displayed y is in the BC regime
if y >= 1 then --the common case
BC = BCe..' '
elseif y == 0 then --switch from BC to AD regime
switchADBC = 1
end
end
if switchADBC == 1 then --displayed y is now in the AD regime
Y = Y + 1 --skip y = 0 (DNE)
y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent
AD = 'AD '
end
end
if BC ~= '' and year <= 5 then --only show 'BC' for parent years <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator;
end --the center/parent year will always show BC, so no need to show it another 10x
--populate left/right navy
local ysign = y --use y for display & ysign for logic
local disp = y..BCdisp
if BC ~= '' then ysign = -ysign end
local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart
if (minyear <= ysign) and (ysign <= maxyear) then
local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD
local catlink = catlinkAD --tentative winner
if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats
local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD
if catlinkNoAD.catexists == true then
catlink = catlinkNoAD --usurp
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>1</sup>'
end
end
if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC & DNE; 4-digit only, to be frugal
--try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs
local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats
local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 )
if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_4 --usurp
trackcat(27, 'Category series navigation year and range')
else
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>2</sup>'
end
local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats
if i == 1 then
local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22
local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special )
if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2_special --usurp
trackcat(27, 'Category series navigation year and range')
j = 1
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>3</sup>'
end
end
if not (i == 1 and j == 1) then
local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 )
if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists & no #Rs
catlink = catlinkHyph_2 --usurp
trackcat(27, 'Category series navigation year and range')
elseif listall then
tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)<sup>4</sup>'
end
end
end
end
if catlink.rtarget then --#R followed; determine why
local r = catlink.rtarget
local c = catlink.cat
local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season"
local hyph_regex = '%d%d%d%d[–-]%d+' --stricter
local num_regex = '%d+' --strip any number otherwise
local final_regex = nil --best choice goes here
if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then
final_regex = year_regex
elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then
final_regex = num_regex
end
if final_regex then
local r_base = mw.ustring.gsub(r, final_regex, '')
local c_base = mw.ustring.gsub(c, final_regex, '')
if r_base ~= c_base then
trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target
elseif mw.ustring.match(r, hyph_regex) then
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09"
else
trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here
end
else
trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines"
end
end
table.insert(navlist, catlink.navelement)
else --OOB vs min/max
local hidden = '<span style="visibility:hidden">'..disp..'</span>'
table.insert(navlist, hidden)
if listall then
local dummy = catlinkfollowr( frame, firsttry, disp )
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navy
if parentBC then BCdisp = ' '..BCe end
table.insert(navlist, '<b>'..year..BCdisp..'</b>')
end
i = i + 1
end
--add the list
navy = navy..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navy..'</div>'
end
end
--[[==========================={{ nav_roman }}==============================]]
local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom )
local toarabic = require('Module:ConvertNumeric').roman_to_numeral
local toroman = require('Module:Roman').main
--sterilize/convert rom/num
local num = tonumber(toarabic(roman))
local rom = toroman({ [1] = num })
if num == nil or rom == nil then --out of range or some other error
errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" & "'..
(rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".')
return p.failedcat(errors, 'R')
end
--sterilize min/max
local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or ''))
local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or ''))
if minrom < 1 then minrom = 1 end --toarabic() returns -1 on error
if maxrom < 1 then maxrom = 9999 end --toarabic() returns -1 on error
if minrom > num then minrom = num end
if maxrom < num then maxrom = num end
--begin navroman
local navr = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local n = num + i
if n >= 1 then
local r = toroman({ [1] = n })
if i ~= 0 then --left/right navr
local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r )
if minrom <= n and n <= maxrom then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(22, 'Category series navigation roman numeral redirected')
end
table.insert(navlist, catlink.navelement)
else
local hidden = '<span style="visibility:hidden">'..r..'</span>'
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
else --center navr
table.insert(navlist, '<b>'..r..'</b>')
end
else
table.insert(navlist, '<span style="visibility:hidden">I</span>')
end
i = i + 1
end
-- add the list
navr = navr..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navr..'</div>'
end
end
--[[=========================={{ nav_nordinal }}============================]]
local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord )
local nord = tonumber(ord)
local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord & +/- qualifier
local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord & +/- qualifier
if string.match(minimumord or '', 'BC') or string.match(minimumord or '', 'RC') then minord = -math.abs(minord) end
if string.match(maximumord or '', 'BC') or string.match(maximumord or '', 'RC') then maxord = -math.abs(maxord) end
local temporal = string.match(lastpart, 'century') or
string.match(lastpart, 'millennium') or
string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney') or
string.match(lastpart, '^eash')
local isManxMillenium = string.match(lastpart, 'milley bleeaney') or
string.match(lastpart, 'villey bleeaney')
local isManxCentury = string.match(lastpart, '^eash')
local tspace = ' ' --assume a trailing space after ordinal
if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats
--AD/BC switches & vars
local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown
--lists the lastpart of valid BCE cats
--"BCE" removed to match both AD & BCE cats; easier & faster than multiple string.match()s
['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people
['-century Jews'] = 'BCE', --co-nominated
['-century Judaism'] = 'BCE', --co-nominated
['-century rabbis'] = 'BCE', --co-nominated
['-century High Priests of Israel'] = 'BCE',
}
local parentBC = mw.ustring.match(lastpart, '%s(BCE?)')
or mw.ustring.match(lastpart, '%s(RC)')
local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '')
lastpartNoBC = mw.ustring.gsub(lastpartNoBC, '%sRC', '')
local BCe = parentBC
or ordBCElastparts[lastpartNoBC]
or ((isManxMillenium or isManxCentury) and 'RC')
or 'BC'
local switchADBC = 1 -- 1=AD parent
if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later
local O = 0 --secondary iterator for AD-on-a-BC-parent
if not temporal and not parentBC and minord < 1 then minord = 1 end
if not temporal and parentBC and maxord < 1 then maxord = -1 end
if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be <= parent
if maxord < nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent
--begin navnordinal
local bnb = '' --border/no border
if navborder == false then --for Category series navigation decade and century
bnb = 'categorySeriesNavigation-range-transparent'
end
local navo = '<div class="toccolours categorySeriesNavigation-range '..bnb..'">\n'
local navlist = {}
local i = -5 --nav position
while i <= 5 do
local o = nord + i*switchADBC
local BC = ''
local BCdisp = ''
if parentBC then
if switchADBC == -1 then --parentBC looking at the BC side
if o >= 1 then --the common case
BC = ' '..BCe
elseif o == 0 then --switch to the AD side
BC = ''
switchADBC = 1
end
end
if switchADBC == 1 then --displayed o is now in the AD regime
O = O + 1 --skip o = 0 (DNE)
o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent
end
elseif o <= 0 then --parentAD looking at BC side
BC = ' '..BCe
o = math.abs(o - 1) --skip o = 0 (DNE)
end
if BC ~= '' and nord <= 5 then --only show 'BC' for parent ords <= 5: saves room, easier to read,
BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator;
end --the center/parent ord will always show BC, so no need to show it another 10x
--populate left/right navo
local oth = (isManxMillenium or isManxCentury) and p.addord(o) or tostring(o)
local osign = o
if BC ~= '' and temporal then osign = -osign end
local hidden = '<span style="visibility:hidden">'..oth..'</span>'
if temporal then --e.g. "3rd-century BC"
local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s
if isManxMillenium then
-- 1d and 2h trigger lenition: villey bleeaney
-- 3oo and above use the base form: milley bleeaney
local ones = o % 10
local correct_form
if ones == 1 or ones == 2 then
correct_form = 'villey bleeaney'
else
correct_form = 'milley bleeaney'
end
local replacement = correct_form
if BC ~= '' then
replacement = replacement .. BC
end
lastpart = string.gsub(lastpart, temporal, replacement, 1) --swap in the correct mutation, preserving the rest of lastpart
elseif BC ~= '' then
lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed
end
local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp )
if (minord <= osign) and (osign <= maxord) then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
elseif minord <= osign and osign <= maxord then
local catTarget = firstpart..' '..oth..tspace..lastpartNoBC
if BC ~= '' then
catTarget = firstpart..' '..oth..tspace..lastpartNoBC..BC
end
local dispText = oth..BCdisp
local catlink = catlinkfollowr( frame, catTarget, dispText )
if catlink.rtarget then
trackcat(23, 'Category series navigation nordinal redirected')
end
table.insert(navlist, navcenter(i, catlink))
else --out-of-range: hide
table.insert(navlist, hidden)
if listall then
tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')'
end
end
i = i + 1
end
navo = navo..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navo..'</div>'
end
end
--[[========================={{ nav_wordinal }}=============================]]
local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame )
--Module:ConvertNumeric.spell_number2() args:
-- ordinal == true : 'second' is output instead of 'two'
-- ordinal == false: 'two' is output instead of 'second'
local ord2eng = require('Module:ConvertNumeric').spell_number2
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local th = 'th'
if not ordinal then
th = ''
eng2ord = require('Module:ConvertNumeric').english_to_numeral
end
local capitalize = nil ~= string.match(word, '^%u') --determine capitalization
local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later
local lspace = ' ' --assume a leading space (most common)
local tspace = ' ' --assume a trailing space (most common)
if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats
if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats
--sterilize min/max
local maxword_default = 99
local maxword = maxword_default
local minword = 1
if minimumword then
local num = tonumber(minimumword)
if num and 0 < num and num < maxword then
minword = num
else
local ord = eng2ord(minimumword)
if 0 < ord and ord < maxword then
minword = ord
end
end
end
if maximumword then
local num = tonumber(maximumword)
if num and 0 < num and num < maxword then
maxword = num
else
local ord = eng2ord(maximumword)
if 0 < ord and ord < maxword then
maxword = ord
end
end
end
if minword > nord then minword = nord end
if maxword < nord then maxword = nord end
--determine max existing cat
local listoverride = true
local n_max = nord
local m = 1
while m <= 5 do
local n = nord + m
local nth = p.addord(n)
if not ordinal then nth = n end
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride )
if catlink.catexists then n_max = n end
m = m + 1
end
--begin navwordinal
local navw = '<div class="toccolours categorySeriesNavigation-range">\n'
local navlist = {}
local prepad = ''
local i = -5 --nav position
while i <= 5 do
local n = nord + i
if n >= 1 then
local nth = p.addord(n)
if not ordinal then nth = n end
if i ~= 0 then --left/right navw
local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize }
local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth )
if minword <= n and n <= maxword then
if catlink.rtarget then --a {{Category redirect}} was followed
trackcat(24, 'Category series navigation wordinal redirected')
end
if n <= n_max or
maxword ~= maxword_default
then
table.insert(navlist, prepad..catlink.navelement) --display normally
prepad = ''
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else
local postpad = '<span style="visibility:hidden"> • '..nth..'</span>'
navlist[#navlist] = (navlist[#navlist] or '')..postpad
if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end
end
else --center navw
table.insert(navlist, prepad..'<b>'..nth..'</b>')
prepad = ''
end
else --n < 1
prepad = prepad..'<span style="visibility:hidden"> • '..'0'..th..'</span>'
if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end
end
i = i + 1
end
-- Add the list
navw = navw..horizontal(navlist)..'\n'
isolatedcat()
if listall then
return listalllinks()
else
return navw..'</div>'
end
end
--[[==========================={{ find_var }}===============================]]
local function find_var( pn )
--Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string,
--and returns { ['vtype'] = <'year'|'season'|etc.>, <v> = <2015|2015–16|etc.> }
local pagename = currtitle.text
if pn and pn ~= '' then
pagename = pn
end
local cpagename = 'Ronney:'..pagename --limited-Lua-regex workaround
local d_season = mw.ustring.match(cpagename, ':(%d+yn).+%(%d+[–-]%d+%)') --i.e. "1760yn in the Province of Quebec (1763–1791)"
local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)"
local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–"
mw.ustring.match(cpagename, '%s(%d+[–-]jiu)$') --e.g. "UK MPs 2019–present"
local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos?
mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$')
local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or
mw.ustring.match(cpagename, 'series (%d+)') or
mw.ustring.match(cpagename, 'meetup (%d+)')
-- Require at least the two-character core of an ordinal suffix (st, nd, rd, th)
-- so that bare numbers and yn-suffixed decades do not match as nordinals.
local nordinal = string.match(pagename, '%d+[snrt][tdh]') or
string.match(pagename, '%d+oo%f[%A]') or
string.match(pagename, '%d+[dh]%f[%A]')
local decade = mw.ustring.match(cpagename, '[:%s](%d+yn)[%s-]') or
mw.ustring.match(cpagename, '[:%s](%d+yn)$')
local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years
mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or
mw.ustring.match(cpagename, '[:%s](%d+)%s') or
mw.ustring.match(cpagename, '[:%s](%d+)$') or
--expand/combine exceptions below as needed
mw.ustring.match(cpagename, '[:%s](%d+)-related') or
mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or
mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines"
local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s')
local found = d_season or y_season or e_season or season or tvseason or
nordinal or decade or year or roman
if found then
if string.match(found, '%d%d%d%d%d') == nil then
--return in order of decreasing complexity/chance for duplication
if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)"
then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end
if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end
if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end
if season then return { ['vtype'] = 'season', ['v'] = season } end
if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end
if decade then return { ['vtype'] = 'decade', ['v'] = decade } end
if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end
if year then return { ['vtype'] = 'year', ['v'] = year } end
if roman then return { ['vtype'] = 'roman', ['v'] = roman } end
end
else
--try wordinals ('zeroth' to 'ninety-ninth' only)
local eng2ord = require('Module:ConvertNumeric').english_to_ordinal
local split = mw.text.split(pagename, ' ')
for i=1, #split do
if eng2ord(split[i]) > -1 then
return { ['vtype'] = 'wordinal', ['v'] = split[i] }
end
end
--try English numerics ('one'/'single' to 'ninety-nine' only)
local eng2num = require('Module:ConvertNumeric').english_to_numeral
local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines"
for i=1, #split do
if eng2num(split[i]) > -1 then
return { ['vtype'] = 'enumeric', ['v'] = split[i] }
end
end
end
errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".')
return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') }
end
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.csn( frame )
--arg checks & handling
local args = frame:getParent().args
checkforunknownparams(args) --for template args
checkforunknownparams(frame.args) --for #invoke'd args
local cat = args['cat'] --'testcase' alias for catspace
local list = args['list-all-links'] --debugging utility to output all links & followed #Rs
local follow = args['follow-redirects'] --default 'yes'
local testcase = args['testcase']
local testcasegap = args['testcasegap']
local minimum = args['min']
local maximum = args['max']
local skip_gaps = args['skip-gaps']
local show = args['show']
if show and show ~= '' then
if show == 'skip-gaps' then return skipgaps_limit
elseif show == 'term-limit' then return term_limit
elseif show == 'hgap-limit' then return hgap_limit
elseif show == 'ygap-limit' then return ygap_limit end
end
--apply args
local pagename = testcase or cat or currtitle.text
local testcaseindent = ''
if testcasecolon == ':' then testcaseindent = '\n::' end
if follow and follow == 'no' then followRs = false end
if list and list == 'yes' then listall = true end
if skip_gaps and skip_gaps == 'yes' then
skipgaps = true
trackcat(26, 'Category series navigation using skip-gaps parameter')
end
--ns checks
if currtitle.nsText == 'Category' then
if cat and cat ~= '' then
trackcat(1, 'Category series navigation using cat parameter')
end
if testcase and testcase ~= '' then
trackcat(2, 'Category series navigation using testcase parameter')
end
elseif currtitle.nsText == '' then
trackcat(30, 'Category series navigation in mainspace')
end
--find the variable parts of pagename
local findvar = find_var(pagename)
if findvar.vtype == 'error' then --basic format error checking in find_var()
return findvar.v..table.concat(ttrackingcats)
end
local start = string.match(findvar.v, '^%d+')
--the rest is static
local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-')
local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$')
if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes"
firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$')
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$')
end
if firstpart == nil then
firstpart, lastpart = string.match(pagename, '^(.-meetup )'..findvar_escaped..'(.*)$')
end
end
firstpart = mw.text.trim(firstpart or '')
lastpart = mw.text.trim(lastpart or '')
--call the appropriate nav function, in order of decreasing popularity
if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats
local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local dec = math.floor(findvar.v/10)
local decadecat = nil
local firstpart_dec = firstpart
if firstpart_dec ~= '' then
local swapped
for from, to in pairs(DECADE_LINKERS) do
local stem = mw.ustring.match(firstpart_dec,
'^(.-)%s*' .. mw.ustring.gsub(from, '%p', '%%%0') .. '$')
if stem then swapped = mw.text.trim(stem .. ' ' .. to) break end
end
firstpart_dec = swapped or (firstpart_dec..' the')
elseif firstpart_dec == 'AD' and dec <= 1 then
firstpart_dec = ''
if dec == 0 then dec = '' end
end
local decade = dec..'0yn '
decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart )
local exists = catexists(decadecat)
if exists then
navborder = false
local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.)
local hyphen = '–'
local finish = start
local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats)
if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year
else return wrap( nav2 ) end
else --regular nav_year
return wrap( nav1 )
end
elseif findvar.vtype == 'decade' then --e.g. "0yn", "2010yn"; nav_decade..nav_nordinal; ~12% of cats
local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
local decade = tonumber(string.match(findvar.v, '^(%d+)yn'))
local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}}
if century == 0 then century = 1 end --no 0th century
if string.match(decade, '00$') then
century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st
end
-- Manx: "Filmyn X veih ny 1990yn" -> "Filmyn X veih'n 20oo eash"; "Scannaneaght ayns ny 1990yn" -> "Scannaneaght 'sy 20oo eash"
local cfirstpart, clastpart, centurycat, exists
for from, to in pairs(CENTURY_LINKERS) do
local stem = mw.ustring.match(firstpart,
'^(.-)%s*' .. mw.ustring.gsub(from, '%p', '%%%0') .. '$')
if stem then
cfirstpart = mw.text.trim(stem .. ' ' .. to)
clastpart = mw.text.trim('eash ' .. lastpart)
centurycat = mw.text.trim( cfirstpart..' '..p.addord(century)..' '..clastpart )
exists = catexists(centurycat)
break
end
end
if not cfirstpart then --no Manx rule for this wording: original English-style check
cfirstpart = firstpart
clastpart = ' century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
if not exists then --check for hyphenated century
clastpart = '-century '..lastpart
centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart )
exists = catexists(centurycat)
end
end
if exists then
navborder = false
trackcat(29, 'Category series navigation decade and century')
local nav2 = nav_nordinal( frame, cfirstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats)
return wrap( nav1, nav2 )
else
return wrap( nav1 )
end
elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats
return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25%
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; <1% of cats
return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1
elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; <<1% of cats
local ordinal = true
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; <<1% of cats
local ordinal = false
return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; <<1% of cats
return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) )
elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); <<<1% of cats
local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 & 45 (ndash & keyboard hyphen); mw req'd
if hyphen == nil then
hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen()
end
return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) )
else --malformed
errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ')
return p.failedcat(errors, 'N')..table.concat(ttrackingcats)
end
end
return p
60uzcmt0pamig42u98iwu1abnbtx16c
Clowan:For
10
44247
396402
367498
2026-11-06T14:36:53Z
MacTire02
219
aastiurey elley
396402
wikitext
text/x-wiki
#REDIRECT [[Clowan:Son]]
sw26y3uayw7034n9jxgsk1zb8l40avv
A hetedik testvér
0
56258
396432
396116
2026-11-06T16:46:53Z
~2026-58972-40
24080
/* Kianglaghyn magh */
396432
wikitext
text/x-wiki
{{DISPLAYTITLE:''A hetedik testvér''}}
{{WD Kishtey Fys Fillym
| kiaull = Wolfgang von Henko
| colught_gientyn = {{Ubl|[[PannóniaFilm]]|[[Magyar Televízió]]|RealFilm|Feature Films for Families}}
| skeaylley = {{Date fillym|df=y|1995|09|07|y Ghermaan|1996|04|04|yn Ungaar|ref2=<ref>{{cite web|url=http://www.europa-cinemas.org/en/films/fiche_film.php?IdFilm=11108|title=''Bobo und die Hasenbande''|accessdate=2023-10-09|publisher=Europa Cinemas|archive-url=https://web.archive.org/web/20110724044042/http://www.europa-cinemas.org/en/films/fiche_film.php?IdFilm=11108 |archive-date=2011-07-24 }}</ref>|1997|||ny Steatyn Unnaneysit}}
| traa_roie = {{ubl|'''Yn Ungaar''':|80 minnid|'''Y Ghermaan''':|84 minnid| '''Ny Steatyn Unnaneysit''':|74 minnid}}
| çhengey = {{ubl|Ungaarish|Germaanish|Baarle}}
}}
She fillym aittys drama bioghit da paitçhyn veih'n vlein 1995 eh '''{{lang|hu|A hetedik testvér}}''' ({{langx|de|Bobo und die Hasenbande}}, {{langx|en|The Seventh Brother}}). V'eh stiurit lesh Jenő Koltai as [[Tibor Hernádi]] as gientit ec [[Pannonia Film Studio]] 'syn Ungaar. V'eh er ny cho-ghientyn marish [[Magyar Televízió]], RealFilm 'sy Ghermaan, Feature Films for Families ayns ny Steatyn Unnaneysit.
==Imraaghyn==
{{rolleyimraaghyn}}
==Kianglaghyn magh==
*{{IMDb title|0112545}}
{{gurneil eaghtyrys}}
{{DEFAULTSORT:hetedik testver}}
[[Ronney:Filmyn bioghit veih'n vlein 1995]]
[[Ronney:Filmyn veih'n vlein 1995]]
[[Ronney:Filmyn bioghit da paitçhyn veih ny 1990yn]]
[[Ronney:Lhiegganyn filmyn caghlaaee]]
[[Ronney:Ard-filmyn bioghit Americaanagh]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn bioghit bentyn rish lughtyn-thie]]
[[Ronney:Filmyn bioghit bentyn rish caarjys]]
[[Ronney:Filmyn bioghit bentyn rish conneeyn as mwaaee]]
[[Ronney:Filmyn bioghit bentyn rish beiyn taggloo]]
[[Ronney:Filmyn bioghit soit ayns keylljyn]]
[[Ronney:Filmyn scoarit lesh Merrill Jenson]]
[[Ronney:Ard-filmyn bioghit Germaanagh]]
[[Ronney:Filmyn Germaanagh da paitçhyn]]
[[Ronney:Filmyn bioghit Ungaaragh]]
[[Ronney:Filmyn Ungaaragh da paitçhyn]]
[[Ronney:Filmyn Ungaaragh]]
[[Ronney:Filmyn 'syn Ungaarish]]
k1lyurgmyn9j1qhlecrjzmj0ra2r939
396438
396432
2026-11-06T18:04:39Z
~2026-58972-40
24080
396438
wikitext
text/x-wiki
{{DISPLAYTITLE:''A hetedik testvér''}}
{{WD Kishtey Fys Fillym
| kiaull = Wolfgang von Henko
| colught_gientyn = {{Ubl|[[PannóniaFilm]]|[[Magyar Televízió]]|RealFilm|Feature Films for Families}}
| skeaylley = {{Date fillym|df=y|1995|09|07|y Ghermaan|1996|04|04|yn Ungaar|ref2=<ref>{{cite web|url=http://www.europa-cinemas.org/en/films/fiche_film.php?IdFilm=11108|title=''Bobo und die Hasenbande''|accessdate=2023-10-09|publisher=Europa Cinemas|archive-url=https://web.archive.org/web/20110724044042/http://www.europa-cinemas.org/en/films/fiche_film.php?IdFilm=11108 |archive-date=2011-07-24 }}</ref>|1997|||ny Steatyn Unnaneysit}}
| traa_roie = {{ubl|'''Yn Ungaar''':|80 minnid|'''Y Ghermaan''':|84 minnid| '''Ny Steatyn Unnaneysit''':|74 minnid}}
| çhengey = {{ubl|Ungaarish|Germaanish|Baarle}}
}}
She fillym aittys drama bioghit da paitçhyn veih'n vlein 1995 eh '''{{lang|hu|A hetedik testvér}}''' ({{langx|de|Bobo und die Hasenbande}}, {{langx|en|The Seventh Brother}}). V'eh stiurit lesh Jenő Koltai as [[Tibor Hernádi]] as gientit ec [[Pannonia Film Studio]] 'syn Ungaar. V'eh er ny cho-ghientyn marish [[Magyar Televízió]], RealFilm 'sy Ghermaan, as Feature Films for Families ayns ny Steatyn Unnaneysit.
==Imraaghyn==
{{rolleyimraaghyn}}
==Kianglaghyn magh==
*{{IMDb title|0112545}}
{{gurneil eaghtyrys}}
{{DEFAULTSORT:hetedik testver}}
[[Ronney:Filmyn bioghit veih'n vlein 1995]]
[[Ronney:Filmyn veih'n vlein 1995]]
[[Ronney:Filmyn bioghit da paitçhyn veih ny 1990yn]]
[[Ronney:Lhiegganyn filmyn caghlaaee]]
[[Ronney:Ard-filmyn bioghit Americaanagh]]
[[Ronney:Filmyn bioghit bentyn rish moddee]]
[[Ronney:Filmyn bioghit bentyn rish lughtyn-thie]]
[[Ronney:Filmyn bioghit bentyn rish caarjys]]
[[Ronney:Filmyn bioghit bentyn rish conneeyn as mwaaee]]
[[Ronney:Filmyn bioghit bentyn rish beiyn taggloo]]
[[Ronney:Filmyn bioghit soit ayns keylljyn]]
[[Ronney:Filmyn scoarit lesh Merrill Jenson]]
[[Ronney:Ard-filmyn bioghit Germaanagh]]
[[Ronney:Filmyn Germaanagh da paitçhyn]]
[[Ronney:Filmyn bioghit Ungaaragh]]
[[Ronney:Filmyn Ungaaragh da paitçhyn]]
[[Ronney:Filmyn Ungaaragh]]
[[Ronney:Filmyn 'syn Ungaarish]]
a7vesnk1tfqou8wb4f78l1haek56cvr
Ronney:Filmyn bioghit veih'n vlein 1995
14
56525
396354
2026-11-06T12:17:25Z
MacTire02
219
ronney noa
396354
wikitext
text/x-wiki
{{kione ronney filmyn shaanrey YYYY}}
[[Ronney:Bioghys 'sy vlein {{Title year}}]]
21ngsy1upps2ot6b0lmephtvk4yosf0
Clowan:Kione ronney filmyn shaanrey YYYY/core
10
56526
396355
2026-11-06T12:27:21Z
MacTire02
219
clowan noa
396355
wikitext
text/x-wiki
<includeonly><!--
-->{{Category explanation|'''[[Fillym {{{genre|}}}|Filmyn {{{shaanrey|}}}]]''' er ny skeaylley magh da'n chied cheayrt 'sy vlein '''[[{{{year|}}}]]'''. Cha nel eh goaill stiagh filmyn nagh row skeaylt magh}}
{{Category series navigation|skip-gaps=yes}}
{{Category more if exists|Rolley filmyn {{{genre|}}} veih'n vlein {{{year|}}}|Scannaneaght 'sy vlein {{{year|}}}}}
[[Ronney:Filmyn {{{genre|}}} rere blein|{{{year|}}}]]
[[Ronney:Filmyn {{{genre|}}} veih ny {{DECADE|{{{year|}}}}}|{{{year|}}}]]
[[Ronney:Filmyn veih'n vlein {{{year|}}} rere shaanrey|{{ucfirst:{{{genre|}}}}}]]<!--
--></includeonly><!--
--><noinclude><!--
-->{{Documentation|content=This is a subpage of [[Template:{{ROOTPAGENAME}}]].}}</noinclude>
o4zfzyezdoi95yxedc6j4w6nuq1z5nb
Clowan:Kione ronney filmyn shaanrey YYYY
10
56527
396356
2026-11-06T12:59:34Z
MacTire02
219
Gaelg
396356
wikitext
text/x-wiki
<includeonly><!--
-->{{#if: {{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih'n vlein %d%d%d%d$|nomatch=}}
| {{Kione ronney filmyn shaanrey YYYY/core|year={{#invoke:String|match|s={{PAGENAME}}|pattern=(%d%d%d%d)$|nomatch=}}|genre={{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih'n vlein %d%d%d%d$|nomatch=}}|shaanrey={{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih'n vlein %d%d%d%d$|nomatch=}}}}
}}<!--
--></includeonly><!--
# Note {{Automatic category TOC}} needs to be available whether or not this template page has been transcluded
-->{{Automatic category TOC}}<!--
--><noinclude><!--
-->{{Documentation}}</noinclude>
acjqgf717vq2myldhyyvqusfnypetak
396358
396356
2026-11-06T13:02:14Z
MacTire02
219
++
396358
wikitext
text/x-wiki
<includeonly><!--
-->{{#if: {{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih[^ ]* vlein %d%d%d%d$|nomatch=}}
| {{Kione ronney filmyn shaanrey YYYY/core|year={{#invoke:String|match|s={{PAGENAME}}|pattern=(%d%d%d%d)$|nomatch=}}|genre={{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih[^ ]* vlein %d%d%d%d$|nomatch=}}|shaanrey={{#invoke:String|match|s={{PAGENAME}}|pattern=^Filmyn (.-) veih[^ ]* vlein %d%d%d%d$|nomatch=}}}}
}}<!--
--></includeonly><!--
# Note {{Automatic category TOC}} needs to be available whether or not this template page has been transcluded
-->{{Automatic category TOC}}<!--
--><noinclude><!--
-->{{Documentation}}</noinclude>
9vk05z2czx21an5umwvtwkw98ckqga6
Ronney:Filmyn bioghit rere blein
14
56528
396359
2026-11-06T13:03:51Z
MacTire02
219
ronney noa
396359
wikitext
text/x-wiki
{{Commons category|Animated films by year|Filmyn bioghit rere blein}}
{{moir-ronney}}
[[Ronney:Filmyn bioghit| Blein]]
[[Ronney:Filmyn rere blein|+Bioghit]]
[[Ronney:Bioghys rere blein| Filmyn]]
[[Ronney:Feeshanyn rere blein|Bioghit]]
{{Category TOC custom|start=1900}}
2n9be69m0mf2oy0sxh6gs77d1hz8dlb
Ronney:Feeshanyn rere blein
14
56529
396360
2026-11-06T13:05:23Z
MacTire02
219
ronney noa
396360
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Feeshan|.Blein]]
[[Ronney:Obbraghyn rere sorçh as blein]]
1jhk5ei87tqep36u3sftktcylmcslq7
Ronney:Filmyn bioghit veih ny 1990yn
14
56530
396361
2026-11-06T13:09:58Z
MacTire02
219
ronney noa
396361
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Filmyn veih ny 1990yn|Bioghit]]
[[Ronney:Filmyn bioghit rere jeihaght|1990]]
[[Ronney:Bioghys ayns ny 1990yn]]
[[Ronney:Filmyn bioghit veih'n 20oo eash|1990]]
6c0716a1g34f0xjtks91s4xwn1fby99
Ronney:Bioghys rere blein
14
56531
396362
2026-11-06T13:11:13Z
MacTire02
219
ronney noa
396362
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Ny h-ellynyn rere blein| Bioghys]]
[[Ronney:Shennaghys y vioghys]]
[[Ronney:Meanyn mooarey rere blein| Bioghys]]
{{Category TOC custom|start=1900}}
2nxplpxue2sgcx515w6jtgcz3zw8trt
Ronney:Meanyn mooarey rere blein
14
56532
396363
2026-11-06T13:12:34Z
MacTire02
219
ronney noa
396363
wikitext
text/x-wiki
{{moir-ronney}}
{{Category see also|Meanyn mooarey rere eash|Meanyn mooarey rere laa yn çhiaghtin|Meanyn mooarey rere jeihaght}}
[[Ronney:Ronnaghyn rere blein]]
[[Ronney:Meanyn mooarey rere earish| Blein]]
8128qpmck81mcmxwc6knj5p9sg5d6p0
Ronney:Shennaghys y vioghys
14
56533
396364
2026-11-06T13:13:49Z
MacTire02
219
ronney noa
396364
wikitext
text/x-wiki
{{Commons category|Animation history|Shennaghys y vioghys}}
{{Cat main}}
[[Ronney:Bioghys]]
[[Ronney:Shennaghys y scannaneaght|Vioghys]]
tw6cp5lkfjoe8v8304ds0e80n1760ed
Ronney:Shennaghys y scannaneaght
14
56534
396365
2026-11-06T13:15:07Z
MacTire02
219
ronney noa
396365
wikitext
text/x-wiki
{{catmain}}
{{commonscat|History of cinema|Shennaghys y scannaneaght}}
[[Ronney:Scannaneaght]]
[[Ronney:Shennaghys ny meanyn mooarey|Scannaneaght]]
[[Ronney:Shennaghys y çhaghnoaylleeaght|Scannaneaght]]
ms5m5bo5qvb4rdbeylg949lsi146ylg
Ronney:Filmyn bioghit rere jeihaght
14
56535
396366
2026-11-06T13:16:47Z
MacTire02
219
ronney noa
396366
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Filmyn bioghit| Jeihaght]]
[[Ronney:Bioghys rere jeihaght]]
[[Ronney:Filmyn rere jeihaght|Bioghit]]
[[Ronney:Filmyn rere shaanrey as jeihaght|Bioghit]]
oj858ftwlaliughhwj6u88mdenfy19h
Ronney:Bioghys rere jeihaght
14
56536
396367
2026-11-06T13:17:51Z
MacTire02
219
ronney noa
396367
wikitext
text/x-wiki
[[Ronney:Ronnaghyn rere jeihaght]]
[[Ronney:Shennaghys y vioghys]]
d04of2eque29t86bl20bj5bxxm6v5xm
Ronney:Filmyn rere shaanrey as jeihaght
14
56537
396368
2026-11-06T13:19:09Z
MacTire02
219
ronney noa
396368
wikitext
text/x-wiki
{{Category see also|Filmyn rere jeihaght as shaanrey}}
{{moir-ronney}}
[[Ronney:Filmyn rere shaanrey| Jeihaght]]
[[Ronney:Filmyn rere jeihaght| Shaanrey]]
9dhzk6phqpgg2fz72x5lecidxgo9rfz
Ronney:Filmyn bioghit veih'n 20oo eash
14
56538
396369
2026-11-06T13:20:32Z
MacTire02
219
ronney noa
396369
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Filmyn veih'n 20oo eash|Bioghit]]
[[Ronney:Filmyn bioghit rere eash| 20]]
[[Ronney:Bioghys 'sy 20oo eash]]
ivwkvoozjd4hfmzl9mh3b20d5oae1ho
Ronney:Bioghys 'sy 20oo eash
14
56539
396370
2026-11-06T13:21:42Z
MacTire02
219
ronney noa
396370
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Ny h-ellynyn 'sy 20oo eash]]
[[Ronney:Bioghys rere eash|20]]
[[Ronney:Scannaneaght 'sy 20oo eash|*Bioghys]]
[[Ronney:Obbraghyn veih'n 20oo eash]]
8eu1jta0bugjk749y2vzu66dzq8vwil
Ronney:Scannaneaght 'sy 20oo eash
14
56540
396371
2026-11-06T13:23:08Z
MacTire02
219
ronney noa
396371
wikitext
text/x-wiki
{{FilmynRereEash|20oo|19|20|19d|21d}}
acpehuba4qvmru4052a8wsi161yvze0
396383
396371
2026-11-06T13:44:53Z
MacTire02
219
++
396383
wikitext
text/x-wiki
{{FilmynRereEash|20oo|19|20|19oo|21d}}
ckztg7e6k8ldhiittbqnj2i4wsdnuhq
Clowan:Ronney filmyn rere eash
10
56541
396372
2026-11-06T13:25:17Z
MacTire02
219
clowan noa
396372
wikitext
text/x-wiki
{{KioneRonneyFilmynAynsEashRereBlein|ThisCenturyOrdinal={{{1}}}|ThisCenturyDecimal={{{2}}}|NextCenturyDecimal={{{3}}}|PreviousCenturyOrdinal={{{4}}}|NextCenturyOrdinal={{{5}}}|EntityTarget=Years in film|WorkTypeLowercase=in film}}
bn991nlcl0h4ybot5shfafv0p1pj6dz
396373
396372
2026-11-06T13:27:35Z
MacTire02
219
MacTire02 moved page [[Clowan:FilmynRereEash]] to [[Clowan:Ronney filmyn rere eash]]
396372
wikitext
text/x-wiki
{{KioneRonneyFilmynAynsEashRereBlein|ThisCenturyOrdinal={{{1}}}|ThisCenturyDecimal={{{2}}}|NextCenturyDecimal={{{3}}}|PreviousCenturyOrdinal={{{4}}}|NextCenturyOrdinal={{{5}}}|EntityTarget=Years in film|WorkTypeLowercase=in film}}
bn991nlcl0h4ybot5shfafv0p1pj6dz
396379
396373
2026-11-06T13:39:39Z
MacTire02
219
++
396379
wikitext
text/x-wiki
{{Kione ronney filmyn ayns eash rere blein|ThisCenturyOrdinal={{{1}}}|ThisCenturyDecimal={{{2}}}|NextCenturyDecimal={{{3}}}|PreviousCenturyOrdinal={{{4}}}|NextCenturyOrdinal={{{5}}}|EntityTarget=Scannaneaght}}
fuxybs8a4w5mfa9f9z6tj1zxd14krze
Clowan:FilmynRereEash
10
56542
396374
2026-11-06T13:27:35Z
MacTire02
219
MacTire02 moved page [[Clowan:FilmynRereEash]] to [[Clowan:Ronney filmyn rere eash]]
396374
wikitext
text/x-wiki
#REDIRECT [[Clowan:Ronney filmyn rere eash]]
e23y12g4by35go4ym71gcpa5yc9gb5v
Clowan:Kione ronney filmyn ayns eash rere blein
10
56543
396375
2026-11-06T13:30:13Z
MacTire02
219
++; ny smoo ry-hyndaa
396375
wikitext
text/x-wiki
{| id="toc" style="margin-left:auto; margin-right:auto;" class="toc"
| style="text-align:center;" |
{{Category link if exists|{{{PreviousCenturyOrdinal}}} century {{{WorkTypeLowercase}}}|←}}
[[{{{EntityTarget}}}|Years]] of the [[{{{ThisCenturyOrdinal}}} century]] {{{WorkTypeLowercase}}}
{{Category link if exists|{{{NextCenturyOrdinal}}} century {{{WorkTypeLowercase}}}|→}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}00s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}00s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}01 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}01}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}02 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}02}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}03 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}03}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}04 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}04}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}05 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}05}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}06 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}06}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}07 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}07}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}08 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}08}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}09 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}09}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}10 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}10}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}10s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}10s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}11 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}11}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}12 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}12}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}13 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}13}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}14 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}14}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}15 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}15}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}16 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}16}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}17 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}17}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}18 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}18}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}19 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}19}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}20 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}20}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}20s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}20s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}21 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}21}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}22 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}22}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}23 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}23}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}24 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}24}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}25 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}25}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}26 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}26}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}27 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}27}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}28 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}28}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}29 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}29}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}30 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}30}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}30s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}30s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}31 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}31}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}32 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}32}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}33 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}33}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}34 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}34}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}35 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}35}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}36 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}36}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}37 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}37}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}38 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}38}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}39 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}39}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}40 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}40}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}40s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}40s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}41 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}41}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}42 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}42}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}43 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}43}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}44 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}44}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}45 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}45}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}46 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}46}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}47 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}47}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}48 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}48}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}49 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}49}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}50 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}50}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}50s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}50s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}51 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}51}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}52 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}52}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}53 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}53}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}54 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}54}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}55 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}55}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}56 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}56}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}57 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}57}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}58 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}58}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}59 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}59}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}60 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}60}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}60yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}60yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}61 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}61}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}62 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}62}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}63 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}63}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}64 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}64}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}65 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}65}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}66 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}66}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}67 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}67}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}68 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}68}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}69 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}69}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}70 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}70}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}70yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}70yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}71 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}71}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}72 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}72}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}73 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}73}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}74 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}74}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}75 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}75}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}76 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}76}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}77 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}77}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}78 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}78}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}79 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}79}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}80 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}80}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}80yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}80yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}81 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}81}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}82 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}82}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}83 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}83}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}84 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}84}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}85 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}85}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}86 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}86}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}87 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}87}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}88 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}88}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}89 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}89}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}90 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}90}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}90yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}90yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}91 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}91}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}92 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}92}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}93 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}93}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}94 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}94}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}95 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}95}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}96 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}96}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}97 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}97}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}98 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}98}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}99 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}99}}
:{{Category link if exists|{{{NextCenturyDecimal}}}00 {{{WorkTypeLowercase}}}|{{{NextCenturyDecimal}}}00}}
{{endflatlist}}
|}{{#ifeq:{{NAMESPACE}}|Template<!--
-->|[[Category:Works-by-century templates|{{PAGENAME}}]]<!--
-->|<!--
-->[[Ronney:Scannaneaght rere eash{{!}}{{{ThisCenturyOrdinal}}}]]<!--
-->[[Ronney:Ny h-ellynyn 'sy {{{ThisCenturyOrdinal}}} eash]]<!--
-->[[Ronney:Meanyn mooarey 'sy {{{ThisCenturyOrdinal}}}]]<!--
-->}}
5554sxjl1haddno9n4m0i5c0wfc7ii6
396376
396375
2026-11-06T13:30:50Z
MacTire02
219
MacTire02 moved page [[Clowan:KioneRonneyFilmynAynsEashRereBlein]] to [[Clowan:Kione ronney filmyn ayns eash rere blein]]
396375
wikitext
text/x-wiki
{| id="toc" style="margin-left:auto; margin-right:auto;" class="toc"
| style="text-align:center;" |
{{Category link if exists|{{{PreviousCenturyOrdinal}}} century {{{WorkTypeLowercase}}}|←}}
[[{{{EntityTarget}}}|Years]] of the [[{{{ThisCenturyOrdinal}}} century]] {{{WorkTypeLowercase}}}
{{Category link if exists|{{{NextCenturyOrdinal}}} century {{{WorkTypeLowercase}}}|→}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}00s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}00s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}01 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}01}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}02 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}02}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}03 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}03}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}04 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}04}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}05 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}05}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}06 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}06}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}07 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}07}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}08 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}08}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}09 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}09}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}10 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}10}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}10s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}10s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}11 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}11}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}12 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}12}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}13 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}13}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}14 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}14}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}15 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}15}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}16 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}16}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}17 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}17}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}18 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}18}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}19 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}19}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}20 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}20}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}20s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}20s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}21 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}21}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}22 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}22}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}23 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}23}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}24 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}24}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}25 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}25}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}26 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}26}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}27 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}27}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}28 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}28}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}29 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}29}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}30 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}30}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}30s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}30s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}31 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}31}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}32 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}32}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}33 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}33}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}34 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}34}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}35 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}35}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}36 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}36}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}37 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}37}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}38 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}38}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}39 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}39}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}40 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}40}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}40s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}40s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}41 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}41}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}42 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}42}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}43 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}43}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}44 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}44}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}45 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}45}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}46 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}46}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}47 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}47}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}48 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}48}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}49 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}49}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}50 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}50}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}50s {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}50s {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}51 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}51}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}52 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}52}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}53 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}53}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}54 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}54}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}55 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}55}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}56 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}56}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}57 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}57}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}58 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}58}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}59 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}59}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}60 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}60}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}60yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}60yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}61 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}61}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}62 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}62}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}63 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}63}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}64 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}64}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}65 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}65}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}66 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}66}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}67 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}67}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}68 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}68}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}69 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}69}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}70 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}70}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}70yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}70yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}71 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}71}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}72 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}72}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}73 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}73}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}74 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}74}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}75 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}75}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}76 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}76}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}77 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}77}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}78 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}78}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}79 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}79}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}80 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}80}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}80yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}80yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}81 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}81}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}82 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}82}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}83 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}83}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}84 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}84}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}85 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}85}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}86 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}86}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}87 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}87}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}88 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}88}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}89 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}89}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}90 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}90}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|{{{ThisCenturyDecimal}}}90yn {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}90yn {{{WorkTypeLowercase}}}}}}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}91 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}91}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}92 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}92}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}93 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}93}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}94 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}94}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}95 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}95}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}96 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}96}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}97 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}97}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}98 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}98}}
:{{Category link if exists|{{{ThisCenturyDecimal}}}99 {{{WorkTypeLowercase}}}|{{{ThisCenturyDecimal}}}99}}
:{{Category link if exists|{{{NextCenturyDecimal}}}00 {{{WorkTypeLowercase}}}|{{{NextCenturyDecimal}}}00}}
{{endflatlist}}
|}{{#ifeq:{{NAMESPACE}}|Template<!--
-->|[[Category:Works-by-century templates|{{PAGENAME}}]]<!--
-->|<!--
-->[[Ronney:Scannaneaght rere eash{{!}}{{{ThisCenturyOrdinal}}}]]<!--
-->[[Ronney:Ny h-ellynyn 'sy {{{ThisCenturyOrdinal}}} eash]]<!--
-->[[Ronney:Meanyn mooarey 'sy {{{ThisCenturyOrdinal}}}]]<!--
-->}}
5554sxjl1haddno9n4m0i5c0wfc7ii6
396378
396376
2026-11-06T13:38:59Z
MacTire02
219
prowal
396378
wikitext
text/x-wiki
{| id="toc" style="margin-left:auto; margin-right:auto;" class="toc"
| style="text-align:center;" |
{{Category link if exists|Scannaneaght 'sy {{{PreviousCenturyOrdinal}}} eash|←}}
[[{{{EntityTarget|Scannaneaght}}}]] 'sy [[{{{ThisCenturyOrdinal}}} eash]] rere blein
{{Category link if exists|Scannaneaght 'sy {{{NextCenturyOrdinal}}} eash|→}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}00yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}00yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}01|{{{ThisCenturyDecimal}}}01}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}02|{{{ThisCenturyDecimal}}}02}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}03|{{{ThisCenturyDecimal}}}03}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}04|{{{ThisCenturyDecimal}}}04}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}05|{{{ThisCenturyDecimal}}}05}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}06|{{{ThisCenturyDecimal}}}06}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}07|{{{ThisCenturyDecimal}}}07}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}08|{{{ThisCenturyDecimal}}}08}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}09|{{{ThisCenturyDecimal}}}09}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}10|{{{ThisCenturyDecimal}}}10}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}10yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}10yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}11|{{{ThisCenturyDecimal}}}11}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}12|{{{ThisCenturyDecimal}}}12}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}13|{{{ThisCenturyDecimal}}}13}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}14|{{{ThisCenturyDecimal}}}14}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}15|{{{ThisCenturyDecimal}}}15}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}16|{{{ThisCenturyDecimal}}}16}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}17|{{{ThisCenturyDecimal}}}17}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}18|{{{ThisCenturyDecimal}}}18}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}19|{{{ThisCenturyDecimal}}}19}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}20|{{{ThisCenturyDecimal}}}20}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}20yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}20yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}21|{{{ThisCenturyDecimal}}}21}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}22|{{{ThisCenturyDecimal}}}22}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}23|{{{ThisCenturyDecimal}}}23}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}24|{{{ThisCenturyDecimal}}}24}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}25|{{{ThisCenturyDecimal}}}25}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}26|{{{ThisCenturyDecimal}}}26}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}27|{{{ThisCenturyDecimal}}}27}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}28|{{{ThisCenturyDecimal}}}28}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}29|{{{ThisCenturyDecimal}}}29}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}30|{{{ThisCenturyDecimal}}}30}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}30yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}30yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}31|{{{ThisCenturyDecimal}}}31}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}32|{{{ThisCenturyDecimal}}}32}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}33|{{{ThisCenturyDecimal}}}33}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}34|{{{ThisCenturyDecimal}}}34}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}35|{{{ThisCenturyDecimal}}}35}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}36|{{{ThisCenturyDecimal}}}36}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}37|{{{ThisCenturyDecimal}}}37}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}38|{{{ThisCenturyDecimal}}}38}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}39|{{{ThisCenturyDecimal}}}39}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}40|{{{ThisCenturyDecimal}}}40}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}40yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}40yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}41|{{{ThisCenturyDecimal}}}41}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}42|{{{ThisCenturyDecimal}}}42}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}43|{{{ThisCenturyDecimal}}}43}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}44|{{{ThisCenturyDecimal}}}44}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}45|{{{ThisCenturyDecimal}}}45}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}46|{{{ThisCenturyDecimal}}}46}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}47|{{{ThisCenturyDecimal}}}47}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}48|{{{ThisCenturyDecimal}}}48}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}49|{{{ThisCenturyDecimal}}}49}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}50|{{{ThisCenturyDecimal}}}50}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}50yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}50yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}51|{{{ThisCenturyDecimal}}}51}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}52|{{{ThisCenturyDecimal}}}52}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}53|{{{ThisCenturyDecimal}}}53}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}54|{{{ThisCenturyDecimal}}}54}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}55|{{{ThisCenturyDecimal}}}55}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}56|{{{ThisCenturyDecimal}}}56}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}57|{{{ThisCenturyDecimal}}}57}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}58|{{{ThisCenturyDecimal}}}58}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}59|{{{ThisCenturyDecimal}}}59}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}60|{{{ThisCenturyDecimal}}}60}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}60yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}60yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}61|{{{ThisCenturyDecimal}}}61}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}62|{{{ThisCenturyDecimal}}}62}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}63|{{{ThisCenturyDecimal}}}63}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}64|{{{ThisCenturyDecimal}}}64}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}65|{{{ThisCenturyDecimal}}}65}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}66|{{{ThisCenturyDecimal}}}66}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}67|{{{ThisCenturyDecimal}}}67}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}68|{{{ThisCenturyDecimal}}}68}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}69|{{{ThisCenturyDecimal}}}69}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}70|{{{ThisCenturyDecimal}}}70}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}70yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}70yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}71|{{{ThisCenturyDecimal}}}71}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}72|{{{ThisCenturyDecimal}}}72}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}73|{{{ThisCenturyDecimal}}}73}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}74|{{{ThisCenturyDecimal}}}74}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}75|{{{ThisCenturyDecimal}}}75}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}76|{{{ThisCenturyDecimal}}}76}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}77|{{{ThisCenturyDecimal}}}77}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}78|{{{ThisCenturyDecimal}}}78}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}79|{{{ThisCenturyDecimal}}}79}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}80|{{{ThisCenturyDecimal}}}80}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}80yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}80yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}81|{{{ThisCenturyDecimal}}}81}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}82|{{{ThisCenturyDecimal}}}82}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}83|{{{ThisCenturyDecimal}}}83}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}84|{{{ThisCenturyDecimal}}}84}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}85|{{{ThisCenturyDecimal}}}85}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}86|{{{ThisCenturyDecimal}}}86}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}87|{{{ThisCenturyDecimal}}}87}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}88|{{{ThisCenturyDecimal}}}88}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}89|{{{ThisCenturyDecimal}}}89}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}90|{{{ThisCenturyDecimal}}}90}}
{{endflatlist}}
|-
| style="padding-left:5px; padding-right:5px;" |{{flatlist}}
;{{nobold|{{Category link if exists|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}90yn|Scannaneaght ayns ny {{{ThisCenturyDecimal}}}90yn}}}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}91|{{{ThisCenturyDecimal}}}91}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}92|{{{ThisCenturyDecimal}}}92}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}93|{{{ThisCenturyDecimal}}}93}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}94|{{{ThisCenturyDecimal}}}94}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}95|{{{ThisCenturyDecimal}}}95}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}96|{{{ThisCenturyDecimal}}}96}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}97|{{{ThisCenturyDecimal}}}97}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}98|{{{ThisCenturyDecimal}}}98}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{ThisCenturyDecimal}}}99|{{{ThisCenturyDecimal}}}99}}
:{{Category link if exists|Scannaneaght 'sy vlein {{{NextCenturyDecimal}}}00|{{{NextCenturyDecimal}}}00}}
{{endflatlist}}
|}{{#ifeq:{{NAMESPACE}}|{{ns:10}}||<!--
-->[[Ronney:Scannaneaght rere eash|{{{ThisCenturyOrdinal}}}]]<!--
-->[[Ronney:Ny h-ellynyn 'sy {{{ThisCenturyOrdinal}}} eash]]<!--
-->[[Ronney:Meanyn mooarey 'sy {{{ThisCenturyOrdinal}}} eash]]<!--
-->}}
dtyimomo5lacudnpc01liqbjzsvsh2r
Clowan:KioneRonneyFilmynAynsEashRereBlein
10
56544
396377
2026-11-06T13:30:50Z
MacTire02
219
MacTire02 moved page [[Clowan:KioneRonneyFilmynAynsEashRereBlein]] to [[Clowan:Kione ronney filmyn ayns eash rere blein]]
396377
wikitext
text/x-wiki
#REDIRECT [[Clowan:Kione ronney filmyn ayns eash rere blein]]
dpfd8ysbw5wxtk5jjgeri09g4lzpzb2
Ronney:Scannaneaght rere eash
14
56545
396380
2026-11-06T13:41:34Z
MacTire02
219
ronney noa
396380
wikitext
text/x-wiki
{{Category see also|Scannaneaght rere blein|Scannaneaght rere jeihaght}}
{{For|filmyn as shaanraghyn fillym er lheh rere eash|Ronney:Filmyn rere eash}}
[[Ronney:Scannaneaght| Eash]]
[[Ronney:Ny h-ellynyn rere eash]]
[[Ronney:Meanyn mooarey rere eash]]
71wbyw8tslxoh7hmn2ptlw0lnmn7l1b
Ronney:Scannaneaght 'sy 21d eash
14
56546
396382
2026-11-06T13:43:47Z
MacTire02
219
ronney noa
396382
wikitext
text/x-wiki
{{FilmynRereEash|21d|20|19|20oo|22h}}
dha1c4n76yn485m24mvvwoexsf414ex
Ronney:Bioghys rere eash
14
56547
396384
2026-11-06T13:45:44Z
MacTire02
219
ronney noa
396384
wikitext
text/x-wiki
[[Ronney:Ny h-ellynyn rere eash|Bioghys]]
[[Ronney:Shennaghys y vioghys]]
36ggcob6jbbe955mpatgtvr2a7ap3go
Ronney:Filmyn bioghit rere eash
14
56548
396385
2026-11-06T13:46:58Z
MacTire02
219
ronney noa
396385
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Filmyn bioghit| Eash]]
[[Ronney:Filmyn rere eash|Bioghit]]
[[Ronney:Bioghys rere eash]]
ltznqtc1qumac1s8b14ygf3gzwhi171
Ronney:Bioghys ayns ny 1990yn
14
56549
396386
2026-11-06T13:48:32Z
MacTire02
219
ronney noa
396386
wikitext
text/x-wiki
{{Navseasoncats with centuries below decade}}
[[Ronney:Ny h-ellynyn ayns ny 1990yn]]
[[Ronney:Bioghys rere jeihaght]]
[[Ronney:Scannaneaght ayns ny 1990yn|*Bioghys]]
[[Ronney:Obbraghyn veih ny 1990yn]]
[[Ronney:Bioghys 'sy 20oo eash|1990]]
q146fq6fpqt78arc0mpkxweuzf7rpq8
Clowan:Navseasoncats with centuries below decade
10
56550
396387
2026-11-06T13:49:25Z
MacTire02
219
aastiurey
396387
wikitext
text/x-wiki
#REDIRECT [[Clowan:Category series navigation]]
ovu6zolvy3nyy8doxpuulftt4o8wsec
Ronney:Category series navigation decade and century
14
56551
396390
2026-11-06T14:01:43Z
MacTire02
219
++
396390
wikitext
text/x-wiki
{{Tracking category|text=}}
{{Category see also|Category series navigation year and decade}}
This tracking category contains pages where {{tl|Category series navigation}} automatically produces a 2nd navigation bar for the parent century category, if it exists.
Pages in this category should only be added by [[Module:Category series navigation]].
{{CatAutoTOC}}
[[Ronney:Glenney category series navigation|T]]
dfq9skrdea3nbnwacr67aalg4ojiq01
Ronney:Scannaneaght ayns ny 1990yn
14
56552
396391
2026-11-06T14:03:16Z
MacTire02
219
ronney noa
396391
wikitext
text/x-wiki
{{infilmdecade|19|9|20th}}
[[Ronney:Scannaneaght 'sy 20oo eash|1990]]
[[Ronney:Ny h-ellynyn ayns ny 1990yn]]
[[Ronney:Meanyn mooarey ayns ny 1990yn]]
lu4kfx7nkjjorzcggoop7e0flymtu0q
396392
396391
2026-11-06T14:04:05Z
MacTire02
219
++
396392
wikitext
text/x-wiki
{{FillymAynsJeihaght|19|9|20oo}}
[[Ronney:Scannaneaght 'sy 20oo eash|1990]]
[[Ronney:Ny h-ellynyn ayns ny 1990yn]]
[[Ronney:Meanyn mooarey ayns ny 1990yn]]
4zoigh4nlgfnjdcui5v3mmfhlxj9imj
396397
396392
2026-11-06T14:11:38Z
MacTire02
219
prowal
396397
wikitext
text/x-wiki
{{FillymAynsJeihaght|19|9|20oo}}
[[Ronney:Scannaneaght 'sy 20oo eash|1990]]
[[Ronney:Ny h-ellynyn ayns ny 1990yn]]
[[Ronney:Meanyn mooarey ayns ny 1990yn]]
l
sewdhytj0xbzjk452vohs9qznarket6
396398
396397
2026-11-06T14:11:47Z
MacTire02
219
--
396398
wikitext
text/x-wiki
{{FillymAynsJeihaght|19|9|20oo}}
[[Ronney:Scannaneaght 'sy 20oo eash|1990]]
[[Ronney:Ny h-ellynyn ayns ny 1990yn]]
[[Ronney:Meanyn mooarey ayns ny 1990yn]]
4zoigh4nlgfnjdcui5v3mmfhlxj9imj
Clowan:FillymAynsJeihaght
10
56553
396393
2026-11-06T14:05:49Z
MacTire02
219
++
396393
wikitext
text/x-wiki
Taghyrtyn fillym as [[fillym|filmyn]] er ny skeaylley magh da'n chied cheayrt ayns ny '''[[{{{1}}}{{#ifeq:{{{2}}} | 0 | {{{2}}}0–{{{1}}}{{{2}}}9{{!}}{{{1}}}}}{{{2}}}0yn]]'''.
{{WorksDecadeHeader|DecimalCentury={{{1}}}|Decade={{{2}}}|OrdinalCentury={{{3}}}|WorkType=in film}}
<includeonly>
[[Ronney:{{{1}}}{{{2}}}0yn]]
[[Ronney:Scannaneaght rere jeihaght|{{{1}}}{{{2}}}0yn]]
</includeonly><noinclude>
[[Ronney:Clowanyn obbraghyn-rere-jeihaght|{{PAGENAME}}]]
</noinclude>
ou7g9n3p9pgk7nkdi07fh84t9ryhm9w
Clowan:WorksDecadeHeader
10
56554
396394
2026-11-06T14:06:54Z
MacTire02
219
aastiurey
396394
wikitext
text/x-wiki
#REDIRECT [[Clowan:Kione ronney obbraghyn rere jeihaght]]
9z8xt61dhpthiqi7ftwunsgdot79yk7
Clowan:Kione ronney obbraghyn rere jeihaght
10
56555
396395
2026-11-06T14:07:30Z
MacTire02
219
++; ny smoo ry-hyndaa
396395
wikitext
text/x-wiki
<includeonly>{{Portal|{{{portal|}}}|{{#switch:{{{WorkType}}}
|albums
|compositions
|songs
|musicals = Music
|comics debuts = Comics
|films
|in film = Film
|Japanese films= Film <!-- could add Japan? -->
|horror films
|science fiction films
|science fiction horror films
|monster movies= Speculative fiction <!-- could add Film -->
|documents=Writing
|drawings
|paintings = Visual arts
|essays
|novels = Literature
|fantasy novels
|horror novels
|science fiction novels
|speculative fiction novels = Speculative fiction <!-- could add Literature -->
|fantasy works
|science fiction works = Speculative fiction
|clothes = Fashion
|poems = Poetry
|plays = Theatre
|speeches=Politics
|television commercials
|television series
|television specials
|television episodes
|television series debuts
|television series endings=Television}}|{{FindYDCportal|{{Title decade}}s}}}}
{{Category series navigation}}
{{#ifeq:{{NAMESPACE}}|Template|[[Category:Works-by-decade templates|{{PAGENAME}}]]|[[Category:{{Title decade}}s {{{ParentType|works}}}|{{ucfirst:{{{WorkType}}}}}]]{{#ifexist:Category:{{Century name from title decade|dash}} {{{WorkType}}}|[[Category:{{Century name from title decade|dash}} {{{WorkType}}}| {{{Decade}}}]]}}
{{category if exists|{{ucfirst:{{{WorkType}}}}} by decade}}}}
</includeonly><noinclude>
{{Documentation}}
</noinclude>
f5fzgu4j32k581hxha0vqovtagytjlw
396396
396395
2026-11-06T14:10:29Z
MacTire02
219
++
396396
wikitext
text/x-wiki
<includeonly>{{Category series navigation}}
{{#ifeq:{{NAMESPACE}}|Template|[[Ronney:Clowanyn obbraghyn-rere-jeihaght|{{PAGENAME}}]]|[[Ronney:{{{ParentType|works}}} veih ny {{Title decade}}yn|{{ucfirst:{{{WorkType}}}}}]]{{#ifexist:Ronney:{{{WorkType}}} veih'n {{Century name from title decade|dash}}|[[Ronney:{{Century name from title decade|dash}} {{{WorkType}}}| {{{Decade}}}]]}}
{{category if exists|{{ucfirst:{{{WorkType}}}}} rere jeihaght}}}}
</includeonly><noinclude>
{{Documentation}}
</noinclude>
jik6dwhayvib3w77ua3pcpxp0x167lo
396399
396396
2026-11-06T14:12:13Z
MacTire02
219
Gaelg
396399
wikitext
text/x-wiki
<includeonly>{{Category series navigation}}
{{#ifeq:{{NAMESPACE}}|Template|[[Ronney:Clowanyn obbraghyn-rere-jeihaght|{{PAGENAME}}]]|[[Ronney:{{{ParentType|obbraghyn}}} veih ny {{Title decade}}yn|{{ucfirst:{{{WorkType}}}}}]]{{#ifexist:Ronney:{{{WorkType}}} veih'n {{Century name from title decade|dash}}|[[Ronney:{{Century name from title decade|dash}} {{{WorkType}}}| {{{Decade}}}]]}}
{{category if exists|{{ucfirst:{{{WorkType}}}}} rere jeihaght}}}}
</includeonly><noinclude>
{{Documentation}}
</noinclude>
cy4gwj9qttruzbjlo5ox2u46z7eo25w
Ronney:Meanyn mooarey ayns ny 1990yn
14
56556
396400
2026-11-06T14:33:26Z
MacTire02
219
ronney noa
396400
wikitext
text/x-wiki
{{Kione ronney ny meanyn mooarey ayns ny YYY0yn|eash=20oo}}
ingdqe77obi18gmit3v8i7lhmh9mdq9
Ronney:Scannaneaght rere jeihaght
14
56557
396401
2026-11-06T14:35:46Z
MacTire02
219
ronney noa
396401
wikitext
text/x-wiki
{{Category see also|Scannaneaght rere blein|Scannaneaght rere eash}}
{{For|filmyn as shaanraghyn fillym er lheh rere jeihaght|Ronney:Filmyn rere jeihaght}}
[[Ronney:Scannaneaght| Jeihaght]]
[[Ronney:Ny h-ellynyn rere jeihaght]]
[[Ronney:Meanyn mooarey rere jeihaght| Scannaneaght]]
2gzo6wu8twq6t24pqm6wzgabp5xvnlw
Clowan:Er son
10
56558
396404
2026-11-06T14:37:02Z
MacTire02
219
MacTire02 moved page [[Clowan:Er son]] to [[Clowan:Son]]
396404
wikitext
text/x-wiki
#REDIRECT [[Clowan:Son]]
sw26y3uayw7034n9jxgsk1zb8l40avv
Clowan:Er son/doc
10
56559
396406
2026-11-06T14:37:02Z
MacTire02
219
MacTire02 moved page [[Clowan:Er son/doc]] to [[Clowan:Son/doc]]
396406
wikitext
text/x-wiki
#REDIRECT [[Clowan:Son/doc]]
ke8sjc8zh9boq44odfrvq4bhbfy0i8q
Ronney:Bioghys 'sy vlein 1995
14
56560
396408
2026-11-06T14:39:10Z
MacTire02
219
ronney noa
396408
wikitext
text/x-wiki
Ta'n ronney shoh jeerit da '''[[bioghys]]''' 'sy vlein '''[[{{Title year}}]]'''.
{{Navseasoncats with decades below year}}
{{Cat more if exists|Bioghys 'sy vlein {{Title year}}}}
{{CatAutoTOC}}
[[Ronney:Bioghys ayns ny {{DECADE|{{Title year}}}}|{{Title year}}]]
[[Ronney:Bioghys rere blein|{{Title year}}]]
[[Ronney:Meanyn mooarey 'sy vlein {{Title year}}]]
[[Ronney:Ny h-ellynyn 'sy vlein {{title year}}]]
8jnim65ji3dymja512wwnsxkimupxo5
Clowan:Navseasoncats with decades below year
10
56561
396409
2026-11-06T14:39:51Z
MacTire02
219
aastiurey
396409
wikitext
text/x-wiki
#REDIRECT [[Clowan:Category series navigation]]
ovu6zolvy3nyy8doxpuulftt4o8wsec
Ronney:Meanyn mooarey 'sy vlein 1995
14
56562
396410
2026-11-06T14:40:51Z
MacTire02
219
ronney noa
396410
wikitext
text/x-wiki
{{kione ronney meanyn mooarey 'sy vlein YYYY}}
b8qjh6zdh67z7u6vlzj4d45mjl6cysx
Clowan:Kione ronney meanyn mooarey 'sy vlein YYYY
10
56563
396411
2026-11-06T14:58:08Z
MacTire02
219
++
396411
wikitext
text/x-wiki
<includeonly><!--
# Y chied cheim na dy scrutaghey nee duillag ronney eh shoh
-->{{Category other<!--
-->|<!-- ############### She ronney t'eh ###############################
# Scrutaghey vel eh piyral rish y chummey shirrit: "Meanyn mooarey 'sy vlein YYYY"
# (Ta {{PAGENAME}} scapail y chammag heose; myr shen, ta'n fockle kianglee piyrit dy faggyssagh)
-->{{#ifeq: {{#invoke:String|find|{{PAGENAME}}|^Meanyn mooarey [^ ]+ vlein %d%d%d%d$|plain=false}}<!--
-->|0<!--
-->|<!-- # Cha nel eh piyral
-->{{Error|Ennym duillag neu-chooie.<br />Lhisagh [[Clowan:Kione ronney meanyn mooarey 'sy vlein YYYY]] ve ymmydit er duillagyn ronney raad ta enmys y ronney 'sy chummey {{nowrap|"Meanyn mooarey 'sy vlein YYYY"}}, raad she blein 4-earroo eh YYYY (m.s. "1899")}}<!--
-->|<!--
# Outdent
##### Toshiaght y veer ta troggal y ronney #####
-->{{Category explanation|'''{{#ifexist:Meanyn mooarey|[[Meanyn mooarey]]|Meanyn mooarey}}''' 'sy '''vlein [[{{Title year}}]]'''}}<!--
-->{{Category series navigation|skip-gaps=yes}}
[[Ronney:Meanyn mooarey ayns ny {{DECADE|{{Title year}}}}|{{Title year}}]]
[[Ronney:Meanyn mooarey rere blein|{{Title year}}]]
[[Ronney:{{Title year}}|Meanyn mooarey]]<!--
##### Jerrey yn veer ta troggal y ronney #####
# un-Outdent
-->}}<!--
-->|<!-- ############### Cha nee ronney eh ###############################
-->{{Error|Cha vel yn duillag shoh 'syn [[Cooney:Ronnaghyn|ennym-spoar ronney]]. Lhisagh [[Clowan:Kione ronney meanyn mooarey 'sy vlein YYYY]] ve ymmydit er duillagyn ronney raad ta enmys y ronney 'sy chummey {{nowrap|"Meanyn mooarey 'sy vlein YYYY"}}, raad she blein 4-earroo eh YYYY (m.s. "1899")}}<!--
-->}}</includeonly><!--
# Cooney: Ta feme er {{Automatic category TOC}} dy ve ayn, edyr ta'n duillag clowan shoh er ve ghoaill stiagh ny cha nel
-->{{Automatic category TOC}}<!--
--><noinclude><!--
-->{{Documentation|content=<!--
-->Son ronney dy hroggal 'sy chummey "Meanyn mooarey 'sy vlein YYYY", raad she blein 4-earroo eh YYYY
m.s. [[:Ronney:Meanyn mooarey 'sy vlein 1995]]
==Ymmyd==
<code><nowiki>{{kione ronney meanyn mooarey 'sy vlein YYYY}}</nowiki></code>
Cha nel feme er parameadar erbee
== Jeeagh er neesht ==
* [[Clowan:Kione ronney ny meanyn mooarey ayns ny YYY0yn]]
}}
</noinclude>
6hrxl7eio9mv6uk4jabfq1b1vsou1un
Ronney:Filmyn veih'n vlein 1995 rere shaanrey
14
56564
396412
2026-11-06T15:00:10Z
MacTire02
219
ronney noa
396412
wikitext
text/x-wiki
{{moir-ronney}}
{{Navseasoncats}}
[[Ronney:Filmyn veih'n vlein {{Title year}}| Shaanrey]]
[[Ronney:Filmyn rere blein as shaanrey|{{Title year}}]]
1cn1cpned4rf7f48p9i65m0x1hx6v43
Ronney:Filmyn rere blein as shaanrey
14
56565
396413
2026-11-06T15:01:07Z
MacTire02
219
ronney noa
396413
wikitext
text/x-wiki
{{Category see also|Filmyn rere shaanrey as blein}}
{{moir-ronney}}
[[Ronney:Filmyn rere blein| Shaanrey]]
[[Ronney:Filmyn rere shaanrey| Blein]]
ssavkez15m7kp69k8fjrep3a1ufap8s
Ronney:Ard-filmyn bioghit Americaanagh
14
56566
396414
2026-11-06T15:28:44Z
MacTire02
219
ronney noa
396414
wikitext
text/x-wiki
{{CatAutoTOC}}
[[Ronney:Ard-filmyn bioghit|Americaanagh]]
[[Ronney:Filmyn bioghit Americaanagh]]
d3r99ooek1c4jt6tfoz6kdynogmjg5a
Ronney:Ard-filmyn bioghit
14
56567
396415
2026-11-06T15:29:31Z
MacTire02
219
ronney noa
396415
wikitext
text/x-wiki
[[Ronney:Filmyn bioghit rere lhiurid]]
ogvbs5qrhujg17xy46v5itgy9scy0bo
396416
396415
2026-11-06T15:33:16Z
MacTire02
219
ronney elley
396416
wikitext
text/x-wiki
[[Ronney:Filmyn bioghit rere foddid]]
ehtr2jhcxjzzs4dh0u48owjkmf5u16h
Ronney:Filmyn bioghit rere foddid
14
56568
396417
2026-11-06T15:33:28Z
MacTire02
219
ronney noa
396417
wikitext
text/x-wiki
[[Ronney:Filmyn bioghit| Foddid]]
[[Ronney:Foddid]]
[[Ronney:Ronnaghyn rere traa]]
co7f9z6y7euehluonm7pgzdx8xzgt6y
Ronney:Foddid
14
56569
396418
2026-11-06T15:34:13Z
MacTire02
219
ronney noa
396418
wikitext
text/x-wiki
[[Ronney:Traa]]
lbkjt6npcpz7bibfwobuv7kzigugo6n
Ronney:Filmyn bioghit da paitçhyn veih ny 1990yn
14
56570
396419
2026-11-06T15:36:29Z
MacTire02
219
ronney noa
396419
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Filmyn da paitçhyn veih ny 1990yn|*]]
[[Ronney:Filmyn bioghit veih ny 1990|*]]
[[Ronney:Filmyn bioghit da paitçhyn rere jeihaght| 1990]]
[[Ronney:Filmyn bioghit da paitçhyn veih'n 20oo eash|1990]]
bcufvaucj7q4ikyxxvz45umq4nvcxp2
396420
396419
2026-11-06T15:37:08Z
MacTire02
219
ronney elley
396420
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Filmyn da paitçhyn veih ny 1990yn|*]]
[[Ronney:Filmyn bioghit veih ny 1990yn|*]]
[[Ronney:Filmyn bioghit da paitçhyn rere jeihaght| 1990]]
[[Ronney:Filmyn bioghit da paitçhyn veih'n 20oo eash|1990]]
4nyzn21yjlrt4kjhmg2hj3om86sbbzw
Ronney:Filmyn bioghit da paitçhyn rere jeihaght
14
56571
396421
2026-11-06T15:38:31Z
MacTire02
219
ronney noa
396421
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Filmyn bioghit da paitçhyn| Jeihaght]]
[[Ronney:Filmyn bioghit rere jeihaght|Paitchyn]]
[[Ronney:Filmyn da paitçhyn rere jeihaght|Bioghit]]
2iw8ek4dgdjs5dffch7jsf6lh0uvjv2
Ronney:Filmyn bioghit da paitçhyn veih'n 20oo eash
14
56572
396422
2026-11-06T15:39:49Z
MacTire02
219
ronney noa
396422
wikitext
text/x-wiki
{{Navseasoncats}}
[[Ronney:Filmyn bioghit veih'n 20oo eash|Paitchyn]]
[[Ronney:Filmyn bioghit da paitçhyn rere eash| 20]]
heajlvpg3w0wbi74huv5tjqm35twibz
Ronney:Filmyn bioghit da paitçhyn rere eash
14
56573
396423
2026-11-06T15:40:51Z
MacTire02
219
ronney noa
396423
wikitext
text/x-wiki
{{moir-ronney}}
[[Ronney:Filmyn bioghit da paitçhyn| Eash]]
[[Ronney:Filmyn bioghit rere eash|Paitchyn]]
ksgk9qevbetfqmrp20z32v7griplp35
Ronney:Filmyn Germaanagh da paitçhyn
14
56574
396424
2026-11-06T15:41:56Z
MacTire02
219
ronney noa
396424
wikitext
text/x-wiki
[[Ronney:Eunysseyrys Germaanagh da paitçhyn]]
[[Ronney:Filmyn Germaanagh rere shaanrey|Paitchyn]]
[[Ronney:Filmyn da paitçhyn rere çheer|Germaanagh]]
hcoi5ac8zoto5a01j8c9hcr4rlb26jr
Ronney:Eunysseyrys Germaanagh da paitçhyn
14
56575
396425
2026-11-06T15:42:54Z
MacTire02
219
ronney noa
396425
wikitext
text/x-wiki
{{Commons category|Children's entertainment in Germany|Eunysseyrys da paitçhyn 'sy Ghermaan}}
[[Ronney:Eunysseyrys 'sy Ghermaan|Paitchyn]]
[[Ronney:Eunysseyrys da paitçhyn rere çheer|Germaanagh]]
[[Ronney:Lambaanid 'sy Ghermaan]]
oq6phlskgksab487rr8tursvst0mbgb
Ronney:Eunysseyrys 'sy Ghermaan
14
56576
396426
2026-11-06T15:43:56Z
MacTire02
219
ronney noa
396426
wikitext
text/x-wiki
{{commonscat|Entertainment in Germany|Eunysseyrys 'sy Ghermaan}}
[[Ronney:Cultoor y Ghermaan]]
[[Ronney:Eunysseyrys rere çheer|Ghermaan]]
[[Ronney:Eunysseyrys 'syn Oarpey rere çheer|Ghermaan]]
d4xwgi75fjesuyy6j380o9xjrybgkc5
Ronney:Lambaanid 'sy Ghermaan
14
56577
396427
2026-11-06T15:44:46Z
MacTire02
219
ronney noa
396427
wikitext
text/x-wiki
[[Ronney:Lambaanid rere çheer|Ghermaan]]
[[Ronney:Lambaanid 'syn Oarpey| Ghermaan]]
[[Ronney:Aegid 'sy Ghermaan]]
[[Ronney:Lught-thie 'sy Ghermaan]]
k6ld92pvcsd4satdfrqlohrv1nz9lq0
Ronney:Aegid 'sy Ghermaan
14
56578
396428
2026-11-06T15:45:33Z
MacTire02
219
ronney noa
396428
wikitext
text/x-wiki
{{cat main}}
{{CatRel|Shenneraght 'sy Ghermaan|Baase 'sy Ghermaan}}
[[Ronney:Aegid rere çheer|Ghermaan]]
[[Ronney:Sheshaght y Ghermaan]]
[[Ronney:Aegid 'syn Oarpey rere çheer|Ghermaan]]
s4zkyegkii46goq7r1u7izrf2vgb8ck
Ronney:Lught-thie 'sy Ghermaan
14
56579
396429
2026-11-06T15:46:24Z
MacTire02
219
ronney noa
396429
wikitext
text/x-wiki
[[Ronney:Lught-thie rere çheer|Ghermaan]]
[[Ronney:Lught-thie 'syn Oarpey|Ghermaan]]
[[Ronney:Sheshaght y Ghermaan]]
tdnlict67opzzmqhfxjdcwwhjnc527t
Ronney:Filmyn Germaanagh rere shaanrey
14
56580
396430
2026-11-06T15:47:42Z
MacTire02
219
ronney noa
396430
wikitext
text/x-wiki
{{Commonscategory|Films of Germany by genre|Filmyn ass y Ghermaan rere shaanrey}}
[[Ronney:Filmyn Germaanagh| Shaanrey]]
[[Ronney:Filmyn rere çheer as shaanrey|Germaanagh]]
{{moir-ronney}}
7oct6q6nqpkwyo83e4pnp7swnobzhxl
Ronney:Filmyn Germaanagh
14
56581
396431
2026-11-06T15:48:31Z
MacTire02
219
ronney noa
396431
wikitext
text/x-wiki
{{CategoryTOC}}
{{Commonscat|Films of Germany|Filmyn ass y Ghermaan}}
[[Ronney:Filmyn rere çheer|Germaanagh]]
[[Ronney:Scannaneaght 'sy Ghermaan]]
[[Ronney:Obbraghyn lesh Germaanee|*]]
[[Ronney:Filmyn Oarpagh rere çheer|Germaanagh]]
s1962qyd59d4l7wvmfhzgc6r1o59crd
Ronney:Filmyn bioghit bentyn rish moddee
14
56582
396436
2026-11-06T17:20:37Z
MacTire02
219
ronney noa
396436
wikitext
text/x-wiki
[[Ronney:Filmyn bioghit bentyn rish sheeintee|Moddee]]
[[Ronney:Filmyn bentyn rish moddee| Bioghit]]
{{CatAutoTOC}}
hisaaueppfk7q48tbqgct2yhabxjulu