Vicipaedia lawiki https://la.wikipedia.org/wiki/Vicipaedia:Pagina_prima MediaWiki 1.47.0-wmf.10 first-letter Media Specialis Disputatio Usor Disputatio Usoris Vicipaedia Disputatio Vicipaediae Fasciculus Disputatio Fasciculi MediaWiki Disputatio MediaWiki Formula Disputatio Formulae Auxilium Disputatio Auxilii Categoria Disputatio Categoriae Porta Disputatio Portae Adumbratio Disputatio Adumbrationis TimedText TimedText talk Modulus Disputatio Moduli Event Event talk Stregnesia 0 2479 3970992 3871080 2026-07-08T18:58:56Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970992 wikitext text/x-wiki {{Capsa urbis Vicidata}} '''Stregnesia''' ([[Lingua Suecica|Suecice]]: ''Strängnäs''), vel '''Strengines''' (1275)<ref>''Svenskt ortnamnslexikon,'' Språk- och folkminnesinstitutet, Uppsaliae, Elanders Gotab, Holmiae 2003, pag. 299.</ref> municipium 15&thinsp;369 incolarum (anno [[2023]]) in [[Sudermannia]] comitatu, [[Suecia]] centrali est, prope [[Lacus Melorus|Lacum Melorum]]. Municipii area 735.9 [[chiliometrum quadratum|km²]] est. Densitas populationis 40 habitantes/km². === Ecclesia cathetralis Stregnesiae === [[Fasciculus:Strängnäs cathedral Sweden 008.JPG|thumb|[[Ecclesia cathedralis]] Stregnesiae]] Stregnesia [[sedes episcopalis]] iam [[saeculum 12|saeculo 12]] facta est. Circum annum 1250 [[Ordo Fratrum Praedicatorum]] conventum aedificaverunt, non procul ab loco quo Sanctus Eskillus martyr occubuit. [[Ecclesia cathedralis]] Strengnesiae anno [[1291]] consecratus, [[apostolus|apostolorum]]que [[Petrus|Petri]] et [[Paulus Tarsensis|Pauli]]<ref>Vexillum urbanum Petrum Paulumque ostendit.</ref> dicata est. Aedificium tamen non fuit perfecte finitum usque ad annum 1330. Invenitur ecclesiae hodiernae turris 75 metra alta. Intra ecclesiam [[Carolus IX (rex Sueciae)|Carolus IX Rex Sueciae]] (1550—1611) una cum uxore suo secunda, Christina de Holsatia et Gottorp (1573—1625), sepultus est. Ecclesiae bibliotheca, anno 1316 erecta, una ex vetustissimis Sueciae [[bibliotheca|bibliothecis]] et servatis et operatis est. == Notae == <references/> == Nexus externus == * [https://web.archive.org/web/20170604082859/http://www.strangnas.se/ Strängnäs Kommun] (Suecice) {{urbs-stipula}} [[Categoria:Urbes Sueciae]] gflm9au87c6hj0vd1lrggxkqqfsubiw Ferdinandus Magellanus 0 4290 3970938 3970937 2026-07-08T12:00:45Z IacobusAmor 1163 Nexus 3970938 wikitext text/x-wiki {{Latinitas|-3}} {{Capsa hominis Vicidata}} [[Fasciculus:Ferdinand Magellan.jpg|thumb|upright=0.8|[[Imago]] Ferdinandi Magellani [[saeculum|saeculo]] [[saeculum 16|16]] vel [[saeculum 17|17]] picta.]] {{res|Ferdinandus Magellanus}} ([[Lusitane]] ''Fernão de Magalhães''&thinsp;; natus circa [[1480]]; mortuus [[27 Aprilis]] [[1521]]) fuit [[explorator]] [[Portugallia|Lusitanus]]. {{Creanda|en|Sabrosa|Sabrosa|Sabrosae}} ortus, in Portugallia [[septentrio]]nali sitae, [[Carolus V (imperator)|Carolo I Regi Hispaniae]] servivit, [[via]]m petendo ad [[occidens|occidentem]] usque ad [[Insulas Maluku|Insulas Condimentorum]] (hodiernas [[Insulae Moluccae|Insulas Moluccas]] in [[Indonesia]] sitas). [[Expeditio Magellanica]] annorum ab [[1519]] ad [[1522]] fuit prima expeditio quae ab [[Oceanus Atlanticus|Oceano Atlantico]] in [[Oceanus Pacificus|Pacificum]] [[navigatio|navigavit]] (a Magellano [[Mare Pacificum]] appellatum; effecta est transitus per [[Fretum Magellanicum]]), et prima quae omnem transivit Pacificum. Expeditio primam [[Tellus|Telluris]] [[circumnavigatio]]nem complevit, quamquam Magellanus ipse totam navigationem non confecit, per {{Creanda|en|Battle of Mactan|Proelium Mactan|proelium}} in [[litus|litore]] {{Creanda|en|Mactan|insula Mactan|Insulae Mactan}} haud procul a [[Caebua]] in [[Philippinae|Philippinis]] interfectus. Nomen Magellani commemorant ''{{Creanda|en|Spheniscus magellanicus|Spheniscus magellanicus}}'' [[familia (taxinomia)|familiae]] [[Spheniscidae|Spheniscidarum]], quem ipse primus [[Europa]]eorum observavit,<ref>"[https://web.archive.org/web/20110823061128/http://www.globaltwitcher.com/artspec_information.asp?thingid=232 Magellanic penguin]."</ref> et {{Creanda|en|Magellanic Clouds|Nubeculae Magellani}}, nonnullae [[galaxias|galaxiae]] nanae in {{Creanda|en|Southern celestial hemisphere|Hemisphaerium caeleste australe|hemisphaerio caeleste australe}} visae. Praeterea, [[asteroides]] [[4055 Magellan]] in eius [[honor]]em nominatur. == Iuventus == [[Puer]]o{{dubsig}} tirocinio{{dubsig}} stipendio Regina{{dubsig}} Leonora{{dubsig}} eductus{{dubsig}} erat{{dubsig}}. Posterius [[iter]] faciebant{{dubsig}}<!--Qui erant?--> ad [[Asia Australis|Asiam Australem]] et [[Asia Orientalis|Orientalem]] et abhinc [[1509]] usque [[1511]] stipedium denuo pro Navarcho Almeida, Sequira, Serrano, gubernatore [[Alba Quercus (Novum Mexicum)|Albae Quercus]] merebat.<!--?--> Ad hunc [[1506]] anno bello Cannanore<!--?--> pedem [[vulnus|vulneratus]] est. Tunc, [[condimentum|condimenta]] ex [[Insulae Malucae|Insulis Moluccis]], similis ita per [[aureum]] apud Europeam magnopere quaesita erant. Quamquam, [[foedus Tordecillis]] iter per mundum occidentalem iuri Lusitano restringit. Igitur tunc Magellan ad Insulas Moluccas variis compendiariis studebat, praecipue per vias orientales. == Regressus == Anno [[1512]] Europeam regressus, [[Islamici]]s [[commercium]] accusatus apud cortem{{dubsig}} regnis{{dubsig}} Lusitanis offensas accepit. Anno [[1516]], [[Hispania]]m perrectus, [[Hispani]] civitatis acceptus, et Hispanis [[mos|morem]] nomen mutavit. Deinde ad regnum Hispanici [[Carolus V (imperator)|Carolum]],{{dubsig}} ad [[Insulae Moluccenses|Insulas Moluccenses]] iter consilium protulit quam [[rex]] accepit. == Circumnavigatio et casus == {{vide-etiam|Expeditio Magellanica}} Expeditionem paravit qua prima [[circumnavigatio|circumnavigaturus]] fuisset. Anno [[1519]], ad Asiam per viam occidentalem iter commisit cum classicula ex [[quinque]] navibus. Apud alios 240 [[nauta]]s erant [[Ioannes Sebastianus Elcano|Elcano]] navarchus vicarius et [[Antonius Pigafetta]] chronographus supernumerariusque, qui iter victuri fuissent. [[America Australis|Americam Australem]] attigit et [[Brasilia]]m visitavit, quae fuit terra [[Portugallia|Lusitana]]. [[Fretum]] advenit quod [[Fretum Magellanicum|nomen]] eius hodie fert. Hoc fretum, cuspem [[continens|continente]] dividens, [[oceanus|oceanos]] [[Oceanus Atlanticus|Atlanticum]] et [[Oceanus Pacificus|Pacificum]] coniungit. Hunc{{dubsig}} rebellionem subiugit, sed [[duo|duas]] [[navis|naves]] desideravit. Miros observabant quae sunt inter alios [[Sphenisciformes|aves sine pennae volatuque]] et [[Lama glama|dromedarii sine gibbo]]. [[Oceanus Pacificus|Oceanum Pacificum]] attigit, et tranquillitas eius observatus, nomen hodiernam appellavit. Oceanum transientes omnes naves duro magnopere passus erant, et alii esurie moriti fuerunt. Die [[13 Februarii]] [[1521]], insulas adventum quam appellata ab Magellano [[Insulae Latronum]] quod cleptas passus erat ex indigenis, nam nunc [[Insuae Marianae|Insulae Mariana]] et [[Guama]]. Die [[16 Martii]] [[1521]], insulae ''Homonhon'' [[Philippinae|Philippinarum]] adventum ab Magellano est, cum adhunc 150 nautis. Interprete Henrico communicare poterant. Vernaculo rege amicavit, sed apud rixam interfuit, ei pugnante litore Mactan interfectus fuit. [[Eduardus Barbosa]] eodem proelio mortuus est. Cetera fugerunt. Ex 237 Hispanicis, regressi sunt [[duodeviginti]] nautae die [[6 Septembris]] [[1522]], [[Ioannes Sebastianus Elcano|Ioanne Sebastiano Elcano]] duce. Unus eorum fuit [[Antonius Pigafetta]], qui totam expeditionem tradidit. == Notae == <references/> == Bibliographia == === Fontes primi === {{Pars vicificanda}} *{{Citation |last= Pigafetta |first= Antonio |authorlink= Antonio Pigafetta |title=Magellan's Voyage around the World |publisher=Arthur A. Clark |year= 1906 |isbn= |ref=harv}} (orig. ''[http://www.archive.org/details/primerviajeentor00piga Primer viaje en torno del globo]'' Retrieved on 2009-04-08). * [[Maximilianus Transylvanus]], ''De Moluccis insulis'', 1523, 1542. *{{Citation |last= Nowell |first= Charles E. ed. |title= Magellan's Voyage around the World: Three Contemporary Accounts |publisher=NU Press |location=Evanston |year= [[1962]] |isbn= }}. *<cite id=CITEREFStanley1874>''[http://dlxs.library.cornell.edu/cgi/t/text/text-idx?c=sea;cc=sea;sid=424383ff2ffa1020e1afb760b0fe4109;idno=sea061;view=toc The First Voyage Round the World, by Magellan]'', full text, English translation by Henry Stanley, 3rd Baron Stanley of Alderley, Londinii: Hakluyt, [1874] – six contemporary accounts of his voyage</cite>. *{{citation|last=Oliveira|first=Fernando|title=The Voyage of Ferdinand Magellan|url=http://books.google.com/books?id=MByAAAAAMAAJ|year=1550–1560|publication-date=2002|publisher=National Historical Institute|isbn=9789715381635}}, English translation by Peter Schreurs from the original Portuguese manuscript in the University Library of Lieden, The Netherlands. === Alii fontes === *{{Citation |last= Bergreen |first=Laurence |authorlink= Laurence Bergreen |title=Over the Edge of the World: Magellan's Terrifying Circumnavigation of the Globe |publisher=William Morrow |year= 2003 |month= 14 October|isbn= 9780066211732, ISBN 0-06-093638-X |laysummary= http://www.bookreporter.com/reviews/0066211735.asp }}. *{{Citation |last= Guillemard |first= Francis Henry Hill |title=The life of Ferdinand Magellan, and the first circumnavigation of the globe, 1480–1521 |publisher=G. Philip |year=[[1890]] |url= http://www.archive.org/details/lifeofferdinandm00guil |accessdate=8 April 2009 }}. *{{Citation |last= Hildebrand |first=Arthur Sturges |title= Magellan |publisher=Harcourt, Brace & Co |location= Novi Eboraci |year= [[1924]] |isbn= 9781417914135 (reprint) }}. *{{Citation |last= Joyner |first= Tim |title=Magellan |publisher=International Marine Publishing |location= Camden, Me. |year= [[1992]] |isbn= 9780070331280 }}. *{{Citation |last= Nunn |first= George E. |title= The Columbus and Magellan Concepts of South American Geography |year= 1932 |isbn= }}. *{{Citation |last= Parr |first= Charles M. |title= So Noble a Captain: The Life and Times of Ferdinand Magellan |publisher=Crowell |location=Novi Eboraci |year= [[1953]] |isbn= 0837185211, ISBN 0-8371-8521-1 }}. *{{Citation |last= Parry |first= J. H. |authorlink= J. H. Parry |title= The Discovery of South America |publisher=Taplinger |location= Novi Eboraci |year= [[1979]] |isbn= }}. *{{Citation |last= Parry |first= J. H. |title= The Discovery of the Sea |publisher=University of California Press |location= Berkley |year= [[1981]] |isbn= 978-0520042360 }}. *{{Citation |last= Parry |first= J. H. |title= The Spanish Seaborne Empire |publisher=Knopf |location= Novi Eboraci |year= 1970 |isbn= 978-0520071407 }}. *{{Citation |last= Pérez-Mallaína |first= Pablo E. |others= trans. Carla Rahn Phillips |title= Spain's Men of the Sea: Daily Life on the Indies Fleets in the Sixteenth Century |publisher=Johns Hopkins University Press |location= Baltimore |year= 1998 |isbn= 9780801857461 |laysummary= http://www.marcusrediker.com/reviews/Perez_review.htm }}. *{{Citation |last= Roditi |first= Edouard |title= Magellan of the Pacific |publisher=Faber & Faber |location=Londinii |year= 1972 |isbn= 0571089453 }}. *{{Citation |last= Schurz |first=William L. |year=1922 |month=May |title= The Spanish Lake|journal=Hispanic American Historical Review |volume=5 |issue=2 |pages=181–194 |id= |quote= |doi= 10.2307/2506024 |publisher=Duke University Press |postscript= . |jstor= 2506024 }}. *{{Citation |last= Thatcher |first=Oliver J. ed. |title=The Library of Original Sources |chapter= Vol. V: 9th to 16th Centuries |publisher=University Research Extension Co |year= 1907 |isbn= |pages= 41–57 |url= http://www.fordham.edu/halsall/mod/1519magellan.html |accessdate=8 April 2009 }}. *{{Citation |last= Wilford |first= John Noble |authorlink= John Noble Wilford |title= The Mapmakers |publisher=Knopf |location=Novi Eboraci |year= 2000 |isbn= 0375708502 |laysummary= http://www.cosmopolis.ch/english/cosmo33/history_cartography_mapmakers.htm }}. *{{Citation |last= Zweig |first= Stephanus |authorlink=Stephanus Zweig |title=Conqueror of the Seas: The Story of Magellan |publisher=Read Books|year= 2007 |isbn=1406760064 |url=http://books.google.com/?id=tLoWg9mMh04C&lpg=PA37&dq=cannanore%201506&pg=PA1#v=onepage&q=cannanore%201506 }}. (1K) {{Lifetime|1480|1521|Magellanus, Ferdinandus}} <!-- Military personnel killed in action People of Spanish colonial Philippines Portuguese Roman Catholics Deaths by blade weapons People from Vila Real District--> [[Categoria:Circumnavigatores]] [[Categoria:Exploratores Americae Australis]] [[Categoria:Exploratores Oceani Pacifici]] [[Categoria:Exploratores Portugallenses]] [[Categoria:Historia maritima Portugalliae]] [[Categoria:Incolae Portugalliae]] [[Categoria:Nautae]] [[Categoria:Necati]] [[Categoria:Philippinae]] {{1000 paginae}} {{Myrias|Homines}} t6nyoj9kxb3ekw3jx800a0en6rwpnti Typhon marinus 0 11747 3971082 3784591 2026-07-09T11:34:05Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971082 wikitext text/x-wiki {{latinitas|-1}}{{disambig2|procella|monstrum fabulosum|Typhon}}[[Fasciculus:Cyclone Catarina from the ISS on March 26 2004.JPG|thumb|Catarina, typhon a ISS [[26 Martii]] [[2004]] visa.]] '''Typhon marinus''' sive '''huracanum''' est [[procella|tempestas]] [[mare|marina]] cuius [[ventus|venti]] [[circulus|circumagentes]] magnas [[pluvia]]s cohibentes 33 m/s (118 km/h) excedunt. [[Antiquitas|Antiquitate]] [[homo|homines]] [[vocabulum|verbo]] ''cataegis'' (''-idis'') utebantur ad tempestates potentes in [[Mare Mediterraneum|Mari Mediterraneo]] appellandas, sed tempestates quas typhones hodie appellamus ibi numquam fiebant. [[Persae]] et [[Arabia|Arabes]] postmodo nomine [[Typhon]]is, [[deus|dei]] [[mythologia Graeca|Graeci]], utebantur ad typhones marinos [[Sinus Indi]] potentes appellandos.<ref>Vide [[:en:Typhon|paginam Typhon apud Vicipaediam Anglicam:]] "Typhon is also the father of hot dangerous storm winds which issue forth from the stormy pit of Tartarus, according to Hesiod. His name is apparently derived from the Greek "typhein", to smoke, hence it is considered to be a possible etymology for the word typhoon, supposedly borrowed by the Persians (as طوفان Tufân) and Arabs to describe the cyclonic storms of the Indian Ocean. The Greeks also frequently represented him as a storm-daemon, especially in the version where he stole Zeus's thunderbolts and wrecked the earth with storms (cf. Hesiod, Theogony; Nonnus, Dionysiaca)."</ref> Deinde [[nauta]]e [[medium aevum|mediaevales]] in [[Europa]] eodem nomine usi solebant.<ref name="bacon">Vide opus [http://books.google.com/books?id=sRekIlH9-rUC&pg=PA300&lpg=PA300&dq=procellae&source=web&ots=VBBvRwO6Ve&sig=QWL0oXJMVXgDEigXIr_n05aB9Co ''Historia ventorum'' Francisco Bacono auctore apud Google Books].</ref> [[Typhon]] fuit deus [[Graecia|Graecus]] [[monstrum]]que, qui, secundum [[Hesiod]]um, [[procella]]s emissit e [[lacuna]] [[Tartarus|Tartaro]]. Hodie, [[America|Americi]] malunt typhones quoque appellare ''furacana.'' Verbum ''furacanum'' (etiam ''huracan'' et ''furacan'') provenit e nomine dei venti destructionisque [[indi Americani|indorum Americanorum]] [[Taini]] et [[Maiae (Indi Americani)|Maiae]], qui [[saeculum 16|sextodecimo saeculo]] in [[Mare Caribaeum|Mari Caribaeo]] vivebant,<ref>Vide [[Usor:Iustinus/Scribenda#Furacanum| fontes, quod procellam ingentem marinam nomine ''huracan'' vel ''furacan'' vel ''furacanum'' describunt.]]; vide etiam paginam [[:es:Huracan|Huracan apud Vicipaediam Hispanicam]].</ref> ubi multos typhones marinos quotannis pati solebant. Incipiunt fere omnes tempestates marinae in [[regio]]nibus [[pressio]]nis [[aer]]is demissae, quae [[ventus|ventos]] violentos et [[inundatio]]nes per se circumagentes efficiunt. Eae tempestates [[natura]]liter annumerantur secundum sui venti [[celeritas|celeritatem]]. [[Depressio tropica|Depressiones tropicae]] ventos habent minores quam 17 m/s (62 km/h), tempestates tropicae (sive procellae<ref name="bacon"/>) ventos inter 17 m/s et 33 m/s (62 et 118 km/h), et typhones marini ventos qui 33 m/s (118 km/h) excedunt.<ref>De definitionibus, lege apud [http://www.aoml.noaa.gov/hrd/tcfaq/A1.html situm interretialem NOAA (Anglice).]</ref> De typhonum marinorum [[magnitudo|magnitudine]] deinde [[systema Saffir-Simpson]] NOAA quinque gradus additionales distinguit:<ref>Vide [http://www.nhc.noaa.gov/aboutsshs.shtml de systemate Saffir-Simpson NOAA (Anglice)]; et de vocabulo ''gradus'' lege apud [http://ephemeris.alcuinus.net/nuntius.php?id=350 diarium interretialem ''Ephemeris'' (Augusti 2007):] "Nam quintum gradum roboris attigisse putatur typhon Dean.".</ref> gradum primum ventibus inter 33 m/s et 41 m/s (118 et 153 km/h), secundum ventibus inter 41 m/s et 49 m/s (154 et 177 km/h), tertium ventibus inter 49 m/s et 58 m/s (178 et 209 km/h), quartum ventibus inter 58 m/s et 69 m/s (210 et 249 km/h), quintum ventibus qui excedunt 69 m/s (249 km/h). Typhones gradus quinti ventos tam rapidos habent ut magnas alluviones 6 m super [[maris aequor]] et magnum exitium tectis [[aedificium|aedificationibusque]] efficiant. ==Nomina typhonum marinorum anno 2006 in Mari Atlantico Septentrionali== [[Meteorologia|Meteorologi]] solent dare nomina propria tempestatibus quando status "tempestatum tropicarum" attingunt. Exempli gratia anno [[2006]] nomina typhonum marinorum fuerunt: {| width="90%" | * Alberto * Beryl * Chris * Debby * Ernesto * Florence * Gordon | * Helene * Isaac * Joyce * Kirk * Leslie * Michael * Nadine | * Oscar * Patty * Rafael * Sandy * Tony * Valerie * William |} ==Typhpnes nonnulli famosi== *[[Typhon Nargis]] *[[Typhon Haiyan]] *[[Typhon Katrina]] ==Nexus interni== *[[Calamitas naturalis]] *[[Calefactio globalis]] *[[:Categoria:Huracana|Huracana]] ==Notae== <references/> ==Bibliographia== *Battan, Louis Joseph. [[1961]]. ''The Nature of Violent Storms.'' Garden City Novi Eboraci: Anchor Books Doubleday & Co.. *Christopherson, R. [[1992]]. ''Geosystems: An Introduction to Physical Geography.'' Novi Eboraci: Macmillan Publishing. ISBN 0-02-322443-6. *Elsner, James B., et Thomas H. Jagger, eds. [[2009]]. ''Hurricanes and climate change.'' Proceedings of the Summit on Hurricanes and Climate Change ([[Creta]]e, 2007). Novi Eboraci: Springer. ISBN 9780387094090, ISBN 0387094091. *Sanchez-Gonzalez, D. [[2011]]. [http://dx.doi.org/10.4067/S0718-34022011000300009 Peligrosidad y exposición a los ciclones tropicales en ciudades del Golfo de México: El caso de Tampico.] ''Revista de Geografía Norte Grande'' 50:151–170. ISSN 0718-3402. *Whipple, A. (1982), [[1984]]. ''Storm.'' Time Life Books. ISBN 0-8094-4312-0. ==Nexus externi== {{Wiktionary}} {{CommuniaCat|Tropical cyclones|typhones marinos tropicos}} ;Propria media meteorologica regionalia<!--Specialized Regional Meteorological Centers--> * [https://web.archive.org/web/20110923144245/http://www.prh.noaa.gov/hnl/cphc/ Central Pacific Hurricane Center,] www.prh.noaa.gov (Pacificus Medius) * [http://www.met.gov.fj/ Fiji Meteorological Service,] www.met.gov.fj ([[Oceanus Pacificus|Pacificus]] Australis ad occidentem 160°E, septentriones 25° S) * [http://www.nhc.noaa.gov/ U.S. National Hurricane Center,] www.nhc.noaa.gov ([[Oceanus Atlanticus|Atlanticus]] Septentrionalis, [[Oceanus Pacificus|Pacificus]] Orientalis) * [http://www.imd.gov.in/ India Meteorological Department,] www.imd.gov.in ([[Sinus Bengaliae]] et [[Mare Arabicum]]) * [http://www.jma.go.jp/en/typh/ Japan Meteorological Agency,] www.jma.go.jp (Pacificus Boreoccidentalis) * [http://www.meteo.fr/temps/domtom/La_Reunion/ Météo-France: La Reunion,] www.meteo.fe ([[Oceanus Indicus]] a 30°E ad 90°E) ;Tropica admonitionum typhonum media * [https://web.archive.org/web/20080723222148/http://www.bom.gov.au/weather/cyclone/index.shtml Australian Bureau of Meteorology,] www.bom.gov.au (TCWC's Perth, Darwin & Brisbane) (Oceanus Indicus et Oceanus Pacificus Australis a 90°E ad 160°E, ad australem 10°S * [https://web.archive.org/web/20101207144855/http://maritim.bmg.go.id/ Indonesian Meteorological Department,] maritim.bmg.go.id ([[Oceanus Indicus]] a 90°E ad 125°E, in septentrionibus 10°S * [http://metservice.com/national/ Meteorological Service of New Zealand Limited,] metservice.com (Pacificus Australis ad occidentem 160°E, ad australem 25°S ;Quod attinet ad rationem * [https://web.archive.org/web/20100920055537/http://a-z-dictionaries.com/Hurricane_glossary.html Glossarium verborum de typhonibus,] www.a-z-dictionaries.com ;Varia *Atlantic Oceanographic and Meteorological Laboratory, Hurricane Research Division. [http://www.aoml.noaa.gov/hrd/tcfaq/E10.html  Frequently Asked Questions: What are the average, most, and least tropical cyclones occurring in each basin?] NOAA. *[http://www.nhc.noaa.gov/ National Hurricane Center.] Tropical Prediction Center. *[http://cimss.ssec.wisc.edu/tropic/ Tropical Cyclones - CIMSS - UW-Madison.] NASA / NOAA. *[https://web.archive.org/web/20190222024548/https://www.ssd.noaa.gov/PS/TROP/ Tropical Products - SSD.] NOAA. *[https://web.archive.org/web/20131005185448/http://forecast.mssl.ucl.ac.uk/shadow/tracker/dynamic/main.html Tropical Storm Risk.] University College London. *[https://oceanservice.noaa.gov/facts/cyclone.html What is the difference between a hurricane, a cyclone, and a typhoon?] Ocean Facts, National Ocean Service, NOAA. [[Categoria:Meteorologia]] [[Categoria:Huracana|!]] {{1000 paginae}} {{Myrias|Physica}} onvc202n0mj99ovuo6hs9agep7bh68o Alsatia 0 12111 3971008 3872143 2026-07-08T22:09:41Z LilyKitty 18316 de regione nova Magno Oriente 3971008 wikitext text/x-wiki {{Capsa subdivisionis Vicidata}} {{pro pagina discretiva vide|Alsatia (discretiva)}} '''Alsatia'''<ref name=":0">"Alsatia, Elisatia, Helsatia": {{Graesse}}</ref> ([[Lingua Francogallica|Francogallice]] ''Alsace'', [[Theodisce]] ''Elsaß'') est regio historica et culturalis Franciae hodiernae, olim pars [[Germania]]e. == De sermone == Multi incolae hodieque [[dialectus|dialecto]] [[Germanice|Germanica]] [[Lingua Alemannica|Alemannica]] loquuntur, sed sermo publicus est [[Lingua Francica]]. == Historia == Alsatia, ut Germania Prima, Romana Provincia fuit. Ab [[962]] usque ad [[1681]], fuit quoque [[Sacrum Romanum Imperium|Sacri Romanorum Imperii]] Nationis Germanicæ pars. Ab anno [[1681]], Alsatia est [[Francia|Francica]] provincia, sed [[Germania|Germanica]] unacum [[Lotharingia]] septentrionali ab [[1871]] usque ad [[1919]] et ab [[1940]] usque ad [[1945]] fuit. Ex anno [[2016]], Alsatia, cum [[Lotharingia (regio Franciae recentior)|Lotharingia]] et [[Campania et Arduenna]] pars regionis novae "[[Magnus Oriens|Magni Orientis]]" facta est. == Bibliographia == * Johannes Daniel Schoepflinus: ''Alsatia illustrata Germanica Gallica'', Typographia Regia Colmariæ, 1761 [https://bibliotheque-numerique.inha.fr/collection/item/12532-alsatia-illustrata-germanica-gallica Textus] {{NexInt}} == Notae == <references /> {{Provinciae Franciae antiquiores}} [[Categoria:Alsatia|!]] [[Categoria:Provinciae Franciae –1789]] k6rbyf5ulw9ti7rob8h3qg698ht6ent 8 Iulii 0 14607 3970993 3913048 2026-07-08T19:00:40Z Alexander Gerashchenko 331 /* Saeculo 20 */ 3970993 wikitext text/x-wiki {{Calendarium-Iulii}} '''8 Iulii''' [[dies]] 189ª anni est (190ª [[annus bisextilis|anni bisextilis]]) in [[Calendarium Gregorianum|calendario Gregoriano]]. 176 dies manent. Secundum [[calendarium Romanum]] est ''ante diem octavum Idus Iulias'', quod a.d. VIII Id. Iul. [[abbreviatio|abbreviatur]]. == Eventa == [[Fasciculus:Bellringer1776.jpg|thumb|left|upright=0.6|[[Campana Libertatis]] sonatur.]] === Saeculo 18 === * [[1776]] - [[Campana Libertatis]] (Anglice: ''Liberty Bell'') sonatur, dum [[Declaratio Libertatis Civitatum Americae Foederatarum]] recitatur. === Saeculo 19 === * [[1879]] - [[Theodorus Burmov]] primus [[Primi ministri Bulgariae|praeses ministrorum]] principatus [[Bulgaria]]e nominatur. === Saeculo 21 === * [[2011]] - [[Consilium securitatis]] resolutionem 1996 de [[Sudania Australis|Sudania Australi]] decernit. * [[2022]] - [[Scinzus Abe]], politicus et primus minister [[Iaponia|Iaponicus]], necatus est. == Nati == === Saculo 15 === * [[1478]] - [[Ioannes Georgius Trissinus]], humanista, poeta et linguista (mortuus anno [[1550]]) === Saeculo 16 === * [[1528]] - [[Emanuel Philibertus Sabaudiae]] (mortuus anno [[1580]]) * [[1558]] - [[Robertus Greene]], [[scriptor]] scaenicus [[Anglia|Anglicus]] (†&nbsp;[[1592]]) * [[1593]] - [[Artemisia Gentilescia]], pictrix Italica; mortua anno [[1654]]. === Saeculo 17 === * [[1621]] ** [[Alienora Christina Ulfeldt]], scriptrix [[Dania|Danica]] (mortua anno [[1698]]) ** [[Ioannes Fontana]], scriptor et [[moralistae Francici|moralista]] [[Francia|Francicus]] (mortuus anno [[1695]]) === Saeculo 18 === * [[1794]] - [[Iacobus Backhouse]], [[botanica|botanicus]] [[Britanniarum Regnum|Britannicus]] (mortuus anno [[1869]]) === Saeculo 19 === * [[1808]] - [[Georgius Robertus Gray]], biologus Britannicus; mortuus anno [[1872]]. * [[1836]] - [[Iosephus Chamberlain]], vir publicus Britannicus (mortuus anno [[1914]]) * [[1838]] - [[Comes Ferdinandus de Zeppelin]], fabricator [[aeronavis|aeronavium]] (mortuus anno [[1917]]) * [[1839]] - [[Ioannes Rockefeller]], homo negotiorum [[CFA|Americanus]] (mortuus anno [[1937]]) * [[1851]] - [[Arthurus Evans]], archaeologus Britannicus (mortuus anno [[1941]]) * [[1866]] - [[Benedictus Friedlaender]], mathematicus et scriptor [[Germania|Germanicus]] (mortuus anno [[1908]]) * [[1867]] - [[Catharina Kollwitz]], artifex Germanica (mortua [[1945]]) * [[1882]] - [[Ioannes Anderson]], [[oeconomia]]e et rerum politicarum peritus Britannicus (mortuus anno [[1958]]) * [[1885]] - [[Ernestus Bloch]], physicus Germanicus (mortuus anno [[1977]]) * [[1890]] - [[Gualtherius Hasenclever]], poeta Germanicus (mortuus anno [[1940]]) * [[1894]] - [[Petrus Kapica]], physicus [[Russia|Russicus]], [[Praemium Nobelianum physicae|praemio Nobeliano physicae]] affectus (mortuus anno [[1984]]) * [[1895]] - [[Inguarus Tamm]], physicus [[Unio Sovietica|Sovieticus]] (mortuus anno [[1971]]) === Saeculo 20 === * 1908 - [[Nelson Rockefeller]], [[Praeses vicarius Civitatum Foederatarum Americae|praeses vicarius]] Civitatum Foederatarum Americae (mortuus anno [[1979]]) * 1914 - [[Conradinus Bonorand]], pastor [[reformatio|reformatus]] et [[rerum gestarum scriptor]] [[Helvetia|Helveticus]] (mortuus anno [[1996]]) * [[1919]] - [[Gualterus Scheel]], vir publicus Germanicus factionis [[FDP]] atque praeses Germaniae (mortuus anno [[2016]]) * [[1925]] - [[Marcus Cé]], cardinalis [[Italia|Italicus]]; (mortuus anno [[2014]]) * [[1926]] - [[Elisabeth Kübler-Ross]], [[psychologus]] et [[psychiater]] Helveto-Americana (mortua anno [[2004]]) * [[1928]] - [[Marcellus Giombini]], [[musica]]e [[compositor]] Italicus (mortuus anno [[2003]]) * [[1931]] - [[Arawa Kimura]], pedilusor Iaponicus; mortuus anno [[2007]]. * [[1933]] - [[Petrus Orlovsky]], poeta Americanus (mortuus anno [[2010]]) * [[1934]] - [[Martinus Feldman]], scriptor, musicus, compositor et histrio Anglicus (mortuus anno [[1982]]) * [[1940]] - [[Petrus Danckert]], iurisprudens ac vir publicus Germanicus factionis [[SPD]] (mortuus anno [[2022]]). * [[1945]] - [[Michaelina Calmy-Rey]], rerum politicarum perita Helvetica * [[1951]] - [[Angelica Houston]], actrix Americana * [[1958]] - [[Tzipi Livni]], rerum politicarum perita [[Israel]]ita * [[1961]] - [[Uta Bertram]], rerum politicarum perita Germanica factionis [[CDU]] * [[1981]] - [[Keita Suzuki]], pedilusor Iaponicus. * [[1998]] - [[Jaden Smith]], histrio Americanus. == Mortui == === Saeculo 9 === * [[810]] - [[Pippinus (rex Italiae)|Pippinus]], rex Italiae (natus anno [[777]]) === Saeculo 10 === * [[975]] - [[Edgarus (rex Anglorum)|Edgarus]], [[Index Regum Angliae|rex Anglorum]] (*circa annum [[942]]) === Saeculo 12 === * [[1153]] - [[Eugenius III]], [[papa]] (natus die ignoto) === Saeculo 17 === * [[1623]] - [[Gregorius XV]], papa (natus anno [[1554]]) * 1695 - [[Christianus Huygens]], astronomus et mathematicus [[Nederlandia|Nederlandicus]] (natus anno [[1629]]) === Saeculo 18 === * [[1784]] - [[Torbernus Bergman]], [[Chemia|chemicus]] et [[Homo scientiae|scientista]] [[Suecia|Suecicus]] (natus anno [[1735]]) === Saeculo 19 === * [[1822]] - [[Percy Bysshe Shelley]], poeta Anglicus (natus anno [[1792]]) * [[1853]] - [[Carolus Fridericus (Saxonia-Vimarii-Eisenach)|Carolus Fridericus]], ab anno [[1828]] dux magnus [[Saxonia-Vimarii-Eisenach]] (natus anno [[1783]]) * [[1895]] - [[Iosephus Loschmidt]], physicus [[Austria]]cus; (natus anno [[1821]]). === Saeculo 20 === * [[1932]] - [[Alexander Grin]], scriptor [[Russia|Russicus]] et [[URSS|Sovieticus]] (natus anno [[1880]]) * [[1943]] - [[Ioannes Moulin]], activista Francicus (natus anno [[1899]]) * [[1957]] - [[Gratia Coolidge]], Prima Domina CFA (nata anno 1879) * [[1960]] - [[Angelus Cabrera]], studiosus [[zoologia]]e [[Hispania|Hispanicus]] (natus anno 1879) * [[1979]] - [[Shin'ichirō Tomonaga]], physicus [[Iaponia|Iaponicus]] (natus anno [[1906]]) * [[1985]] - [[Simon Smith Kuznets]], oeconomiae peritus Russo-Americanus (natus anno [[1901]]) * [[1994]] - [[Gim Il-Seong]], praeses [[Corea Septentrionalis|Coreae Septentrionalis]] (natus anno [[1912]]) === Saeculo 21 === * [[2006]] - [[June Allyson]], actrix Americana (nata anno 1917) * [[2011]] - [[Elisabetha Ford]], Prima Domina CFA; (nata anno [[1918]]) * [[2012]] - [[Ernestus Borgnine]], actor Americanus (natus anno 1917) * 2022 - **[[Scinzus Abe]], politicus Iaponicus (natus anno [[1954]]) **[[Iosephus Eduardus dos Santos]], praeses [[Angolia]]e; natus anno [[1942]]. **[[Ludovicus Echeverria Alvarez]], praeses [[Mexicum|Mexici]]; natus anno [[1922]]. == Festa et Feriae == * [[Roma]]e: [[:ca:Vitulatio|Vitulatio]] {{menses}} [[Categoria:Dies]] gq6y5t8q2bj20ddighbseouk269tj9e 3970994 3970993 2026-07-08T19:08:58Z Alexander Gerashchenko 331 /* Saeculo 20 */ 3970994 wikitext text/x-wiki {{Calendarium-Iulii}} '''8 Iulii''' [[dies]] 189ª anni est (190ª [[annus bisextilis|anni bisextilis]]) in [[Calendarium Gregorianum|calendario Gregoriano]]. 176 dies manent. Secundum [[calendarium Romanum]] est ''ante diem octavum Idus Iulias'', quod a.d. VIII Id. Iul. [[abbreviatio|abbreviatur]]. == Eventa == [[Fasciculus:Bellringer1776.jpg|thumb|left|upright=0.6|[[Campana Libertatis]] sonatur.]] === Saeculo 18 === * [[1776]] - [[Campana Libertatis]] (Anglice: ''Liberty Bell'') sonatur, dum [[Declaratio Libertatis Civitatum Americae Foederatarum]] recitatur. === Saeculo 19 === * [[1879]] - [[Theodorus Burmov]] primus [[Primi ministri Bulgariae|praeses ministrorum]] principatus [[Bulgaria]]e nominatur. === Saeculo 21 === * [[2011]] - [[Consilium securitatis]] resolutionem 1996 de [[Sudania Australis|Sudania Australi]] decernit. * [[2022]] - [[Scinzus Abe]], politicus et primus minister [[Iaponia|Iaponicus]], necatus est. == Nati == === Saculo 15 === * [[1478]] - [[Ioannes Georgius Trissinus]], humanista, poeta et linguista (mortuus anno [[1550]]) === Saeculo 16 === * [[1528]] - [[Emanuel Philibertus Sabaudiae]] (mortuus anno [[1580]]) * [[1558]] - [[Robertus Greene]], [[scriptor]] scaenicus [[Anglia|Anglicus]] (†&nbsp;[[1592]]) * [[1593]] - [[Artemisia Gentilescia]], pictrix Italica; mortua anno [[1654]]. === Saeculo 17 === * [[1621]] ** [[Alienora Christina Ulfeldt]], scriptrix [[Dania|Danica]] (mortua anno [[1698]]) ** [[Ioannes Fontana]], scriptor et [[moralistae Francici|moralista]] [[Francia|Francicus]] (mortuus anno [[1695]]) === Saeculo 18 === * [[1794]] - [[Iacobus Backhouse]], [[botanica|botanicus]] [[Britanniarum Regnum|Britannicus]] (mortuus anno [[1869]]) === Saeculo 19 === * [[1808]] - [[Georgius Robertus Gray]], biologus Britannicus; mortuus anno [[1872]]. * [[1836]] - [[Iosephus Chamberlain]], vir publicus Britannicus (mortuus anno [[1914]]) * [[1838]] - [[Comes Ferdinandus de Zeppelin]], fabricator [[aeronavis|aeronavium]] (mortuus anno [[1917]]) * [[1839]] - [[Ioannes Rockefeller]], homo negotiorum [[CFA|Americanus]] (mortuus anno [[1937]]) * [[1851]] - [[Arthurus Evans]], archaeologus Britannicus (mortuus anno [[1941]]) * [[1866]] - [[Benedictus Friedlaender]], mathematicus et scriptor [[Germania|Germanicus]] (mortuus anno [[1908]]) * [[1867]] - [[Catharina Kollwitz]], artifex Germanica (mortua [[1945]]) * [[1882]] - [[Ioannes Anderson]], [[oeconomia]]e et rerum politicarum peritus Britannicus (mortuus anno [[1958]]) * [[1885]] - [[Ernestus Bloch]], physicus Germanicus (mortuus anno [[1977]]) * [[1890]] - [[Gualtherius Hasenclever]], poeta Germanicus (mortuus anno [[1940]]) * [[1894]] - [[Petrus Kapica]], physicus [[Russia|Russicus]], [[Praemium Nobelianum physicae|praemio Nobeliano physicae]] affectus (mortuus anno [[1984]]) * [[1895]] - [[Inguarus Tamm]], physicus [[Unio Sovietica|Sovieticus]] (mortuus anno [[1971]]) === Saeculo 20 === * 1908 - [[Nelson Rockefeller]], [[Praeses vicarius Civitatum Foederatarum Americae|praeses vicarius]] Civitatum Foederatarum Americae (mortuus anno [[1979]]) * 1914 - [[Conradinus Bonorand]], pastor [[reformatio|reformatus]] et [[rerum gestarum scriptor]] [[Helvetia|Helveticus]] (mortuus anno [[1996]]) * [[1919]] - [[Gualterus Scheel]], vir publicus Germanicus factionis [[FDP]] atque praeses Germaniae (mortuus anno [[2016]]) * [[1925]] - [[Marcus Cé]], cardinalis [[Italia|Italicus]]; (mortuus anno [[2014]]) * [[1926]] - [[Elisabeth Kübler-Ross]], [[psychologus]] et [[psychiater]] Helveto-Americana (mortua anno [[2004]]) * [[1928]] - [[Marcellus Giombini]], [[musica]]e [[compositor]] Italicus (mortuus anno [[2003]]) * [[1931]] - [[Arawa Kimura]], pedilusor Iaponicus; mortuus anno [[2007]]. * [[1933]] - [[Petrus Orlovsky]], poeta Americanus (mortuus anno [[2010]]) * [[1934]] - [[Martinus Feldman]], scriptor, musicus, compositor et histrio Anglicus (mortuus anno [[1982]]) * [[1940]] - [[Petrus Danckert]], iurisprudens ac vir publicus Germanicus factionis [[SPD]] (mortuus anno [[2022]]). * [[1945]] - [[Michaelina Calmy-Rey]], rerum politicarum perita Helvetica * [[1951]] - [[Angelica Houston]], actrix Americana * [[1958]] - [[Tzipi Livni]], rerum politicarum perita [[Israel]]ita * [[1961]] - [[Uta Bertram]], rerum politicarum perita Germanica factionis [[CDU]] * [[1981]] - [[Keita Suzuki]], pedilusor Iaponicus. * [[1998]] - [[Jaden Smith]], histrio Americanus. == Mortui == === Saeculo 9 === * [[810]] - [[Pippinus (rex Italiae)|Pippinus]], rex Italiae (natus anno [[777]]) === Saeculo 10 === * [[975]] - [[Edgarus (rex Anglorum)|Edgarus]], [[Index Regum Angliae|rex Anglorum]] (*circa annum [[942]]) === Saeculo 12 === * [[1153]] - [[Eugenius III]], [[papa]] (natus die ignoto) === Saeculo 17 === * [[1623]] - [[Gregorius XV]], papa (natus anno [[1554]]) * 1695 - [[Christianus Huygens]], astronomus et mathematicus [[Nederlandia|Nederlandicus]] (natus anno [[1629]]) === Saeculo 18 === * [[1784]] - [[Torbernus Bergman]], [[Chemia|chemicus]] et [[Homo scientiae|scientista]] [[Suecia|Suecicus]] (natus anno [[1735]]) === Saeculo 19 === * [[1822]] - [[Percy Bysshe Shelley]], poeta Anglicus (natus anno [[1792]]) * [[1853]] - [[Carolus Fridericus (Saxonia-Vimarii-Eisenach)|Carolus Fridericus]], ab anno [[1828]] dux magnus [[Saxonia-Vimarii-Eisenach]] (natus anno [[1783]]) * [[1895]] - [[Iosephus Loschmidt]], physicus [[Austria]]cus; (natus anno [[1821]]). === Saeculo 20 === * [[1932]] - [[Alexander Grin]], scriptor [[Russia|Russicus]] et [[URSS|Sovieticus]] (natus anno [[1880]]) * [[1943]] - [[Ioannes Moulin]], activista Francicus (natus anno [[1899]]) * [[1946]] - [[Alexander Alexandrov]], musicae compositor et syntonarius [[Russia|Russicus|Russicus]] [[URSS|Sovieticus]] (natus anno [[1883]]) * [[1957]] - [[Gratia Coolidge]], Prima Domina CFA (nata anno 1879) * [[1960]] - [[Angelus Cabrera]], studiosus [[zoologia]]e [[Hispania|Hispanicus]] (natus anno 1879) * [[1979]] - [[Shin'ichirō Tomonaga]], physicus [[Iaponia|Iaponicus]] (natus anno [[1906]]) * [[1985]] - [[Simon Smith Kuznets]], oeconomiae peritus Russo-Americanus (natus anno [[1901]]) * [[1994]] - [[Gim Il-Seong]], praeses [[Corea Septentrionalis|Coreae Septentrionalis]] (natus anno [[1912]]) === Saeculo 21 === * [[2006]] - [[June Allyson]], actrix Americana (nata anno 1917) * [[2011]] - [[Elisabetha Ford]], Prima Domina CFA; (nata anno [[1918]]) * [[2012]] - [[Ernestus Borgnine]], actor Americanus (natus anno 1917) * 2022 - **[[Scinzus Abe]], politicus Iaponicus (natus anno [[1954]]) **[[Iosephus Eduardus dos Santos]], praeses [[Angolia]]e; natus anno [[1942]]. **[[Ludovicus Echeverria Alvarez]], praeses [[Mexicum|Mexici]]; natus anno [[1922]]. == Festa et Feriae == * [[Roma]]e: [[:ca:Vitulatio|Vitulatio]] {{menses}} [[Categoria:Dies]] msr7zx46v3zrxs7ejlt3iwltwn2sn5w 3970995 3970994 2026-07-08T19:09:17Z Alexander Gerashchenko 331 /* Saeculo 20 */ 3970995 wikitext text/x-wiki {{Calendarium-Iulii}} '''8 Iulii''' [[dies]] 189ª anni est (190ª [[annus bisextilis|anni bisextilis]]) in [[Calendarium Gregorianum|calendario Gregoriano]]. 176 dies manent. Secundum [[calendarium Romanum]] est ''ante diem octavum Idus Iulias'', quod a.d. VIII Id. Iul. [[abbreviatio|abbreviatur]]. == Eventa == [[Fasciculus:Bellringer1776.jpg|thumb|left|upright=0.6|[[Campana Libertatis]] sonatur.]] === Saeculo 18 === * [[1776]] - [[Campana Libertatis]] (Anglice: ''Liberty Bell'') sonatur, dum [[Declaratio Libertatis Civitatum Americae Foederatarum]] recitatur. === Saeculo 19 === * [[1879]] - [[Theodorus Burmov]] primus [[Primi ministri Bulgariae|praeses ministrorum]] principatus [[Bulgaria]]e nominatur. === Saeculo 21 === * [[2011]] - [[Consilium securitatis]] resolutionem 1996 de [[Sudania Australis|Sudania Australi]] decernit. * [[2022]] - [[Scinzus Abe]], politicus et primus minister [[Iaponia|Iaponicus]], necatus est. == Nati == === Saculo 15 === * [[1478]] - [[Ioannes Georgius Trissinus]], humanista, poeta et linguista (mortuus anno [[1550]]) === Saeculo 16 === * [[1528]] - [[Emanuel Philibertus Sabaudiae]] (mortuus anno [[1580]]) * [[1558]] - [[Robertus Greene]], [[scriptor]] scaenicus [[Anglia|Anglicus]] (†&nbsp;[[1592]]) * [[1593]] - [[Artemisia Gentilescia]], pictrix Italica; mortua anno [[1654]]. === Saeculo 17 === * [[1621]] ** [[Alienora Christina Ulfeldt]], scriptrix [[Dania|Danica]] (mortua anno [[1698]]) ** [[Ioannes Fontana]], scriptor et [[moralistae Francici|moralista]] [[Francia|Francicus]] (mortuus anno [[1695]]) === Saeculo 18 === * [[1794]] - [[Iacobus Backhouse]], [[botanica|botanicus]] [[Britanniarum Regnum|Britannicus]] (mortuus anno [[1869]]) === Saeculo 19 === * [[1808]] - [[Georgius Robertus Gray]], biologus Britannicus; mortuus anno [[1872]]. * [[1836]] - [[Iosephus Chamberlain]], vir publicus Britannicus (mortuus anno [[1914]]) * [[1838]] - [[Comes Ferdinandus de Zeppelin]], fabricator [[aeronavis|aeronavium]] (mortuus anno [[1917]]) * [[1839]] - [[Ioannes Rockefeller]], homo negotiorum [[CFA|Americanus]] (mortuus anno [[1937]]) * [[1851]] - [[Arthurus Evans]], archaeologus Britannicus (mortuus anno [[1941]]) * [[1866]] - [[Benedictus Friedlaender]], mathematicus et scriptor [[Germania|Germanicus]] (mortuus anno [[1908]]) * [[1867]] - [[Catharina Kollwitz]], artifex Germanica (mortua [[1945]]) * [[1882]] - [[Ioannes Anderson]], [[oeconomia]]e et rerum politicarum peritus Britannicus (mortuus anno [[1958]]) * [[1885]] - [[Ernestus Bloch]], physicus Germanicus (mortuus anno [[1977]]) * [[1890]] - [[Gualtherius Hasenclever]], poeta Germanicus (mortuus anno [[1940]]) * [[1894]] - [[Petrus Kapica]], physicus [[Russia|Russicus]], [[Praemium Nobelianum physicae|praemio Nobeliano physicae]] affectus (mortuus anno [[1984]]) * [[1895]] - [[Inguarus Tamm]], physicus [[Unio Sovietica|Sovieticus]] (mortuus anno [[1971]]) === Saeculo 20 === * 1908 - [[Nelson Rockefeller]], [[Praeses vicarius Civitatum Foederatarum Americae|praeses vicarius]] Civitatum Foederatarum Americae (mortuus anno [[1979]]) * 1914 - [[Conradinus Bonorand]], pastor [[reformatio|reformatus]] et [[rerum gestarum scriptor]] [[Helvetia|Helveticus]] (mortuus anno [[1996]]) * [[1919]] - [[Gualterus Scheel]], vir publicus Germanicus factionis [[FDP]] atque praeses Germaniae (mortuus anno [[2016]]) * [[1925]] - [[Marcus Cé]], cardinalis [[Italia|Italicus]]; (mortuus anno [[2014]]) * [[1926]] - [[Elisabeth Kübler-Ross]], [[psychologus]] et [[psychiater]] Helveto-Americana (mortua anno [[2004]]) * [[1928]] - [[Marcellus Giombini]], [[musica]]e [[compositor]] Italicus (mortuus anno [[2003]]) * [[1931]] - [[Arawa Kimura]], pedilusor Iaponicus; mortuus anno [[2007]]. * [[1933]] - [[Petrus Orlovsky]], poeta Americanus (mortuus anno [[2010]]) * [[1934]] - [[Martinus Feldman]], scriptor, musicus, compositor et histrio Anglicus (mortuus anno [[1982]]) * [[1940]] - [[Petrus Danckert]], iurisprudens ac vir publicus Germanicus factionis [[SPD]] (mortuus anno [[2022]]). * [[1945]] - [[Michaelina Calmy-Rey]], rerum politicarum perita Helvetica * [[1951]] - [[Angelica Houston]], actrix Americana * [[1958]] - [[Tzipi Livni]], rerum politicarum perita [[Israel]]ita * [[1961]] - [[Uta Bertram]], rerum politicarum perita Germanica factionis [[CDU]] * [[1981]] - [[Keita Suzuki]], pedilusor Iaponicus. * [[1998]] - [[Jaden Smith]], histrio Americanus. == Mortui == === Saeculo 9 === * [[810]] - [[Pippinus (rex Italiae)|Pippinus]], rex Italiae (natus anno [[777]]) === Saeculo 10 === * [[975]] - [[Edgarus (rex Anglorum)|Edgarus]], [[Index Regum Angliae|rex Anglorum]] (*circa annum [[942]]) === Saeculo 12 === * [[1153]] - [[Eugenius III]], [[papa]] (natus die ignoto) === Saeculo 17 === * [[1623]] - [[Gregorius XV]], papa (natus anno [[1554]]) * 1695 - [[Christianus Huygens]], astronomus et mathematicus [[Nederlandia|Nederlandicus]] (natus anno [[1629]]) === Saeculo 18 === * [[1784]] - [[Torbernus Bergman]], [[Chemia|chemicus]] et [[Homo scientiae|scientista]] [[Suecia|Suecicus]] (natus anno [[1735]]) === Saeculo 19 === * [[1822]] - [[Percy Bysshe Shelley]], poeta Anglicus (natus anno [[1792]]) * [[1853]] - [[Carolus Fridericus (Saxonia-Vimarii-Eisenach)|Carolus Fridericus]], ab anno [[1828]] dux magnus [[Saxonia-Vimarii-Eisenach]] (natus anno [[1783]]) * [[1895]] - [[Iosephus Loschmidt]], physicus [[Austria]]cus; (natus anno [[1821]]). === Saeculo 20 === * [[1932]] - [[Alexander Grin]], scriptor [[Russia|Russicus]] et [[URSS|Sovieticus]] (natus anno [[1880]]) * [[1943]] - [[Ioannes Moulin]], activista Francicus (natus anno [[1899]]) * [[1946]] - [[Alexander Alexandrov]], musicae compositor et syntonarius [[Russia|Russicus]] [[URSS|Sovieticus]] (natus anno [[1883]]) * [[1957]] - [[Gratia Coolidge]], Prima Domina CFA (nata anno 1879) * [[1960]] - [[Angelus Cabrera]], studiosus [[zoologia]]e [[Hispania|Hispanicus]] (natus anno 1879) * [[1979]] - [[Shin'ichirō Tomonaga]], physicus [[Iaponia|Iaponicus]] (natus anno [[1906]]) * [[1985]] - [[Simon Smith Kuznets]], oeconomiae peritus Russo-Americanus (natus anno [[1901]]) * [[1994]] - [[Gim Il-Seong]], praeses [[Corea Septentrionalis|Coreae Septentrionalis]] (natus anno [[1912]]) === Saeculo 21 === * [[2006]] - [[June Allyson]], actrix Americana (nata anno 1917) * [[2011]] - [[Elisabetha Ford]], Prima Domina CFA; (nata anno [[1918]]) * [[2012]] - [[Ernestus Borgnine]], actor Americanus (natus anno 1917) * 2022 - **[[Scinzus Abe]], politicus Iaponicus (natus anno [[1954]]) **[[Iosephus Eduardus dos Santos]], praeses [[Angolia]]e; natus anno [[1942]]. **[[Ludovicus Echeverria Alvarez]], praeses [[Mexicum|Mexici]]; natus anno [[1922]]. == Festa et Feriae == * [[Roma]]e: [[:ca:Vitulatio|Vitulatio]] {{menses}} [[Categoria:Dies]] dp660cqsj2etw08aejjs3v48mir3gdl Liber Leviticus 0 24478 3971000 3967319 2026-07-08T20:50:59Z LilyKitty 18316 de sacrificio 3971000 wikitext text/x-wiki {| class="wikitable" style="float:right; empty-cells:show; margin-left:1em; margin-bottom:0.5em; background:#FFFFFF;" |- id="K-id" !colspan="2"| [[Thora]] sive [[Pentateuchus]] |- | בְּרֵאשִׁית "in principio" || [[Liber Genesis]] |- | שְׁמוֹת "nomina" || [[Liber Exodus]] |- | וַיִּקְרָא "et vocavit" || Liber Leviticus |- | בְּמִדְבַּר "in deserto" || [[Liber Numeri]] |- | דְּבָרִים "verba" || [[Liber Deuteronomii]] |} [[Fasciculus:Book_of_Leviticus,_Mikraot_Gdolot,_Warsaw_edition,_1860,_Page_1.jpg|thumb|Liber Leviticus, [[Varsovia]]e 1860]] [[Fasciculus:LEV 8- High priest in robes and breastplate.jpg|thumb|[[Levi (tribus)|Levita]], administer cultus [[Templum Hierosolymitanum|templi Hierosolymitani]].]] '''Liber Leviticus''' est tertius [[Biblia|Bibliorum Sacrorum]] liber et simul [[Pentateuchus|Pentateuchi]] ([[Thora]]e). Multas gentis [[Israelitae|Israelitarum]] [[lex|leges]] continet, imprimis praecepta, quae illos [[sacerdos|sacerdotes]] attinent, qui ab [[Aaron]] prognati sunt ("Kohanim"). Quaestio, quis librum Levitici conscripsisset, multas et varias disputationes incitavit (vide: [[Thora]]). == Nomen == Liber Leviticus secundum primum libri verbum [[Hebraice]] {{lang|he|וַיִּקְרָ֖א}} ''wayyiqrā'', "vocavit autem", appellatur. Nomen Latinum ex voce [[Lingua Graeca|Graeca]] {{lang|grc|Λευιτικόν}}, "ad [[Levi (tribus)|tribum Levi]] pertinens" sive (το) Λευιτικόν (βιβλίον), "Liber Leviticus", minus apte datum esse videtur, cum liber imprimis Kohanim (id est sacerdotes) et officia eorum tractet, de [[Levi (tribus)|Levitis]] autem non nisi uno loco (Lev 25,32–34) mentio fit. == Breviarium == Liber Leviticus primum (cap. 1-7) praecepta ad varia sacra facienda, quae a sacerdotibus (Aaron et prognatis eius) perpetrantur. Praeterea officia sacerdotum describuntur. Consecratione Aaron filiorumque (cap. 8-10) in sacerdotes sacerdotium Israelitarum constituitur. ''Nadab'' et ''Abihu'', duo filii Aarons, qui graviter in sacris peccant, a Deo interficiuntur. Deinde (cap. 11-15) praecepta dantur, quae animalia "pura" pro [[sacrificium|sacrificio]] et ad edendum apta sint, porro de puritate hominum in variis vitae conditionibus ([[nativitas]], [[menstruatio]], [[coitus]], [[morbus]]) agitur. In capitulus 13 et 14 copiose usus cum scabiosis explicatur. Ex nomine morbi Hebraico non clare liquet, qualis sit morbus, [[Hieronymus]] autem verbo "lepra" utitur (exempli gratia Lev 13,44-46): :''44 Vir maculatus est lepra, et sacerdos omnino decernet eum esse immundum; plaga est in capite eius. 45 Leprosus hac plaga percussus habebit vestimenta dissuta, comam capitis excussam, barbam contectam; clamabit: "Immundus! Immundus!". 46 Omni tempore, quo leprosus est immundus, immundus est et solus habitabit extra castra.'' In capitulo 16 [[Dies Expiationis]], festum omnium Israelitarum peccatis expiandis, instituitur. :''29 Eritque hoc vobis legitimum sempiternum: mense septimo, decima die mensis affligetis animas vestras nullumque facietis opus sive indigena sive advena, qui peregrinatur inter vos.'' :''30 In hac die expiatio erit vestri atque mundatio; ab omnibus peccatis vestris coram Domino mundabimini.'' :Etiam de duobus hircis mentio fit: Alter mactatur "Domino" "pro peccato populi", alter "statuitur vivus coram Domino in expiationem, ut emittatur ad Azazel in solitudinem" (Lev 16,9-10.15). "Posita utraque manu super caput eius, confiteatur Aaron super eum omnes iniquitates filiorum Israel et universa delicta atque peccata eorum; quae ponens super caput eius emittet illum per hominem paratum in desertum" ( Lev 16,15). In capitulis 17-26 corpus legum invenitur, quod in [[Scientia Biblica]] "Lex Sanctitatis" (Theodisce: "Heiligkeitsgesetz") appellatur,<ref>Nomen ab Augusto Klostermann datum est: Klostermann, A., Ezechiel und das Heiligkeitsgesetz, Zeitschrift für die lutherische Theologie und Kirche 38 (1877) 401-445.</ref> eo quod in "sanctitate" populi sive secessione eius a consuetudinibus aliorum populorum nititur: Populus Dei est, qui eum ex Aegypto eduxit: :''31 Custodite mandata mea et facite ea. Ego Dominus. 32 Ne polluatis nomen meum sanctum, ut sanctificer in medio filiorum Israel. Ego Dominus, qui sanctifico vos 33 et eduxi de terra Aegypti, ut essem vobis in Deum. Ego Dominus''. [[Fasciculus:Manuscript Illumination with Initial V, from a Bible MET DP102859 (cropped).jpg|thumb|Initium libri Levitici in manuscripto saeculi XII]] Lev 25 praecepta de [[Iobeleus|Iobeleo]] amplectitur, diei festi religionis Iudaicae et [[Ecclesia Catholica Romana|Ecclesiae Catholicae Romanae]]. Primus Iobeleus in Ecclesia Catholica Romana anno [[1300]] a [[Bonifacius VIII|Bonifacio VIII]] papa vi ac potestate nominis mutatis promulgatus est. == Commentarii libri Levitici<ref>Ex Vicipaedia Anglica sumpta, vox [[:en:Book of Leviticus]]</ref> == *Balentine, Samuel E (2002). Leviticus. Westminster John Knox Press. ISBN 9780664237356. *Bamberger, Bernard Jacob The Torah: A Modern Commentary (1981), ISBN 0-8074-0055-6 *Gerstenberger, Erhard S (1996). Leviticus: A Commentary. Westminster John Knox Press. ISBN 9780664226732. *Gorman, Frank H (1997). Divine Presence and Community: A Commentary on the Book of Leviticus. Eerdmans. ISBN 9780802801104. *Grabbe, Lester (1998). "Leviticus". In John Barton (ed.). Oxford Bible Commentary. Oxford University Press. ISBN 9780198755005. *Hartley, John E. (1992). Leviticus. Word. ISBN 0849902037. *Houston, Walter J (2003). "Leviticus". In James D. G. Dunn, John William Rogerson (ed.). Eerdmans Bible Commentary. Eerdmans. ISBN 9780802837110. *Kleinig, John W (2004). Leviticus. Concordia Publishing House. ISBN 9780570063179. *Levine, Baruch A. (1989). JPS Torah Commentary: Leviticus. Jewish Publication Society. Archived from the original on 2016-08-05. Retrieved 2014-07-07. *Milgrom, Jacob (1998–2001). Leviticus 1–16, Leviticus 17–22, Leviticus 23–27. New Haven: Yale. *Milgrom, Jacob (2004). Leviticus: A Book of Ritual and Ethics. Minneapolis: Fortress. ISBN 9781451410150. *Watts, James W. (2013). Leviticus 1–10. Leuven: Peeters. ISBN 978-9042929845. *Wenham, Gordon (1979). The Book of Leviticus. Eerdmans. ISBN 9780802825223. == Notae == <references/> {{NexInt}} *[[Aaron]] *[[Dies Expiationis]] *[[Levi (tribus)|Levitae]] *[[Templum Hierosolymitanum]] *[[Campana Libertatis]] == Nexus externus == *[http://www.vatican.va/archive/bible/nova_vulgata/documents/nova-vulgata_vt_leviticus_lt.html Liber Leviticus in Nova Vulgata] *Klaus Grünwaldt: [https://www.bibelwissenschaft.de/wibilex/das-bibellexikon/lexikon/sachwort/anzeigen/details/leviticus/ch/f1c2fdc8b2ddf545136f169e5f399e9a/ Leviticus]. In: Michaela Bauks, Klaus Koenen, Stefan Alkier (ed.): Das wissenschaftliche Bibellexikon im Internet (WiBiLex), Stuttgardiae 2006 ss. {{Vetus Testamentum}} [[Categoria:Liber Leviticus|!]] mb82dpwatnwssugr8sink1ioi59qsda Guido 0 24771 3971043 3843800 2026-07-09T03:39:57Z Grufo 64423 De alia forma secundum secundam declinationem 3971043 wikitext text/x-wiki {{Nomen | genus = Masculinum | origo = Germanica | significatio = fortasse “silva” | imago = Guy de Maupassant par Alphonse Liébert.jpg | capitulum = [[Guido de Maupassant]], poëta Francogallicus }} {{res|Guido}}<ref>“[http://www.uni-mannheim.de/mateo/camenaref/hofmann/hof2/s0428b.html Guido]” in {{Hofmannus}}</ref> ({{pns|onis|m}}) seu {{res|Guidus}}<ref>“Guidus” Latinitate peiore videmus e.g. [https://www.google.com/books/edition/Raccolta_di_scelti_diplomi_pisani_fatta/nIgP4ulwfC0C?gbpv=1&dq=guidus&pg=PA125&printsec=frontcover hic].</ref> ({{pns|i|m}}) est [[nomen]] masculinum origine [[Linguae Germanicae|Germanica]] (''widu'' = ''[[silva]]''). == Homines == * [[Guido Aretinus|Guido Arretinus]] * [[Guido Cantelli]] * [[Guido Cavalcanti]] * [[Guido Cumpanio]] * [[Guido de Maupassant]] * [[Guido Fawkes]] * [[Guido Leziniacensis]] * [[Guido Paraeus]] * [[Guido Parmelin]] * [[Guido Reni]] * [[Guido Vigevanensis]] == Notae == <references/> [[Categoria:Praenomina]] [[Categoria:Praenomina Hispanica]] [[Categoria:Praenomina Italica]] 3o615swekev6voec20y4eeemvb7lvdd Dicasterium de Causis Sanctorum 0 28638 3970956 3744650 2026-07-08T14:19:29Z Marcus Terentius Bibliophilus 2059 3970956 wikitext text/x-wiki '''Congregatio de Causis [[Sanctus|Sanctorum]]'''<ref>[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum De congregatione ipsa apud situm interretialem vatican.va].</ref> est una e novem congregationibus [[Curia Romana|curiae Romanae]], quae die [[8 Maii]] [[1969]] cum [[constitutio apostolica| constitutione apostolica]] ''Sacra Rituum Congregatio '' [[Paulus VI|Paulus Papa VI]] a [[Congregatio Rituum|Congregatione Rituum]] (hodie [[Congregatio de Cultu Divino et Disciplina Sacramentorum|Congregatione de Cultu Divino et Disciplina Sacramentorum]]) separavit. Secundum ''[[Pastor Bonus|Pastorem Bonum]]'' [[constitutio apostolica|constitutionem apostolicam]] (art. 71) sic definitur congregationis officium: "Congregatio ea omnia tractat, quæ, secundum statutum iter, ad Servorum Dei [[canonizatio]]nem perducunt."<ref><ref>Lites de beatificatione in [[Constitutio Apostolica|constitutione apostolica]] ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 a Ioanne Paulo II iterum tractatae sunt.</ref></ref> Praefectus Congregationis de Causis Sanctorum a die [[15 Octobris]] [[2020]] est [[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], cuius decessor fuit [[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]]. Congregatio dicasterium{{dubsig}}<!--Fons Latinus?--> facta est in ordinatione Romanae Curiae 2022, iuxta constitutionem apostolicam "Praedicatum evangelium," ==Index praefectorum== *[[Paulus Bertoli|Paulus Cardinalis Bertoli]] *[[Aloysius Raimondi|Aloysius Cardinalis Raimondi]] *[[Conradus Bafile|Conradus Cardinalis Bafile]] *[[Petrus Palazzini|Petrus Cardinalis Palazzini]] *[[Angelus Felici|Angelus Cardinalis Felici]] *[[Albertus Bovone|Albertus Cardinalis Bovone]] *[[Iosephus Saraiva Martins|Iosephus Saraiva Cardinalis Martins]] (1998–2008) *[[Angelus Amato|Angelus Cardinalis Amato]] (2008–2018) *[[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]] (2018–2020) *[[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], a die [[15 Octobris]] [[2020]] ==Nogae== <references/> == Nexus externi== *[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum Pagina interretialis congregationis propria in situ Curiae Romanae.] *[http://www.vatican.va/holy_father/john_paul_ii/apost_constitutions/documents/hf_jp-ii_apc_19880628_pastor-bonus-index_lt.html ''Pastor Bonus,'' constitutio apostolica.] *[http://www.vatican.va/holy_father/paul_vi/apost_constitutions/documents/hf_p-vi_apc_19690508_sacra-rituum-congregatio_lt.html Constitutio apostolica Sacra Rituum Congregatio.] [[Categoria:Curia Romana]] i0dzf1747nh7l0nx6ctzwil5rbud8mv 3970957 3970956 2026-07-08T14:21:35Z Marcus Terentius Bibliophilus 2059 3970957 wikitext text/x-wiki '''Congregatio de Causis [[Sanctus|Sanctorum]]'''<ref>[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum De congregatione ipsa apud situm interretialem vatican.va].</ref> est una e novem congregationibus [[Curia Romana|curiae Romanae]], quae die [[8 Maii]] [[1969]] cum [[constitutio apostolica| constitutione apostolica]] ''Sacra Rituum Congregatio '' [[Paulus VI|Paulus Papa VI]] a [[Congregatio Rituum|Congregatione Rituum]] (hodie [[Congregatio de Cultu Divino et Disciplina Sacramentorum|Congregatione de Cultu Divino et Disciplina Sacramentorum]]) separavit. Secundum ''[[Pastor Bonus|Pastorem Bonum]]'' [[constitutio apostolica|constitutionem apostolicam]] (art. 71) sic definitur congregationis officium: "Congregatio ea omnia tractat, quæ, secundum statutum iter, ad Servorum Dei [[canonizatio]]nem perducunt."<ref>Lites de beatificatione in [[Constitutio Apostolica|constitutione apostolica]] ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 a Ioanne Paulo II iterum tractatae sunt.</ref> Praefectus Congregationis de Causis Sanctorum a die [[15 Octobris]] [[2020]] est [[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], cuius decessor fuit [[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]]. Congregatio dicasterium{{dubsig}}<!--Fons Latinus?--> facta est in ordinatione Romanae Curiae 2022, iuxta constitutionem apostolicam "Praedicatum evangelium," ==Index praefectorum== *[[Paulus Bertoli|Paulus Cardinalis Bertoli]] *[[Aloysius Raimondi|Aloysius Cardinalis Raimondi]] *[[Conradus Bafile|Conradus Cardinalis Bafile]] *[[Petrus Palazzini|Petrus Cardinalis Palazzini]] *[[Angelus Felici|Angelus Cardinalis Felici]] *[[Albertus Bovone|Albertus Cardinalis Bovone]] *[[Iosephus Saraiva Martins|Iosephus Saraiva Cardinalis Martins]] (1998–2008) *[[Angelus Amato|Angelus Cardinalis Amato]] (2008–2018) *[[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]] (2018–2020) *[[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], a die [[15 Octobris]] [[2020]] ==Nogae== <references/> == Nexus externi== *[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum Pagina interretialis congregationis propria in situ Curiae Romanae.] *[http://www.vatican.va/holy_father/john_paul_ii/apost_constitutions/documents/hf_jp-ii_apc_19880628_pastor-bonus-index_lt.html ''Pastor Bonus,'' constitutio apostolica.] *[http://www.vatican.va/holy_father/paul_vi/apost_constitutions/documents/hf_p-vi_apc_19690508_sacra-rituum-congregatio_lt.html Constitutio apostolica Sacra Rituum Congregatio.] [[Categoria:Curia Romana]] 9whvl5drlxw2x7bku6srs1691c8l3h9 3970981 3970957 2026-07-08T16:11:05Z Marcus Terentius Bibliophilus 2059 3970981 wikitext text/x-wiki '''Congregatio de Causis [[Sanctus|Sanctorum]]'''<ref>[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum De congregatione ipsa apud situm interretialem vatican.va].</ref> est una e novem congregationibus [[Curia Romana|curiae Romanae]], quae die [[8 Maii]] [[1969]] cum [[constitutio Apostolica|constitutione apostolica]] ''Sacra Rituum Congregatio '' [[Paulus VI|Paulus Papa VI]] a [[Congregatio Rituum|Congregatione Rituum]] (hodie [[Congregatio de Cultu Divino et Disciplina Sacramentorum|Congregatione de Cultu Divino et Disciplina Sacramentorum]]) separavit. Secundum ''[[Pastor Bonus|Pastorem Bonum]]'' [[constitutio apostolica|constitutionem apostolicam]] (art. 71) sic definitur congregationis officium: "Congregatio ea omnia tractat, quæ, secundum statutum iter, ad Servorum Dei [[canonizatio]]nem perducunt."<ref>Lites de beatificatione in [[Constitutio Apostolica|constitutione apostolica]] ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 a Ioanne Paulo II iterum tractatae sunt.</ref> Praefectus Congregationis de Causis Sanctorum a die [[15 Octobris]] [[2020]] est [[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], cuius decessor fuit [[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]]. Congregatio dicasterium{{dubsig}}<!--Fons Latinus?--> facta est in ordinatione Romanae Curiae 2022, iuxta constitutionem apostolicam "Praedicatum evangelium," ==Index praefectorum== *[[Paulus Bertoli|Paulus Cardinalis Bertoli]] *[[Aloysius Raimondi|Aloysius Cardinalis Raimondi]] *[[Conradus Bafile|Conradus Cardinalis Bafile]] *[[Petrus Palazzini|Petrus Cardinalis Palazzini]] *[[Angelus Felici|Angelus Cardinalis Felici]] *[[Albertus Bovone|Albertus Cardinalis Bovone]] *[[Iosephus Saraiva Martins|Iosephus Saraiva Cardinalis Martins]] (1998–2008) *[[Angelus Amato|Angelus Cardinalis Amato]] (2008–2018) *[[Ioannes Angelus Becciu|Ioannes Angelus Cardinalis Becciu]] (2018–2020) *[[Marcellus Semeraro|Marcellus Cardinalis Semeraro]], a die [[15 Octobris]] [[2020]] ==Nogae== <references/> == Nexus externi== *[https://www.vatican.va/latin/latin_curia.html#Congregatio_de_Causis_Sanctorum Pagina interretialis congregationis propria in situ Curiae Romanae.] *[http://www.vatican.va/holy_father/john_paul_ii/apost_constitutions/documents/hf_jp-ii_apc_19880628_pastor-bonus-index_lt.html ''Pastor Bonus,'' constitutio apostolica.] *[http://www.vatican.va/holy_father/paul_vi/apost_constitutions/documents/hf_p-vi_apc_19690508_sacra-rituum-congregatio_lt.html Constitutio apostolica Sacra Rituum Congregatio.] [[Categoria:Curia Romana]] awqd9b1c2xu72jden8yg2u1d07zgbg8 Dicasterium de Cultu Divino et Disciplina Sacramentorum 0 28646 3971055 3645275 2026-07-09T06:35:00Z Bartholomite 116968 Bartholomite movit paginam [[Congregatio de Cultu Divino et Disciplina Sacramentorum]] ad [[Dicasterium de Cultu Divino et Disciplina Sacramentorum]]: nunc 3645275 wikitext text/x-wiki '''Congregatio de Cultu Divino et Disciplina Sacramentorum''' est una novem congregationum [[Curia Romana|curia romanae]], quae ut ''Congregatio Rituum'' a papa [[Sixtus V|Sixto V]] die [[22 Ianuarii]] [[1588]] condita est. Die [[8 Maii]] [[1969]] cum [[constitutio apostolica|constitutione apostolica]] ''Sacra Rituum Congregatio'' papa [[Paulus VI]] a [[Congregatio Rituum|Congregatione Rituum]] [[Congregatio de Causis Sanctorum|Congregationem de Causis Sanctorum]] separavit et primae congregationi praesens nomen dedit. Secundum [[constitutio apostolica|constitutionem apostolicam]] ''Pastor Bonus'' (art. 62) est officium huius congregationis. :''Congregatio ea agit quæ, salva competentia Congregationis de Doctrina Fidei, ad Sedem Apostolicam pertinent quoad moderationem ac promotionem sacræ liturgiæ, in primis Sacramentorum.'' Praeses Congregationis de Cultu Divino et Disciplina Sacramentorum fuerunt [[cardinalis|cardinales]] [[Franciscus Arinze]]; ab anno [[2009]] usque ad annum [[2014]] [[Antonius Cañizares Llovera]] et nunc est cardinalis [[Robertus Sarah]]. == Index Præfectorum == *[[Paulus Augustinus Mayer]] *[[Eduardus Martínez Somalo]] *[[Antonius Maria Javierre Ortas]] *[[Georgius Arthurus Medina Estévez]] *[[Franciscus Arinze]] *[[Antonius Cañizares Llovera]] *[[Robertus Sarah]] *[[Arthurus Roche]] == Nexus externi == * [http://www.vatican.va/roman_curia/congregations/ccdds/index_it.htm Pagina officialis] * [http://www.vatican.va/holy_father/john_paul_ii/apost_constitutions/documents/hf_jp-ii_apc_19880628_pastor-bonus-index_lt.html Constitutio apostolica Pastor Bonus] * [http://www.vatican.va/holy_father/paul_vi/apost_constitutions/documents/hf_p-vi_apc_19690508_sacra-rituum-congregatio_lt.html constitutio apostolica Sacra Rituum Congregatio ] * {{CathHierDiocese|xdws}} {{reli-stipula}} [[Categoria:Curia Romana]] ebgtyypklo17qul4eqrt5nmudded2hc Campania et Arduenna 0 31140 3971006 3422264 2026-07-08T22:01:13Z LilyKitty 18316 de Oriente magno 3971006 wikitext text/x-wiki {{Capsa subdivisionis Vicidata}} {{pro pagina discretiva vide|Campania (discretiva)}} '''Campania et Arduenna'''<ref>Fons nominum provinciarum: {{Graesse}}</ref> (Francogallice ''Champagne-Ardenne'') erat usque [[2015]] [[regio]] administrativa, sive [[provincia]] [[Francia]]e. Caput regionis erat urbs [[Durocatalaunum]]. Haec provincia habebat praefecturas quattuor: * [[Arduenna (praefectura Franciae)|Arduenna]] * [[Alba (praefectura Franciae)|Alba]] * [[Matrona (praefectura Franciae)|Matrona]] * [[Matrona Superior]] Ex anno [[2016]] Campania et Arduenna facta est pars novae regionis [[Alsatia Campania Arduenna Lotharingia|Alsatiae Campaniae Arduennae Lotharingiae]], sive "[[Magnus Oriens|Orientis magni]]". == Notae == <references /> == Nexus externi == [[Fasciculus:TER Champagne-Ardenne, carte du réseau.svg|thumb|Rete regionale ferriviarum Campaniae et Arduennae anno 2012 depictum]] {{Fontes geographici}} {{Regiones Franciae}} [[Categoria:Provinciae Franciae –2015]] [[Categoria:Campania (regio Franciae)]] ot2mkxwbfkd0onhtajd29isqcpry88n 3971010 3971006 2026-07-08T22:14:08Z IacobusAmor 1163 3971010 wikitext text/x-wiki {{Capsa subdivisionis Vicidata}} {{pro pagina discretiva vide|Campania (discretiva)}} '''Campania et Arduenna'''<ref>Fons nominum provinciarum: {{Graesse}}.</ref> ([[Francogallice]] ''Champagne-Ardenne'') usque [[2015]] fuit [[regio]] administrativa, sive [[provincia]] [[Francia]]e. Caput regionis fuit urbs [[Durocatalaunum]]. Huic provinciae fuerunt praefecturae quattuor: * [[Arduenna (praefectura Franciae)|Arduenna]] * [[Alba (praefectura Franciae)|Alba]] * [[Matrona (praefectura Franciae)|Matrona]] * [[Matrona Superior]] Ex anno [[2016]], Campania et Arduenna sunt pars novae regionis [[Alsatia Campania Arduenna Lotharingia|Alsatiae Campaniae Arduennae Lotharingiae]], saepe [[Magnus Oriens|Magni Orientis]] appellatae. == Notae == <references /> == Nexus externi == [[Fasciculus:TER Champagne-Ardenne, carte du réseau.svg|thumb|upright=0.8|Rete regionale ferriviarum Campaniae et Arduennae anno 2012 depictum.]] {{Fontes geographici}} {{Regiones Franciae}} [[Categoria:Campania (regio Franciae)]] [[Categoria:Provinciae Franciae –2015]] lymiendkxm2z0h36k5qczlz07c9vdu9 Eutropius (rerum gestarum scriptor) 0 33269 3970958 3822826 2026-07-08T15:01:12Z Marcus Terentius Bibliophilus 2059 /* Notae */ 3970958 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac Magister Memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. ==Cursus honorum== Eutropius anno [[371]]/[[372]] proconsul [[Asia (provincia Romana)|Asiae]], anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] 0l68thjq9s1t4he5x4n98fy47n6vwt1 3970959 3970958 2026-07-08T15:04:18Z Marcus Terentius Bibliophilus 2059 /* Bibliographia */ 3970959 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac Magister Memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. ==Cursus honorum== Eutropius anno [[371]]/[[372]] proconsul [[Asia (provincia Romana)|Asiae]], anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] 6d4corq83ehcx8l6c0m8zh9xge2sd4g 3970962 3970959 2026-07-08T15:16:35Z Marcus Terentius Bibliophilus 2059 3970962 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]] ([[Paganismus|paganus]] enim fuisse videtur). Eutropius anno [[371]]/[[372]] proconsul [[Asia (provincia Romana)|Asiae]], anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] ax1vz4ur3xgqylevrnvvr34ndsxsmoc 3970963 3970962 2026-07-08T15:18:50Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970963 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Eutropius anno [[371]]/[[372]] proconsul [[Asia (provincia Romana)|Asiae]], anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] ednjxsldgintlkwjyico7psmpzohggd 3970965 3970963 2026-07-08T15:23:39Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970965 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Eutropius anno [[371]]/[[372]] proconsul [[Asia (provincia Romana)|Asiae]], anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] j1segwll0l7j1qnofbii3kz7il3r85o 3970966 3970965 2026-07-08T15:29:06Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970966 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore Festo accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. 70-71.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] 5pcfzb2vavntzbmoy9q4auf81v7ywps 3970967 3970966 2026-07-08T15:31:13Z Marcus Terentius Bibliophilus 2059 3970967 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius_Claudius_Iulianus|Flavi Claudi Iuliani]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] q0f37yr577pq82xcy7oblrbbskt8q0u 3970968 3970967 2026-07-08T15:32:12Z Marcus Terentius Bibliophilus 2059 3970968 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] j3tguhe3xo0u2be1bk41z8csh5eatlx 3970969 3970968 2026-07-08T15:38:28Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970969 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]] et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] po4csegvs8hz53bonw7u5grkcw61tyd 3970970 3970969 2026-07-08T15:40:22Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970970 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] im1xu0btyi5jzgbg0w8dtdt8plgt6th 3970971 3970970 2026-07-08T15:42:34Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970971 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} {{scriptor-stipula}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] gutg7k5fjessazy3nhnuqz8cpengftw 3970972 3970971 2026-07-08T15:45:47Z Marcus Terentius Bibliophilus 2059 3970972 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medcinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] t6yqz64jpvcmqfctbtnl8f03ejlkkk4 3970973 3970972 2026-07-08T15:47:16Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970973 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medcinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] d2hpd6pb1qtuzff137ci0kq4rsbnb2b 3970974 3970973 2026-07-08T15:47:32Z Marcus Terentius Bibliophilus 2059 /* Opera */ 3970974 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' in decem libris, imperatori Valentiniano II dedicatis. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) venit. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] aj8boc4t6o88dvw1mxzm8k11roc7gej 3970975 3970974 2026-07-08T15:50:51Z Marcus Terentius Bibliophilus 2059 /* Opera */ 3970975 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] 9uqo0fwpw35ciy12066g7em7zd994dd 3970976 3970975 2026-07-08T15:52:35Z Marcus Terentius Bibliophilus 2059 /* Opera */ 3970976 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad Gratiani aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum Urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] om0305b4ix43hcbj5plgmugiegclwn5 3970977 3970976 2026-07-08T15:55:55Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970977 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad [[Gratianus|Gratiani]] aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum Urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] k76mfg0sskl5y4zni4vfl12qje87x9d 3970978 3970977 2026-07-08T16:02:18Z Marcus Terentius Bibliophilus 2059 /* Fontes */ 3970978 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad [[Gratianus|Gratiani]] aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum Urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Editiones == *[[Collection des Universités de France]]: Joseph Hellegouarc'h, ''Eutrope. Abrégé d'histoire romaine'', Les Belles Lettres, 1999 == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] lwjzsvyz1t73xz59cwgo539swgr29zx 3970979 3970978 2026-07-08T16:05:26Z Marcus Terentius Bibliophilus 2059 /* Editiones */ 3970979 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad [[Gratianus|Gratiani]] aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in Asia possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum Urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Editiones == *[[Collection des Universités de France]]: Joseph Hellegouarc'h, ''Eutrope. Abrégé d'histoire romaine'', Les Belles Lettres, 1999 (bilinguis) == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] gtd9cljt6d5lotx3st88781t3yqkymp 3970982 3970979 2026-07-08T16:16:37Z Marcus Terentius Bibliophilus 2059 /* De cursu honorum */ 3970982 wikitext text/x-wiki {{Capsa hominis Vicidata}} {{pro pagina discretiva vide|Eutropius (pagina discretiva)}} '''Flavius Eutropius''', qui floruit altera parte [[saeculum 4|saeculi IV]], fuit [[historicus|rerum gestarum scriptor]] ac magister memoriae [[Flavius Valens|Flavi Valentis]] [[imperator]]is. == De cursu honorum== [[Burdigala|Burdigalae]] fortasse natus<ref>[[Marcellus Empiricus|Marcellus]], ''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref> magister epistularum [[Constantius II|Constantii II]] fuit ac deinde comes [[Iulianus Apostata|Iuliani imperatoris]] in [[Persae|Persas]]<ref>''[[Breviarium (Eutropius)|Breviarium]]'' X.16.</ref> ([[Paganismus|paganus]] enim fuisse videtur). Anno 369 magister memoriae [[Valens|imperatoris Valentis]]<ref>''Breviarium'', dedicatio.</ref> cui ''Breviarium'' suum dedicavit. Postea anno [[371]]/[[372]] [[proconsul]] [[Asia (provincia Romana)|Asiae]] fuit: a successore [[Festus (rerum gestarum scriptor)|Festo]] accusatus a iudicibus absolutus est<ref>[[Ammianus Marcellinus]] XXIX.1.36. [[Libanius]], ep. I.159.</ref>. Deinde circa 379 Romae et ad [[Gratianus|Gratiani]] aulam versabatur<ref>Symmachus III.50-51.</ref>. Anno [[380]]/[[381]] [[Praefectura per Illyricum|praefectus praetorio per Illyricum]]<ref>[[Codex Theodosianus]] et [[Codex Iustinianus|Iustiniani]].</ref> et anno [[387]] consul fuit una cum [[Valentinianus II|Valentiniano II]] imperatore<ref>''The Prosopography of the Later Roman Empire'', 1971: I.317. Der Neue Pauly, Stuttgardiae 1999, T. 4, c. 322</ref>. Praedia in [[Asia (provincia Romana)|Asia]] possidebat<ref>Symmachus III.53.</ref>. == Opera == [[Fasciculus:The Roman Empire ca 400 AD.png|thumb|[[Imperium Romanum]] tempore Eutropi]] Flavius Eutropius scripsit ''[[Breviarium (Eutropius)|Breviarium]] historiae Romanae ab Urbe condita'' usque ad [[Iovianus |Iovianum imperatorem]] in decem libris quos imperatori Valenti dedicavit. Primus liber historiam a [[Romulus|Romulo]] usque ad Furium Camillum narrat; ultimus ad annum Urbis conditae 1118 (hoc est ad annum 364 p.C.n.) peragitur. Tunc finem facit scriptor, hoc dicens: :Quia autem ad inclitos principes venerandosque perventum est, interim operi modum dabimus. Nam reliqua stilo maiore dicenda sunt. Quae nunc non tam praetermittimus, quam ad maiorem scribendi diligentiam reservamus. Praeter historiam etiam medicinae operam dedit siquidem [[Marcellus Empiricus|Marcello Empirico]] credimus<ref>''[[De medicamentis (Marcellus)|De medicamentis]]'', praefatio.</ref>. == Notae == <references /> == Fontes == *[[Gregorius Nazianzenus]], ''Epistulae'' 70-71 *[[Quintus Aurelius Symmachus]], ''Epistulae'' III.46-53 == Editiones == *[[Collection des Universités de France]]: Joseph Hellegouarc'h, ''Eutrope. Abrégé d'histoire romaine'', Les Belles Lettres, 1999 (bilinguis) == Bibliographia == * Beyer, Brian, editor. ''War with Hannibal Authentic Latin Prose for the Beginning Student''. New Haven: Yale University Press, 2009. {{ling|Latine|Anglice}} * Bird, H. W., interpres et commentator. ''Eutropius: Breviarium''. Liverpolii: 1993. {{Ling|Anglice}} *A.H.M. Jones; J. R. Martindale; J. Morris. ''The Prosopography of the Later Roman Empire'', Cambridge, 1971, t.I: [https://archive.org/details/plre-01-260-395/PLRE01_260-395/page/316/mode/2up 317] * Keefer, Tracy D. ''Eutropius the Presbyter, Cerasia, and literary culture in Late Antiquity.'' Dissertatio apud Universitatem Carolinensem Meridianam, 2004. * Motta, Daniella. "Sull'uso del passato nei breviari tardoantichi e nella ''Historia Augusta''." ''Storiografia ellenistica e tardoantica'' 2010, pp. 179–208. * Ferrero, Isobel Moreno. "La « breuitas » en los « Breviarios » históricos latinos : idiosincrasia, multifuncionalidad y práctica de un recurso literario." ''Homenaje a M. D. Verdejo'' (2010), p. 235-285. == Nexus externi == {{Fontes biographici}} * [http://www.thelatinlibrary.com/eutropius.html ''Breviarium ab Urbe condita''] {{Ling|Latine}} {{Index consulum sub principatu electorum| praedecessores= [[Flavius Honorius]] et [[Flavius Euodius]]| annus= 387<br />cum<br />[[Valentinianus II|Imp. Caesare Flavio Valentiniano Augusto]] III| successores=[[Magnus Maximus|Imp. Caesar Flavius Magnus Maximus Augustus]] II ; [[Theodosius I|Imp. Caesar Flavius Theodosius Augustus]] II et [[Maternus Cynegius]]}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Historici Romani antiqui]] [[Categoria:Scriptores Imperii Romani]] [[Categoria:Praefecti Praetorio]] [[Categoria:Proconsules Asiae]] [[Categoria:Nati saeculo 4]] [[Categoria:Mortui saeculo 4]] [[Categoria:Iulianus (imperator)]] 59bgzuc99et9m552zwlvge1yf4y8tf9 Turris Eiffeliana 0 35361 3971081 3963943 2026-07-09T11:12:25Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971081 wikitext text/x-wiki {{L-1}} [[Fasciculus:Tour Eiffel Wikimedia Commons.jpg|thumb|Turris Eiffeliana e [[Campus Martius (Lutetia)|Campo Martio]] visa.]] '''Turris Eiffeliana''',<ref>[[Ebbe Vilborg]], ''Norstedts svensk-latinska ordbok'', editio secunda (Holmiae: Norstedts Akademiska Förlag, 2009). Etiam ''Turris Eiffelia'': {{Morgan}}.</ref> vel '''Turris Eifellia'''<ref>"In deversorium redeo ut cum filio turrim Eiffeliam ascendam."—Herimannus Novocomensis, [http://ephemeris.alcuinus.net/archi2013/nuntius2.php?id=697 "Septimana Lutetiensis (V),"] ''Ephemeris'' (2013).</ref> ([[Francogallice]] ''La Tour Eiffel'' {{IPA|[la tuʁ ɛfɛl]}}, ''La dame de fer'' 'domina ferrea' per iocum appellata), est [[turris]] cancellorum [[ferrum temperatum|ferro temperato]] confecta atque in [[Campus Martius (Lutetia)|Campo Martio]] iuxta [[flumen]] [[Sequana]]m [[Lutetia]]e [[Arrotundimentum VII Lutetiae|Arrotundimento VII]] sita, ex [[Gustavus Eiffel|Gustavo Eiffel]] [[ars ingeniaria|ingeniario]] appellata, cuius societas mercatoria ''[[G. Eiffel et Compagnie]]'' turrim annos ab [[1887]] ad [[1889]] [[aedificium|aedificavit]]. Turris ut arcus introitús in [[Expositio Universalis (1889)|Expositionem Universalem]] anni [[1889]] designata est et eo anno confecta, architecto [[Stephanus Sauvestre|Stephano Sauvestre]], ingeniariis principalibus [[Mauritius Koechlin|Mauritio Koechlin]] et [[Aemilius Nouguier|Aemilio Nouguier]], directore operis Gustavo Eiffel. [[Fasciculus:Maurice koechlin pylone.jpg|thumb|upright=0.6|left|Prima turris [[adumbratio]], a [[Mauritius Koechlin|Mauritio Koechlin]] architecto facta.<!--w size comparison w [[Notre Dame de Paris]], [[Île aux Cygnes#Statue of Liberty replica|Statue of Liberty]] et [[Vendôme Column]]-->]] [[Fasciculus:Eiffel Tower Drone 4k-Qx c1X3zfEc-313-251.webm|thumb|upright=0.8|Turris Eiffeliana.]] [[Fasciculus:Construction tour Eiffel.gif|thumb|upright=0.8|Turris Eiffeliana [[aedificium|aedificata]].]] [[Fasciculus:Buste Eiffel par Bourdelle.jpg|thumb|upright=0.8|[[Herma]] [[Gustavus Eiffel|Gustavi Eiffel]] ab [[Antonius Bourdelle|Antonio Bourdelle]] anno [[1929]] confecta, sub turri visa.]] [[Fasciculus:GD-FR-Paris-Le Louvre.jpg|thumb|upright=0.8|[[Museum Lupariense]] et [[flumen]] [[Sequana]], a Turri Eiffeliana visa.]] [[Fasciculus:Caricature Gustave Eiffel.png|thumb|upright=0.8|Eiffel suam turrim cum [[pyramides Aegyptiae|pyramidibus Aegyptiis]] comparavit.]] Hodie inter structuras [[tellus|orbis terrarum]] notissimas, praesertim inter symbola [[cultura]]e [[Francia|Francicae]], enumeratur. Quae turris est [[Index aedificiorum et structurarum altissimarum in regione Lutetiae|structura altissima Lutetiae]]<ref>{{cite web|url=http://www.tour-eiffel.fr/teiffel/uk/documentation/chiffres/page/tour_monde.html |title=The Eiffel Tower as a World monument |publisher=Tour-eiffel.fr |date=2 Aprilis [[1996]] |accessdate=[[24 Maii]] [[2010]]}}.</ref> et [[monumentum]] [[commercium|commercii]] quod plerique [[periegesis|peregrinatores]] in mundo visitavit; 7.1 milliones hominum eam anno [[2011]] ascenderunt. Suggestus superior observatorii tertii gradus, 279.11 [[metrum|metris]] altus, est altissimus locus facilis a publico in [[Unio Europaea|Unione Europaea]] et altissimus in [[Europa]], dummodo suggestus [[Turris Ostankino]] [[Moscua]]e, 360 metris altus, ob conflagrationem Augusti [[2000]] clausus maneat. Turris eius salutatorem 250 millionesimum{{dubsig}} anno [[2010]] accepit. Dicitur 434&nbsp;000&nbsp;000&nbsp;000 euronum valere, secundum studium Italicum anno [[2012]] confectum.<ref>Ut notavit [http://www.planet.fr/actualites-quel-est-le-prix-de-la-tour-eiffel.236859.1557.html ''Planet.fr.'']{{Nexus deficitur|date=January 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> Die quinto decimo mensis Martii, anno bis millesimo vicesimo secundo, antenna nova, cum reti DAB+ congruens, id est officiis radiophonicis digitalibus, helicoptero in summo turris collocata est, eius altitudinem a trecentis viginti quattuor ad trecentos triginta metra aucta. Turris est 320 [[metrum|metra]] alta, circa [[altitudo|altitudinem]] [[aedificium|aedificii]] 81 tabulationum. Per constructionem [[Monumentum Vasingtonianum]] exsuperavit, nomen altissimae [[tellus|orbis terrarum]] structurae ab hominibus factae sibi adrogans, quod nomen quadraginta unum annos tenebat, donec [[Aedificium Chrysleranum]] [[Urbs Novum Eboracum|Novi Eboraci]] anno [[1930]] aedificatum est. Turris Eiffelianae inscriptiones quos [[Homines 72 in inscriptionibus Turris Eiffeliae celebrati|nomina virorum scientiae peritorum septuaginta duo commemorat]]. Ipse [[Gustavus Eiffel]] iuxta turrim suam commemoratur: ibi sub boreali structurae pede videtur [[protome Gustavi Eiffel (Bourdelle)|protome]] aënea ab [[Antonius Bourdelle|Antonio Bourdelle]] anno [[1929]] confecta. ==Origo== Ad [[Expositio Universalis (1889)|Expositionem Universalem]] anno [[1889]] celebrandam ad annum saeculi [[Res novae Franciae]] ingeniarii duo societatis ''[[G. Eiffel et Compagnie]]'', videlicet [[Mauritius Koechlin]] et [[Aemilius Nouguier]] "turrim altissimam" construere, anno [[1884]] primi proposuerunt; qui, dubitante etiam domino Eiffel, sibi coniunxerunt [[Stephanus Sauvestre|Stephanum Sauvestre]] architectum eiusdem societatis. Propositione turris altissimae denuo accepta, minister rerum commercialium [[Eduardus Lockroy|Eduardo Lockroy]] et praefectus [[Sequana (praefectura Franciae)|Sequanae praefecturae]] [[Eugenius Poubelle]] die [[8 Ianuarii]] [[1887]] conventum cum Gustavo Eiffel concluserunt. Turris inter duos annos constructa est (dissuadentibus [[Gulielmus Adolphus Bouguereau|Gulielmo Bouguereau]], [[Alexander Dumas (filius)|Alexandro Dumas filio]], [[Guido de Maupassant|Guidone de Maupassant]], aliisque [[scriptor]]ibus et [[pictor]]ibus Lutetianis); hominibus die [[31 Martii]] [[1889]] aperta est. {{NexInt}} * [[Carolus Garnier (architectus)]] ==Notae== <references/> ==Bibliographia== [[Fasciculus:Tour Eiffel - 20150801 15h30 (10621).jpg|thumb|upright=0.8|Summa turris a suggestu secundo visa.]] ;Scripta de inceptu et aedificatione coaevalia *''La Tour Eiffel: souvenir.'' [[1889]]. Lutetiae. [http://gallica.bnf.fr/ark:/12148/bpt6k1645411 Textus apud Gallica] *"The Paris Exhibition." [[1889]]. ''The Engineer'' 47, [[3 Maii]]. *''L'Exposition de 1889 et la Tour Eiffel, d'après les documents officiels''; par un ingénieur. [[1889]]. Lutetiae: Gombault et Singier. [http://gallica.bnf.fr/ark:/12148/bpt6k61693x Textus apud Gallica] *Barral, Georges. [[1892]]. ''Panthéon scientifique de la Tour Eiffel. Histoire des origines, de la construction et des applications de la tour de 300 mètres, biographie de ses créateurs, exposé de la vie et des découvertes des 72 savants dont les noms sont inscrits sur la grande frise extérieure''. Lutetiae: Savine. [http://gallica.bnf.fr/ark:/12148/bpt6k8742069 Textus apud Gallica] *Barral, Georges, et Jacques Barral. [[1889]]. ''Histoire populaire des 72 savants dont les noms sont inscrits sur la grande frise de la Tour Eiffel.'' Lutetiae: J. Mersch. *[[Gustavus Eiffel|Eiffel, Gustave]]. [[1884]]. ''Projet d'une tour colossale en fer de 300 mètres de hauteur.'' Lutetiae. *Eiffel, Gustave. [[1900]]. ''La tour de 300 mètres.'' Lutetiae: Lemercier. 2 voll. [http://gallica.bnf.fr/ark:/12148/bpt6k106381w Textus apud Gallica] *Eiffel, Gustave. [[1907]]. ''Recherches expérimentales sur la résistance de l'air exécutées à la tour Eiffel.'' Lutetiae. [http://gallica.bnf.fr/ark:/12148/bpt6k5675046x Textus apud Gallica] *Simon, Jules. [[1893]]. ''Guide officiel de la Tour Eiffel''. Lutetiae: Chaix. [http://gallica.bnf.fr/ark:/12148/bpt6k103378c Textus apud Gallica] *Watson, William. [[1892]]. ''Paris Universal Exposition: Civil Engineering, Public Works, and Architecture.'' Vasingtoniae: Government Printing Office. ;Opera recentiora *''1889: La Tour Eiffel et l'Exposition Universelle.'' Lutetiae: Editions de la Reunion des Musées Nationaux, 1989 [catalogus expositionis]. *"[http://www.france-pittoresque.com/spip.php?article574 Polémique autour de la Tour Eiffel en 1887 et pétition des écrivains et artistes contre sa construction]" in ''France pittoresque'' (20 Iun. 2012) *Barthes, Roland, et André Martin. [[1989]]. ''La Tour Eiffel.'' Lutetiae: CNP/Seuil. ISBN 2867540550. *Braibant, Charles. [[1964]]. ''Histoire de la Tour Eiffel.'' Lutetiae: Plon. *Bures, Charles de. [[1988]]. ''La tour de 300 mètres.'' Lausanne: André Delcour. *Chanson, Hubert. [[2009]]. [http://espace.library.uq.edu.au/view/UQ:184247 Hydraulic Engineering Legends Listed on the Eiffel Tower], ''Great Rivers History'', ASCE-EWRI Publication, Proceedings of the History Symposium of the World Environmental and Water Resources Congress 2009, Kansas City, USA, 17–19 Maii, J. R. ROGERS Ed., pp. 1–7. ISBN 9780784410325. *Cordat, Charles. [[1955]]. ''La Tour Eiffel présentée par Le Corbusier.'' Lutetiae: Éditions de Minuit. *Denker, Winnie, et [[Francisca Sagan|Françoise Sagan]]. [[1988]]. ''La sentinelle de Paris.'' Lutetiae: Robert Laffont. *Des Cars, Jean, et Jean Paul Caracalla. [[1989]]. ''La Tour Eiffel, un siècle d'audace et de génie.'' Lutetiae: Denoël. ISBN 2207235637. *Frémy, Dominique. [[1989]]. ''Quid de la Tour Eiffel.'' Lutetiae: Robert Lafont. *Guy, G. [[1957]]. ''Une tour nommée Eiffel.'' Lutetiae: Presses de la Cité. *Harriss, Joseph. [[1989]]. ''The Tallest Tower: Eiffel and the Belle Epoque.'' Vasingtoniae: Regnery Gateway. ISBN 0895267640. *Harvie, David I. [[2006]]. ''Eiffel: The Genius Who Reinvented Himself.'' Stroud: Sutton. ISBN 0750933097. *Jonnes, Jill. [[2009]]. ''Eiffel's Tower and the World's Fair where Buffalo Bill beguiled Paris, the artists quarreled, and Thomas Edison became a count.'' Novi Eboraci: Viking. ISBN 9780670020607. *Landon, François. [[1981]]. ''La Tour Eiffel.'' Lutetiae: Ramsay. ISBN 2859563032. *Lesbros, Dominique. ''Paris mystérieux et insolite.'' Lutetiae: Éditions De Borée. ISBN 2844943403. *Loyrette, Henri. [[1985]]. ''Gustave Eiffel.'' Novi Eboraci: Rizzoli. ISBN 0847806316. *Lyonnet du Moutier, Michel. [[2009]]. ''L'aventure de la tour Eiffel, réalisation et financement.'' Lutetiae: Publications de la Sorbonne, coll. Locus Solus. ISBN 9782859446284. *Orsenne, Catherine. 'La Tour Eiffel, un phare universel.'' Lutetiae: Éditions Massin. ISBN 2707205176. *Seitz, Frédéric. [[2001]]. ''La Tour Eiffel, cent ans de sollicitude.'' Lutetiae: Belin. ISBN 2701125790. *Tissonier, Gaston. [[1889]]. ''La tour Eiffel de 300 mètres.'' Lutetiae: G. Masson. ==Nexus externi== {{CommuniaCat|Eiffel Tower|Turrim Eiffeliam}} *[https://web.archive.org/web/20101205121142/http://www.tour-eiffel.fr/teiffel/uk/ Situs publicus,] www.tour-eiffel.fr *"[https://web.archive.org/web/20121111082057/http://de.structurae.de/structures/data/index.cfm?ID=s0000021 Eiffelturm]" apud structurae.de {{Ling|Theodisce|Francogallice|Anglice}} *"[https://web.archive.org/web/20211124074818/https://skyscraperpage.com/cities/?buildingID=79 Eiffel Tower]" apud skyscraperpage.com *"[https://web.archive.org/web/20121001150936/http://insecula.com/musee/M0054.html Tour Eiffel]" apud insecula.com *[https://web.archive.org/web/20120907131642/http://www.burger.si/France/Paris/360_Paris_09.htm Panorama] apud ''Burger Landmarks'' {{Ling|Slovacice|Anglice}} *"[https://web.archive.org/web/20121025211852/http://programmes.france3.fr/des-racines-et-des-ailes/index-fr.php?page=emission&id_article=359 Les habits neufs de la Tour Eiffel]" ("Vestimenta nova Turris Eiffelianae"): programma televisifica apud [[France 3]] die 29 Apr. 2009 emissum [[Categoria:Confecta 1889]] [[Categoria:Loci hereditatis mundialis in Francia]] [[Categoria:Turres]] [[Categoria:Turris Eiffelia|!]] {{1000 paginae}} {{Myrias|Ars}} srm43m46glynkqzlpo74ycaqrnril86 Taenia solium 0 38482 3971003 3878124 2026-07-08T21:46:28Z LilyKitty 18316 de medio contagionis 3971003 wikitext text/x-wiki {{Titulus italicus}} {{Taxobox | name = ''Taenia solium'' | image = | image_width = | image_caption = | regnum = [[Animalia]] | subregnum = [[Platyzoa]] | phylum = [[Platyhelminthes]] | subphylum = [[Neodermata]] | classis = [[Cestoda]] | subclassis = [[Eucestoda]] | ordo = [[Cyclophyllidea]] | familia = [[Taeniidae]] | genus = ''[[Taenia]]'' | binomial = ''Taenia solium'' | binomial_authority = [[Carolus Linnaeus|Linnaeus]], 1758 }} [[Fasciculus:Taenia solium Life cycle (02).tif|thumb|left|Circulus vitae ''Taeniae sp.'']] [[Fasciculus:Taenia solium scolex.JPG|thumb|upright=0.8|''T. solii'' scolex]] [[Fasciculus:Taenia_solium-detailed_morphology.jpg|thumb|upright=0.8|Stained{{dubsig}} ''T. solii'' proglottis]] '''''Taenia solium''''' ([[Linnaeus]], 1758) est [[species]] [[cestoda|cestodorum]] quae per [[suilla]] multiplicatur. {{NexInt}} * [[Cysticercosis]] * [[Taeniasis]] == Nexus externi == {{CommuniaCat|Taenia solium}} * [https://web.archive.org/web/20130601193403/http://www.dpd.cdc.gov/DPDx/HTML/Cysticercosis.htm Taenia solium at CDC gov] * [https://web.archive.org/web/20160303224401/http://www.taeniasolium.unam.mx/ Taenia solium Genome Project - UNAM] * [https://web.archive.org/web/20071102062459/http://www.merck.com/mmhe/sec17/ch196/ch196p.html Taenia infection info] [[Categoria:Cestoda]] [[Categoria:Parasiti]] [[Categoria:Species animalium]] [[Categoria:Taxa Linnaei]] [[Categoria:Taxa 1758]] 9wu00g8whzsf0c01rnfog0ng7j61po3 3971009 3971003 2026-07-08T22:10:37Z IacobusAmor 1163 3971009 wikitext text/x-wiki {{Titulus italicus}} {{Taxobox | name = ''Taenia solium'' | image = | image_width = | image_caption = | regnum = [[Animalia]] | subregnum = [[Platyzoa]] | phylum = [[Platyhelminthes]] | subphylum = [[Neodermata]] | classis = [[Cestoda]] | subclassis = [[Eucestoda]] | ordo = [[Cyclophyllidea]] | familia = [[Taeniidae]] | genus = ''[[Taenia]]'' | binomial = ''Taenia solium'' | binomial_authority = [[Carolus Linnaeus|Linnaeus]], 1758 }} [[Fasciculus:Taenia solium Life cycle (02).tif|thumb|upright=0.7|left|Circulus vitae ''Taeniae sp.'']] [[Fasciculus:Taenia solium scolex.JPG|thumb|upright=0.7|''T. solii'' scolex.]] [[Fasciculus:Taenia_solium-detailed_morphology.jpg|thumb|upright=0.7|Stained{{dubsig}} ''T. solii'' proglottis.]] '''''Taenia solium''''' ([[Linnaeus]], 1758) est [[species]] [[cestoda|cestodorum]] quae per [[suilla]] multiplicatur. {{NexInt}} * [[Cysticercosis]] * [[Taeniasis]] == Nexus externi == {{CommuniaCat|Taenia solium|''Taeniam solium''}} * [https://web.archive.org/web/20130601193403/http://www.dpd.cdc.gov/DPDx/HTML/Cysticercosis.htm ''Taenia solium'' apud CDC gov.] * [https://web.archive.org/web/20160303224401/http://www.taeniasolium.unam.mx/ ''Taenia solium'' Genome Project - UNAM.] * [https://web.archive.org/web/20071102062459/http://www.merck.com/mmhe/sec17/ch196/ch196p.html Data de ''Taeniae'' infectione.] [[Categoria:Cestoda]] [[Categoria:Parasiti]] [[Categoria:Species animalium]] [[Categoria:Taxa Linnaei]] [[Categoria:Taxa 1758]] 0ejan86a0kp3qf8rzlqlnllm66wcisr 3971041 3971009 2026-07-09T03:21:31Z Grufo 64423 +{{Pagina neglecta}}; +{{Biologia-stipula}} 3971041 wikitext text/x-wiki {{Titulus italicus}} {{Pagina neglecta}} {{Taxobox | name = ''Taenia solium'' | image = | image_width = | image_caption = | regnum = [[Animalia]] | subregnum = [[Platyzoa]] | phylum = [[Platyhelminthes]] | subphylum = [[Neodermata]] | classis = [[Cestoda]] | subclassis = [[Eucestoda]] | ordo = [[Cyclophyllidea]] | familia = [[Taeniidae]] | genus = ''[[Taenia]]'' | binomial = ''Taenia solium'' | binomial_authority = [[Carolus Linnaeus|Linnaeus]], 1758 }} [[Fasciculus:Taenia solium Life cycle (02).tif|thumb|upright=0.7|Circulus vitae ''Taeniae sp.'']] [[Fasciculus:Taenia solium scolex.JPG|thumb|upright=0.7|''T. solii'' scolex.]] [[Fasciculus:Taenia_solium-detailed_morphology.jpg|thumb|upright=0.7|Stained{{dubsig}} ''T. solii'' proglottis.]] {{ires|Taenia solium}} ([[Linnaeus]], 1758) est [[species]] [[cestoda|cestodorum]] quae per [[suilla]] multiplicatur. {{NexInt}} * [[Cysticercosis]] * [[Taeniasis]] == Nexus externi == {{CommuniaCat|Taenia solium|''Taeniam solium''}} * [https://web.archive.org/web/20130601193403/http://www.dpd.cdc.gov/DPDx/HTML/Cysticercosis.htm ''Taenia solium'' apud CDC gov.] * [https://web.archive.org/web/20160303224401/http://www.taeniasolium.unam.mx/ ''Taenia solium'' Genome Project - UNAM.] * [https://web.archive.org/web/20071102062459/http://www.merck.com/mmhe/sec17/ch196/ch196p.html Data de ''Taeniae'' infectione.] {{Biologia-stipula}} [[Categoria:Cestoda]] [[Categoria:Parasiti]] [[Categoria:Species animalium]] [[Categoria:Taxa Linnaei]] [[Categoria:Taxa 1758]] pe5jsdkw2kbtu30ikv1xmcrvdvie16e 3971067 3971041 2026-07-09T08:16:17Z Jondel 452 3971067 wikitext text/x-wiki {{Titulus italicus}} {{Pagina neglecta}} {{Taxobox | name = ''Taenia solium'' | image = | image_width = | image_caption = | regnum = [[Animalia]] | subregnum = [[Platyzoa]] | phylum = [[Platyhelminthes]] | subphylum = [[Neodermata]] | classis = [[Cestoda]] | subclassis = [[Eucestoda]] | ordo = [[Cyclophyllidea]] | familia = [[Taeniidae]] | genus = ''[[Taenia]]'' | binomial = ''Taenia solium'' | binomial_authority = [[Carolus Linnaeus|Linnaeus]], 1758 }} [[Fasciculus:Taenia solium Life cycle (02).tif|thumb|upright=0.7|Circulus vitae ''Taeniae sp.'']] [[Fasciculus:Taenia solium scolex.JPG|thumb|upright=0.7|''T. solii'' scolex.]] [[Fasciculus:Taenia_solium-detailed_morphology.jpg|thumb|upright=0.7|Stained{{dubsig}} ''T. solii'' proglottis.]] {{ires|Taenia solium}} ([[Linnaeus]], 1758) est [[species]] [[cestoda|cestodorum]] quae per [[suilla]] multiplicatur. Invenitur per totum orbem et maxime frequens est in terris ubi porci eduntur. {{NexInt}} * [[Cysticercosis]] * [[Taeniasis]] == Nexus externi == {{CommuniaCat|Taenia solium|''Taeniam solium''}} * [https://web.archive.org/web/20130601193403/http://www.dpd.cdc.gov/DPDx/HTML/Cysticercosis.htm ''Taenia solium'' apud CDC gov.] * [https://web.archive.org/web/20160303224401/http://www.taeniasolium.unam.mx/ ''Taenia solium'' Genome Project - UNAM.] * [https://web.archive.org/web/20071102062459/http://www.merck.com/mmhe/sec17/ch196/ch196p.html Data de ''Taeniae'' infectione.] {{Biologia-stipula}} [[Categoria:Cestoda]] [[Categoria:Parasiti]] [[Categoria:Species animalium]] [[Categoria:Taxa Linnaei]] [[Categoria:Taxa 1758]] dgyzpv6c7eqmt37jxzjybx5lcdk9lag Ubuntu (systema internum) 0 45088 3971083 3368283 2026-07-09T11:54:40Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971083 wikitext text/x-wiki {{L}} [[Fasciculus:Nexus S with Ubuntu.jpg|thumb|Machina computralis cum Ubuntu]] '''Ubuntu''' {{victio|cornu|us|n}} est genus [[systema administrativum computatrale|systematis administravi computatri]] [[Linux|Linucis]] vocati, quod anno [[2004]] a societate [[Canonical]] creatum ex editione [[Debian]]is divulgatum est. Societas multum studet creando systema administrativum computatrale completum, stabile, et ad [[accessibilitas|usorum plurimum aptum]]. Hoc systema in [[libera programmatura|programmate libero]] consistit, sub permisso [[GNU]] [[GPL]] paratum. Gratuitum est, et omnes illud mutare possunt. Versio novissima est 14.04 publicata anno [[2014]]. [[Marcus Shuttleworth]], iuvenis conductor [[Africa Australis|Africanus Australis]], ab inventoribus imploratus, suas opes ad inceptum obtulit. Hoc enim nomen ''[[ubuntu (philosophia)|Ubuntu]]'' datum est propter antiquum verbum [[Africa]]num opinabile, quod significat ''caritas ad omnes'' vel ''sumus homines propter alios homines.'' Ista notio descripta fuit a [[Nelson Mandela]]. Systema [[Lubuntu]] est versio Ubuntu; saepius cum Ubuntu [[GNOME]] etiam adhibetur. == Nexus externi == * [http://www.ubuntu.com Situs publicus] www.ubuntu.com * [https://web.archive.org/web/20110222222806/http://cdimage.ubuntu.com/daily-live/current/ Impone Ubuntu in systemate] cdimage.ubuntu.com {{info-stipula}} {{tech-stipula}} [[Categoria:Informatica]] [[Categoria:Incepta 2004]] [[Categoria:Programmatura libera]] [[Categoria:Systemata operativa]] ormej9hzmal93jt2yo6x4eay1qdd9ch Temperatura 0 50049 3971060 3869480 2026-07-09T07:18:30Z Grufo 64423 Grufo movit paginam [[Temperatura thermodynamica]] ad [[Temperatura]]: Non video cur “temperatura” tantum non sufficiat 3869480 wikitext text/x-wiki {{videdis|Temperatura (discretiva)}} [[Fasciculus:Worlds Tallest Thermometer.jpg|thumb|Maximum in toto [[orbis terrarum|orbe terrarum]] [[thermometrum]], ut dicitur, in [[California]] positum.]] '''Temperatura''' est {{Creanda|en|Physical quantity|quantitas physica}} quae [[natura]]m [[calor]]is vel frigoris per [[quantitas|quantitates]] [[significatio (linguistica)|significat]]. Temperatura est [[mensura]] quae [[thermometrum|thermometro]] {{Creanda|en|Calibration|Calibratio|computatur}}. [[Energia kinetica|Energiam kineticam]] [[atomus|atomorum]] {{Creanda|en|Vibration|Vibratio|vibrantium}} et confligentium quibus [[substantia]] constituitur ostendit. Haec [[magnitudo]] olim '''gradus caloris''' appellabatur, sed hoc nomen dubiosum proveniebat ex [[theoria]] falsa, quae [[calor]]em esse [[materia]]m sicut [[aqua]]m inter res fluentem dicebat. Temperatura hodie saepe secundum scalam thermodynamicam scientificam indicatur, gradibus K = [[Kelvinus (unitas)|Kelvinianis]]. Hoc nomen unitatis ex [[Gulielmus Thomson, baro Kelvinus|Guilielmo Thomson, Barone Kelvino]] electum appellatur, propter eius conlationes maximi momenti ad theoriam thermodynamicam amplificandam. Secundum [[axioma]]ta thermodynamica, [[0]] [[Kelvin (unitas)|Kelvin]] est temperatura minima in [[aequilibrium thermale|statu aequilibrii]], quamquam temperaturae negativae fieri sunt in statibus quo aequilibrio caretur. Quamquam autem gradus K est unitas probata per [[Systema Internationale|Systema Unitatium Internationale]], aliae unitates ad temperaturae thermodynamicae mensuram hodie etiam adhibitae sunt, sicut gradus °C appellata secundum [[Andreas Celsius|Andream Celsium]], °F secundum [[Daniel Gabriel Fahrenheit|Danielem Gabrielem Fahrenheit]], °R secundum [[Réaumur]], et R aut °Ra secundum [[Gulielmus Ioannes Macquorn Rankine|Gulielmum Rankine]]. Temperatura magni momenti in omnibus {{Creanda|en|Natural science|Scientia naturalis|scientiae naturalis}} [[disciplina|disciplinis]] est, inter quas [[astronomia]], [[biologia]], [[chemia]], [[geographia]], [[ingeniaria mechanica]], [[medicina]], [[metallurgia]], [[oecologia]], [[physica]], {{Creanda|en|Materials science|Scientia materiarum|scientia materiarum}}, et [[scientia telluris]], atque in plurimis [[vita]]e quotidianae [[res|rebus]]. In [[meteorologia|re meteorologica]], temperatura inter variabiles maximi momenti quantitates numeratur, [[praecipitatio]]nis modum, [[ventus|ventorum]] vehementiam, et [[tempestas|tempestatum]] magnitudines determinantes. == De vocabulis == Latinitate classica haec notio saepius vocibus ''[[calor]]'' vel ''[[frigus]]'' describitur. Voces ''temperatio'', ''temperies'', ''temperamentum'', ''temperatura'' rerum mixtionem aequatam significant,<ref>{{Forcellini-fons}}</ref> sic tempestas moderata ''aeris'' vel ''caeli temperatio'' dicebatur. Hodierna notio temperaturae "gradus caloris" dici potest, sed vocabulum ''temperatura'' in libris eruditis recentibus usitatum est.<ref>{{Morgan}}</ref><ref>Philipp Roelli, ''Latin as the Language of Science and Learning'' (De Gruyter, 2021), [https://www.google.com/books/edition/Latin_as_the_Language_of_Science_and_Lea/pFdYEAAAQBAJ?pg=PA494 p. 494]</ref> == Effectus temperaturae == [[Fasciculus:Body Temp Variation.svg|thumb|Media [[corpus humanum|corporis humani]] temperaturae quotidianae [[variatio]].]] [[Fasciculus:Thermometer CF.svg|thumb|Dua thermometra temperaturam Celsianam et Fahrenheitianam ostendunt.]] [[Fasciculus:Pakkanen.jpg|thumb|Usitatum thermometrum Celsianum temperaturam [[dies|diei]] [[hiems|hiemalis]] −17C metitur.]] Multae rationes physicae ad temperaturam coniunguntur, quarum aliquot infra perscribuntur. * physicae materiarum [[proprietas|proprietates]], inter quas {{Creanda|en|Phases of matter|Phases materiae|phases materiae}} ([[solidum]], [[liquidum]], [[gasium]], [[plasma]]), [[densitas]], [[solubilitas]], {{Creanda|en|Vapor pressure|Pressura vaporis|pressura vaporis}}, {{Creanda|en|Electrical conductivity|Conductivitas electrica|conductivitas electrica}}, {{Creanda|en|Hardness|Duritia|duritia}}, {{Creanda|en|Wear|Usus|resistentia usalis}}, {{Creanda|en|Thermal conductivity|Conductivitas thermalis|conductivitas thermalis}}, {{Creanda|en|Corrosion|Rosio|resistentia rosionis}}, [[vires]]. * modus et ambitus quibus [[reactio chemica|reactiones chemicae]] fiunt<ref>{{Cite book|url=https://books.google.com/books?id=UKkQAQAAMAAJ|title=Thermal discharges at nuclear power stations: their management and environmental impacts: a report prepared by a group of experts as the result of a panel meeting held in Vienna, 23–27 October 1972|last=Agency|first=International Atomic Energy|date=[[1974]]|publisher=International Atomic Energy Agency}}.</ref> * summa et proprietates {{Creanda|en|Thermal radiation|Radiatio thermalis|radiationis thermalis}} quae e [[superficies|superficie]] [[res|rei]] emittitur * {{Creanda|en|Air temperature|temperatura aeris}}, quae omnes [[organismus|organismos]] [[vita|vivos]] afficit * [[celeritas soni]], quae in gasio pro [[radix quadrata|radice quadrata]] temperaturae absolutae est<ref>{{Cite book|url=https://books.google.com/books?id=eVpITJfPxMEC&pg=PA34|title=The Art of Digital Audio|last=Watkinson|first=John|date=[[2001]]|location:Novi Eboraci|publisher=Taylor & Francis|isbn=978-0-240-51587-8}}.</ref> == De scala Kelviniana, Celsiana, Fahrenheitiana == Cum systema [[aequor maris|aequore maris]] sub [[pressio]]ne atmosphaerica (1 atm) quoddam calefaciatur, temperatura augmentat gradibus: * 0 [[kelvinus (unitas)|K]], −273,15 [[gradus Celsianus|°C]], −459,67 °F: [[zerum absolutum|temperatura thermodynamica minima]], quae scalam incipit; praeter [[helium]], omnes [[materia extrastellaris|materiae extrastellares]] hac temperatura sunt solidae * 63,15 K, −210,00 °C, −346,00 °F: [[nitrogenium]] (quod 78% [[aër]]is Tellurici constituit) [[gelatio|gelatur]] * 77,36 K, −195,79 °C, −320,33 °F: nitrogenium liquidum conversum est in [[gasium]] * 273.15 K, 0 °C, 32 °F: [[aqua]] in [[glacies|glaciem]] vertur * 310 K, 37 °C, 98 °F: ordinaria hominis [[temperatura interna]] * 373.15 K, 100 °C, 212 °F: [[aqua]] liquida nunc fervet in [[vapor]]em * 1808 K, 1535 °C, 2795 °F: [[ferrum]] liquefit * ca. 6500 K: superficies [[sol]]aris quae videri potest Ad usum quotidianum, homines scalam Celsianam malunt, ubi aquae congelationis temperatura valore zero assignatur, et ebullitionis centum. Ad temperaturas Kelvinienses in Celsienses et vice versa convertant, habemus igitur formulas: :: Kelvin = °Celsius + 273.15 :: °Celsius = Kelvin − 273.15 Scala vetus in usu [[Civitates Foederatae|Americano]] populo gratissima habetur Fahrenheitiana, cui formula definiens est :: <math>^{\circ}\text{Fahrenheit} = 32^{\circ} + \frac{9}{5} (\text{Kelvin} - 273.15)</math> == De temperaturae natura == Temperatura plerumque per quodquam rei adiunctum decernitur, quod cum res calefit augmentat.{{dubsig}} [[Thermometrum|Thermometra]] primitiva utuntur, exempli gratia columnis [[vitrium|vitrii]] longis [[hydrargyrum|hydrargyri]] plenis; his in thermometris prope temperaturas ordinarias hydrarguntum{{dubsig}} in proportione calori dato expandit. Saepe autem adiuncta in proportione calori applicato agumentare nolunt. [[Aqua]], exempli gratia, cum calefit, primum contrahit, tunc expandit; qua de causa [[crystallum|crystalla]] aquae in [[superficies|superficie]] [[corpus aquae|corporis aquae]] [[hiems|hieme]] fluitant, quod ea minus densa sunt quam aqua [[liquidum|liquida]]. == Temperaturae praecipuae == {{div col|2}} * [[Punctum criticum]] * [[Punctum fervoris]] * [[Punctum liquefactionis]] * [[Punctum triplex]] * [[Temperatura Curiensis]] * [[Temperatura coloris]] * {{Creanda|en|Neutron temperature|Temperatura neutronum}} * [[Temperatura planckiana]] {{div col end}} == Notae == == Bibliographia == * Adkins, C. J. (1968) [[1983]]. ''Equilibrium Thermodynamics.'' ed. tertia. Cantabrigiae: Cambridge University Press. ISBN 0-521-25445-0. * Buchdahl, H. A. [[1966]]. ''The Concepts of Classical Thermodynamics.'' Cantabrigiae: Cambridge University Press. * Chang, Hasok. [[2004]]. ''Inventing Temperature: Measurement and Scientific Progress.'' Oxoniae: Oxford University Press. ISBN 978-0-19-517127-3. * Jaynes, E. T. [[1965]]. "Gibbs vs Boltzmann entropies." ''American Journal of Physics'' 33 (5), 391–398. * Middleton, W. E. K. [[1966]]. ''A History of the Thermometer and its Use in Metrology.'' Baltimorae: Johns Hopkins Press. * Miller, J. [[2013]]. "Cooling molecules the optoelectric way." ''Physics Today'' 66 (1): 12–14. {{doi|10.1063/pt.3.1840}}. Bibcode 2013PhT....66a..12M. * [[Iacobus Riddick Partington|Partington, Iacobus Riddick]]. [[1949]]. ''An Advanced Treatise on Physical Chemistry,'' vol. 1, ''Fundamental Principles: The Properties of Gases.'' Londinii: Longmans, Green & Co. * [[Alfredus Brianus Pippard|Pippard, Alfred Brian.]] (1957) [[1966]]. ''Elements of Classical Thermodynamics for Advanced Students of Physics.'' Iterum impressum. Cantabrigiae: Cambridge University Press. * Quinn, T. J. [[1983]]. ''Temperature.'' Londinii: Academic Press. ISBN 0-12-569680-9. * Schooley, J. F. [[1986]]. ''Thermometry.'' Boca Raton Floridae: CRC Press. ISBN 0-8493-5833-7. * Roberts, J. K., et A. R. Miller. (1928) [[1960]]. ''Heat and Thermodynamics.'' Ed. quinta. Glasgoviae: Blackie & Son Limited. * Thomson, W. (Lord Kelvin). (1843) [[1863]]. "On an absolute thermometric scale founded on Carnot's theory of the motive power of heat, and calculated from Regnault's observations," ''Proceedings of the Cambridge Phil. Society.'' 1 (5): 66–71. * Thomson, W. [[1851]]. "On the Dynamical Theory of Heat, with numerical results deduced from Mr Joule's equivalent of a Thermal Unit, and M. Regnault's Observations on Steam." ''Transactions of the Royal Society of Edinburgh'' 20, pars 2 ((Martius): 261–268, 289–298. * Truesdell, C. A. [[1980]]. ''The Tragicomical History of Thermodynamics, 1822–1854.'' Novi Eboraci: Springer. ISBN 0-387-90403-4. * Tschoegl, N. W. [[2000]]. ''Fundamentals of Equilibrium and Steady-State Thermodynamics.'' Amstelodami: Elsevier. ISBN 0-444-50426-5. * Zemansky, Mark Waldo. [[1964]]. ''Temperatures Very Low and Very High.'' Princetoniae: Van Nostrand. * {{cite journal | last1 = Zeppenfeld | first1 = M. | last2 = Englert | first2 = B. G. U. | last3 = Glöckner | first3 = R. | last4 = Prehn | first4 = A. | last5 = Mielenz | first5 = M. | last6 = Sommer | first6 = C. | last7 = van Buuren | first7 = L. D. | last8 = Motsch | first8 = M. | last9 = Rempe | first9 = G. | year = [[2012]] | title = Sysiphus cooling of electrically trapped polyatomic molecules | journal = Nature | volume = 491 | issue = 7425| pages = 570–573 | doi=10.1038/nature11595|arxiv = 1208.0046 |bibcode = 2012Natur.491..570Z | pmid=23151480| s2cid = 4367940 }}. {{NexInt}} {{div col|2}} * [[Aestas]] * [[Ars coquinaria]] * [[Biothermia]] * [[Daemon Maxwellianum]] * [[Ebullitio]] * [[Hypothermia]] * [[Ignis]] * [[Index magnitudinum physicarum]] * [[Scalar (physica)]] * [[Status normalis]] * [[Thermae]] * [[Thermae Romanae]] * [[Thermodnamica]] * [[Thermographia]] {{div col end}} == Nexus externi == {{CommuniaCat|Temperature|temperaturam}} {{Victionarium|Temperature|temperaturam}} [[Categoria:Calor]]<!--Heat transfer--> [[Categoria:Physica]]<!--melius: Fundamental physics concepts--> [[Categoria:Quantitates physicae]] [[Categoria:Temperatura]] [[Categoria:Thermodynamica]] {{1000 paginae}} {{Myrias|Physica}} 4xxrwga1aqxyjsesimhhkcfezi2py87 3971064 3971060 2026-07-09T07:26:14Z Grufo 64423 {{[[Formula:Creanda|creanda]]}} → {{[[Formula:Nexus ad paginam creandam creatamve|subst:pcc]]}} 3971064 wikitext text/x-wiki {{videdis|Temperatura (discretiva)}} [[Fasciculus:Worlds Tallest Thermometer.jpg|thumb|Maximum in toto [[orbis terrarum|orbe terrarum]] [[thermometrum]], ut dicitur, in [[California]] positum.]] {{res|Temperatura}} est {{safesubst:Nexus ad paginam creandam creatamve|quantitas physica||en|qid=Q107715}} quae [[natura]]m [[calor]]is vel frigoris per [[quantitas|quantitates]] [[significatio (linguistica)|significat]]. Temperatura est [[mensura]] quae [[thermometrum|thermometro]] {{safesubst:Nexus ad paginam creandam creatamve|Calibratio|computatur|en|qid=Q736777}}. [[Energia kinetica|Energiam kineticam]] [[atomus|atomorum]] {{safesubst:Nexus ad paginam creandam creatamve|Vibratio|vibrantium|en|qid=Q3695508}} et confligentium quibus [[substantia]] constituitur ostendit. Haec [[magnitudo]] olim '''gradus caloris''' appellabatur, sed hoc nomen dubiosum proveniebat ex [[theoria]] falsa, quae [[calor]]em esse [[materia]]m sicut [[aqua]]m inter res fluentem dicebat. Temperatura hodie saepe secundum scalam thermodynamicam scientificam indicatur, gradibus K = [[Kelvinus (unitas)|Kelvinianis]]. Hoc nomen unitatis ex [[Gulielmus Thomson, baro Kelvinus|Guilielmo Thomson, Barone Kelvino]] electum appellatur, propter eius conlationes maximi momenti ad theoriam thermodynamicam amplificandam. Secundum [[axioma]]ta thermodynamica, [[0]] [[Kelvin (unitas)|Kelvin]] est temperatura minima in [[aequilibrium thermale|statu aequilibrii]], quamquam temperaturae negativae fieri sunt in statibus quo aequilibrio caretur. Quamquam autem gradus K est unitas probata per [[Systema Internationale|Systema Unitatium Internationale]], aliae unitates ad temperaturae thermodynamicae mensuram hodie etiam adhibitae sunt, sicut gradus °C appellata secundum [[Andreas Celsius|Andream Celsium]], °F secundum [[Daniel Gabriel Fahrenheit|Danielem Gabrielem Fahrenheit]], °R secundum [[Réaumur]], et R aut °Ra secundum [[Gulielmus Ioannes Macquorn Rankine|Gulielmum Rankine]]. Temperatura magni momenti in omnibus {{safesubst:Nexus ad paginam creandam creatamve|Scientia naturalis|scientiae naturalis|en|qid=Q7991}} [[disciplina|disciplinis]] est, inter quas [[astronomia]], [[biologia]], [[chemia]], [[geographia]], [[ingeniaria mechanica]], [[medicina]], [[metallurgia]], [[oecologia]], [[physica]], {{safesubst:Nexus ad paginam creandam creatamve|Scientia materiarum|scientia materiarum|en|qid=Q228736}}, et [[scientia telluris]], atque in plurimis [[vita]]e quotidianae [[res|rebus]]. In [[meteorologia|re meteorologica]], temperatura inter variabiles maximi momenti quantitates numeratur, [[praecipitatio]]nis modum, [[ventus|ventorum]] vehementiam, et [[tempestas|tempestatum]] magnitudines determinantes. == De vocabulis == Latinitate classica haec notio saepius vocibus ''[[calor]]'' vel ''[[frigus]]'' describitur. Voces ''temperatio'', ''temperies'', ''temperamentum'', ''temperatura'' rerum mixtionem aequatam significant,<ref>{{Forcellini-fons}}</ref> sic tempestas moderata ''aeris'' vel ''caeli temperatio'' dicebatur. Hodierna notio temperaturae "gradus caloris" dici potest, sed vocabulum ''temperatura'' in libris eruditis recentibus usitatum est.<ref>{{Morgan}}</ref><ref>Philipp Roelli, ''Latin as the Language of Science and Learning'' (De Gruyter, 2021), [https://www.google.com/books/edition/Latin_as_the_Language_of_Science_and_Lea/pFdYEAAAQBAJ?pg=PA494 p. 494]</ref> == Effectus temperaturae == [[Fasciculus:Body Temp Variation.svg|thumb|Media [[corpus humanum|corporis humani]] temperaturae quotidianae [[variatio]].]] [[Fasciculus:Thermometer CF.svg|thumb|Dua thermometra temperaturam Celsianam et Fahrenheitianam ostendunt.]] [[Fasciculus:Pakkanen.jpg|thumb|Usitatum thermometrum Celsianum temperaturam [[dies|diei]] [[hiems|hiemalis]] −17C metitur.]] Multae rationes physicae ad temperaturam coniunguntur, quarum aliquot infra perscribuntur. * physicae materiarum [[proprietas|proprietates]], inter quas {{safesubst:Nexus ad paginam creandam creatamve|Phases materiae|phases materiae|en|qid=Q104837}} ([[solidum]], [[liquidum]], [[gasium]], [[plasma]]), [[densitas]], [[solubilitas]], [[Pressio vaporis|pressura vaporis]], {{safesubst:Nexus ad paginam creandam creatamve|Conductivitas electrica|conductivitas electrica|en|qid=Q4593291}}, {{safesubst:Nexus ad paginam creandam creatamve|Duritia|duritia|en|qid=Q3236003}}, [[Attritus|resistentia usalis]], {{safesubst:Nexus ad paginam creandam creatamve|Conductivitas thermalis|conductivitas thermalis|en|qid=Q487005}}, {{safesubst:Nexus ad paginam creandam creatamve|Rosio|resistentia rosionis|en|qid=Q137056}}, [[vires]]. * modus et ambitus quibus [[reactio chemica|reactiones chemicae]] fiunt<ref>{{Cite book|url=https://books.google.com/books?id=UKkQAQAAMAAJ|title=Thermal discharges at nuclear power stations: their management and environmental impacts: a report prepared by a group of experts as the result of a panel meeting held in Vienna, 23–27 October 1972|last=Agency|first=International Atomic Energy|date=[[1974]]|publisher=International Atomic Energy Agency}}.</ref> * summa et proprietates {{safesubst:Nexus ad paginam creandam creatamve|Radiatio thermalis|radiationis thermalis|en|qid=Q192593}} quae e [[superficies|superficie]] [[res|rei]] emittitur * {{safesubst:Nexus ad paginam creandam creatamve|temperatura aeris||en|qid=Q1160424}}, quae omnes [[organismus|organismos]] [[vita|vivos]] afficit * [[celeritas soni]], quae in gasio pro [[radix quadrata|radice quadrata]] temperaturae absolutae est<ref>{{Cite book|url=https://books.google.com/books?id=eVpITJfPxMEC&pg=PA34|title=The Art of Digital Audio|last=Watkinson|first=John|date=[[2001]]|location:Novi Eboraci|publisher=Taylor & Francis|isbn=978-0-240-51587-8}}.</ref> == De scala Kelviniana, Celsiana, Fahrenheitiana == Cum systema [[aequor maris|aequore maris]] sub [[pressio]]ne atmosphaerica (1 atm) quoddam calefaciatur, temperatura augmentat gradibus: * 0 [[kelvinus (unitas)|K]], −273,15 [[gradus Celsianus|°C]], −459,67 °F: [[zerum absolutum|temperatura thermodynamica minima]], quae scalam incipit; praeter [[helium]], omnes [[materia extrastellaris|materiae extrastellares]] hac temperatura sunt solidae * 63,15 K, −210,00 °C, −346,00 °F: [[nitrogenium]] (quod 78% [[aër]]is Tellurici constituit) [[gelatio|gelatur]] * 77,36 K, −195,79 °C, −320,33 °F: nitrogenium liquidum conversum est in [[gasium]] * 273.15 K, 0 °C, 32 °F: [[aqua]] in [[glacies|glaciem]] vertur * 310 K, 37 °C, 98 °F: ordinaria hominis [[temperatura interna]] * 373.15 K, 100 °C, 212 °F: [[aqua]] liquida nunc fervet in [[vapor]]em * 1808 K, 1535 °C, 2795 °F: [[ferrum]] liquefit * ca. 6500 K: superficies [[sol]]aris quae videri potest Ad usum quotidianum, homines scalam Celsianam malunt, ubi aquae congelationis temperatura valore zero assignatur, et ebullitionis centum. Ad temperaturas Kelvinienses in Celsienses et vice versa convertant, habemus igitur formulas: :: Kelvin = °Celsius + 273.15 :: °Celsius = Kelvin − 273.15 Scala vetus in usu [[Civitates Foederatae|Americano]] populo gratissima habetur Fahrenheitiana, cui formula definiens est :: <math>^{\circ}\text{Fahrenheit} = 32^{\circ} + \frac{9}{5} (\text{Kelvin} - 273.15)</math> == De temperaturae natura == Temperatura plerumque per quodquam rei adiunctum decernitur, quod cum res calefit augmentat.{{dubsig}} [[Thermometrum|Thermometra]] primitiva utuntur, exempli gratia columnis [[vitrium|vitrii]] longis [[hydrargyrum|hydrargyri]] plenis; his in thermometris prope temperaturas ordinarias hydrarguntum{{dubsig}} in proportione calori dato expandit. Saepe autem adiuncta in proportione calori applicato agumentare nolunt. [[Aqua]], exempli gratia, cum calefit, primum contrahit, tunc expandit; qua de causa [[crystallum|crystalla]] aquae in [[superficies|superficie]] [[corpus aquae|corporis aquae]] [[hiems|hieme]] fluitant, quod ea minus densa sunt quam aqua [[liquidum|liquida]]. == Temperaturae praecipuae == {{div col|2}} * [[Punctum criticum]] * [[Punctum fervoris]] * [[Punctum liquefactionis]] * [[Punctum triplex]] * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura Curiensis||en|qid=Q191073}} * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura coloris||en|qid=Q327408}} * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura neutronum||en|qid=Q1969703}} * [[Temperatura planckiana]] {{div col end}} == Bibliographia == * Adkins, C. J. (1968) [[1983]]. ''Equilibrium Thermodynamics.'' ed. tertia. Cantabrigiae: Cambridge University Press. ISBN 0-521-25445-0. * Buchdahl, H. A. [[1966]]. ''The Concepts of Classical Thermodynamics.'' Cantabrigiae: Cambridge University Press. * Chang, Hasok. [[2004]]. ''Inventing Temperature: Measurement and Scientific Progress.'' Oxoniae: Oxford University Press. ISBN 978-0-19-517127-3. * Jaynes, E. T. [[1965]]. "Gibbs vs Boltzmann entropies." ''American Journal of Physics'' 33 (5), 391–398. * Middleton, W. E. K. [[1966]]. ''A History of the Thermometer and its Use in Metrology.'' Baltimorae: Johns Hopkins Press. * Miller, J. [[2013]]. "Cooling molecules the optoelectric way." ''Physics Today'' 66 (1): 12–14. {{doi|10.1063/pt.3.1840}}. Bibcode 2013PhT....66a..12M. * [[Iacobus Riddick Partington|Partington, Iacobus Riddick]]. [[1949]]. ''An Advanced Treatise on Physical Chemistry,'' vol. 1, ''Fundamental Principles: The Properties of Gases.'' Londinii: Longmans, Green & Co. * [[Alfredus Brianus Pippard|Pippard, Alfred Brian.]] (1957) [[1966]]. ''Elements of Classical Thermodynamics for Advanced Students of Physics.'' Iterum impressum. Cantabrigiae: Cambridge University Press. * Quinn, T. J. [[1983]]. ''Temperature.'' Londinii: Academic Press. ISBN 0-12-569680-9. * Schooley, J. F. [[1986]]. ''Thermometry.'' Boca Raton Floridae: CRC Press. ISBN 0-8493-5833-7. * Roberts, J. K., et A. R. Miller. (1928) [[1960]]. ''Heat and Thermodynamics.'' Ed. quinta. Glasgoviae: Blackie & Son Limited. * Thomson, W. (Lord Kelvin). (1843) [[1863]]. "On an absolute thermometric scale founded on Carnot's theory of the motive power of heat, and calculated from Regnault's observations," ''Proceedings of the Cambridge Phil. Society.'' 1 (5): 66–71. * Thomson, W. [[1851]]. "On the Dynamical Theory of Heat, with numerical results deduced from Mr Joule's equivalent of a Thermal Unit, and M. Regnault's Observations on Steam." ''Transactions of the Royal Society of Edinburgh'' 20, pars 2 ((Martius): 261–268, 289–298. * Truesdell, C. A. [[1980]]. ''The Tragicomical History of Thermodynamics, 1822–1854.'' Novi Eboraci: Springer. ISBN 0-387-90403-4. * Tschoegl, N. W. [[2000]]. ''Fundamentals of Equilibrium and Steady-State Thermodynamics.'' Amstelodami: Elsevier. ISBN 0-444-50426-5. * Zemansky, Mark Waldo. [[1964]]. ''Temperatures Very Low and Very High.'' Princetoniae: Van Nostrand. * {{cite journal | last1 = Zeppenfeld | first1 = M. | last2 = Englert | first2 = B. G. U. | last3 = Glöckner | first3 = R. | last4 = Prehn | first4 = A. | last5 = Mielenz | first5 = M. | last6 = Sommer | first6 = C. | last7 = van Buuren | first7 = L. D. | last8 = Motsch | first8 = M. | last9 = Rempe | first9 = G. | year = [[2012]] | title = Sysiphus cooling of electrically trapped polyatomic molecules | journal = Nature | volume = 491 | issue = 7425| pages = 570–573 | doi=10.1038/nature11595|arxiv = 1208.0046 |bibcode = 2012Natur.491..570Z | pmid=23151480| s2cid = 4367940 }}. == Notae == <references /> {{NexInt}} {{div col|2}} * [[Aestas]] * [[Ars coquinaria]] * {{safesubst:Nexus ad paginam creandam creatamve|Biothermia||en|qid=Q4915352}} * [[Daemon Maxwellianus|Daemon Maxwellianum]] * [[Ebullitio]] * [[Hypothermia]] * [[Ignis]] * [[Index magnitudinum physicarum]] * [[Scalar (physica)]] * [[Status normalis]] * [[Thermae]] * [[Thermae Romanae]] * [[Thermodynamica]] * {{safesubst:Nexus ad paginam creandam creatamve|Thermographia||en|qid=Q624587}} {{div col end}} == Nexus externi == {{CommuniaCat|Temperature|temperaturam}} {{Victionarium|Temperature|temperaturam}} [[Categoria:Calor]]<!--Heat transfer--> [[Categoria:Physica]]<!--melius: Fundamental physics concepts--> [[Categoria:Quantitates physicae]] [[Categoria:Temperatura]] [[Categoria:Thermodynamica]] {{1000 paginae}} {{Myrias|Physica}} 07kowkpbjkoplpeyznbnaaj76gdzutw 3971065 3971064 2026-07-09T07:27:49Z Grufo 64423 3971065 wikitext text/x-wiki {{videdis|Temperatura (discretiva)}} [[Fasciculus:Worlds Tallest Thermometer.jpg|thumb|Maximum in toto [[orbis terrarum|orbe terrarum]] [[thermometrum]], ut dicitur, in [[California]] positum.]] {{res|Temperatura}} est {{safesubst:Nexus ad paginam creandam creatamve|quantitas physica||en|qid=Q107715}} quae [[natura]]m [[calor]]is vel frigoris per [[quantitas|quantitates]] [[significatio (linguistica)|significat]]. Temperatura est [[mensura]] quae [[thermometrum|thermometro]] {{safesubst:Nexus ad paginam creandam creatamve|Calibratio|computatur|en|qid=Q736777}}. [[Energia kinetica|Energiam kineticam]] [[atomus|atomorum]] {{safesubst:Nexus ad paginam creandam creatamve|Vibratio|vibrantium|en|qid=Q3695508}} et confligentium quibus [[substantia]] constituitur ostendit. Haec [[magnitudo]] olim '''gradus caloris''' appellabatur, sed hoc nomen dubiosum proveniebat ex [[theoria]] falsa, quae [[calor]]em esse [[materia]]m sicut [[aqua]]m inter res fluentem dicebat. Temperatura hodie saepe secundum scalam thermodynamicam scientificam indicatur, gradibus K = [[Kelvinus (unitas)|Kelvinianis]]. Hoc nomen unitatis ex [[Gulielmus Thomson, baro Kelvinus|Guilielmo Thomson, Barone Kelvino]] electum appellatur, propter eius conlationes maximi momenti ad theoriam thermodynamicam amplificandam. Secundum [[axioma]]ta thermodynamica, [[0]] [[Kelvin (unitas)|Kelvin]] est temperatura minima in [[aequilibrium thermale|statu aequilibrii]], quamquam temperaturae negativae fieri sunt in statibus quo aequilibrio caretur. Quamquam autem gradus K est unitas probata per [[Systema Internationale|Systema Unitatium Internationale]], aliae unitates ad temperaturae thermodynamicae mensuram hodie etiam adhibitae sunt, sicut gradus °C appellata secundum [[Andreas Celsius|Andream Celsium]], °F secundum [[Daniel Gabriel Fahrenheit|Danielem Gabrielem Fahrenheit]], °R secundum [[Réaumur]], et R aut °Ra secundum [[Gulielmus Ioannes Macquorn Rankine|Gulielmum Rankine]]. Temperatura magni momenti in omnibus {{safesubst:Nexus ad paginam creandam creatamve|Scientia naturalis|scientiae naturalis|en|qid=Q7991}} [[disciplina|disciplinis]] est, inter quas [[astronomia]], [[biologia]], [[chemia]], [[geographia]], [[ingeniaria mechanica]], [[medicina]], [[metallurgia]], [[oecologia]], [[physica]], {{safesubst:Nexus ad paginam creandam creatamve|Scientia materiarum|scientia materiarum|en|qid=Q228736}}, et [[scientia telluris]], atque in plurimis [[vita]]e quotidianae [[res|rebus]]. In [[meteorologia|re meteorologica]], temperatura inter variabiles maximi momenti quantitates numeratur, [[praecipitatio]]nis modum, [[ventus|ventorum]] vehementiam, et [[tempestas|tempestatum]] magnitudines determinantes. == De vocabulis == Latinitate classica haec notio saepius vocibus ''[[calor]]'' vel ''[[frigus]]'' describitur. Voces ''temperatio'', ''temperies'', ''temperamentum'', ''temperatura'' rerum mixtionem aequatam significant,<ref>{{Forcellini-fons}}</ref> sic tempestas moderata ''aeris'' vel ''caeli temperatio'' dicebatur. Hodierna notio temperaturae "gradus caloris" dici potest, sed vocabulum ''temperatura'' in libris eruditis recentibus usitatum est.<ref>{{Morgan}}</ref><ref>Philipp Roelli, ''Latin as the Language of Science and Learning'' (De Gruyter, 2021), [https://www.google.com/books/edition/Latin_as_the_Language_of_Science_and_Lea/pFdYEAAAQBAJ?pg=PA494 p. 494]</ref> == Effectus temperaturae == [[Fasciculus:Body Temp Variation.svg|thumb|Media [[corpus humanum|corporis humani]] temperaturae quotidianae [[variatio]].]] [[Fasciculus:Thermometer CF.svg|thumb|Dua thermometra temperaturam Celsianam et Fahrenheitianam ostendunt.]] [[Fasciculus:Pakkanen.jpg|thumb|Usitatum thermometrum Celsianum temperaturam [[dies|diei]] [[hiems|hiemalis]] −17C metitur.]] Multae rationes physicae ad temperaturam coniunguntur, quarum aliquot infra perscribuntur. * physicae materiarum [[proprietas|proprietates]], inter quas {{safesubst:Nexus ad paginam creandam creatamve|Phases materiae|phases materiae|en|qid=Q104837}} ([[solidum]], [[liquidum]], [[gasium]], [[plasma]]), [[densitas]], [[solubilitas]], [[Pressio vaporis|pressura vaporis]], {{safesubst:Nexus ad paginam creandam creatamve|Conductivitas electrica|conductivitas electrica|en|qid=Q4593291}}, {{safesubst:Nexus ad paginam creandam creatamve|Duritia|duritia|en|qid=Q3236003}}, [[Attritus|resistentia usalis]], {{safesubst:Nexus ad paginam creandam creatamve|Conductivitas thermalis|conductivitas thermalis|en|qid=Q487005}}, {{safesubst:Nexus ad paginam creandam creatamve|Rosio|resistentia rosionis|en|qid=Q137056}}, [[vires]]. * modus et ambitus quibus [[reactio chemica|reactiones chemicae]] fiunt<ref>{{Cite book|url=https://books.google.com/books?id=UKkQAQAAMAAJ|title=Thermal discharges at nuclear power stations: their management and environmental impacts: a report prepared by a group of experts as the result of a panel meeting held in Vienna, 23–27 October 1972|last=Agency|first=International Atomic Energy|date=[[1974]]|publisher=International Atomic Energy Agency}}.</ref> * summa et proprietates {{safesubst:Nexus ad paginam creandam creatamve|Radiatio thermalis|radiationis thermalis|en|qid=Q192593}} quae e [[superficies|superficie]] [[res|rei]] emittitur * {{safesubst:Nexus ad paginam creandam creatamve|temperatura aeris||en|qid=Q1160424}}, quae omnes [[organismus|organismos]] [[vita|vivos]] afficit * [[celeritas soni]], quae in gasio pro [[radix quadrata|radice quadrata]] temperaturae absolutae est<ref>{{Cite book|url=https://books.google.com/books?id=eVpITJfPxMEC&pg=PA34|title=The Art of Digital Audio|last=Watkinson|first=John|date=[[2001]]|location:Novi Eboraci|publisher=Taylor & Francis|isbn=978-0-240-51587-8}}.</ref> == De scala Kelviniana, Celsiana, Fahrenheitiana == Cum systema [[aequor maris|aequore maris]] sub [[pressio]]ne atmosphaerica (1 atm) quoddam calefaciatur, temperatura augmentat gradibus: * 0 [[kelvinus (unitas)|K]], −273,15 [[gradus Celsianus|°C]], −459,67 °F: [[zerum absolutum|temperatura thermodynamica minima]], quae scalam incipit; praeter [[helium]], omnes [[materia extrastellaris|materiae extrastellares]] hac temperatura sunt solidae * 63,15 K, −210,00 °C, −346,00 °F: [[nitrogenium]] (quod 78% [[aër]]is Tellurici constituit) [[gelatio|gelatur]] * 77,36 K, −195,79 °C, −320,33 °F: nitrogenium liquidum conversum est in [[gasium]] * 273.15 K, 0 °C, 32 °F: [[aqua]] in [[glacies|glaciem]] vertur * 310 K, 37 °C, 98 °F: ordinaria hominis [[temperatura interna]] * 373.15 K, 100 °C, 212 °F: [[aqua]] liquida nunc fervet in [[vapor]]em * 1808 K, 1535 °C, 2795 °F: [[ferrum]] liquefit * ca. 6500 K: superficies [[sol]]aris quae videri potest Ad usum quotidianum, homines scalam Celsianam malunt, ubi aquae congelationis temperatura valore zero assignatur, et ebullitionis centum. Ad temperaturas Kelvinienses in Celsienses et vice versa convertant, habemus igitur formulas: :: Kelvin = °Celsius + 273.15 :: °Celsius = Kelvin − 273.15 Scala vetus in usu [[Civitates Foederatae|Americano]] populo gratissima habetur Fahrenheitiana, cui formula definiens est :: <math>^{\circ}\text{Fahrenheit} = 32^{\circ} + \frac{9}{5} (\text{Kelvin} - 273.15)</math> == De temperaturae natura == Temperatura plerumque per quodquam rei adiunctum decernitur, quod cum res calefit augmentat.{{dubsig}} [[Thermometrum|Thermometra]] primitiva utuntur, exempli gratia columnis [[vitrium|vitrii]] longis [[hydrargyrum|hydrargyri]] plenis; his in thermometris prope temperaturas ordinarias hydrarguntum{{dubsig}} in proportione calori dato expandit. Saepe autem adiuncta in proportione calori applicato agumentare nolunt. [[Aqua]], exempli gratia, cum calefit, primum contrahit, tunc expandit; qua de causa [[crystallum|crystalla]] aquae in [[superficies|superficie]] [[corpus aquae|corporis aquae]] [[hiems|hieme]] fluitant, quod ea minus densa sunt quam aqua [[liquidum|liquida]]. == Temperaturae praecipuae == {{div col|2}} * [[Punctum criticum]] * [[Punctum fervoris]] * [[Punctum liquefactionis]] * [[Punctum triplex]] * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura Curiensis||en|qid=Q191073}} * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura coloris||en|qid=Q327408}} * {{safesubst:Nexus ad paginam creandam creatamve|Temperatura neutronum||en|qid=Q1969703}} * [[Temperatura planckiana]] {{div col end}} == Bibliographia == * Adkins, C. J. (1968) [[1983]]. ''Equilibrium Thermodynamics.'' ed. tertia. Cantabrigiae: Cambridge University Press. ISBN 0-521-25445-0. * Buchdahl, H. A. [[1966]]. ''The Concepts of Classical Thermodynamics.'' Cantabrigiae: Cambridge University Press. * Chang, Hasok. [[2004]]. ''Inventing Temperature: Measurement and Scientific Progress.'' Oxoniae: Oxford University Press. ISBN 978-0-19-517127-3. * Jaynes, E. T. [[1965]]. "Gibbs vs Boltzmann entropies." ''American Journal of Physics'' 33 (5), 391–398. * Middleton, W. E. K. [[1966]]. ''A History of the Thermometer and its Use in Metrology.'' Baltimorae: Johns Hopkins Press. * Miller, J. [[2013]]. "Cooling molecules the optoelectric way." ''Physics Today'' 66 (1): 12–14. {{doi|10.1063/pt.3.1840}}. Bibcode 2013PhT....66a..12M. * [[Iacobus Riddick Partington|Partington, Iacobus Riddick]]. [[1949]]. ''An Advanced Treatise on Physical Chemistry,'' vol. 1, ''Fundamental Principles: The Properties of Gases.'' Londinii: Longmans, Green & Co. * [[Alfredus Brianus Pippard|Pippard, Alfred Brian.]] (1957) [[1966]]. ''Elements of Classical Thermodynamics for Advanced Students of Physics.'' Iterum impressum. Cantabrigiae: Cambridge University Press. * Quinn, T. J. [[1983]]. ''Temperature.'' Londinii: Academic Press. ISBN 0-12-569680-9. * Schooley, J. F. [[1986]]. ''Thermometry.'' Boca Raton Floridae: CRC Press. ISBN 0-8493-5833-7. * Roberts, J. K., et A. R. Miller. (1928) [[1960]]. ''Heat and Thermodynamics.'' Ed. quinta. Glasgoviae: Blackie & Son Limited. * Thomson, W. (Lord Kelvin). (1843) [[1863]]. "On an absolute thermometric scale founded on Carnot's theory of the motive power of heat, and calculated from Regnault's observations," ''Proceedings of the Cambridge Phil. Society.'' 1 (5): 66–71. * Thomson, W. [[1851]]. "On the Dynamical Theory of Heat, with numerical results deduced from Mr Joule's equivalent of a Thermal Unit, and M. Regnault's Observations on Steam." ''Transactions of the Royal Society of Edinburgh'' 20, pars 2 ((Martius): 261–268, 289–298. * Truesdell, C. A. [[1980]]. ''The Tragicomical History of Thermodynamics, 1822–1854.'' Novi Eboraci: Springer. ISBN 0-387-90403-4. * Tschoegl, N. W. [[2000]]. ''Fundamentals of Equilibrium and Steady-State Thermodynamics.'' Amstelodami: Elsevier. ISBN 0-444-50426-5. * Zemansky, Mark Waldo. [[1964]]. ''Temperatures Very Low and Very High.'' Princetoniae: Van Nostrand. * {{cite journal | last1 = Zeppenfeld | first1 = M. | last2 = Englert | first2 = B. G. U. | last3 = Glöckner | first3 = R. | last4 = Prehn | first4 = A. | last5 = Mielenz | first5 = M. | last6 = Sommer | first6 = C. | last7 = van Buuren | first7 = L. D. | last8 = Motsch | first8 = M. | last9 = Rempe | first9 = G. | year = [[2012]] | title = Sysiphus cooling of electrically trapped polyatomic molecules | journal = Nature | volume = 491 | issue = 7425| pages = 570–573 | doi=10.1038/nature11595|arxiv = 1208.0046 |bibcode = 2012Natur.491..570Z | pmid=23151480| s2cid = 4367940 }}. == Notae == <references /> {{NexInt}} {{div col|2}} * [[Aestas]] * [[Ars coquinaria]] * {{safesubst:Nexus ad paginam creandam creatamve|Biothermia||en|qid=Q4915352}} * [[Daemon Maxwellianus]] * [[Ebullitio]] * [[Hypothermia]] * [[Ignis]] * [[Index magnitudinum physicarum]] * [[Scalar (physica)]] * [[Status normalis]] * [[Thermae]] * [[Thermae Romanae]] * [[Thermodynamica]] * {{safesubst:Nexus ad paginam creandam creatamve|Thermographia||en|qid=Q624587}} {{div col end}} == Nexus externi == {{CommuniaCat|Temperature|temperaturam}} {{Victionarium|Temperature|temperaturam}} [[Categoria:Calor]]<!--Heat transfer--> [[Categoria:Physica]]<!--melius: Fundamental physics concepts--> [[Categoria:Quantitates physicae]] [[Categoria:Temperatura]] [[Categoria:Thermodynamica]] {{1000 paginae}} {{Myrias|Physica}} qnr0bpgm8kn3b60wbhvseek2j4wt1xi Morris Langlo West 0 59510 3970951 3468736 2026-07-08T14:02:21Z Marcus Terentius Bibliophilus 2059 3970951 wikitext text/x-wiki {{Capsa hominis Vicidata}} '''Morris Langlo West''' (natus in regione urbana Sanctae Kildae [[Melburnia]]e [[Victoria]]e die [[26 Aprilis]] [[1916]]; mortuus [[Sydneium|Sydneii]] in [[Nova Cambria Australis|Nova Cambria Australi]] die [[9 Octobris]] [[1999]]) fuit [[scriptor mythistoriarum]] [[Australia]]nus. Praecipuum [[thema]] eius scriptorum est [[Ecclesia Catholica Romana|Ecclesia catholica Romana]] in rebus internationalibus. ==Opera selecta== *[[1963]] - [[The Shoes of the Fisher (mythistoria)|The Shoes of the Fisher]], quod anno 1968 in pellicula (vide [[The Shoes of the Fisher]]) versa est *[[The Devil's Advocate]] ==Nexus externus== *[http://italian-mysteries.com/MWap.html Brevis biographia] {{ling|Anglice}} {{scriptor-stipula}} {{Lifetime|1916|1999|West, Morris Langlo}} [[Categoria:Auctores Anglici]] [[Categoria:Scriptores mythistoriarum Australiae]] [[Categoria:Scriptores Australiae]] 54vr3fzd3cvueghtmp3jp2p6snfxkt7 Tromellum 0 62107 3971074 3596034 2026-07-09T09:42:25Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971074 wikitext text/x-wiki {{Capsa urbis Vicidata}} [[Fasciculus:Terdoppio Tromello.jpg|thumb|Tromellum]] '''Tromellum'''<ref>[[:it:Tromello]]</ref> (seu ''Tumelum''<ref>''DIZIONARIO GEOGRAFICO'' - Di GOFFREDO CASALIS, Voll. V.V., Torino 1833-1854</ref>) ([[Lingua Italiana|Italiane]]: ''[[:it:Tromello|Tromello]]'') est [[oppidum]] et [[Commune Italiae|municipium]] [[Italia]]e, circiter 3&thinsp;900 incolarum, in Regione [[Langobardia]], in [[Provincia Papiensis|Provincia Papiensi]] ac in [[Laumellina]] situm. Incolae ''Tromellenses'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Historia == Tromellum statio in [[via Francigena]] fuit, quae in [[Medium Aevum|Aevo Medio]] peregrinos [[Roma]]m duxit. In itinerario Sigerici, Tromelli, cum nomine ''Tremel'', statio XLII fuit. == Fractio == * Roventino. == Municipia finitima == * [[Mortis Ara]] ([[Lingua Italiana|Italiane]]: [[:it:Mortara|Mortara]]), * [[Octabianum]] ([[Lingua Italiana|Italiane]]: [[:it:Ottobiano|Ottobiano]]), * [[Valegium]] ([[Lingua Italiana|Italiane]]: [[:it:Valeggio|Valeggio]]), {{NexInt}} * [[Langobardia]] * [[Provincia Papiensis]] * [[Laumellina]] * [[Papia]] * [[Via Francigena]]. == Nexus externi == * [https://web.archive.org/web/20080513163250/http://www.comune.tromello.pv.it/ Situs Publicus] {{Ling|Lingua Italiana{{!}}Italiane}} {{CommuniaCat|Tromello|Tromellum}} == Pinacotheca == <gallery> Imago:Map of comune of Tromello (province of Pavia, region Lombardy, Italy).svg|Collocatio finium Municipii in Provincia Papiensi. Imago:Lomellina.GIF|Collocatio Agri Laumellini in Provincia Papiensi. </gallery> == Notae == <references/> [[Categoria:Municipia in provincia Papiae]] [[Categoria:Municipia in Laumellina]] [[Categoria:Via Francigena]] [[Categoria:Loci in itinerario Sigerici]] 8yrdr4yrwh3km0t01vheovta3mj689b The Devil's Advocate 0 62758 3970944 3261196 2026-07-08T13:44:33Z Marcus Terentius Bibliophilus 2059 3970944 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] pro cuiusdam Giacomo Nerone [[beatificatio]]ne. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] hah7v4b4143cdrd8zrld36d2r03oop3 3970945 3970944 2026-07-08T13:48:26Z Marcus Terentius Bibliophilus 2059 3970945 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita promotoris fidei qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur vice fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] mntww9gfepkaiv2cfph48jwat3al6lv 3970946 3970945 2026-07-08T13:53:56Z Marcus Terentius Bibliophilus 2059 3970946 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita promotoris fidei qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur vice<ref>Ciuius munus in constitutione apostolica ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] kelb9evnxoiey3xanqq93bp4g9osx6n 3970947 3970946 2026-07-08T13:54:24Z Marcus Terentius Bibliophilus 2059 3970947 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita promotoris fidei, qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur, vice<ref>Ciuius munus in constitutione apostolica ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] p17dx4q4v4kye9xpv4wfbcm7vbsbir6 3970948 3970947 2026-07-08T13:56:04Z Marcus Terentius Bibliophilus 2059 3970948 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita promotoris fidei, qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur, vice<ref>Ciuius munus in constitutione apostolica ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Notae == <references /> == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] 8fe7njo4rv3thaqh7en116k3sd9itwj 3970949 3970948 2026-07-08T13:56:51Z Marcus Terentius Bibliophilus 2059 3970949 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita [[Promotor fidei|promotoris fidei]], qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur, vice<ref>Ciuius munus in constitutione apostolica ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Notae == <references /> == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] 0o2w4zgijphzv62nv11uwmrmaetma0o 3970950 3970949 2026-07-08T13:57:48Z Marcus Terentius Bibliophilus 2059 3970950 wikitext text/x-wiki ''''' The Devil's Advocate''''' (Latine "Advocatus diaboli") est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita [[Promotor fidei|promotoris fidei]], qui in pontificali administratione etiam [[Advocatus diaboli|advocatus diaboli]] dicitur, vice<ref>Cuius munus in [[Constitutio Apostolica|constitutione apostolica]] ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: "''Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant''" ([[Apocalypsis Ioannis]] vi. 9). Anno [[1977]] e hac mythistoria pellicula " Des Teufels Advokat" ducta a [[Guy Green]] et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]] facta est == Notae == <references /> == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] au1ubhqp3hgvnxu883b3ldht6se3ztr 3971042 3970950 2026-07-09T03:35:06Z Grufo 64423 +{{Titulus italicus}}; Minora typographica 3971042 wikitext text/x-wiki {{Titulus italicus}} {{Capsa tabellaria | ; The Devil's Advocate<br /><small>''Advocatus diaboli''</small> | Auctor: [[Morris West]] | Genus: [[Mythistoria]] | Lingua: [[Lingua Anglica|Anglica]] | Prima editio: [[1959]] }} {{ores|The Devil's Advocate}} (Latine ‘Advocatus diaboli’) est [[mythistoria]] a [[Morris West]] anno [[1959]] edita et [[Paulus R. Reynolds|Paulo R. Reynolds]] dicata. Mythistoria enarrat res gestas et inquisitiones in parvo et humili vico [[Calabria|Calabro]] veteris [[cancer (morbus)|cancro]] laborantis [[presbyter]]is, Blaise Meredith, [[Congregatio de Causis Sanctorum|Congregationis Rituum]] de cuiusdam Giacomo Nerone [[beatificatio]]ne. Ita [[Promotor fidei|promotoris fidei]], qui in pontificali administratione etiam {{safesubst:Nexus ad paginam creandam creatamve|Advocatus diaboli|advocatus diaboli|en|qid=Q278773}} dicitur, vice<ref>Cuius munus in [[Constitutio Apostolica|constitutione apostolica]] ''[https://www.vatican.va/content/john-paul-ii/la/apost_constitutions/documents/hf_jp-ii_apc_25011983_divinus-perfectionis-magister.html Divinus perfectionis magister]'' anno 1983 iterum finitum est.</ref> fungitur. Epigrafe operis est: {{Ipse dixit|Et cum aperuisset quintum sigillum, vidi subtus altare animas interfectorum propter verbum Dei et propter testimonium, quod habebant|[[Apocalypsis Ioannis]] vi. 9.}} Anno [[1977]] ex hac mythistoria pellicula {{Op|Des Teufels Advokat}}, a {{safesubst:Nexus ad paginam creandam creatamve|Guido Green|Guidone Green|en|qid=Q707321}} ducta et cum claris histrionibus [[Ioannes Mills|Ioanne Mills]], [[Paula Pitagora]] et [[Stephania Audran]], facta est == Notae == <references /> == Nexus externus == * {{Imdb title| 0078378|Des Teufels Advokat }} {{lit-stipula}} [[Categoria:Litterae Anglicae]] [[Categoria:Mythistoriae]] [[Categoria:Angliae scripta]] q734erlgagvi1zsw8oskol13danz5gh Fraternitas Sacerdotalis Sancti Pii X 0 63027 3971013 3969636 2026-07-08T22:39:50Z LilyKitty 18316 de excommunicatione anno 2026 3971013 wikitext text/x-wiki {{Capsa societatis | nomen = Fraternitas Sacerdotalis Sancti Pii X | imago = Héraldique meuble Coeur vendéen.svg | de_imagine = Insignia fraternitatis | fundatus = [[1970]] | praetorium = [[Tugium (pagus)|Tugium]] | dux = [[David Pagliarani]] | parens = [[Ecclesia Catholica]] | linguae = [[Latine]] }} [[Fasciculus:Econe.JPG|thumb|left|300px|Fraternitatis [[seminarium]] in [[Esquinia]] (vulgo dicto: Ecône) ([[Helvetia]])]] {{res|Fraternitas Sacerdotalis Sancti Pii X}} est societas condita anno [[1970]] ab [[archiepiscopus|archiepiscopo]] [[Francia|francico]] [[Marcellus Lefebvre|Marcello Lefebvre]], retracto ab hoc honore ut vitaret reformationem [[liturgia|liturgicam]]. Die [[24 Ianuarii]] [[2009]], Papa [[Benedictus XVI]] sacrum interdictum contra episcopos fraternitatis, anno 1988 ab [[archiepiscopus|archiepiscopo]] [[Francia|francico]] [[Marcellus Lefebvre|Marcello Lefebvre]] conditae, rescidit. Licet quattuor episcoporum excommunicatio revocata sit, Fraternitatis tamen status ante [[Ecclesia Catholica|Ecclesiam Catholicam]] idem manet. Sed die [[1 Iulii]] [[2026]], [[Civitas Vaticana]] Fraternitatem Sacredotalem Sancti Pii X bis [[excommunicatio|excommunicavit]].<ref>[https://bbc.com/news/articles/c5yz95188jjo Vatican excommunicates followers of global Catholic sect]</ref> == Notae == <references/> == Nexus externi == * [http://www.fsspx.org/ Domus generalis] * [http://www.fsspx.info/ Pagina officialis Germaniae] * [https://web.archive.org/web/20121030180603/http://www.stpiusx.nl/ Pagina officialis Hollandiae] * [https://web.archive.org/web/20121209091342/http://www.stpiusx.be/ Pagina officialis Flandriae] * [http://www.kath.net/news/21969 Kath net] De excommunicatione remissa {{Ling| Latine}} * [http://www.kath.net/news/23386 Kath net] Litterae apostolicae - motu proprio datae de Fraternitate Sacerdotali Sancti Pii X {{Ling| Latine}} {{reli-stipula}} [[Categoria:Excommunicati]] [[Categoria:Religio Christiana]] [[Categoria:Missa Tridentina]] gwd0j9rc7agbl7423ltu83g3v8i8rei Silvius mons 0 73675 3970942 3727064 2026-07-08T12:17:12Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970942 wikitext text/x-wiki [[Fasciculus:MonteRosaWestseite_gesehenVomGornergrat.JPG|thumb|200px|Mons Silvius. Despectus occidentem versus]] [[Fasciculus:MonteRosaEastside viewedFromMonteMoroPass.JPG|thumb|200px|Mons Silvius.Despectus orientem versus]] '''Mons Silvius''' (seu ''Mons Roseus'') ([[Lingua Italiana|Italiane]] ''Monte Rosa'') <ref>Confer [https://web.archive.org/web/20130107115030/http://www.macugnaga.org/index.php?option=com_content&task=view&id=61&Itemid=79 www.macugnaga.org] quamquam secundum alis fontes Mons Sylvius Monte Cervine fuisse, vide: {{LHH|8780}}</ref> est [[mons]] accurate sunt complures montes coniuncti in [[Italia]]. Maximum montis culmen quod appellatur [[culmen Dufour]] altum est 4634 metra. == Nexus externi == {{CommuniaCat|Monte Rosa|Montem Silvium}} * [https://web.archive.org/web/20120716205631/http://digilander.libero.it/fotogian/rosa.html Imagines] == Notae == <div class="references-small"><references /></div> {{geo-stipula}} [[Categoria:Montes Pedemontii]] [[Categoria:Montes Vallis Augustanae]] [[Categoria:Alpes]] [[Categoria:Valesia]] [[Categoria:Provincia Verbanensis-Cusiana-Oscelensis]] fvqmrcbbhn9boftwrs4h3xvznvmvlna Disputatio:Ferdinandus Magellanus 1 77744 3970939 1903985 2026-07-08T12:08:22Z IacobusAmor 1163 Quid 3970939 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) 460wtqtg5413mfc1wlf0qnow6em91dz 3970940 3970939 2026-07-08T12:14:05Z IacobusAmor 1163 /* rebellionem? */ + 3970940 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) :In "Hunc rebellionem," ''hunc'' is masculine but ''rebellionem'' is feminine, and the ''hunc'' is a surprise, as no revolt has been mentioned. [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:13, 8 Iulii 2026 (UTC) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) 0ep94ta856akzo279jbntejxwtqg9bu 3971044 3970940 2026-07-09T03:39:59Z Jondel 452 /* Quid significat? */ 3971044 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) :In "Hunc rebellionem," ''hunc'' is masculine but ''rebellionem'' is feminine, and the ''hunc'' is a surprise, as no revolt has been mentioned. [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:13, 8 Iulii 2026 (UTC) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) :Why interpret as led out to a boy? Puero is in the Ablative of Time. 'When he was a boy'......, as a trainee, he was receiving a stipend from the Queen Leonara and was brought up. Maybe I should put more prepositions eg , Cum puero tirocinio, stipendio erat ab Regina Leonora et eductus erat. Usually only 1 'erat' would be needed but to make it clear, let us put two. 6lkdrwznlqaoe6q6nq50s1tesvtej8w 3971045 3971044 2026-07-09T03:40:34Z Jondel 452 /* Quid significat? */ 3971045 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) :In "Hunc rebellionem," ''hunc'' is masculine but ''rebellionem'' is feminine, and the ''hunc'' is a surprise, as no revolt has been mentioned. [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:13, 8 Iulii 2026 (UTC) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) :Why interpret as led out to a boy? Puero is in the Ablative of Time. 'When he was a boy'......, as a trainee, he was receiving a stipend from the Queen Leonara and was brought up. Maybe I should put more prepositions eg , Cum puero tirocinio, stipendio erat ab Regina Leonora et eductus erat. Usually only 1 'erat' would be needed but to make it clear, let us put two.---03:40, 9 Iulii 2026 (UTC) 1ymrmyy378tg48xb4nwnkwns9ekrhpv 3971046 3971045 2026-07-09T03:40:55Z Jondel 452 /* Quid significat? */ 3971046 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) :In "Hunc rebellionem," ''hunc'' is masculine but ''rebellionem'' is feminine, and the ''hunc'' is a surprise, as no revolt has been mentioned. [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:13, 8 Iulii 2026 (UTC) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) :Why interpret as led out to a boy? Puero is in the Ablative of Time. 'When he was a boy'......, as a trainee, he was receiving a stipend from the Queen Leonara and was brought up. Maybe I should put more prepositions eg , Cum puero tirocinio, stipendio erat ab Regina Leonora et eductus erat. Usually only 1 'erat' would be needed but to make it clear, let us put two.---[[Usor:Jondel|Jondel]] ([[Disputatio Usoris:Jondel|disputatio]]) 31by94kklt7rol1i50rn0hjgv46jqd3 3971047 3971046 2026-07-09T03:43:46Z Jondel 452 /* rebellionem? */ 3971047 wikitext text/x-wiki ==Bad Book Spam warning == <small>(My apologies for this message being in English)</small> The vandal [[:en:Category:Wikipedia sockpuppets of General Tojo|General Tojo]] is spamming Wikipedia by removing references and adding his books as the only reference. The books are nothing more than reprints of out of copyright sources, with spelling errors from the title page on forward (For example it is James McClymont, not MacClymont, and Gaspar Correia, not Correa, and Charles Edwards Lester, not Charles Lester Edwards). This article is one of his targets, please watch for removal of valid references and adding of the spam references by ''new'' users or IP's. The books spammed so far are: * [[Ferdinand Magellan|Magellan]] (2008) by Francis Guillemard (''died 1933''), Antonio Pigafetta (''died 1534''), Francisco Albo (''contemporary of Magellan''), Gaspar Correa (''contemporary of Magellan''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421007</nowiki> * [[Amerigo Vespucci]] (2009) by Charles Lester Edwards (''died 1890''), Amerigo Vespucci (''died 1512''), '''Keith Bridgeman''' (Editor) and Tahira Arsham (Editor); <nowiki>ISBN 978-1906421021</nowiki> * [[Pedro Cabral]] (2009) by James Roxburgh MacClymont (''out of copyright author''), William Brooks Greenlee (''edited around 1939''), Pero Vaz de Caminha (''died 1500''), '''Keith Bridgeman''' (Editor), and Tahira Arsham (Editor);<nowiki>ISBN 978-1906421014</nowiki> Please watch for removal of valid references and replacement with spam, and revert accordingly. As for the identity of the spammer and vandal General Tojo: *'''Keith Bridgeman, London''' is the editor of all the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of the publishing house publishing the books spammed by General Tojo *'''Keith Bridgeman, London''' is the owner of some [[Parkinson's disease]] patents spammed by General Tojo on Wikipedia for quite a few years now *'''Keith Bridgeman, London''' is also the owner of the web page advertising both the Parkinson stuff and the books spammed by General Tojo. For details see [[:en:Category:Wikipedia sockpuppets of General Tojo]] -- [[:en:user:Chris 73|Chris 73]] 11:27, 3. Okt. 2009 (CEST) ==rebellionem?== Can I ask what is the issue? Fonte an Latinitate?Gratias ago.--[[Usor:Jondel|Jondel]] 23:54, 23 Februarii 2012 (UTC) :In "Hunc rebellionem," ''hunc'' is masculine but ''rebellionem'' is feminine, and the ''hunc'' is a surprise, as no revolt has been mentioned. [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:13, 8 Iulii 2026 (UTC) You are correct ! emendum est!---[[Usor:Jondel|Jondel]] ([[Disputatio Usoris:Jondel|disputatio]]) ==Quid significat?== "Puero tirocinio stipendio Regina Leonora eductus erat" = 'He had been led out to a boy for inexperience by means of a stipend (with regard to) Queen Leonora'? [[Usor:IacobusAmor|IacobusAmor]] ([[Disputatio Usoris:IacobusAmor|disputatio]]) 12:08, 8 Iulii 2026 (UTC) :Why interpret as led out to a boy? Puero is in the Ablative of Time. 'When he was a boy'......, as a trainee, he was receiving a stipend from the Queen Leonara and was brought up. Maybe I should put more prepositions eg , Cum puero tirocinio, stipendio erat ab Regina Leonora et eductus erat. Usually only 1 'erat' would be needed but to make it clear, let us put two.---[[Usor:Jondel|Jondel]] ([[Disputatio Usoris:Jondel|disputatio]]) j9ene3iqze1wcy4k4ts6f0r6mmeuzjh Species plantarum 0 78949 3970980 3902218 2026-07-08T16:07:39Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970980 wikitext text/x-wiki {{L}} [[Fasciculus:Species Plantarum - p. i.jpg|thumb|Titulus editionis primae]] '''''Species plantarum''''' liber duobus voluminibus constans a [[Carolus Linnaeus|Carolo Linnaeo]] anno [[1753]] primum editus, monstrat [[systema taxinomicum Linnaeanum|systema taxinomicum]] regni [[Plantae|Plantarum]]. In hoc libro inveniuntur [[Binomen|nomina bipertita]] [[botanice|botanica]] antiquissima quae hodie accipiuntur. Opus quater vel quinquies recensum est, imprimis a Linnaeo ipso, postea a [[Carolus Ludovicus Willdenow|Carolo Ludovico Willdenow]] aliisque. == Editiones == * 1753 : Caroli Linnaei ''Species plantarum, exhibentes plantas rite cognitas, ad genera relatas, cum differentiis specificis, nominibus trivialibus, synonymis selectis, locis natalibus, secundum systema sexuale digestas''. Holmiae: impensis Laurentii Salvii * 1762-1763 : editio altera * 1764 : editio tertia * 1797-1830 : editio quarta a [[Carolus Ludovicus Willdenow|Carolo Ludovico Willdenow]] curata == Bibliographia == * [[Ferdinandus Iacobus Henricus de Mueller|Ferdinandus de Mueller]], ''Index perfectus ad Caroli Linnaei species plantarum''. Melburniae, 1880 [http://archive.org/details/indexperfectusad01muel Textus apud archive.org] * Clive A. Stace, ''Plant taxonomy and biosystematics''. Cantabrigiae: Cambridge University Press, 1991 [http://books.google.com/books?id=VfQnuwh3bw8C&pg=PA17&source=gbs_toc_r&cad=0_0 Paginae selectae] {{NexInt}} * {{fn|LSP1}} (formula ad editionem primam in paginis Vicipaediae citandam) == Nexus externi == * ''[http://webarchive.loc.gov/all/20090403040509/http://www.botanicus.org/title/b12069590 Species plantarum]'': editio interretialis apud botanica.org * ''[http://www.biodiversitylibrary.org/bibliography/669#/summary Species plantarum]'': editio interretialis apud ''Biodiversity Heritage Library'' * [http://books.google.fr/books?id=PtYnAAAAYAAJ&printsec=frontcover&dq=Linnaei+Species+plantarum&source=gbs_book_other_versions_r&cad=6#v=onepage&q=&f=false ''Species plantarum'' vol. 1] et [http://books.google.fr/books?id=5tsnAAAAYAAJ&printsec=frontcover&dq=Linnaei+Species+plantarum&source=gbs_book_other_versions_r&cad=6#v=onepage&q=&f=false vol. 2] apud Google Books * [https://web.archive.org/web/20141019055545/http://www.linnaeuslink.org/search/results?query=Species+Plantarum Linnaeus Link Union Catalogue] [[Categoria:Scripta 1753]] [[Categoria:Taxinomia Linnaeana]] [[Categoria:Plantae|+]] [[Categoria:Libri botanici]] [[Categoria:Sueciae scripta]] [[Categoria:Litterae Latinae recentioris aevi]] 2om6a4e8e4g5eq24hfgobx0lj8x6c6s Michael Miramón 0 79028 3970984 3902244 2026-07-08T16:24:51Z Archaeodontosaurus 19638 3970984 wikitext text/x-wiki {{Augenda|2025|7}} [[Fasciculus:(Padova) Ritratto del generale don Miguel de Miramon, 1867 - T.Sanchez - Museo Bottacin, in Palazzo Zuckermann.jpg|thumb|Michael Miramón]] '''Michael Miramón''' ([[Hispanice]] ''Michel Miramón'', [[Mexicopolis|Mexicopoli]] natus die [[29 Septembris]] [[1831]]; una cum imperatore [[Maximilianus I (imperator Mexici)|Maximiliano I]] necatus [[Queretarum|Queretari]] die [[19 Iunii]] [[1867]]) fuit politicorum peritus [[Mexicum|Mexicanus]], qui a die [[2 Februarii]] [[1859]] usque ad diem [[12 Augusti]] [[1860]] a die [[15 Augusti]] [[1860]] usque ad diem [[24 Decembris]] [[1860]] Mexici praeses fuit. {{bio-stipula}} {{Praesides Mexici}} {{DEFAULTSORT:Miramon, Michael}} [[Categoria:Praesides Mexici]] [[Categoria:Nati 1831]] [[Categoria:Mortui 1867]] [[Categoria:Necati]] ob3nivphlob41gwh7ee3da4emys1mh1 Tabula Capuana 0 81314 3971011 2435799 2026-07-08T22:16:42Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971011 wikitext text/x-wiki {{L}} '''Tabula Capuana''' seu '''Tegula Capuana''', textorum [[lingua Etrusca|Etruscorum]] secundus quod ad longitudinem pertinet, in tegula fictili (60 × 50 cm.) inscribitur. Tegula anno [[1898]] reperta est in coemeterio [[Capua]]e; [[Berolinum|Berolini]] hodie servatur. [[Calendarium]] rituale praebet lacunosum, e quo verba fere 300 legi possunt, in columnas decem digestum ob decem menses calendarii archaici. Sacrificia ordinantur deis inferis [[Lethan]], [[Laran]], [[Tin]], [[Thanr]], deaeque matri [[Uni]]. Eruditi formam litterarum [[Campania|Campanam]] esse credunt annoque circiter 470 a.C.n. scriptam. ==Nexus externi == *[https://web.archive.org/web/20060712094152/http://spazioinwind.libero.it/popoli_antichi/Etruschi/tegola.html De tabula Capuana] {{Ling|Italiane}} == Bibliographia == * Mauro Cristofani, ''Tabula Capuana: un calendario festivo di età arcaica''. Florentiae, 1995 * Nancy Thomson de Grummond, [[Erica Simon|Erika Simon]], ''The Religion of the Etruscans'' (Austin: University of Texas Press, 2006. ISBN 0-292-70687-1) pp. 11-12 [http://books.google.fr/books?id=hQtbJyFCd40C&pg=PA10&lpg=PA10&dq=Liver+piacenza+text&source=bl&ots=QHtA4Osynj&sig=2_bpw4sRhs7TcOyWYsnyegEiU08&hl=fr&ei=1Z4NS_XAI5K64Qbu7PWFBA&sa=X&oi=book_result&ct=result&resnum=6&ved=0CCQQ6AEwBTgU#v=onepage&q=Liver%20piacenza%20text&f=false Paginae selectae] * Francesco Roncalli, ''Scrivere etrusco'' (1985) [[Categoria:Litterae Etruscae]] [[Categoria:Italiae scripta]] [[Categoria:Scripta saeculo 5 a.C.n.]] [[Categoria:Calendaria]] [[Categoria:Capua (antiqua)]] idtn6afrnzzfvi4v9kkn0n3hsgyotvi Georgius Henricus Maria Kirstein 0 90030 3971001 2849567 2026-07-08T21:01:24Z SajoR 56247 3971001 wikitext text/x-wiki [[Fasciculus:Bischof Heinrich Maria Kirstein JS.jpg |thumb|Georgius Henricus Maria Kirstein]] [[Fasciculus:Coat of arms of Georg Heinrich Maria Kirstein.svg|thumb]] ''' Georgius Henricus Maria Kirstein''' ([[Moguntiacum|Moguntiaci]] natus die [[2 Iulii]] [[1858]]; ibidem mortuus die [[15 Aprilis]] [[1921]]) fuit [[presbyter]] [[Germania|Germanicus]] et ab anno [[1904]] usque ad annum [[1921]] [[Moguntiacum|Moguntiaci]] [[episcopus]] ([[Dioecesis Moguntina|dioecesis Moguntinus]]). == Nexus externi == * {{CathHierBishop|kirstein}} {{bio-stipula}} {{episcopi Moguntini}} {{Lifetime|1858 |1921|Kirstein, Georgius Henricus Maria}} [[Categoria:Incolae Germaniae]] [[Categoria:Episcopi Moguntiaci]] jkqm4w18ni36bjzrjiky2lmc2ukyjoi Henricus Brück 0 90031 3971048 3182768 2026-07-09T05:03:28Z SajoR 56247 3971048 wikitext text/x-wiki [[Fasciculus:Bischof Dr. Heinrich Brück 3 JS.jpg |thumb|Henricus Brück]] [[Fasciculus:Coat of arms of Heinrich Brück.svg|thumb]] ''' Henricus Brück''' (natus in ''Bingen'' die [[25 Octobris]] [[1831]]; Moguntiaci mortuus die [[5 Novembris]] [[1903]]) fuit [[presbyter]] [[Germania|Germanicus]] et ab anno [[1899]] usque ad annum [[1903]] [[Moguntiacum|Moguntiaci]] [[episcopus]] ([[Dioecesis Moguntina|dioecesis Moguntinus]]). == Nexus externi == * {{CathHierBishop|bruck}} * {{PND|119264609}} * {{CathEnc|03004a|Biographia}} {{bio-stipula}} {{episcopi Moguntini}} {{Lifetime|1831|1903|Brück, Henricus}} [[Categoria:Incolae Germaniae]] [[Categoria:Episcopi Moguntiaci]] efm9mggohl7nz27aixk1ku5zc79lfjm 3971052 3971048 2026-07-09T06:16:33Z Bartholomite 116968 3971052 wikitext text/x-wiki {{Capsa hominis Vicidatorum}} {{res|Henricus Brück}} (vulgo ''Heinrich''; natus [[Bingium|Bingii]] die [[25 Octobris]] [[1831]]; Moguntiaci mortuus die [[5 Novembris]] [[1903]]) fuit [[presbyter]] [[Germania|Germanicus]] et ab anno [[1899]] usque ad annum [[1903]] [[Moguntiacum|Moguntiaci]] [[episcopus]] ([[Dioecesis Moguntina|dioecesis Moguntinus]]). == Nexus externi == {{CommuniaCat|Heinrich Brück|Henricum Brück}} * {{CathHierBishop|bruck}} * {{PND|119264609}} * {{CathEnc|03004a|Biographia}} {{bio-stipula}} {{episcopi Moguntini}} {{Anni vitae|1831|1903|Brück, Henricus}} [[Categoria:Incolae Germaniae]] [[Categoria:Episcopi Moguntiaci]] 9395l39xs6m5b0fj413s5vsypfdx4vs Tempus glaciale recentissimum 0 92386 3971025 3707967 2026-07-09T00:38:14Z InternetArchiveBot 139091 Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5 3971025 wikitext text/x-wiki {{Latinitas|-1}} [[Fasciculus:IceAgeEarth.jpg|thumb|300px|Adumbratio aevi glacialis recentissimi tempore maximi glacialis. Secundum: {{cite journal |author=Thomas J. Crowley |title=Ice age terrestrial carbon changes revisited |journal=Global Biogeochemical Cycles |volume=9 |issue=3 |pages=377–389 |year=[[1995]] |doi=10.1029/95GB01107 |url=http://www.agu.org/pubs/crossref/1995/95GB01107.shtml}}{{Nexus deficit|date=July 2026 |bot=InternetArchiveBot |fix-attempted=yes }}]] [[Fasciculus:Last Glacial Maximum Vegetation Map.svg|thumb|Genera herbarum tempore [[maximum glaciale recentissimum|maximi glacialis recentissimi]].]] [[Fasciculus:Ice-core-isotope.png|thumb|Recentissimum aevum glaciale, secundum indicia in [[nucleus glaciei|nucleis glaciei]]<!--=ice cores--> ex [[Antarctica]] et [[Groenlandia]] capta.]] [[Fasciculus:Antarctica glacial hg.svg|thumb|Maximus [[glacies|glaciei]] [[Antarctica]]e ambitus abhinc annorum 21&thinsp;000.]] '''Aevum glaciale recentissimum''' fuit recentissimum [[aevum geologicum]] intra [[glaciatio quaternaria|aevum glaciale praesens]], quod per ultima [[Pleistocaenum|Pleistocaeni]] tempora factum est, abhinc [[annus|annorum]] circa 110&thinsp;000 ad 10&thinsp;000.<ref>{{cite web |author=Clayton, Lee; Attig, John W.; Mickelson, David M.; Johnson, Mark D.; Syverson, Kent M. |title=Glaciation of Wisconsin |publisher=Dept. Geology, University of Wisconsin |url=http://www.geology.wisc.edu/~davem/abstracts/06-1.pdf}}</ref> Per hoc tempus erant nonnullae mutationes inter progressum et regressum [[glaciarium|molium conglaciatarum]]. [[Maximum Glaciale Recentissimum|Ambitus maximus]] [[glaciatio]]nis fuit abhinc annorum circa 18&thinsp;000. Cum generalia refrigerandi et progressus montium glacialium orbis terrarum exemplaria similia fuissent, variationes loci in progressu et regressu molium conglaciatarum comparationes singulorum a [[continens|continente]] ad continentem impediunt (pro descrepantiis, vide imaginem indiciorum nuclei glaciei. In conspectu [[archaeologia]]e humanae, aevum glaciale recentissimum per aeva [[Palaeolithicum]] et [[Mesolithicum]] factum est. == Notae == <references/> == Bibliographia == * {{cite book |author=Bowen, D. Q. |title=Quaternary geology: a stratigraphic framework for multidisciplinary work |publisher=Pergamon Press |location=Oxoniae |year=[[1978]] |isbn=978-0-08-020409-3 }} * {{cite book |editor1-last=Ehlers |editor1-first=J. |editor2-last=Gibbard |editor2-first=P.L. |title=Quaternary Glaciations: Extent and Chronology 2: Part II North America |publisher=Elsevier |location=Amsterdam |year=[[2004]] |isbn=0-444-51462-7 |ref={{harvid|Ehlers|Gibbard|2004 II}} |url=http://books.google.com/books?id=2xpIEPH7RW4C}} * {{cite book |editor1-last=Ehlers |editor1-first=J. |editor2-last=Gibbard |editor2-first=P.L. |title=Quaternary Glaciations: Extent and Chronology 3: Part III: South America, Asia, Africa, Australia, Antarctica |publisher=Elsevier |location=Amsterdam |year=[[2004]] |isbn=0-444-51593-3 |ref={{harvid|Ehlers|Gibbard|2004 III}} |url=http://books.google.com/books?id=2xpIEPH7RW4C}} * {{cite book |author=Gillespie, A. R., Porter, S.C.; Atwater, B.F. |title=The Quaternary Period in the United States [of America] |series=Developments in Quaternary Science |volume=1 |publisher=Elsevier |location=Amsterdam |year=[[2004]] |isbn=978-0-444-51471-4 }} * {{cite book |author=Harris, A. G.; Tuttle, E.; Tuttle, S. D. |title=Geology of National Parks |publisher=Kendall/Hunt |location=Iowa |year=[[1997]] |isbn=0-7872-5353-7 |edition=5th}} * {{cite journal |author=Kuhle, Matthias. |authorlink= |title=The Pleistocene Glaciation of Tibet and the Onset of Ice Ages — An Autocycle HypothesisGeoJournal |journal=GeoJournal |volume=17 |issue=4 |pages=581–96 |year=[[1988]] |doi=10.1007/BF00209444 |url=http://www.springerlink.com/content/g308474216534471/}} * {{cite book |editor=Mangerud, J.; Ehlers, J.; Gibbard, P. |title=Quaternary Glaciations : Extent and Chronology 1: Part I Europe |publisher=Elsevier |location=Amsterdam |year=2004 |isbn=0-444-51462-7 |url=http://books.google.com/books?id=mmPwAAAAMAAJ}} * {{cite journal |author=Sibrava, V.; Bowen, D.Q; Richmond, G.M. |title=Quaternary Glaciations in the Northern Hemisphere |journal=Quaternary Science Reviews |volume=5 |pages=1–514 |year=1986 |doi=10.1016/S0277-3791(86)80002-6 }} * {{cite book |author=Pielou, E. C. |title=After the Ice Age : The Return of Life to Glaciated North America |publisher=University Of Chicago Press |location=Chicago IL |year=1991 |isbn=0-226-66812-6 }} {{NexInt}} * [[Aevum glaciale]] == Nexus externi == {{CommuniaCat|Quaternary Ice Ages|Aevum Glaciale 72K-12K}} * [https://web.archive.org/web/20080203104337/http://www.nationalatlas.gov/articles/geology/a_glacial.html National Atlas of the USA: Wisconsin Glaciation in North America,] apud nationalatlas.gov * {{cite journal |author=Ray, N.; Adams, J. M. |title=A GIS-based Vegetation Map of the World at the Last Glacial Maximum (25,000–15,000 BP) |journal=Internet Archaeology |volume=11 |year=[[2001]] |url=http://www.ncdc.noaa.gov/paleo/pubs/ray2001/ray_adams_2001.pdf |format=PDF}} [[Categoria:Aeva glacialia]] [[Categoria:Holocaenum]] [[Categoria:Pleistocaenum]] [[Categoria:Palaeolithicum]] [[Categoria:Mesolithicum]] 15x3708w7yi2uwhj896igqpab6jntpu Suilla 0 93004 3971002 3751668 2026-07-08T21:43:26Z LilyKitty 18316 de interdictione religiosa et taenia solium 3971002 wikitext text/x-wiki [[Fasciculus:Wax pork.jpg|thumb|[[Ars coquinaria Sinensis]]: ''là ròu'' (蜡肉, "porcina sale condita")]] [[Caro]] '''suilla'''<ref>"caro suilla": [[Varro]], ''[[De re rustica (Varro)|De re rustica]]'' 2.4.1; "caro suina" ibidem 2.4.8</ref> sive '''porcina'''<ref>"Assas iecur porcinum": ''[[Apicius sive De re coquinaria]]'' 2.1.4; "mittes longaones porcinos ex iure Terentino farsos": ibidem 4.2.13</ref> e [[porcus|porco]] domestico producitur. Caro [[porcellina]] ex iuvenilibus lacte pastis producitur. In varias edibiles partes suilla dividitur. In [[Europa]] et in [[Asia orientalis|Asia Orientali]] crebro manducatissima caro est. In [[Germania]] anno [[2004]] consumptio pro capite 39,5 kg(39,3 kg anno [[2003]]/tota carnica consumptio 61,3 kg) fuit. Contra, in aliquibus religionibus (velut [[Islamismus|Islamismo]] et [[Iudaismus|Iudaismo]]) suilla omnino vetitur. [[Porcus|Porci]] in praesenti circiter 180 dies nati et cum pondere inter 95 et 110 kg immolantur. In [[religio Iudaica|religione Iudaica]]<ref>Apud [[Liber Leviticus|Leviticum]] (cap.11,8)</ref> et [[religio Islamica|religione Islamica]],<ref>Apud [[Alcoranus|Alcoranum]] (cap.2,173)</ref> suillam edere interdictum est. == Civitates productoriae == [[Fasciculus:Schwein-Ganz.svg|thumb|Suillae disiunctionis schema.]] Maxima suillae productoria natio [[Res Publica Popularis Sinarum|Sinae]] constituunt, quibus [[CFA|Civitates Foederatae]] et [[Germania]] sequuntur. Aliae ponderis [[Europa]]eae productoriae nationes [[Hispania]], [[Francia]], [[Polonia]] et [[Dania]] sunt. {| class="wikitable" |+ Maxima suillae productoriae nationes in mundo ([[2004]]) |----- bgcolor=#DDDDDD ! &nbsp;Ordo&nbsp; ! Natio ! &nbsp;Productio&nbsp;<br />(milibus [[tonna]]rum) ! &nbsp;Ordo&nbsp; ! Natio ! &nbsp;Productio&nbsp;<br />(milibus [[tonna]]rum) |----- bgcolor=#EEEEEE | &nbsp; &nbsp;1 || [[Res Publica Popularis Sinarum|Sinae]]&nbsp; &nbsp;|| 47 753 || &nbsp; &nbsp;10 || [[Russia]]&nbsp; &nbsp; || 1 750 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;2 || [[CFA|Civitates Foederatae]]&nbsp; &nbsp; || 9 332 || &nbsp; &nbsp;11 || [[Vietnamia]]&nbsp; &nbsp; || 1 700 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;3 || [[Germania]]&nbsp; &nbsp; || 4 366 || &nbsp; &nbsp;12 || [[Italia]]&nbsp; &nbsp; || 1 618 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;4 || [[Hispania]]&nbsp; &nbsp; || 3 335 || &nbsp; &nbsp;13 || [[Philippinae]]&nbsp; &nbsp; || 1 400 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;5 || [[Brasilia]]&nbsp; &nbsp; || 3 110 || &nbsp; &nbsp;14 || [[Iaponia]]&nbsp; &nbsp; || 1 25 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;6 || [[Francia]]&nbsp; &nbsp; || 2 290 || &nbsp; &nbsp;15 || [[Nederlandia]]&nbsp; &nbsp; || 1 245 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;7 || [[Polonia]]&nbsp; &nbsp; || 2 100 || &nbsp; &nbsp;16 || [[Respublica Coreana]]&nbsp; &nbsp; || 1 100 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;8 || [[Canada]]&nbsp; &nbsp; || 1 970 || &nbsp; &nbsp;17 || [[Mexicum]]&nbsp; &nbsp; || 1 100 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;9 || [[Dania]]&nbsp; &nbsp; || 1 762 || &nbsp; &nbsp;18 || [[Belgia]]&nbsp; &nbsp; || 1 050 |----- bgcolor=#EEEEEE |} Fons: [[Handelsblatt]] – ''Die Welt in Zahlen'' ([[2005]]) == Notae == <references /> == Bibliographia == ; Fontes antiquiores * 1796 : [[Yuan Mei]], ''[[Praecepta ex horto plenitudinis|Suiyuan shidan]]'' (Sean J. S. Chen, ed. et interpr., "[https://wayoftheeating.wordpress.com/category/suiyuan-shidan/pork/ 持牲單 = Pork]") * 1803 : [[Grimod de la Reynière]] et al., ''[[Almanach des gourmands]]'' vol. 1 (2a ed. Lutetiae, 1803) [https://archive.org/details/gri_33125008532588 pp. 25-29] * 1938 : {{ec|id=Montagné (1938)|c="Porc" in [[Prosper Montagné]], ''[[Larousse gastronomique]]'' (Lutetiae: Larousse, 1938) pp. 837-850}} ; Eruditio * "Pork" in {{DalbyAZ|268-269}} * "Pork" in Alan Davidson, ''The Oxford Companion to Food'' (Oxoniae: Oxford University Press, 1999. ISBN 0-19-211579-0) pp. 623-624 * Claudine Fabre-Vassas, ''La Bête singulière''. Lutetiae: Gallimard, 1994. Versio Anglica: ''The Singular Beast''. Novi Eboraci: Columbia University Press, 1997 * Anne-Marie Le Bourg Oulé, "Le ''sent pourqui'' ou la cuisine du porc dans le sud-ouest de la France" in Alan Davidson, ed., ''National and Regional Styles of Cookery: Proceedings: Oxford Symposium 1981'' (Londinii: Prospect Books, 1981) {{Google Books|zcNdB_sl2JkC|pp. 179-183}} * "Pig" in Gillian Riley, ''The Oxford Companion to Italian Food'' (Oxonii: Oxford University Press, 2007) pp. 396-400 {{NexInt}} * [[Collegium Porcinae Nationale]] * [[Poc chuc]] * [[Taenia solium]] * [[Tergilla]] == Nexus externi == * Christopher Michel, "[https://www.bonappetit.com/entertaining-style/pop-culture/article/history-pork-poetry A Brief History of Pork in Poetry]" (5 Iunii 2014) apud ''Bon Appétit'' {{Myrias|Anthropologia}} [[Categoria:Carnes]] [[Categoria:Sus]] [[Categoria:Fercula porcina|!]] 857nnmtdoddy73rj8nu0jjym2skj66x 3971007 3971002 2026-07-08T22:02:01Z IacobusAmor 1163 3971007 wikitext text/x-wiki [[Fasciculus:Wax pork.jpg|thumb|[[Ars coquinaria Sinensis]]: ''là ròu'' (蜡肉, "porcina sale condita")]] [[Caro]] '''suilla'''<ref>"caro suilla": [[Varro]], ''[[De re rustica (Varro)|De re rustica]]'' 2.4.1; "caro suina" ibidem 2.4.8</ref> sive '''porcina'''<ref>"Assas iecur porcinum": ''[[Apicius sive De re coquinaria]]'' 2.1.4; "mittes longaones porcinos ex iure Terentino farsos": ibidem 4.2.13</ref> e [[porcus|porco]] domestico producitur. Caro [[porcellina]] ex iuvenilibus lacte pastis producitur. In varias edibiles partes suilla dividitur. In [[Europa]] et in [[Asia orientalis|Asia Orientali]] crebro manducatissima caro est. In [[Germania]] anno [[2004]] consumptio pro capite 39,5 kg(39,3 kg anno [[2003]]/tota carnica consumptio 61,3 kg) fuit. Contra, in aliquibus religionibus (velut [[Islamismus|Islamismo]] et [[Iudaismus|Iudaismo]]) suilla omnino vetitur. [[Porcus|Porci]] in praesenti circiter 180 dies nati et cum pondere inter 95 et 110 kg immolantur. In [[religio]]nibus [[religio Iudaica|Iudaica]]<ref>Apud [[Liber Leviticus|Leviticum]] (cap.11,8).</ref> et [[religio Islamica|Islamica]],<ref>Apud [[Alcoranus|Alcoranum]] (cap.2,173).</ref> suillam edere interdicitur. == Civitates productoriae == [[Fasciculus:Schwein-Ganz.svg|thumb|Suillae disiunctionis schema.]] Maxima suillae productoria [[civitas]] [[Res Publica Popularis Sinarum|Sinae]] constituunt, quibus [[CFA|Civitates Foederatae]] et [[Germania]] sequuntur. Aliae ponderis [[Europa]]eae productoriae civitates [[Hispania]], [[Francia]], [[Polonia]] et [[Dania]] sunt. {| class="wikitable" |+ Maxima suillae productoriae nationes in mundo ([[2004]]) |----- bgcolor=#DDDDDD ! &nbsp;Ordo&nbsp; ! Natio ! &nbsp;Productio&nbsp;<br />(milibus [[tonna]]rum) ! &nbsp;Ordo&nbsp; ! Natio ! &nbsp;Productio&nbsp;<br />(milibus [[tonna]]rum) |----- bgcolor=#EEEEEE | &nbsp; &nbsp;1 || [[Res Publica Popularis Sinarum|Sinae]]&nbsp; &nbsp;|| 47 753 || &nbsp; &nbsp;10 || [[Russia]]&nbsp; &nbsp; || 1 750 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;2 || [[CFA|Civitates Foederatae]]&nbsp; &nbsp; || 9 332 || &nbsp; &nbsp;11 || [[Vietnamia]]&nbsp; &nbsp; || 1 700 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;3 || [[Germania]]&nbsp; &nbsp; || 4 366 || &nbsp; &nbsp;12 || [[Italia]]&nbsp; &nbsp; || 1 618 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;4 || [[Hispania]]&nbsp; &nbsp; || 3 335 || &nbsp; &nbsp;13 || [[Philippinae]]&nbsp; &nbsp; || 1 400 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;5 || [[Brasilia]]&nbsp; &nbsp; || 3 110 || &nbsp; &nbsp;14 || [[Iaponia]]&nbsp; &nbsp; || 1 25 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;6 || [[Francia]]&nbsp; &nbsp; || 2 290 || &nbsp; &nbsp;15 || [[Nederlandia]]&nbsp; &nbsp; || 1 245 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;7 || [[Polonia]]&nbsp; &nbsp; || 2 100 || &nbsp; &nbsp;16 || [[Respublica Coreana]]&nbsp; &nbsp; || 1 100 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;8 || [[Canada]]&nbsp; &nbsp; || 1 970 || &nbsp; &nbsp;17 || [[Mexicum]]&nbsp; &nbsp; || 1 100 |----- bgcolor=#EEEEEE | &nbsp; &nbsp;9 || [[Dania]]&nbsp; &nbsp; || 1 762 || &nbsp; &nbsp;18 || [[Belgia]]&nbsp; &nbsp; || 1 050 |----- bgcolor=#EEEEEE |} Fons: [[Handelsblatt]] – ''Die Welt in Zahlen'' ([[2005]]) == Notae == <references /> == Bibliographia == ; Fontes antiquiores * 1796 : [[Yuan Mei]], ''[[Praecepta ex horto plenitudinis|Suiyuan shidan]]'' (Sean J. S. Chen, ed. et interpr., "[https://wayoftheeating.wordpress.com/category/suiyuan-shidan/pork/ 持牲單 = Pork]") * 1803 : [[Grimod de la Reynière]] et al., ''[[Almanach des gourmands]]'' vol. 1 (2a ed. Lutetiae, 1803) [https://archive.org/details/gri_33125008532588 pp. 25-29] * 1938 : {{ec|id=Montagné (1938)|c="Porc" in [[Prosper Montagné]], ''[[Larousse gastronomique]]'' (Lutetiae: Larousse, 1938) pp. 837-850}} ; Eruditio * "Pork" in {{DalbyAZ|268-269}} * "Pork" in Alan Davidson, ''The Oxford Companion to Food'' (Oxoniae: Oxford University Press, 1999. ISBN 0-19-211579-0) pp. 623-624 * Claudine Fabre-Vassas, ''La Bête singulière''. Lutetiae: Gallimard, 1994. Versio Anglica: ''The Singular Beast''. Novi Eboraci: Columbia University Press, 1997 * Anne-Marie Le Bourg Oulé, "Le ''sent pourqui'' ou la cuisine du porc dans le sud-ouest de la France" in Alan Davidson, ed., ''National and Regional Styles of Cookery: Proceedings: Oxford Symposium 1981'' (Londinii: Prospect Books, 1981) {{Google Books|zcNdB_sl2JkC|pp. 179-183}} * "Pig" in Gillian Riley, ''The Oxford Companion to Italian Food'' (Oxonii: Oxford University Press, 2007) pp. 396-400 {{NexInt}} * [[Collegium Porcinae Nationale]] * [[Poc chuc]] * [[Taenia solium]] * [[Tergilla]] == Nexus externi == * Christopher Michel, "[https://www.bonappetit.com/entertaining-style/pop-culture/article/history-pork-poetry A Brief History of Pork in Poetry]" (5 Iunii 2014) apud ''Bon Appétit'' {{Myrias|Anthropologia}} [[Categoria:Carnes]] [[Categoria:Fercula porcina|!]] [[Categoria:Sus]] pdxul6gcfuimign08vtn338dkvk9ifs Nehemias Grew 0 107798 3970985 3970861 2026-07-08T17:26:04Z Andronikos Komnenos 1527 /* Scripta */ 3970985 wikitext text/x-wiki {{Capsa hominis Vicidata}} [[Fasciculus:Recueil tp 1679.jpg|thumb|upright=1|''Recueil d'expériences et observations'' (1679): titulus]] {{res|Nehemias Grew}}, [[Anglice]] ''Nehemiah'' ({{safesubst:Nexus ad paginam creandam creatamve|Manduessedum (vicus)|Manduessedi|en|qid=Q2080475}} [[Warwicensis comitatus]] baptizatus die [[26 Septembris]] [[1641]]; [[Londinium |Londinii]] die [[25 Martii]] [[1712]] mortuus) fuit [[biologia|biologus]] et [[medicus]] [[Anglia |Anglus]]. Socius fuit [[Regalis Societas Londini|Regalis Societatis Londiniensis]]. De [[anatomia plantarum|anatomia]] et [[biochemia]] plantarum praesertim quaerebat. Studia sua eodem tempore quo [[Marcellus Malpighi]] [[Italia|Italus]] de physiologia plantarum, [[Robertus Boyle]] [[Hibernia|Hibernus]] de [[sapor]]ibus et [[odor]]ibus, [[Antonius van Leeuwenhoek]] [[Nederlandia|Batavus]] de anatomia microscopica, [[Daniel Coxe (pater)|Daniel Coxe]] de [[thermae|aquis mineralibus]] persecutus est; qui omnes, sicut et ille, dissertationes suae per Regalem Societatem divulgari iubebant. == Scripta == * 1671 : ''Disputatio medico-physica inauguralis, de liquore nervoso''. Lugduni Batavorum: apud Elsevirios {{Google Books|o6RS21Lg0KwC}} * 1672 : ''The anatomy of vegetables begun, with a general account of vegetation founded thereon''. ; [https://archive.org/details/anatomyofvegetab00grew/page/n5/mode/2up textus]; [https://archive.org/details/b3032337x/page/n11/mode/2up aliud exemplar] * 1673 : ''An idea of a phytological history propounded, together with a continuation of the anatomy of vegetables ...'' ; [https://archive.org/details/bim_early-english-books-1641-1700_an-idea-of-a-phytologica_grew-nehemiah_1673 textus] * 1675 : ''Anatomie des plantes ...'' Lutetiae; [https://babel.hathitrust.org/cgi/pt?id=ucm.5327726922 Textus] {{Google Books|5dsAZwWh9gYC|editio 1679}} * 1675 : ''The comparative anatomy of trunks, together with an account of their vegetation grounded thereupon''. ; [https://archive.org/details/bim_early-english-books-1641-1700_the-comparative-anatomy-_grew-nehemiah_1675/page/n1/mode/2up textus] * 1675 : ''A discourse made before the Royal Society ... 1674, concerning the nature, causes, and power of mixture''. ; [https://archive.org/details/bim_early-english-books-1641-1700_a-discourse-made-before-_grew-nehemiah_1675/page/n1/mode/2up textus] * 1676 : ''The comparative anatomy of the stomachs and guts begun''. ; [https://quod.lib.umich.edu/e/eebo2/B03528.0001.001 editio interretialis apud Michiganenses] * 1678 : '' Experiments in consort of the luctation arising from the affusion of several menstruums upon all sorts of bodies ...'' {{Google Books|a-00AQAAMAAJ|editio fac-simile (?)}} [https://archive.org/details/bim_early-english-books-1641-1700_experiments-in-consort-_grew-nehemiah_1678/page/n1/mode/2up exemplar difficil|e]; [https://quod.lib.umich.edu/e/eebo/A42105.0001.001 editio interretialis apud Michiganenses] * 1679 (cum [[Robertus Boyle|Roberto Boyle]], [[Antonius van Leeuwenhoek|Antonio van Leeuwenhoek]]) : ''[[Recueil d'experiences et observations|Recueil d'experiences et observations sur le combat qui procede du melange des corps. Sur les saveurs, sur les odeurs, sur le sang, sur le lait ...]]''. Lutetiae: Estienne Michallet {{Google Books|MnJ-5NxbQvoC}}. -- Reimpressum 1698, editore Bartholemaeo Girin; [https://archive.org/details/bub_gb_C8nYxJt1bkoC/ Textus] {{Google Books|C8nYxJt1bkoC}} * 1681 : ''Musaeum Regalis Societatis, or, A catalogue & description of the natural and artificial rarities belonging to the Royal Society and preserved at Gresham Colledge; whereunto is subjoyned The comparative anatomy of stomachs and guts''. Londinii: Hugh Newman; [https://archive.org/details/gri_33125010543805/page/n5/mode/2up textus] -- Reimpressum 1685, 1686; [https://archive.org/details/b30337215/page/n15/mode/2up textus impressionis 1686] -- Nova editio, 1694; [https://archive.org/details/musaeumregalisso00roya/page/n9/mode/2up textus editionis 1694] * 1682 : ''The anatomy of plants, with An idea of a philosophical history of plants, and several other lectures''. ; [https://archive.org/details/gri_33125011116049 textus]; [https://archive.org/details/b3032435x_0001/page/n15/mode/2up aliud exemplar]; [https://quod.lib.umich.edu/e/eebo/A42100.0001.001 editio interretialis apud Michiganenses] * 1683? : ''Dissertatio quae complectitur nova experimenta utilesque observationes circa aquam marinam ... dulcoratam''. ; [https://archive.org/details/bim_early-english-books-1641-1700_dissertatio-quae-complec_grew-nehemiah_1684/ textus] * 1683 : ''New experiments and useful observations concerning sea-water made fresh ...''. ; [https://archive.org/details/b30332205 textus] -- Reimpressum 1684; [https://archive.org/details/bim_early-english-books-1641-1700_new-experiments-and-use_grew-nehemiah_1684 textus impressionis 1684] * 1684 : ''Nouvelles experiences et utiles remarques sur l'eau de mer dessalee''. ; [https://archive.org/details/bim_early-english-books-1641-1700_nouvelles-experiences-_grew-nehemiah_1684 textus] * 1691 : ''Anatomie et âme des plantes ... nouvelle edition''. Lugduni Batavorum {{Google Books|NRM7AAAAcAAJ}} * 1691 : ''Recueil d'experiences et observations sur le combat qui procede du melange des corps. Sur les saveurs, sur les odeurs, sur le sang, sur le lait ...''. Lugduni Batavorum: Pierre vander Aa {{Google Books|WxM7AAAAcAAJ}} -- Editio Parisiensis 1698: [https://babel.hathitrust.org/cgi/pt?id=ucm.5327727338 textus apud Hathi Trust]; [https://archive.org/details/bub_gb_C8nYxJt1bkoC/page/n3/mode/2up alibi] * 1695 : ''[[Tractatus de salis cathartici amari natura|Tractatus de salis cathartici amari, in aquis Ebeshamensibus et hujusmodi aliis, contenti natura et usu]]''. Londini: S. Smith & B. Walford; [https://archive.org/details/b30332047/page/n9/mode/2up textus] * 1697 (versio pirata) : ''[[Tractatus de salis cathartici amari natura|A treatise of the nature and use of the bitter purging salt obtain'd in Epsom, and such other waters]]''. Londinii: Francis Moult * 1697 (Robert Bridges, interpr.) : ''[[Tractatus de salis cathartici amari natura|A treatise of the nature and use of the bitter purging salt, easily known from all counterfeits by its bitter taste]]''. Londinii: Walter Kettilby; [https://archive.org/details/b30324397/page/n9/mode/2up Textus] * 1701 : ''Cosmologia sacra, or a discourse of the universe as it is the creature and kingdom of God''. ; [https://archive.org/details/cosmologiasacrao00grewuoft/page/n7/mode/2up textus] * 2012 (Julian Hoppit, ed.) : ''Nehemiah Grew and England's economic development : The means of the most ample increase of the wealth and strength of England 1706-7''. Oxonii: Oxford University Press for the British Academy; [https://archive.org/details/nehemiahgrewengl0000grew/page/n5/mode/2up exemplar mutuabile] == Bibliographia == * Agnes Arber, "[https://archive.org/details/b21931197/page/n63/mode/2up Nehemiah Grew]" in F. W. Oliver, ed., ''Makers of British botany : a collection of biographies by living botanists'' (Cantabrigiae: Cambridge University Press, 1913) pp. 44-64 * Agnes Arber, "Nehemiah Grew (1641–1712) and Marcello Malpighi (1628–1694): an essay in comparison" in ''Isis'' vol. 34 (1942) pp. 7–16 * Jeanne Bolam, "The Botanical Works of Nehemiah Grew, FRS (1641-1712)" in ''Notes and Records of the Royal Society'' vol. 27 (1972-1973) pp. 219-231 * Adalbert von Hanstein, ''Über die Begründung der Pflanzenanatomie durch Nehemia Grew und Marcello Malpighi''. Bonnae: Georgi, 1886; [https://www.digitale-sammlungen.de/en/view/bsb11882344 Textus apud Monacenses] * Michael Hunter, "The Social Bias and Changing Fortunes of an Early Scientific Institution: An Analysis of the Membership of the Royal Society, 1660-1685" in ''Notes and Records of the Royal Society'' vol. 31 (1976-1977) pp. 9-114 * Michael Hunter, "Early Problems in Professionalizing Scientific Research: Nehemiah Grew (1641-1712) and the Royal Society, With an Unpublished Letter to Henry Oldenburg" in ''Notes and Records of the Royal Society'' vol. 36 (1981-1982) pp. 189-209 * Michael Hunter, "Grew, Nehemiah (bap. 1641, d. 1712)" (2004/2015) in {{ODNB}} * William LeFanu, ''Nehemiah Grew, MD, FRS: A Study and Bibliography of His Writings''. Winchester: St. Paul's Bibliographies, 1990 * Anna Marie Roos, "Nehemiah Grew (1641–1712) and the Saline Chymistry of Plants" in ''Ambix'' vol. 54 (2007) pp. 51-68 * Anna Marie Roos, "The Doctoral Dissertation of Nehemiah Grew (1641–1712): The Nervous Fluids and Iatrochymistry in Context" in Anna Marie Roos, Gideon Manning, edd., ''Collected Wisdom of the Early Modern Scholar: Essays in Honor of Mordechai Feingold'' (Springer, 2022) pp. 323-347 * Alex Sakula, '"Doctor Nehemiah Grew (1641-1712) and the Epsom salts" in ''Clio Medica'' vol. 19 (1984) pp. 1-21 * Steven Shapin, ''Changing Tastes: How Things Tasted in the Early Modern Period and How They Taste Now. The Hans Rausing Lecture 2011''. Upsaliae: Uppsale Universitet, 2011 (contio in interrete reperienda) * John Shower, ''Enoch's translation: a funeral sermon upon the sudden death of Dr. Nehemiah Grew''. Londinii, 1712; [https://archive.org/details/b30509750/page/n5/mode/2up textus] == Nexus externi == {{Fontes biographici}} {{CommuniaCat|Nehemiah Grew|Nehemias Grew}} * [https://catalogues.royalsociety.org/CalmView/Record.aspx?src=CalmView.Persons&id=NA8411&pos=1 De Nehemia Grew] in Archivo Regalis Societatis * "[https://galileo.library.rice.edu/Catalog/NewFiles/grew.html Nehemiah Grew]" apud ''Galileo Project'' * "[https://grokipedia.com/page/Nehemiah_Grew Nehemiah Grew]" apud ''Grokipedia'' {{Anni vitae|1641|1712|Grew, Nehemias}} [[Categoria:Incolae Angliae]] [[Categoria:Medici Britanniae]] [[Categoria:Botanistae Britanniae]] [[Categoria:Socii Regalis Societatis Londiniensis]] 904fya2ycouxd57szkmppdnrx13x1lb Marmore (aquae cadentes) 0 108174 3970996 3838096 2026-07-08T19:27:03Z Carsten Steger 146371 Aerial image of Cascata delle Marmore inserted. 3970996 wikitext text/x-wiki [[Fasciculus:Aerial image of Cascata delle Marmore (view from the northwest).jpg|thumb|Aquae cadentes Marmore.]] '''Aquae cadentes Marmore'''{{FD ref}} ([[Italiane]] ''Cascata delle Marmore'') sunt magna [[aqua cadens|cataracta]] [[Italia|Italica]], quae in [[Vallis Narina|Valle Narina]] in [[Interamna (provincia)|Provincia Interamnensi]] [[Umbria]]e [[Regio Italiae|regionis]], quibus [[Velinus]] in [[Nar (flumen)|Narem]] influit. Artificiosae sunt, nam [[aqua]] Velini per [[canalis|canalem]] adit, qui primo antiquitus anno [[271 a.C.n.]] iussu [[Manius Curius Dentatus|Manii Curii Dentati]] effossus est; ''Cava Curiana'' tunc nuncupabatur. [[Medio aevo]] desertus et destructus est, anno autem [[1601]] iussu [[Clemens VIII (papa)|Clementis Papae VIII]] renovatus, ut ''Cava Clementina.'' {{NexInt}} * [[Interamna Nahars]], * [[Avens]] flumen * [[Nar (flumen)|Nar]] flumen * [[Tiberis]] flumen == Nexus externi == {{CommuniaCat|Cascata delle Marmore|Aquas cadentes Marmore}} {{fontes geographici}} * [http://www.marmorefalls.it Situs interretialis aquarum cadentium proprius.] [[Categoria:Aquae cadentes Italiae]] [[Categoria:Geographia Umbriae]] [[Categoria:Nar (flumen)]] [[Categoria:Provincia Interamnas]] [[Categoria:Tributarii Tiberis]] hlzcqfoc1x61ui1iqpk6b8s557tbpyt 3971005 3970996 2026-07-08T21:59:49Z IacobusAmor 1163 ~ 3971005 wikitext text/x-wiki [[Fasciculus:Aerial image of Cascata delle Marmore (view from the northwest).jpg|thumb|Aquae cadentes Marmore a [[septentrio]]ne et [[occidens|occidente]] visae.]] '''Aquae cadentes Marmore'''{{FD ref}} ([[Italiane]] ''Cascata delle Marmore'') sunt magna [[aqua cadens|cataracta]] [[Italia|Italica]], quae in [[Vallis Narina|Valle Narina]] in [[Interamna (provincia)|Provincia Interamnensi]] [[Umbria]]e [[Regio Italiae|regionis]], quibus [[Velinus]] in [[Nar (flumen)|Narem]] influit. Artificiosae sunt, nam [[aqua]] Velini per [[canalis|canalem]] adit, quae primo antiquitus anno [[271 a.C.n.]] iussu [[Manius Curius Dentatus|Manii Curii Dentati]] effossa est; unde Cava Curiana tunc nuncupabatur. [[Medio aevo]] deserta et destructa est; anno autem [[1601]] iussu [[Clemens VIII (papa)|Clementis Papae VIII]] renovata, inde Cava Clementina appellata. {{NexInt}} * [[Interamna Nahars]] * [[Avens]] flumen * [[Tiberis]] flumen == Nexus externi == {{CommuniaCat|Cascata delle Marmore|Aquas cadentes Marmore}} {{fontes geographici}} * [http://www.marmorefalls.it Situs interretialis aquarum cadentium proprius.] [[Categoria:Aquae cadentes Italiae]] [[Categoria:Geographia Umbriae]] [[Categoria:Nar (flumen)]] [[Categoria:Provincia Interamnas]] [[Categoria:Tributarii Tiberis]] d5kiim706i4dhmz3exa6osrqnzsz2a4 Formula:Parametrum 10 130106 3971016 3970852 2026-07-09T00:27:36Z Grufo 64423 De coloribus secundum &lt;syntaxhighlight&gt;…&lt;/syntaxhighlight&gt; 3971016 wikitext text/x-wiki <includeonly><code style="word-break:break-word;{{safesubst:<noinclude />#ifeq:{{{forma|}}}|plana | border:none;color:#333;background-color:inherit; }}{{safesubst:<noinclude />#if:{{{style|}}}|{{{style}}}}}">&#124;{{safesubst:<noinclude />#ifeq:{{{1|+}}}|{{{1|-}}} | {{safesubst:<noinclude />#if:{{{1|}}} | {{safesubst:<noinclude />#if:{{{color-nominis|+}}} | <span style="{{safesubst:<noinclude />#if:{{{color-nominis|}}}|color:{{{color-nominis}}}|color:#767600}};">{{{1}}}</span> | {{{1}}} }} }}<span style="color: #666;">&#61;</span> }}{{{2|}}}</code></includeonly><noinclude>{{Documentatio}}</noinclude> pjrxuwklleh597equonjaigvsy3n86y 3971017 3971016 2026-07-09T00:30:15Z Grufo 64423 -‘|style=’; -‘|color-nominis=’ 3971017 wikitext text/x-wiki <includeonly><code style="word-break:break-word;color:#333;{{safesubst:<noinclude />#ifeq:{{{forma|}}}|plana | border:none;background-color:inherit; }}">&#124;{{safesubst:<noinclude />#ifeq:{{{1|+}}}|{{{1|-}}} | {{safesubst:<noinclude />#if:{{{1|}}} | <span style="color:#767600;">{{{1}}}</span> }}<span style="color: #666;">&#61;</span> }}{{{2|}}}</code></includeonly><noinclude>{{Documentatio}}</noinclude> aepycaxd9umhomxf2lawaajptutme9s 3971027 3971017 2026-07-09T01:00:44Z Grufo 64423 De forma plana 3971027 wikitext text/x-wiki <includeonly><{{safesubst:<noinclude />#ifeq:{{{forma|}}}|plana|span|code}} style="word-break:break-word;">&#124;{{safesubst:<noinclude />#ifeq:{{{1|+}}}|{{{1|-}}} | {{safesubst:<noinclude />#if:{{{1|}}} | <span style="color:#767600;">{{{1}}}</span> }}<span style="color: #666;">&#61;</span> }}{{{2|}}}</{{safesubst:<noinclude />#ifeq:{{{forma|}}}|plana|span|code}}></includeonly><noinclude>{{Documentatio}}</noinclude> ocp5gg61ovv0adwgw22mfqysmat7riv Universitas Casanensis 0 146106 3970991 3928207 2026-07-08T18:54:31Z Alexander Gerashchenko 331 3970991 wikitext text/x-wiki {{L}} {{Capsa scholae Vicidata}} '''Universitas Casanensis''', nunc rite '''Universitas Foederalis Casanensis (Sub[[volga]]nus)''',<ref>[[Russice]] ''Казанский (Приволжский) федеральный университет''; [[Lingua Tatarica|Tartarice]] ''Казан (Идел буе) дәүләт университеты.''</ref> est [[universitas publica]] [[Russia]]e, [[Casanum|Casani]] in [[caput (urbs)|capite]] [[Tatarstania|Tatarstaniensi]] sita. Una ex antiquissimis et maximis universitatibus Russicis est. [[Fasciculus:Гравюра с изображением Казанского университета в 1820-е.jpg|thumb|Aedificium principale Universitatis Casanensis inter annos [[1820]] et [[1830]] pictum.]] == Historia == Caesarea<ref>"Catalogus praeelectionum in Universitate Litterarum Caesarea Casanensi" (1815) [https://www.google.ru/books/edition/Catalogus_praelectionum_in_Universitate/LbtPAAAAcAAJ?hl=ru&gbpv=1&dq=Universitas+Caesarea+Casanensis&pg=RA1-PA4&printsec=frontcover]</ref> (sive Imperatoria<ref>"IMPERATORIA Litterarum Universitas Casanensis" [https://www.google.ru/books/edition/Nonnulla_de_origine_vocabuli_Rossici_den/S3oPAAAAQAAJ?hl=ru&gbpv=1&dq=%22Universitas+Casanensis%22&pg=PA40&printsec=frontcover]</ref> vel Imperialis<ref>"Conspectus praelectionum in Universitate Imperiali Litterarum Casanensi" [https://www.google.ru/books/edition/%D0%9A%D0%BD%D0%B8%D0%B3%D0%BE%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D1%96%D0%B5_%D0%B2_%D0%9A%D0%B0%D0%B7%D0%B0/Xn65AAAAIAAJ?hl=ru&gbpv=1&dq=Imperiali+Casanensi&pg=PA11&printsec=frontcover]</ref>) Litterarum Universitas Casanensis, [[Alexander I (imperator Russiae)|Alexandro I]] [[imperatores Russiae|imperatore Russico]] anno [[1804]] condita, facta est una e primis universitatibus [[Imperium Russicum|Imperii Russici]]. Annis sequentibus multi homines clari in hac universitate docuerunt vel studuerunt (et nonnulli ex alumnis postea professores eiusdem universitatis fuere). Anno [[1918]], paulo post [[res novae Octobres|res novas Octobres]], universitas publica facta est. Ab anno [[1925]] (et usque ad annum [[2010]]) in honorem [[Vladimirus Lenin|Vladimiri Ul'janov-Lenin]] (qui in facultate iuridica Universitatis Casanensis anno [[1887]] studebat) rite nominabatur. In [[URSS|Unione Sovietica]] certi facultates Universitatis Casanensis transformatae sunt in institutiones educationis separatas (e.g. anno [[1930]] facultas medicinae universitatis facta est institutum medicum, quod nunc est [[Universitas Publica Medica Casanensis]]). Anno [[2010]] hac universitas facta est foederalis, certis aliis institutis educationis ad eam adiunctis. == Facultates et instituta == Facultas (ordo) iuridica sola facultatum Universitatis Casanensis nunc manet, facultatibus (ordinibus) aliis iam saeculo [[saeculum 21|21]] in instituta transformatis, quorum nunc sunt: * [[chemia|chemicum]] Butlerovianum (ab anno [[2003]]) * [[geologia]]e et [[technologia]]rum [[naphta]]e et [[gasium|gasii]] (ab anno [[2011]]) * [[gubernatio]]nis, [[oeconomica]]e et pecuniarum (ab anno [[2014]]) * [[ingeniaria]]e * [[mathematica]]e calculationis et [[Technologia informationis|technologiarum informationis]] (ab anno [[2011]]) * [[mathematica]]e et [[mechanica]]e Lobačevskianum (ab anno [[2011]]) * [[medicina]]e fundamentalis et [[biologia]]e (ab anno [[2012]]) * [[oecologia]]e et usus [[natura]]e (ab anno [[2006]]) * [[philologia]]e et [[communicatio interculturalis|communicationis interculturalis]] (ab anno [[2011]]) * [[physica]]e (ab anno [[2011]]) * [[psychologia]]e et [[educatio]]nis (ab anno [[2011]]) * relationum internationalium, [[historia]]e et studii [[Oriens|Orientis]] (ab anno [[2013]], ab anno [[2024]] cum hoc nomine) * [[scientiae sociales|scientiarum socialium]] ac [[philosophia|philosophicarum]] et communicationum massalium (ab anno [[2014]]) * [[Technologia informationis|technologiarum informationis]] et systematum intellectualium (ab anno [[2011]]) == Professores selecti == {{div col|2}} * [[Ioannes Baudouin de Courtenay]] * [[Vladimirus Bechterev]] * [[Alexander Butlerov]] * [[Eduardus Eichwald]] * [[Eduardus Eversmann]] * [[Nicolaus Katanov]] * [[Nicolaus Lobačevskij]] * [[Boris Ordynskij]] * [[Eugenius Tarle]] * [[Alexander Višnevskij]] * [[Nicolaus Zinin]] {{div col end}} == Alumni selecti == {{div col|2}} * [[Sergius Aksakov]] * [[Miles Balakirev]] * [[Nicolaus Beketov]] * [[Alexander Butlerov]] * [[Stanislaus Govoruchin]] * [[Matthaeus Gusev]] * [[Petrus Kaščenko]] * [[Vladimirus Lenin]] * [[Nicolaus Lobačevskij]] * [[Alexander Luria]] * [[Nicolaus Semaško]] * [[Leo Tolstoj]] * [[Alexander Višnevskij]] * [[Nicolaus Zinin]] {{div col end}} ==Notae== <references/> == Nexus externi == {{CommuniaCat|Kazan University|Universitatem Casanensem}} * ''Catalogus praelectionum in Universitate Litterarum Caesarea Casanensi a die 13 Aug. 1816 ad 10 Iul. a. 1817 habendarum promulgatus auctoritate senatus academici.'' Casani ex universitatis officina typographica. Factore F. Bockelmann {{Google Books|NbtPAAAAcAAJ}} {{Uni-stipula}} [[Categoria:Casanum]] [[Categoria:Constituta 1804]] [[Categoria:Universitas Casanensis| ]] o3hfq884e2k78e8cpq6wofyy35hx4xm Triventum 0 153545 3971073 3578955 2026-07-09T09:31:56Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971073 wikitext text/x-wiki {{Capsa urbis Vicidata}} '''Triventum'''<ref>[http://books.google.it/books?id=4EVkhIl-TN4C&printsec=frontcover&hl=it#v=onepage&q&f=false Dizionario geografico-istorico-fisico del regno di Napoli, composto dall'Abate Francesco sacco - Di Francesco Sacco]</ref> {{victio|Terventum|i|n}} (alia nomina: ''Terventum''<ref>[http://books.google.it/books?id=4EVkhIl-TN4C&printsec=frontcover&hl=it#v=onepage&q&f=false Dizionario geografico-istorico-fisico del regno di Napoli, composto dall'Abate Francesco sacco - Di Francesco Sacco]</ref>) ([[Lingua Italica|Italice]] ''[[:it:Trivento|Trivento]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 4&thinsp;950 incolarum, in [[Regio Italiae|Regione]] [[Molisium|Molisina]] et in [[Provincia Campobassensis|Provincia Campobassensi]] situm. Incolae ''Triventini''<ref name=cathier>http://www.catholic-hierarchy.org/</ref> seu ''Terventani'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Ecclesia Catholica Romana == Triventum [[sedes episcopalis metropolitana]] est; nomen sedis episcopalis [[Dioecesis Triventina]]<ref name=cathier/> est. == Municipia finitima == * [[Castrum Guidonum]] ([[Provincia Teatina|CH]]), * [[Castelluccium Aquae Borranae]] (seu [[Castelluccium Aquae Buranae]] deinde [[Castrum Mauri]]) ([[Lingua Italiana|Italiane]]: ''[[:it:Castelmauro|Castelmauro]]''), * [[Civitas Campi Marani]] (seu [[Civitas Campumarini]]) ([[Lingua Italiana|Italiane]]: ''[[:it:Civitacampomarano|Civitacampomarano]]''), * [[Fanum Sancti Angeli de Limosano]] ([[Lingua Italiana|Italiane]]: ''[[:it:Sant'Angelo Limosano|Sant'Angelo Limosano]]''), * [[Fanum Sancti Blasii]] ([[Lingua Italiana|Italiane]]: ''[[:it:San Biase|San Biase]]''), * [[Licetum]] (seu [[Lucitum]]) ([[Lingua Italiana|Italiane]]: ''[[:it:Lucito|Lucito]]''), * [[Roccha de Vivario]] ([[Roccha Vivalae]], [[Roccha Vivara]], [[Roccha Iuvara]]) ([[Lingua Italiana|Italiane]]: ''[[:it:Roccavivara|Roccavivara]]''), * [[Salectum]] (deinde [[Saliticum]], [[Salzectum]] ac [[Castrum Saliceti]]) ([[Lingua Italiana|Italiane]]: ''[[:it:Salcito|Salcito]]''), * [[Sclavi (Italia)|Sclavi]] ([[Provincia Teatina|CH]]). {{NexInt}} * [[Molisium]], * [[Provincia Campobassensis]], * [[Samnium]], * [[Campus Bassus]]. == Nexus externi == * [https://web.archive.org/web/20161020171926/http://www.comunetrivento.it/ Situs Publicus] {{Ling|Lingua Italiana{{!}}Italiane}} {{Fontes geographici}} {{CommuniaCat|Trivento|Triventum}} == Pinacotheca == <gallery> Imago:Map of comune of Trivento (province of Campobasso, region Molise, Italy).svg|Collocatio finium Municipii Triventi in Provincia Campobassensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Triventum| ]] f5tct6xyjwr72sjbljk1wx8njfqul9e Turilla 0 159965 3971078 3596049 2026-07-09T10:46:09Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971078 wikitext text/x-wiki {{Capsa urbis Vicidata}} [[Fasciculus:Torriglia-IMG 0680.JPG|thumb|Turilla]] '''Turilla'''<ref>{{Godefridus Casalis}}</ref> {{victio|Turilla|ae|f}} (alia nomina: ''Turrigiae''<ref name="graesse">{{Graesse}}}</ref>, ''Turiculum''<ref name="graesse" />, ''Turicla''<ref name="graesse" />) ([[Lingua Italiana|Italiane]]: ''[[:it:Torriglia|Torriglia]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 2&thinsp;380 incolarum, in [[Regio Italiae|Regione]] [[Liguria]] et in [[Urbs metropolitana Genuensis|Urbe metropolitana Genuensi]] situm. Incolae ''Turillenses'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Clari cives == == Ecclesia Catholica Romana == * [[Dioecesis Derthonensis]], == Fractiones, vici et loci in municipio == === Fractiones === ''Bavastri, Buoni di Pentema, Casaleggio, Obbi, Cavorsi, Costafontana, Costalunga, Costapianella, Costazza, Donderi, Donetta, Fallarosa, Fascia di Carlo, Frevada, Garaventa, Laccio, Marzano, Olcesi, Passo della Scoffera, Pentema, Pezza, Ponte Trebbia, Porto, Riola, Serre di Pentema, Siginella, Tecosa, Tinello''. == Municipia finitima == ''Davagna, Lorsica, Lumarzo, Moconesi, Montebruno, Montoggio, Neirone, Propata, Rondanina, Valbrevenna''. {{NexInt}} * [[Liguria]]m (''regio''), * [[Urbs metropolitana Genuensis|Urbem metropolitanam Genuensem]], * [[Provincia Genuensis|Provinciam Genuensem]] (''provincia abrogata''), * [[Genua]]m (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [https://web.archive.org/web/20130314060220/http://www.comune.torriglia.ge.it/ Situs Publicus] {{Ling|Lingua Italiana{{!}}Italiane}} {{CommuniaCat|Torriglia|Turiclam}} == Pinacotheca == <gallery> Imago:Map of comune of Torriglia (province of Genoa, region Liguria, Italy).svg|Collocatio finium Municipii in Urbe metropolitana Genuensi. Imago:Torriglia - panoramio - Stefano Mazzone Geno… (1).jpg|Despectus in oppidum. </gallery> == Notae == <references /> {{geo-stipula}} [[Categoria:Municipia in Urbe metropolitana Genuensi]] 7pi0022401599qpczu7azp8j0i3z83g Titianus Maës 0 178289 3971057 3842910 2026-07-09T06:41:14Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971057 wikitext text/x-wiki '''Titianus Maës''' ([[Graece]] {{Polytonic|Μάης ὁ καὶ Τιτιανός, ἀνὴρ Μακεδών}}, ad pedem litterarum "Maës qui et Titianus, vir Macedo") fuit mercator qui homines suos per mediam [[Asia]]m ad metropolim [[Seres|Serum]] misit. Soli fuerunt e Graecis Romanisque nobis cognitis, qui tale iter perfecerunt per viam quam [[Via Sericaria|Sericariam]] noncupare solemus. Ita enim [[Claudius Ptolemaeus]] (fonte [[Marinus Tyrius|Marino Tyrio]]) refert: :{{Polytonic|Τὴν δὲ ἀπὸ τῆς ἐκτιθεμένης τοῦ Εὐφράτου διαβάσεως μέχρι τοῦ Λιθίνου Πύργου διάστασιν συναγομένην κατ' αὐτὸν σχοίνων ὀκτακοσίων ἑβδομήκοντα ἒξ, σταδίων δὲ δισμυρίων ἑξακισχιλίων διακοσίων ὀγδοήκοντα, καὶ τὴν ἀπὸ τοῦ Λιθίνου Πύργου μέχρι Σήρας, τῆς τῶν Σηρῶν μητροπόλεως, ὁδοῦ μὲν μηνῶν ἑπτά, σταδίων δὲ τρισμυρίων ἑξακισχιλίων διακοσίων ... συναιροῦμεν ... Ἡ δ'ἀπὸ τοῦ Λιθίνου Πύργου μέχρι τῆς Σήρας ἐπιδέχεται χειμῶνας σφοδρούς ... ὥστε καὶ διὰ τούτου πολλὰς ἀνοχὰς δεῖν γίνεσθαι τῆς πορείας. καὶ γὰρ δι' ἐμπορίας ἀφορμῂν ἐγνώσθη. Μάην γάρ φησί τινα τὸν καὶ Τιτιανόν, ἄνδρα Μακεδόνα καὶ ἐκ πατρὸς ἔμπορον, συγγράψασθαι τὴν ἀναμέτρησιν, οὐδ' αὐτὸν ἐπελθόντα, διαπεμψάμενον δέ τινας πρὸς τοὺς Σῆρας. ἔοικε δὲ καὶ αὐτὸς ἀπιστεῖν ταῖς τῶν ἐμπορευομένων ἱστορίαις.}} :Ceterum distantiam eam, quae a praedicto Euphratis transitus usque ad turrim est lapideam, ac per ipsum esse colligitur schoenorum octingentorum septuaginta sex, stadiorum vero viginti et sex milium necnon ducentorum octuaginta: eam praeterea quam ipse a lapidea turri usque ad Seras, quae Serum est metropolis, viae septimestris esse, stadiorum autem triginta sex milium et ducentorum asserit ... Via autem, quae est a turri lapidea ad Seras usque vehementissimis obnoxia est tempestatibus ... quapropter multas etiam in eundo moras accidere necesse fuit. Nam et per negotiationis occasionem cognita est. Refert enim Maem quendam, qui et Titianus vocabatur, virum Macedonem, ac patre mercatore natum, dimensionem hanc conscripsisse, licet ipse nunquam ad seras accessisset sed solum quosdam illac misisset. Atqui et ipse Marinus mercatorum historiis nequaquam fidem adhibere videtur.<ref>[[Claudius Ptolemaeus]], ''[[Geographia (Ptolemaeus)|Geographia]]'' 1.11.4-7; [https://web.archive.org/web/20130605044408/http://amshistorica.unibo.it/184 versio 1562, pp. 43-44]</ref> Nomen "Maës" minime Macedonicum, potius Syriacum esse confitetur; ille igitur, civilitate Macedo, civis fuerit aut [[Regnum Seleucidarum|regni Seleucidarum]] aut [[Syria (provincia Romana)|Syriae Romanae]]. Aevum peregrinationis nescitur, sed pro certo ante annum fere 120 p.C.n. facta est, quo tempore Marinus Tyrius opus suum geographicum conscripsit. Quibusdam igitur saeculo II p.C.n. ineunte proponentibus, M. Cary saeculum I a.C.n. exeunte praetulit: ab anno [[13 a.C.n.]] [[Marcus Titius|M. Titium]] (consulem suffectum 31 a.C.n.) [[Syria (provincia Romana)|Syria]]e legatum meruisse; huius Titianus Maëm libertum aut clientem fuisse. Titius enim, regis [[Regnum Parthorum|Parthorum]] [[Phraates IV (rex Parthorum)|Phraatis]] amicus familiaeque regalis protector,<ref>{{Strabo}} 16.1.28</ref> transitum huius regni a "traiectu Euphratis" usque in mediam Asiam facile reddere potuerit. Ibi ''[[Turris lapidea|Lithinos pyrgos]]'' sive "Turris lapidea", statio Viae Sericariae, in regione Sinensi [[Xinjiang]] iacere censetur ubi hodie stat urbs [[Taxkorgan]]. E textu Ptolemaico intellegitur (sed sine certitudine) Maëm ipsum usque ad Turrim Lapideam pervenisse, socios sive servos eius ad "urbem Seram, Serum metropolim" perrexisse. Caput regni Sinensis eis annis fuit urbs [[Luoyang]]. ==Notae== <div class="references-small"><references /></div> == Bibliographia == * M. Cary, "Maes qui et Titianus" in ''Classical Quarterly'' n.s. vol. 6 (1956) pp. 130–134 [[Categoria:Mercatores]] [[Categoria:Macedones antiqui]] [[Categoria:Incolae Syropalaestinae Graecoromanae]] [[Categoria:Exploratores Romani antiqui]] [[Categoria:Nati saeculo 1 a.C.n. aut 1]] [[Categoria:Mortui saeculo 1 aut 2]] [[Categoria:Via Sericaria]] [[Categoria:Exploratores Asiae]] 4xjs8sdfejvi8hhw7q9p6jmi1ioigqt Summaripa Paterni 0 207683 3970998 3595834 2026-07-08T19:58:34Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970998 wikitext text/x-wiki {{pro pagina discretiva vide|Summaripa (discretiva)}} {{Capsa urbis Vicidata}} [[Fasciculus:SommarivaPernofraz.Re.JPG|thumb|Summaripa Paterni]] '''Summaripa Paterni'''<ref>{{Graesse}}</ref><ref>''DIZIONARIO GEOGRAFICO'' - Di GOFFREDO CASALIS, Voll. V.V., Torino 1833-1854</ref><ref>Nomi d'Italia - AAVV, De Agostini</ref> (alia nomina<ref>{{Graesse}}</ref>: ''Padernum'', ''Paternum'') ([[Lingua Italiana|Italiane]]: ''[[:it:Sommariva Perno|Sommariva Perno]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], in [[Regio Italiae|Regione]] [[Pedemontium|Pedemontio]] et in [[Provincia Cuneensis|Provincia Cuneensi]] situm. Incolae ''Summaripenses'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Fractiones, vici et loci in municipio == == Municipia finitima == {{NexInt}} * [[Pedemontium]] (''regio''), * [[Provincia Cuneensis]], * [[Cuneum]] (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [https://web.archive.org/web/20110204023108/http://www.comune.sommarivaperno.cn.it/ Pagina officialis] {{CommuniaCat|Sommariva Perno|Summamripam Paterni}} == Pinacotheca == <gallery> Imago:Maps of the province of Cuneo.gif|Collocatio finium municipii in Provincia Cuneensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Municipia in provincia Cunei]] [[Categoria:Pagus Rotarianus]] d4u5kkunfzxpmgmem0naux9wl14sh7z Thouarcé 0 214588 3971049 3453397 2026-07-09T05:30:56Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971049 wikitext text/x-wiki [[Fasciculus:W1422-Thouarce_Ponts_MaisonRetraite_62649.jpg |thumb|200 px|Thouarcé: [[aedicula]]]] [[Fasciculus: Map commune FR insee code 49345.png|thumb|left|250px| Thouarcé: communis tabula]] ''' Thouarcé ''' est commune [[Francia|Francicum]] 1'863 incolarum (anno [[2011]]) [[Tabula administrativa Franciae|praefecturae]] [[Cenomannica et Liger|Cenomannicae et Ligeris]] in regione [[Pagi Ligeris (regio Franciae)|Pagis Ligeris]]. {{NexInt}} * [[Index communium praefecturae Cenomannicae et Ligeris|Indicem communium praefecturae Cenomannicae et Ligeris]] == Nexus externi == {{CommuniaCat| Thouarcé | Thouarcé }} * [https://web.archive.org/web/20220402203437/http://www.thouarce.fr/ Thouarcé pagina interretialis] * {{INSEE commune|49345|de=Thouarcé}} {{geo-stipula}} [[Categoria:Communia praefecturae Meduanae et Ligeris]] [[Categoria:Loci habitati praefecturae Meduanae et Ligeris]] 62ugt3309lkczewv5w2h214iyeux62v Agellum Gomperticum 0 218789 3971058 3591278 2026-07-09T07:07:49Z Rei Momo 58149 /* Fractiones, vici et loci in municipio */ 3971058 wikitext text/x-wiki {{pro pagina discretiva vide|Agellum (discretiva)}} {{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico - piazza Italia.jpg|thumb|Agellum Gomperticum]] '''Agellum Gomperticum'''<ref>[http://www.comune.zelo.lo.it/index.php/vivi-zelo/storia-e-identita/48-agellum-gomperticum www.comune.zelo.lo.it]</ref> ([[Lingua Italiana|Italiane]]: ''[[:it:Zelo Buon Persico|Zelo Buon Persico]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 7&thinsp;000 incolarum, in [[Regio Italiae|Regione]] [[Langobardia]] et in [[Provincia Laudensis|Provincia Laudensi]] situm. Incolae ''Agellates'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Alia nomina == Alia nomina sunt: ''Agellum Gomperzicum''<ref>[http://books.google.it/books?id=YPzTAgAAQBAJ&pg=PA165&lpg=PA165&dq=%22Casale+Gausari%22&source=bl&ots=t9wRX4nf9Q&sig=u2X8tPvtfeKoeoJncKED0_Y5Nz0&hl=it&sa=X&ei=OtyrU-SkHM-y7Ab_noDgBw&ved=0CC8Q6AEwAg#v=onepage&q=%22Cavenago%22&f=false Dizionario di toponomastica lombarda Dante Olivieri, Lampi di stampa, 01/gen/2001 - 624 pagine]</ref> et ''Zellum Gompertum''.<ref name=":1">{{Graesse}}</ref> == Fractiones, vici et loci in municipio == Bisnatae, Cassina Iussana, Cassina Parvum istrinum, Casolatae, Mignetae, Molinatius, [[Mutianum (Pedemontium)|Mutianum]], Villa Pompeiana == Municipia finitima == {{NexInt}} * [[Langobardia]] (''regio''), * [[Provincia Laudensis]], * [[Laus Nova]] (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [http://www.comune.zelo.lo.it/ Situs publicus] {{CommuniaCat|Zelo Buon Persico|Agellum Gomperticum}} == Pinacotheca == <gallery> Fasciculus:Map of comune of Zelo Buon Persico (province of Lodi, region Lombardy, Italy).svg|Collocatio finium municipii in Provincia Laudensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Municipia in provincia Laudis Novae]] 5noi2hfk8qyu6ft5fijcp7rr8jf6tz5 3971059 3971058 2026-07-09T07:08:05Z Rei Momo 58149 /* Fractiones, vici et loci in municipio */ 3971059 wikitext text/x-wiki {{pro pagina discretiva vide|Agellum (discretiva)}} {{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico - piazza Italia.jpg|thumb|Agellum Gomperticum]] '''Agellum Gomperticum'''<ref>[http://www.comune.zelo.lo.it/index.php/vivi-zelo/storia-e-identita/48-agellum-gomperticum www.comune.zelo.lo.it]</ref> ([[Lingua Italiana|Italiane]]: ''[[:it:Zelo Buon Persico|Zelo Buon Persico]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 7&thinsp;000 incolarum, in [[Regio Italiae|Regione]] [[Langobardia]] et in [[Provincia Laudensis|Provincia Laudensi]] situm. Incolae ''Agellates'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Alia nomina == Alia nomina sunt: ''Agellum Gomperzicum''<ref>[http://books.google.it/books?id=YPzTAgAAQBAJ&pg=PA165&lpg=PA165&dq=%22Casale+Gausari%22&source=bl&ots=t9wRX4nf9Q&sig=u2X8tPvtfeKoeoJncKED0_Y5Nz0&hl=it&sa=X&ei=OtyrU-SkHM-y7Ab_noDgBw&ved=0CC8Q6AEwAg#v=onepage&q=%22Cavenago%22&f=false Dizionario di toponomastica lombarda Dante Olivieri, Lampi di stampa, 01/gen/2001 - 624 pagine]</ref> et ''Zellum Gompertum''.<ref name=":1">{{Graesse}}</ref> == Fractiones, vici et loci in municipio == Bisnatae, Cassina Iussana, Cassina Parvum istrinum, Casolatae, Mignetae, Molinatius, [[Mutianum (Langobardia)|Mutianum]], Villa Pompeiana == Municipia finitima == {{NexInt}} * [[Langobardia]] (''regio''), * [[Provincia Laudensis]], * [[Laus Nova]] (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [http://www.comune.zelo.lo.it/ Situs publicus] {{CommuniaCat|Zelo Buon Persico|Agellum Gomperticum}} == Pinacotheca == <gallery> Fasciculus:Map of comune of Zelo Buon Persico (province of Lodi, region Lombardy, Italy).svg|Collocatio finium municipii in Provincia Laudensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Municipia in provincia Laudis Novae]] 34j0rsbogk3i6lmnuacxyyd2q5td7lm 3971072 3971059 2026-07-09T08:44:37Z Rei Momo 58149 /* Municipia finitima */ 3971072 wikitext text/x-wiki {{pro pagina discretiva vide|Agellum (discretiva)}} {{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico - piazza Italia.jpg|thumb|Agellum Gomperticum]] '''Agellum Gomperticum'''<ref>[http://www.comune.zelo.lo.it/index.php/vivi-zelo/storia-e-identita/48-agellum-gomperticum www.comune.zelo.lo.it]</ref> ([[Lingua Italiana|Italiane]]: ''[[:it:Zelo Buon Persico|Zelo Buon Persico]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 7&thinsp;000 incolarum, in [[Regio Italiae|Regione]] [[Langobardia]] et in [[Provincia Laudensis|Provincia Laudensi]] situm. Incolae ''Agellates'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Alia nomina == Alia nomina sunt: ''Agellum Gomperzicum''<ref>[http://books.google.it/books?id=YPzTAgAAQBAJ&pg=PA165&lpg=PA165&dq=%22Casale+Gausari%22&source=bl&ots=t9wRX4nf9Q&sig=u2X8tPvtfeKoeoJncKED0_Y5Nz0&hl=it&sa=X&ei=OtyrU-SkHM-y7Ab_noDgBw&ved=0CC8Q6AEwAg#v=onepage&q=%22Cavenago%22&f=false Dizionario di toponomastica lombarda Dante Olivieri, Lampi di stampa, 01/gen/2001 - 624 pagine]</ref> et ''Zellum Gompertum''.<ref name=":1">{{Graesse}}</ref> == Fractiones, vici et loci in municipio == Bisnatae, Cassina Iussana, Cassina Parvum istrinum, Casolatae, Mignetae, Molinatius, [[Mutianum (Langobardia)|Mutianum]], Villa Pompeiana == Municipia finitima == {{NexInt}} * [[Coemeterium Mutiani]], * [[Langobardia]] (''regio''), * [[Provincia Laudensis]], * [[Laus Nova]] (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [http://www.comune.zelo.lo.it/ Situs publicus] {{CommuniaCat|Zelo Buon Persico|Agellum Gomperticum}} == Pinacotheca == <gallery> Fasciculus:Map of comune of Zelo Buon Persico (province of Lodi, region Lombardy, Italy).svg|Collocatio finium municipii in Provincia Laudensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Municipia in provincia Laudis Novae]] e6an7lnzqj7rvar0uztwt6b5v81e8me Socialismus Christianus 0 223240 3970943 3936717 2026-07-08T13:43:43Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970943 wikitext text/x-wiki [[Fasciculus:Frederick_Denison_Maurice._Portrait_c1865.jpg|thumb|[[Fridericus Denison Maurice]], [[theologus]] et unus ex primis [[scriptor]]bus socialismi Christiani.]] '''Socialismus Christiana''' est genus [[socialismus|socialismi]] [[religio]]si in doctrina [[Iesus|Iesu]] conditi. Multi socialistae Christiani credunt [[capitalismus|capitalismum]] esse [[idololatria|idololatricum]] et [[avaritia]]e inhaesum, quod nonnullae sectae Christianae putant [[peccatum mortale]].<ref name="Adrian Hastings Pp. 678">Adrian Hastings, Alistair Mason, Hugh S. Pyper. ''The Oxford Companion to Christian Thought''. Oxford, England, UK: Oxford University Press Pp. 678.</ref> et omnia [[res communes|communia]] ills fuit.<ref>''[[Actus Apostolorum]]'', Caput 4</ref> Socialistae Christiani putant originem iniquitatis socialis cum avaritia consociatam esse, quam ei vicissim ad [[capitalismus|capitalismum]] coniungunt.<ref name="Adrian Hastings Pp. 678"/> Socialismus Christianus factus est maior in [[Britanniarum Regnum|Britanniarum Regno]] motus ex [[1960]] fere, per [[Motus Socialisticus Christianus (Britanniarum Regnum)|Motum Socialisticum Christianum]].<ref>Adrian Hastings, Alistair Mason, et Hugh S. Pyper, ''The Oxford Companion to Christian Thought'' (Oxoniae: Oxford University Press, 677).</ref> [[Locutio]] ''socialismus Christianus'' etiam ad tales graves [[saeculum 19|saeculi undevicensimi]] [[persona]]s pertinet ut [[scriptor]]es [[Fridericus Denison Maurice]] (''The Kingdom of Christ'', 1838), [[Ioannes Ruskin]] (''[[Unto this Last]],'' 1862), [[Carolus Kingsley]] ([[The Water-Babies, A Fairy Tale for a Land Baby|''The Water-Babies'']], 1863), [[Thomas Hughes]] (''[[Tom Brown's Schooldays]],'' 1857), [[Fridericus Iacobus Furnivall]] (unus ex conditoribus ''Oxford English Dictionary''), [[Adin Ballou]] (''Practical Christian Socialism,'' 1854), et [[Franciscus Bellamy]] (minister [[Baptistae|Baptista]] et auctor [[Testimonium Fidei|Testimonii Fidei]] [[Civitates Foederatae|Civitatum Foderatarum]]). == Socialistae Christiani notabiles == Alii socialistae Christiani bene noti sunt: * [[Benignus Aquino iunior|Benignus S. Aquino]], martyr [[democratia]]e [[Philippinae|Philippinarum]], qui se descripsit Catholicus "iterum natum" et socialista Christianus * [[Eduardus Bellamy]], auctor [[liber|libri]] ''Looking Backward'' * [[Carolus Barth]], [[theologus]] * [[Antonius Benn]], parlamentarianus Britannicus * [[Robertus Malachy Burke]] * [[Gualterius Brown]] * [[Hugo Chávez]], olim Praeses Venetiolae et socialista Catholicus * [[Iosephus Duffy]]<!--, Irish radio presenter--> * [[Mauritiusi Funes]] * [[Raphael Correa]], Praeses [[Aequatoria]]e * [[Dorothea Day]], una ex conditoribus Motus Operariorum Catholicorum * [[Percy Dearmer]] * [[Thomas Douglas]]<!--, former Premier of the Canadian province of Saskatchewan; leader of the first socialist government in North America; father of Canadian medicare. Former leader of the socialist [[Cooperative Commonwealth Federation]] in Canada, which won five back-to-back majority provincial governments in Saskatchewan. Later, when the CCF merged with the Canadian Labour Congress to become the modern-day secular and more social-democratic [[New Democratic Party of Canada|New Democratic Party]] of Canada, Douglas was elected its first leader. The NDP is currently the second largest party in the Canadian House of Commons and the holder of the title of The Official Opposition. According to polls/surveys conducted by the [[Canadian Broadcasting Corporation]] (Canada's public broadcaster), Tommy Douglas has been consistently voted as "The Most Important Canadian" for three years in a row--> * [[Diana Drufenbrock]] * [[Paulus Freire]], [[educator]] [[Brasilia|Brasiliensis]] et [[theorista]] [[paedagogia critica|paedagogiae criticae]] * [[Vekoslav Grmič]], [[episcopus]] [[Slovenia|Sloveniensis]] [[Eccledia Catholica|Catholicus Romanus]], scriptor, auctor commentariorum<!--essayist--> et vir publicus * [[Thomas J. Hagerty]] * [[Keir Hardie]], unus ex conditoribus [[Factio laboris (Britanniarum Regnum)|Factionis Laboris Britannicae]] * [[Christophorus Hedges]] * [[Thomas Hughes]] * [[Abe Isoo]]<!--, or otherwise known as Abe Iso, Iso Abe (surname: Abe; given name, Isoo or Iso)--> * [[Fletcher Jones|David Fletcher Jones Eques]] * [[Toyohiko Kagawa]] * [[Tetsu Katayama]] * [[Helena Keller]] * [[Michael Iosephus Savage]], olim Primus Minister [[Nova Zelandia|Novae Zelandiae]] et dux [[Factio Laboris Nova Zelandiae|Factionis Laboris Novae Zelandiae]] * [[Carolus Kingsley]], [[scriptor mythistoriarum]] * [[Gulielmus Dean Howells]], [[scriptor mythistoriarum]], auctor ''A Traveler from Altruria'' (1894) * [[Eduardus Kocbek]], cogitator, [[poeta]], et [[rerum politicarum peritus]] [[Slovenia|Sloveniensis]] * [[Janez Evangelista Krek]] * [[Georgius Lansbury]], olim dux Factionis Laboris Britannicae * [[Gualiertius Lini]]<!--, for whom Christianity and socialism held strong similarities and could be combined to form the basis of--> pater [[socialismus Melanesianus|socialismi Melanesiani]] * [[Nelson Mandela]], Praeses [[Africa Australis|Africae Australis]], 1994–1999 * [[Ioannes Malcolm Forbes Ludlow|Ioannes Ludlow]] * [[Margarita MacDonald (uxor)|Margarita MacDonald]], [[uxor]] [[Ramsay MacDonald]], reginae primi ministri in [[Britanniarum Regnum|Britanniarum Regni]] * [[F. O. Matthiessen]] * [[Fridericus Denison Maurice]], unus ex conditoribus socialismi Christiani Britannici, et conditor [[The Working Men's College]] * [[Jürgen Moltmann]] * [[Brian Moore (politicus)|Brian P. Moore]]<!--, a candidate for the 2008 US Presidential elections--> * [[Reinholdus Niebuhr]], [[theologus]] * [[Huub Oosterhuis]] * [[Carolus Polanyi]] * [[Iosephus Smith (filius)]] * [[Dorothea Sölle]] * [[Donaldus Soper, Baro Soper]] * [[R. H. Tawney]] * [[Normannus Thomas]] * [[Paulus Tillich]] * [[Cornel West]], [[academia|academicus]] [[Civitates Foederatae|Americanus]] et commentator * [[Brooke Foss Westcott]] * [[Jackson Stitt Wilson]] (1868–1942), minister Methodista et praefectus [[Berkeleia]]e [[California]]e ab 1911 ad 1913 * [[Franciscus P. Zeidler]], praefectus [[Milvauchia]]e<!--et [[Socialist Party USA]] presidential candidate--><!-- ==Loci== <blockquote> If we all came of the same father and mother, of Adam and Eve, how can they say or prove that they are better than we, if it be not that they make us gain for them by our toil what they spend in their pride? [[John Ball (priest)|John Ball]]<ref>John Richard Green, [http://www.humanitiesweb.org/human.php?s=s&p=l&ID=1904#John%20Ball ''History of the English People'']. Accessed 2007-07-22.</ref></blockquote> <blockquote> Socialism which means love, cooperation and brotherhood in every department of human affairs, is the only outward expression of a Christian's faith. I am firmly convinced that whether they know it or not, all who approve and accept competition and struggle against each other as the means whereby we gain our daily bread, do indeed betray and make of no effect the "will of God." [[George Lansbury]] </blockquote> <blockquote> Capitalism is the way of the devil and exploitation. If you really want to look at things through the eyes of Jesus Christ—who I think was the first socialist—only socialism can really create a genuine society. [[Hugo Chávez]]<ref>Tim Padgett: [http://www.time.com/time/world/article/0,8599,1538296,00.html Chavez: "Bush Has Called Me Worse Things"] ''Time'' magazine, September 22, 2006. Accessed 2007-07-22.</ref></blockquote> <blockquote>Socialism is Christianity politicized. [[Russell Brand]]<ref>Donald Kaufman (21 January 2014). [http://www.truthdig.com/avbooth/item/russell_brand_socialism_is_christianity_politicized_20140120 Russell Brand: ‘Socialism Is Christianity Politicized’]. ''[[Truthdig]].'' Retrieved 24 January 2014.</ref></blockquote> --> {{NexInt}} * [[Anarchismus Christianus]] * [[Catholicismus politicus]] * [[Christianitas postmodernus]] * [[Communismus Christianus]] * [[Communismus primitivus]] * [[Socialismus agrarianus]] * [[Socialismus ethicus]] * [[Socialismus religiosus]] * [[Socialismus utopianus]] * [[Theologia liberationis]] * [[Waldenses]]<!-- *[[Ioannes Ball (presybter)]] *[[Catholic trade unions]] *[[Catholic social teaching]] *[[Liberal Christianity]] *[[Christian left]] *[[Christian trade unions]] *[[International League of Religious Socialists]] *[[Social Gospel]] *[[Spiritual left]] *[[Working Men's College]] *[[Radical center (politics)]]--> == Notae == <div class="references-small"><references/></div> == Bibliographia == ;Fontes primarii * Gray, John. [[1885]]. [http://books.google.com/books?id=llNFAAAAIAAJ&printsec=frontcover&dq=inauthor:Frederick+inauthor:Maurice&lr=&as_brr=3 ''The Life of Frederick Denison Maurice: Chiefly Told in His Own Letters,''] books.google.com * Kingsley, Charles. [[1899]]. [http://books.google.com/books?id=K53M7IGeFm8C&printsec=frontcover&dq=inauthor:charles+inauthor:Kingsley&lr=&num=30&as_brr=3 ''The Works of Charles Kingsley,''] books.google.com * Kingsley, Frances Eliza Grenfell. [[1877]] [http://books.google.com/books?id=_uP32Zdvb3cC&pg=PA34&dq=inauthor:charles+inauthor:Kingsley&lr=&num=30&as_brr=3 ''Charles Kingsley: His Letters and Memories of His Life,''] books.google.com * Leno, John Bedford. [[1892]]. ''The Aftermath with Autobiography of the Author.'' Londinii: Reeves & Turner. ;Fontes secundarii * Bissett, Jim. [[1999]]. ''Agrarian socialism in America: Marx, Jefferson, and Jesus in the Oklahoma Countryside, 1904-1920.'' University of Oklahoma Press. * Boyer, John. [[1995]]. ''Culture and Political Crisis in Vienna: Christian Socialism in Power, 1897-1918.'' * Cort, John C. [[1988]]. ''Christian Socialism: An Informal History.'' * Hopkins, Charles Howard. [[1940]]. ''The Rise of the Social Gospel in American Protestantism, 1865-1915.'' * Phillips, Paul T. [[1996]]. ''A Kingdom on Earth: Anglo-American Social Christianity, 1880-1940.'' * Young, Shawn David. [[2010]]. [http://www.usask.ca/relst/jrpc/art22%282%29-jesusfreaks.html From Hippies to Jesus Freaks: Christian Radicalism in Chicago’s Inner-City.] ''Journal of Religion and Popular Culture'' 22(2). == Nexus externi == {{CommuniaCat|Christian socialism|socialismum Christianum}} * [http://www.zompist.com/meetthepoor.html Biblia de Pauperibus: Aut Cur Deus est Liberalis,] www.zompist.com * [https://web.archive.org/web/20170914045229/http://faithandsocialism.org/ Consilium Socialismi et Fiedi Factionis Socialisticae CFA,] faithandsocialism.org * [http://www.spartacus-educational.com/REsocialism.htm De socialismo Christiano saeculi undevicensimi,] www.spartacus-educational.com * [https://web.archive.org/web/20090423121328/http://www.christiansocialistpartyusa.org/ Factio Socialista Christiana CFA,] www.christiansocialistpartyusa.prg<!-- Right-wing Christian socialism movement--> * [http://skeptically.org/bible/id14.html Novum Testamentum Socialismum Adiuvat,] skeptically.org * [http://www.thecsm.org.uk/ Situs publicus Motus Socialisticus Christianus,] www.thecsm.org.uk * [https://web.archive.org/web/20060106190531/http://www.anglocatholicsocialism.org/ Socialismus Anglo-Catholicus,] www.anglocatholicsocialism.org * [https://web.archive.org/web/20160312154643/http://www.religioussocialism.com/vision.html Socialistae Religiosi,] www.religioussocialism.com<!-- Vision Statement of the Religion and Socialism Commission of the Democratic Socialists of America--> {{DEFAULTSORT:Socialismus Christianus}} [[Categoria:Philosophia Christiana]] [[Categoria:Res politicae Christianae|Socialismus]] [[Categoria:Socialismus Christianus| ]] [[Categoria:Termini Christiani]] qjhrkpcquaj7kwi76kteukaudr8slze Tronsianum 0 233606 3971075 3525944 2026-07-09T09:44:33Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971075 wikitext text/x-wiki {{pro pagina discretiva vide|Bassanum (discretiva)}} {{Capsa urbis Vicidata}} '''Tronsianum'''<ref>[https://books.google.it/books?id=VZVFAAAAcAAJ&pg=PA44&lpg=PA44&dq=%22Cuvelium%22&source=bl&ots=AH-5m_ZH_w&sig=K28HRtHU7Glg2PyNzr3egSVYJ6k&hl=it&sa=X&ei=ul3kVNXSIqGAywOe64KoCw&ved=0CCMQ6AEwAA#v=onepage&q=Cuvelium&f=false Thesaurus antiquitatum et historiarum Italiae, Neapolis, Siciliae, Corsicae, Melitae, ... (Google eBook) - Joannes Georgius Graevius excudit Petrus Vander Aa, 1723]</ref> {{victio|Tronsianum|i|n}} (alia nomina: ''Bassanum Tronsiani''<ref>Nomi d'Italia - AAVV, De Agostini</ref>, ''Bassanum cum Tronsiano'') ([[Lingua Italiana|Italiane]]: ''[[:it:Tronzano Lago Maggiore|Tronzano Lago Maggiore]]'') est [[oppidum]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 260 incolarum, in [[Regio Italiae|Regione]] [[Langobardia]] et in [[Provincia Varisiensis|Provincia Varisiensi]] situm. Incolae ''Tronsianenses'' appellantur. == Insigne == <gallery> Fasciculus:Corona di comune.svg|''[[Municipium Italiae]]'' </gallery> == Fractiones, vici et loci in municipio == === Fractiones === * [[Bassanum (Tronsianum)|Bassanum]] ''Bassano'', ''Il Bersagliere, La Costa, La Crocetta, La Mora, Lanterna, Monte Borgna, Monti di Bassano, Poggio, Porto, Riva, Ronco Scigolino, Santa Maria di Lourdes''. == Municipia finitima == {{NexInt}} * [[Langobardia]] (''regio''), * [[Provincia Varisiensis]], * [[Baretium]] (''urbs''), * [[Municipium Italiae]]. == Nexus externi == * [https://web.archive.org/web/20161229024755/http://www.comune.tronzanolagomaggiore.va.it/ Situs publicus] {{CommuniaCat|Tronzano Lago Maggiore|Tronsianum}} == Pinacotheca == <gallery> Fasciculus:Map of comune of Tronzano Lago Maggiore (province of Varese, region Lombardy, Italy).svg|Collocatio finium municipii in Provincia Varisiensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Municipia in provincia Baretii]] l54tqd5h9vst71rjbt41gy22c0lbm2l Mutianum (discretiva) 0 234608 3971070 2866990 2026-07-09T08:40:51Z Rei Momo 58149 3971070 wikitext text/x-wiki {{discretiva}} '''Mutianum''' potest: * '''[[Mutianum (Langobardia)]]''' (alia nomina: '''Müsàn'''): [[Commune Italiae|municipium]] [[Italia]]e. * '''[[Mutianum (Pedemontium)]]''' (alia nomina: '''[[Mussanum]]'''): [[Commune Italiae|municipium]] [[Italia]]e. * '''[[Mutianum (Tuscia)]]''' vel '''[[Mutianum Castrum]]''' (deinde '''[[Burgus ad Muzanum]]''', '''[[Burgus ad Mozanum]]'''): [[Commune Italiae|municipium]] [[Italia]]e. f2qxm2qv4nisqtpfuvuf0qodbxul5nf Turris Alteburgensis 0 243302 3971080 2937719 2026-07-09T11:07:58Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971080 wikitext text/x-wiki [[File:Alteburg Turm Arnstadt.JPG|thumb|Turris hieme]] '''Turris Alteburgensis''' (Theodisce: ''Alteburg-Turm'') metra 28 alta in monte Alteburg sita est , qui antiqui oppidi [[Arnstadium|Arnstadii]] regionem circumdat. ==Historia== Turris confecta est in honorem imperatoris [[Gulielmus I (Imperator Germaniae)|Gulielmi I]] secundum ichnographiam [[Hugo Hartung|Hugonis Hartung]]. Lapis primus positus est die 22 Martis 1897, quo imperatoris anniversarium C celebrandum fuit. Decem annos societas "Alteburg-Thurm-Bauverein" pecuniam necessariam colligebat (21.500 marcarum). Vere anni 1902 constructio incohata est. Die 10 Augusti anni eiusdem inauguratio facta est cum processione iucunda trans urbem. Praeter imperatorem etiam cancellarium [[Otho de Bismarck|Othonem de Bismarck]] et praetores [[Helimutus Iacobus Comes de Moltke|Moltke]] et Albrecht von Roon honoraverunt. Ambo victoriam in [[Bellum Germano-Francicum|Bello Germano-Francico]] et fundationem [[Imperium Germanicum (1871-1918)|Imperii Germanici]] provexerant. Ad radicem turris erant olim duo tormenta bellica, spolia anni 1870; post annum 1945 ea remota sunt. ==Functio hodierna== Hodie turris initium migrationum multarum in pulchra planitie Alteburgensi est. Caupona contigua migratores ad recreationem invitat. ==Nexus externi== *[https://web.archive.org/web/20150801005040/http://alteburg-arnstadt.de/ De caupona, turre, semitis migratoriis] [[categoria:Arnstadium]] [[categoria:Turres]] 649vkxoqiz8uccptcf2gy5cmy3ve5xt Thunnus 0 254165 3971051 3708337 2026-07-09T05:38:28Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971051 wikitext text/x-wiki {{L1}} {{Titulus italicus}} {{Taxobox | name = ''Thunnus'' | image = Yellowfin_tuna_nurp.jpg | image_caption = ''[[Thunnus albacares]]'' | regnum = [[Animalia]] | phylum = [[Chordata]] | classis = [[Actinopterygii]] | ordo = [[Perciformes]] | familia = [[Scombridae]] | tribus = [[Thunnini]] | genus = [[Thunnus]] | genus_authority = South, 1845 | subdivision_ranks = Subgenera | subdivision = ''T. ([[Thunnus (subgenus)|Thunnus]])''<br/>''T. ([[Neothunnus (subgenus)|Neothunnus]])''}} '''''Thunnus'''''<ref>Sic in lingua biologica; in lingua antiqua saepius ''thynnus'' scribebatur.</ref> (a Graeco θύννος) est [[genus (taxinomia)|genus]] magnorum piscium osseorum [[pinna|pennis]] radiatis ([[Actinopterygii|Actinopterygiorum]]) familiae [[Scombridae|Scombridarum]] qui oceanum habitant. Unum est ex quinque generibus quae tribum [[Thunnini|Thunninorum]] componunt. Thunni saepe ab hominibus eduntur. Nonnullae species [[species in discrimen adducta|in discrimen adducta]] sunt. == Taxinomia == [[Fasciculus:Thunnus spec 01.jpg|thumb|upright=1.25|''[[Thunnus]]'' sp.: fossile periodi [[Oligocaenum|Oligocaenae]] e cavea Frauenweiler-Unterfeld [[sedimentum Rauenbergense|sedimenti Rauenbergensis]] in [[Germania]] ([[Museum Civicum Historiae Naturalis Carolsruhense]])]] Genus ''Thunnus'' octo [[species (taxinomia)|species]], in duo subgenera divisas, comprehendit: * Subgenus ''[[Thunnus (subgenus)|Thunnus]]'': ** ''[[Thunnus alalunga|T. alalunga]]'' <small>([[Petrus Iosephus Bonnaterre|Bonnaterre]], 1788)</small>. ** ''[[Thunnus maccoyii|T. maccoyii]]'' <small>([[Franciscus Ludovicus Nompar de Caumat de Laporte Castelnau|Castelnau]], 1872)</small>. ** ''[[Thunnus obesus|T. obesus]]'' <small>(Lowe, 1839)</small>. ** ''[[Thunnus orientalis|T. orientalis]]'' <small>([[Conradus Iacobus Temminck|Temminck]] & [[Hermann Schlegel|Schlegel]], 1844)</small>. ** ''[[Thunnus thynnus|T. thynnus]]'' <small>([[Carolus Linnaeus|Linnaeus]], 1758)</small>. * Subgenus ''[[Neothunnus (subgenus)|Neothunnus]]'': ** ''[[Thunnus albacares|T. albacares]]'' <small>([[Petrus Iosephus Bonnaterre|Bonnaterre]], 1788)</small>. ** ''[[Thunnus atlanticus|T. atlanticus]]'' <small>([[Renatus Primevère Lesson|Lesson]], 1831)</small>. ** ''[[Thunnus tonggol|T. tonggol]]'' <small>([[Petrus Bleeker|Bleeker]], 1851)</small>. == Notae == <references /> == Bibliographia == {{Vide-etiam|Thunnini#Bibliographia}} ; Fontes antiquiores * 1524 : [[Paulus Iovius]], ''[[De Romanis piscibus libellus]]''. Romae: F.M. Calvo [https://archive.org/details/pauliiouiinouoco00giov/page/n37 cap. 6], [https://archive.org/details/pauliiouiinouoco00giov/page/n97 cap. 41] apud ''Internet Archive''; Carlo Zancaruolo, interpr., ''Libro ... de' pesci romani'' (Venetiis, 1560) [https://archive.org/details/bub_gb_9O5eSH2-bTgC/page/n73 pp. 74-79], [https://archive.org/details/bub_gb_9O5eSH2-bTgC/page/n191 192-197] * 1613 : [[Ulysses Aldrovandus]]; Ioannes Cornelius Uterverius, Hieronymus Tamburinus, edd., ''De piscibus libri V, et De cetis lib. unus'' (Bononiae) [https://web.archive.org/web/20110722062049/http://amshistorica.cib.unibo.it/diglib.php?inv=17 pp. 307-324] ; Eruditio recentior * Barbara A. Block, ed., ''The Future of Bluefin Tunas: Ecology, Fisheries Management, and Conservation''. Baltimorae: Johns Hopkins University Press, 2019 {{Google Books|pxKgDwAAQBAJ|Paginae selectae}} * Takashi Kitagawa, Shingo Kimura, edd., ''Biology and Ecology of Bluefin Tuna''. Boca Raton: CRC Press, 2016 {{Google Books|JBcqCgAAQBAJ|Paginae selectae}} [https://web.archive.org/web/20191225162504/http://dl.booktolearn.com/ebooks2/science/biology/9781498724876_biology_and_ecology_of_bluefin_tuna_8b8c.pdf Textus omnis] * Ivane R. Pedrosa-Gerasmio, Ricardo P. Babaran, Mudjekeewis D. Santos, "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0035604 Discrimination of Juvenile Yellowfin (Thunnus albacares) and Bigeye (T. obesus) Tunas using Mitochondrial DNA Control Region and Liver Morphology]" in ''PLOS One'' (19 Aprilis 2012) * Jordi Viñas, Sergi Tudela, "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0007606 A Validated Methodology for Genetic Identification of Tuna Species (Genus Thunnus)]" in ''PLOS One'' (27 Octobris 2009) == Nexus externi == {{Fontes biologici}} {{Vicispecies|Thunnus}} {{CommuniaCat|Thunnus|''Thunnum''}} * [http://www.fishbase.org/identification/SpeciesList.php?genus=Thunnus De ''Thunno''] apud ''FishBase'' * ''[http://planettuna.com/en/homeeng/ Planet Tuna]'' [[Categoria:Thunnus|!]] [[Categoria:Taxa South]] [[Categoria:Taxa 1845]] [[Categoria:Genera animalium]] [[Categoria:Pisces esculenti]] {{Myrias|Biologia}} hr254a0r463ikabil76tel28k1tzake Sula (Germania) 0 256847 3970997 3840123 2026-07-08T19:44:14Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970997 wikitext text/x-wiki {{L1}}[[File:Suhl Rathaus.jpg|thumb|Curia et statua Fabri armarii]] '''Sula'''<ref>Vide disputationem.</ref> vel '''Sulaha'''{{Fontes desiderati}} (Theodisce: ''Suhl'')<ref>[http://suhltrifft.de/english/index.php?option=com_content&task=view&id=16&Itemid=27 Aliud nomen est "Sulae", quod autem propter confusionem cum oppido Franciae quodam ([[Sula]]) vitetur]</ref> urbs est [[Thuringia]]e centralis quae hodie nulli districtui subdita est. == Geographica == Annis ab 1952 ad 1990 fuit caput Districtus Sulahae qui dicebatur. Civitatis foederalis Thuringiae urbs est maxima post [[Erfordia]]m [[Iena]]mque. Altitudo eius 422 metrorum super mare est; Kalendis Ianuariis 2015 habuit 36.208 incolarum. Lineam ferriviaria, quae a [[Mainingia]] Erfordiam ducit, oppidum tangit quoque. Propter situm in valle montibus inclusa viatores, ut itinera hinc hucve faciant, vocantur. == Historia == Iam anno 1232 mentio huius oppidi in documentis fit. Etymologice significat eius nomen "locum ubi ferae volvuntur". Mediis Aevis exeuntibus oecomonia progressa est metallis exercendis atque ferris tractandis. Maximi momenti erant pyxidum confectores. Attamen evolutio maxima post [[Secundum bellum mundanum]] demum factum est. == Res videndae == Media in urbe est invenitur '''''Aula synodalis''''' gigans, ubi praeter congressus concentus et spectacula et ludi scaenici dantur. Finitima valde est '''''Piscina Ottiliensis'''''. '''''Domus Philharmoniae''''' amicos cabareti invitat, sedem Thuringiorum symphonicorum Gotensium-Sulensium praebet, munere universitatis popularis fungitur. Iuxta has aedes musicas '''''Bibliotheca municipalis''''' nova erecta est: captans eius frons vitrea in qua legi possunt versus carminum. In via Steinweg, regione peditibus reservata, plures burgensium domus pulchrae sternuntur. Cuius in bifurcatione meridiana videtur '''''Ecclesia Crucis''''', constructa annis ab 1731 ad 1739. In fori centralis puteo stat urbis symbolum, '''''Statua fabri armorum'''''. Super '''''Curiae historicae''''' tympanum legas sententiam quandam de coniuratione [[Wolfgangus Kapp|Volfgangi Kapp]] anno 1920 facta referens. '''''Ecclesia Sanctae Mariae''''' [[genus conchatum|generis conchati]] plus quam quinque saecula stat ignes plures passa. Historia de armis faciendis in '''''Museo armorum''''' in Domu polentaria narratur, opere quodam craticio secundum genus Hennebergense-Franconicum constructo. Aliam traditionem provehit '''''Centrum collineationis''''' in monte Friedberg, quod inter totius orbis terrarum optimos exercitationum locos a collineationis cultoribus voluptariis habetur. '''''Magistratus collineatorius''''' in Germaniae septem institutis similibus antiquissimus est. == Notae == <references/> == Nexus externi == {{Commonscat|Suhl|Sulam}} {{Grc|Ζοῦλ}} [https://web.archive.org/web/20230507115316/https://www.suhltrifft.de/ Situs proprius] [[Categoria:Sulaha| ]] mb4mzyr8e864ce3en74ezg8819upbf9 The Elder Scrolls IV: Oblivion 0 261664 3971036 3857303 2026-07-09T02:18:48Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971036 wikitext text/x-wiki {{titulus italicus}} {{Ores|The Elder Scrolls IV: Oblivion}} ([[Anglice]]; scilicet "volumina vetusta IV - oblivio") est [[ludus electronicus]] ludi personarii et vehementiae a [[Bethesda Game Studios]] divulgatus et a [[Bethesda Softworks]] editus. [[America Septentrionalis|Americae Septentrionalis]] die [[20 Martii]] [[2006]] primum edendum curababur. Fabula agit lusoris studium cultui fanatico nomine Dilucidum Mythicum (Anglice ''Mythic Dawn'') exstirpare cui portas orbis Oblivio (''Oblivion'') vocati aperire vult. ''The Elder Scrolls IV: Oblivion'' successus ambo in pecunario et critico fit et praemiis affectum est. Duo involucra expansionalia edita sunt; ''The Elder Scrolls IV: Knights of the Nine'' die [[21 Novembris]] [[2006]] et ''The Elder Scrolls IV: Shivering Isles'' [[16 Octobris]] [[2007]]. ==Nexus externi== * [https://web.archive.org/web/20140903033354/http://www.elderscrolls.com/oblivion/ Pagina interretialis ludi proprius.] {{ling|Anglice}} [[Categoria:The Elder Scrolls]] [[Categoria:Ludi computatrales]] [[Categoria:Ludi televisifici]] 5s9iueley43y64wpbbc4sqku4vzj6z2 Suva 0 269649 3970999 3307955 2026-07-08T20:49:33Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970999 wikitext text/x-wiki {{Capsa urbis Vicidata}} '''Suva'''<ref>Vb. adiect. "Suvanus", cf. {{CathHierDiocese|suva|Archidioecesis Suvana}}</ref> est urbs capitalis [[Viti]]orum. Ad litus australe insulae [[Viti Levu]] floret, incolis anno 2007 ipsius municipii 85&nbsp;691 sed suburbanis comprehensis 175&nbsp;399. Vicus fuit indigenarum ante annum [[1868]], quo anno ''[[Polynesia Company]]'' Australiana ibi fundum [[gossypium|gossypiarium]] condidit. Insulis Vitiis sub [[imperium Britannicum|imperio Britannico]] ab anno [[1874]] receptis, oppido [[Levuka]] insulae [[Ovalau]] a principio capitali, Suva anno [[1882]] caput coloniae facta est; quam dignitatem libertate anno [[1970]] nacta retinuit. == Notae == <references /> == Bibliographia == [[Fasciculus:Cumming Street Suva MatthiasSuessen-8146.jpg|thumb|upright=1.25|Porticus vici ''Cumming Street'' Suva in urbe]] * S. Baksh, ''The Suva City Library: A Brief History and Development, 1909–1980''. 1980 * Korina Miller, Robyn Jones, Leonardo Pinheiro, ''Fiji'' (Lonely Planet, 2003) pp. 139–141 == Nexus externi == {{CommuniaCat|Suva|Suva}} {{Coord|18|8|S|178|26|E|display=title}} {{Fontes geographici}} * [https://web.archive.org/web/20160529002043/http://suvacity.org/ Situs municipalis] {{Urbes Oceaniae capitales}} [[Categoria:Suva|!]] [[Categoria:Viti Levu]] [[Categoria:Capita]] {{Myrias|Geographia}} bqls88zv4hm8rr1wwuzjtvemm5io46g Acidum glutamicum 0 275158 3970952 3970889 2026-07-08T14:06:51Z Marcus Terentius Bibliophilus 2059 /* Effectus in cerebro */ 3970952 wikitext text/x-wiki {| class="wikitable floatright" |+ '''Acidum glutamicum'''<br />'''Glutamatum''' |- ! colspan="2" | Cognitores |- | style="font-size: 85%" | ''[[ChemSpider]]'' || style="font-size: 85%" | [http://www.chemspider.com/Chemical-Structure.591.html 591] |- | style="font-size: 85%" | [[PubChem]] || style="font-size: 85%" | [https://pubchem.ncbi.nlm.nih.gov/compound/33032 33032] |- | style="font-size: 85%" | [[DrugBank]] || style="font-size: 85%" | [https://www.drugbank.ca/drugs/DB00142 DB00142] |- ! colspan="2" | Natura chemica |- | style="text-align: center" colspan="2" | [[Fasciculus:L-Glutaminsäure - L-Glutamic acid.svg|200px|Acidum glutamicum]] |- | style="text-align: center" colspan="2" | [[Fasciculus:L-Glutamic-acid-3D-balls.png|200px|Acidum glutamicum]] |- | style="font-size: 85%" | [[Formula chemica|Formula summata]] || style="font-size: 85%" | {{chem|C|5|H|9|N|O|4}} |- | style="font-size: 85%" | [[Massa molaris]] || style="font-size: 85%" | 147.130 g/mol |- |} '''<small>L</small>-acidum glutamicum''' (abbreviatura [[IUPAC]]:'''Glu''' vel '''E''') est α-[[aminoacidum]] formulae chemicae HOOC-CH(NH<sub>2</sub>)-(CH<sub>2</sub>)2-COOH et simul unum aminoacidorum viginti formationis [[proteinum|proteinorum]] in [[organismus|organismis]]<ref>PubChem [https://pubchem.ncbi.nlm.nih.gov/compound/33032 de acido glutamico].</ref>. In quibus proteinis [[Onus electricum|onere electrico]] negativo praeditum [[polymerum|monomerum]] [[acidum |acidum]] praebet. Forma iontibus onerata (sal acidi glutamici) '''glutamatum''' dicitur. In organismo vivo acidum glutamicum vel glutamatum [[Neurotransmissor|neurotransmissoris]] vice in cerebro fungitur. Nam neurotransmissorum in [[Synapsis chemica|synapsibus]] excitantibus cerebri agentium frequentissimum invenitur, quae synapses glutaminergicae dicuntur (magis quam dimidia pars synapsium in cerebro). == Natura chemica == Nomen [[IUPAC]] est acidum 2-amino-pentano-dioicum. <gallery> Fasciculus:L-Glutamate Structural Formulae.png|Glutamatum, sal acidi glutamici, electrice oneratum. </gallery> == Effectus in cerebro == === De glutamati cyclo in synapsibus === In [[cerebrum|cerebro]] acidum glutamicum tamquam [[neurotransmissor]] principalis excitans abundat<ref>{{cite journal |authors=Meldrum B. S. |title=Glutamate as a neurotransmitter in the brain: review of physiology and pathology |journal=The journal of nutrition |year=2000 |volume=130 |issue=4S Suppl. |pages=1007S-15S |url=https://www.ncbi.nlm.nih.gov/pubmed/10736372}}</ref>. In extrema parte [[Neuron|neuronum]] praesynapticorum neurotransmissor glutamatum e [[Glutaminum|glutamino]] a [[Cellula glialis|cellulis glialibus]] emisso et a transportatore SAT2 intra cellulam praesynapticam immisso elaboratur. Nam in [[Mitochondrium|mitochondriis]] [[enzymum]] [[Glutaminasis|glutaminasis]] glutaminum in glutamatum convertit quod deinde per [[Transportator glutamati|transportatorem VGLUT]] in [[vesicula|vesiculas]] insinuatur quae prope [[Membrana cellulae|membranam praesynapticam]] accumulantur. Cum [[Fluxus electricus|impulsibus electricis]] potentiae actionis glutamatum ex vesiculis praesynapticis in hiatum synapticum liberatur. Glutamatum per [[Aminum|transaminationem]] e [[Metabolitus|metabolito]] [[Cyclus acidi citrici|cycli acidi citrici]] quoque, hoc est ex α-cetoglutarato, in neuronibus produci potest cum [[glucosum]] [[Catabolismus|catabolizatur]]. [[Receptorium glutamati|Receptoria postsynaptica]] glutamati moleculas ligant. Tria [[Receptorium neurotransmissoris|receptoria ionotropa]] acidi glutamici nota sunt ([[receptorium NMDA|NMDA]], [[receptorium AMPA|AMPA]], kainati). Illa receptoria canales aperiunt quae [[Cation|cationta]] omnis generis admittunt (sodium, potassium, atque in NMDA etiam calcium) et potentiam postsynapticam gignunt. Nota sunt etiam tria alia [[Receptorium neurotransmissoris|receptoria metabotropa]]. Signo ad cellulam postsynapticam transmisso glutamatum celeriter e rima synaptica per [[Transportator glutamati|transportatores EAAT]] exterminatur, qui transportatores tam in membrana cellularum glialium quam neuronum praesynapticorum inserti sunt. In cellulis glialibus enzymum ''glutaminum synthetasis'' glutamatum in glutaminum convertit. Hoc glutaminum deinde per transportatorem SN1 e fluxu iontico [[sodium|Na]]+ pendentem e cellula expellitur ac rursus a neurone praesynaptico per tansportatorem SAT2 captatur ut denuo glutamatum fiat ad signa chemica danda accomodatum. [[Transportator glutamati|Transportatores speciales]], nominibus ''EAAT'' et ''VGLUT'', glutamatum liberum primum in [[cellula glialis|cellulam glialem]] propinquam absorbent, ab ea denique reabsorptio in cellulam neuronalem fit. Substantiae antagonistae systematis glutamatergici ''anti-glutamatergicae'' nominantur (exemplum: [[memantinum]]). === Toxicitas === In coniunctione quidem cum quibusdam substantiis aliis acidum glutamicum damnum efficere potest<ref>{{cite journal |authors=Clark I. A., Vissel B. |title=Excess cerebral TNF causing glutamate excitotoxicity rationalizes treatment of neurodegenerative diseases and neurogenic pain by anti-TNF agents |journal=Journal of neuroinflammation |year=2016 |volume=13 |issue=1 |pages=236 |url=https://www.ncbi.nlm.nih.gov/pubmed/27596607}}</ref>. == Notae == <references /> {{NexInt}} * [[Neurotransmissor]] * [[Receptorium glutamati]] * [[Systema excitans reticulare ascendens]] == Nexus externi == * [https://books.google.de/books?id=BOWoBgAAQBAJ&pg=PA19&dq=acidum+glutamicum&hl=de&sa=X&ved=0ahUKEwiezPubpILkAhVML1AKHXXzDAkQ6AEIMzAC#v=onepage&q=acidum%20glutamicum&f=false Fons nominis Latini] {{Ling|Theodisce}} [[Categoria:Acida aminica|G]] [[Categoria:Neurotransmissores]] [[Categoria:Systema glutamatergicum (glutamatum)|!]] 9g1r86v94gvq68hwv0dw81ha383s6he 3970953 3970952 2026-07-08T14:08:48Z Marcus Terentius Bibliophilus 2059 /* De glutamati cyclo in synapsibus */ 3970953 wikitext text/x-wiki {| class="wikitable floatright" |+ '''Acidum glutamicum'''<br />'''Glutamatum''' |- ! colspan="2" | Cognitores |- | style="font-size: 85%" | ''[[ChemSpider]]'' || style="font-size: 85%" | [http://www.chemspider.com/Chemical-Structure.591.html 591] |- | style="font-size: 85%" | [[PubChem]] || style="font-size: 85%" | [https://pubchem.ncbi.nlm.nih.gov/compound/33032 33032] |- | style="font-size: 85%" | [[DrugBank]] || style="font-size: 85%" | [https://www.drugbank.ca/drugs/DB00142 DB00142] |- ! colspan="2" | Natura chemica |- | style="text-align: center" colspan="2" | [[Fasciculus:L-Glutaminsäure - L-Glutamic acid.svg|200px|Acidum glutamicum]] |- | style="text-align: center" colspan="2" | [[Fasciculus:L-Glutamic-acid-3D-balls.png|200px|Acidum glutamicum]] |- | style="font-size: 85%" | [[Formula chemica|Formula summata]] || style="font-size: 85%" | {{chem|C|5|H|9|N|O|4}} |- | style="font-size: 85%" | [[Massa molaris]] || style="font-size: 85%" | 147.130 g/mol |- |} '''<small>L</small>-acidum glutamicum''' (abbreviatura [[IUPAC]]:'''Glu''' vel '''E''') est α-[[aminoacidum]] formulae chemicae HOOC-CH(NH<sub>2</sub>)-(CH<sub>2</sub>)2-COOH et simul unum aminoacidorum viginti formationis [[proteinum|proteinorum]] in [[organismus|organismis]]<ref>PubChem [https://pubchem.ncbi.nlm.nih.gov/compound/33032 de acido glutamico].</ref>. In quibus proteinis [[Onus electricum|onere electrico]] negativo praeditum [[polymerum|monomerum]] [[acidum |acidum]] praebet. Forma iontibus onerata (sal acidi glutamici) '''glutamatum''' dicitur. In organismo vivo acidum glutamicum vel glutamatum [[Neurotransmissor|neurotransmissoris]] vice in cerebro fungitur. Nam neurotransmissorum in [[Synapsis chemica|synapsibus]] excitantibus cerebri agentium frequentissimum invenitur, quae synapses glutaminergicae dicuntur (magis quam dimidia pars synapsium in cerebro). == Natura chemica == Nomen [[IUPAC]] est acidum 2-amino-pentano-dioicum. <gallery> Fasciculus:L-Glutamate Structural Formulae.png|Glutamatum, sal acidi glutamici, electrice oneratum. </gallery> == Effectus in cerebro == === De glutamati cyclo in synapsibus === In [[cerebrum|cerebro]] acidum glutamicum tamquam [[neurotransmissor]] principalis excitans abundat<ref>{{cite journal |authors=Meldrum B. S. |title=Glutamate as a neurotransmitter in the brain: review of physiology and pathology |journal=The journal of nutrition |year=2000 |volume=130 |issue=4S Suppl. |pages=1007S-15S |url=https://www.ncbi.nlm.nih.gov/pubmed/10736372}}</ref>. In extrema parte [[Neuron|neuronum]] praesynapticorum neurotransmissor glutamatum e [[Glutaminum|glutamino]] a [[Cellula glialis|cellulis glialibus]] emisso et a transportatore SAT2 intra cellulam praesynapticam immisso elaboratur. Nam in [[Mitochondrium|mitochondriis]] [[enzymum]] [[Glutaminasis|glutaminasis]] glutaminum in glutamatum convertit quod deinde per [[Transportator glutamati|transportatorem VGLUT]] in [[vesicula|vesiculas]] insinuatur quae prope [[Membrana cellulae|membranam praesynapticam]] accumulantur. Cum [[Fluxus electricus|impulsibus electricis]] potentiae actionis glutamatum ex vesiculis praesynapticis in hiatum synapticum liberatur. Glutamatum per [[Aminum|transaminationem]] e [[Metabolitus|metabolito]] [[Cyclus acidi citrici|cycli acidi citrici]] quoque, hoc est ex α-cetoglutarato, in neuronibus produci potest cum [[glucosum]] [[Catabolismus|catabolizatur]]. [[Receptorium glutamati|Receptoria postsynaptica]] glutamati moleculas ligant. Tria [[Receptorium neurotransmissoris|receptoria ionotropa]] acidi glutamici nota sunt ([[receptorium NMDA|NMDA]], [[receptorium AMPA|AMPA]], kainati). Illa receptoria canales aperiunt quae [[Cation|cationta]] omnis generis admittunt (sodium, potassium, atque in NMDA etiam calcium) et potentiam postsynapticam gignunt. Nota sunt etiam tria alia [[Receptorium neurotransmissoris|receptoria metabotropa]]. Signo ad cellulam postsynapticam transmisso glutamatum celeriter e rima synaptica per [[Transportator glutamati|transportatores EAAT]] exterminatur, qui transportatores tam in membrana cellularum glialium quam neuronum praesynapticorum inserti sunt. In cellulis glialibus enzymum ''glutaminum synthetasis'' glutamatum in glutaminum convertit. Hoc glutaminum deinde per transportatorem SN1 e fluxu iontico [[sodium|Na]]+ pendentem e cellula gliali expellitur ac rursus a neurone praesynaptico per tansportatorem SAT2 captatur ut denuo glutamatum fiat ad signa chemica danda accomodatum. [[Transportator glutamati|Transportatores speciales]], nominibus ''EAAT'' et ''VGLUT'', glutamatum liberum primum in [[cellula glialis|cellulam glialem]] propinquam absorbent, ab ea denique reabsorptio in cellulam neuronalem fit. Substantiae antagonistae systematis glutamatergici ''anti-glutamatergicae'' nominantur (exemplum: [[memantinum]]). === Toxicitas === In coniunctione quidem cum quibusdam substantiis aliis acidum glutamicum damnum efficere potest<ref>{{cite journal |authors=Clark I. A., Vissel B. |title=Excess cerebral TNF causing glutamate excitotoxicity rationalizes treatment of neurodegenerative diseases and neurogenic pain by anti-TNF agents |journal=Journal of neuroinflammation |year=2016 |volume=13 |issue=1 |pages=236 |url=https://www.ncbi.nlm.nih.gov/pubmed/27596607}}</ref>. == Notae == <references /> {{NexInt}} * [[Neurotransmissor]] * [[Receptorium glutamati]] * [[Systema excitans reticulare ascendens]] == Nexus externi == * [https://books.google.de/books?id=BOWoBgAAQBAJ&pg=PA19&dq=acidum+glutamicum&hl=de&sa=X&ved=0ahUKEwiezPubpILkAhVML1AKHXXzDAkQ6AEIMzAC#v=onepage&q=acidum%20glutamicum&f=false Fons nominis Latini] {{Ling|Theodisce}} [[Categoria:Acida aminica|G]] [[Categoria:Neurotransmissores]] [[Categoria:Systema glutamatergicum (glutamatum)|!]] hdc7kyl1jir8x8bcyqsve93jsr8cd5n Psalmus 52 0 281608 3971068 3905235 2026-07-09T08:19:44Z Ailamnos 165281 Ill. 3971068 wikitext text/x-wiki [[Fasciculus:Folchard 001.jpg|thumb|[[Littera initialis]] psalmi 53 (52) in [[psalterium Folchardi|psalterio Folchardi]] (circa annum 870 facto)]] [[Fasciculus:German - Leaf from Claricia Psalter - Walters W2664R - Open Obverse.jpg|thumb|Psalmus 53 (52) in [[psalterium Clariciae|psalterio Clariciae]] (saeculo XII facto)]] '''Psalmus 52''' (enumeratione Graeca '''psalmus 51''' dictus) [[liber Psalmorum|libri Psalmorum]] verbis "'''Quid gloriaris'''" incipit; etiam habet [[superscriptio]]nem: "Magistro chori. [[Maskil]]. [[David (rex)|David]]" (sic in [[Nova Vulgata]]). Hic psalmus fallaces a Deo iudicatos tractat.<ref>"Judgment on the Deceitful", titulus in ''[[New Revised Standard Version]]'' apud [https://www.biblegateway.com/passage/?search=Psalm+52&version=NRSV BibleGateway].</ref> == Verba psalmi == Haec sunt verba psalmi 52 (51) ex versione [[vulgata Clementina]]: <blockquote><poem> <sup>1</sup> In finem. Intellectus [[David (rex)|David]], <sup>2</sup> cum venit [[Doëg]] [[Idumaei|Idumaeus]], et nuntiavit [[Saul]]i: Venit David in domum [[Achimelech]]. <sup>3</sup> Quid gloriaris in malitia, qui potens es in iniquitate? <sup>4</sup> Tota die iniustitiam cogitavit lingua tua; sicut novacula acuta fecisti dolum. <sup>5</sup> Dilexisti malitiam super benignitatem; iniquitatem magis quam loqui aequitatem. <sup>6</sup> Dilexisti omnia verba praecipitationis; lingua dolosa. <sup>7</sup> Propterea Deus destruet te in finem; evellet te, et emigrabit te de [[tabernaculum|tabernaculo]] tuo, et radicem tuam de terra viventium. <sup>8</sup> Videbunt iusti, et timebunt; et super eum ridebunt, et dicent: <sup>9</sup> Ecce homo qui non posuit Deum adiutorem suum; sed speravit in multitudine divitiarum suarum, et praevaluit in vanitate sua. <sup>10</sup> Ego autem, sicut [[oliva]] fructifera in domo Dei; speravi in misericordia Dei, in aeternum et in saeculum saeculi. <sup>11</sup> Confitebor tibi in saeculum, quia fecisti; et exspectabo nomen tuum, quoniam bonum est in conspectu sanctorum tuorum. </poem></blockquote> == Lectio christiana == [[Fasciculus:Bosworth Psalter - British Library Add MS 37517 f33r (Quid Gloriaris).jpg|thumb|Idem in psalterio Bosworthiensi, exeunte saeculo decimo scripto]] "Sicut Novi Testamenti inspirati scriptores, primae communitates christianae librum relegunt Psalmorum in eis Christi canentes mysterium".<ref>Cathechismus Catholicae Ecclesiae, [https://www.vatican.va/archive/catechism_lt/p4s1c1a3_lt.htm] numerus 2641</ref> === Titulus Psalmi === "In Psalterio Liturgiæ Horarum, unicuique psalmo præmittitur titulus de eius sensu et momento pro humana credentis vita. Hi tituli in libro Liturgiæ Horarum tantum ad utilitatem psallentium proponuntur".<ref>Institutio generalis liturgia horarum, numerus 111.</ref> Titulus Psalmi 52 in Liturgia horarum est ''Contra calumniatorem''. === Descriptio Psalmi === [[Ioannes Calvinus]], theologiae [[Reformatio]]nis fautor, sic argumentum psalmi descripsit: <blockquote> Quum occiso [[Achimelech]], et religuis [[sacerdos|Sacerdotibus]] passim terror iniectus esset toti populo, nequis [[David (rex)|Davidem]] iuvare auderet, ac [[Doeg]] ob prosperum impiae delationis successum, triumphos suos ageret, sanctus vir nihilominus animum fide erigens, Psalmum hunc composuit: ubi improbi delatoris crudeli perfidiae insultat, seque ad bene sperandum hortatur, quia Deus in caelo iustus iudex sedeat, tum ad opem servis suis ferendam qui spes suas omnes in eum coniiciunt, tum ad ulcisendam eorum superbiam, qui eo contempto, quidvis sibi pro libidine indulgent.<ref>In librum Psalmorum, Iohannis Calvini commentarius (Oliva Roberti Stephani, 1557), argumentum Psalmi 52, [https://viewer.hlb-wuppertal.de/viewer/image/1366186432524/263/LOG_0056/ p. 251].</ref></blockquote> == Notae == <references /> == Nexus externi == {{CommuniaCat|Psalm 52|Psalmum 52}} * [https://web.archive.org/web/20201204011032/https://www.academic-bible.com/en/online-bibles/biblia-sacra-vulgata/read-the-bible-text/bibel/text/lesen/stelle/19/510001/ Psalmus 51] in versione Vulgata Stuttgartensi (iuxta Hebraicum) * [https://web.archive.org/web/20140109114302/http://vulsearch.sourceforge.net/html/Ps.html#x51_1 Psalmus 51] in Vulgata Clementina (versione Gallicana) * [http://www.vatican.va/archive/bible/nova_vulgata/documents/nova-vulgata_vt_psalmorum_lt.html#PSALMUS%2052 Psalmus 52] in [[Nova Vulgata]] * [https://www.chabad.org/library/bible_cdo/aid/16273#showrashi=true Psalmus 52 cum commentario Rashi] {{ling|Hebraice|Anglice}} {{Psalmi}} [[Categoria:Liber Psalmorum]] 83e12sof2vxn8uqi8yw34m2dc2saaj1 3971069 3971068 2026-07-09T08:20:29Z Ailamnos 165281 Numeri correcti 3971069 wikitext text/x-wiki [[Fasciculus:Folchard 001.jpg|thumb|[[Littera initialis]] psalmi 52 (51) in [[psalterium Folchardi|psalterio Folchardi]] (circa annum 870 facto)]] [[Fasciculus:German - Leaf from Claricia Psalter - Walters W2664R - Open Obverse.jpg|thumb|Psalmus 52 (51) in [[psalterium Clariciae|psalterio Clariciae]] (saeculo XII facto)]] '''Psalmus 52''' (enumeratione Graeca '''psalmus 51''' dictus) [[liber Psalmorum|libri Psalmorum]] verbis "'''Quid gloriaris'''" incipit; etiam habet [[superscriptio]]nem: "Magistro chori. [[Maskil]]. [[David (rex)|David]]" (sic in [[Nova Vulgata]]). Hic psalmus fallaces a Deo iudicatos tractat.<ref>"Judgment on the Deceitful", titulus in ''[[New Revised Standard Version]]'' apud [https://www.biblegateway.com/passage/?search=Psalm+52&version=NRSV BibleGateway].</ref> == Verba psalmi == Haec sunt verba psalmi 52 (51) ex versione [[vulgata Clementina]]: <blockquote><poem> <sup>1</sup> In finem. Intellectus [[David (rex)|David]], <sup>2</sup> cum venit [[Doëg]] [[Idumaei|Idumaeus]], et nuntiavit [[Saul]]i: Venit David in domum [[Achimelech]]. <sup>3</sup> Quid gloriaris in malitia, qui potens es in iniquitate? <sup>4</sup> Tota die iniustitiam cogitavit lingua tua; sicut novacula acuta fecisti dolum. <sup>5</sup> Dilexisti malitiam super benignitatem; iniquitatem magis quam loqui aequitatem. <sup>6</sup> Dilexisti omnia verba praecipitationis; lingua dolosa. <sup>7</sup> Propterea Deus destruet te in finem; evellet te, et emigrabit te de [[tabernaculum|tabernaculo]] tuo, et radicem tuam de terra viventium. <sup>8</sup> Videbunt iusti, et timebunt; et super eum ridebunt, et dicent: <sup>9</sup> Ecce homo qui non posuit Deum adiutorem suum; sed speravit in multitudine divitiarum suarum, et praevaluit in vanitate sua. <sup>10</sup> Ego autem, sicut [[oliva]] fructifera in domo Dei; speravi in misericordia Dei, in aeternum et in saeculum saeculi. <sup>11</sup> Confitebor tibi in saeculum, quia fecisti; et exspectabo nomen tuum, quoniam bonum est in conspectu sanctorum tuorum. </poem></blockquote> == Lectio christiana == [[Fasciculus:Bosworth Psalter - British Library Add MS 37517 f33r (Quid Gloriaris).jpg|thumb|Idem in psalterio Bosworthiensi, exeunte saeculo decimo scripto]] "Sicut Novi Testamenti inspirati scriptores, primae communitates christianae librum relegunt Psalmorum in eis Christi canentes mysterium".<ref>Cathechismus Catholicae Ecclesiae, [https://www.vatican.va/archive/catechism_lt/p4s1c1a3_lt.htm] numerus 2641</ref> === Titulus Psalmi === "In Psalterio Liturgiæ Horarum, unicuique psalmo præmittitur titulus de eius sensu et momento pro humana credentis vita. Hi tituli in libro Liturgiæ Horarum tantum ad utilitatem psallentium proponuntur".<ref>Institutio generalis liturgia horarum, numerus 111.</ref> Titulus Psalmi 52 in Liturgia horarum est ''Contra calumniatorem''. === Descriptio Psalmi === [[Ioannes Calvinus]], theologiae [[Reformatio]]nis fautor, sic argumentum psalmi descripsit: <blockquote> Quum occiso [[Achimelech]], et religuis [[sacerdos|Sacerdotibus]] passim terror iniectus esset toti populo, nequis [[David (rex)|Davidem]] iuvare auderet, ac [[Doeg]] ob prosperum impiae delationis successum, triumphos suos ageret, sanctus vir nihilominus animum fide erigens, Psalmum hunc composuit: ubi improbi delatoris crudeli perfidiae insultat, seque ad bene sperandum hortatur, quia Deus in caelo iustus iudex sedeat, tum ad opem servis suis ferendam qui spes suas omnes in eum coniiciunt, tum ad ulcisendam eorum superbiam, qui eo contempto, quidvis sibi pro libidine indulgent.<ref>In librum Psalmorum, Iohannis Calvini commentarius (Oliva Roberti Stephani, 1557), argumentum Psalmi 52, [https://viewer.hlb-wuppertal.de/viewer/image/1366186432524/263/LOG_0056/ p. 251].</ref></blockquote> == Notae == <references /> == Nexus externi == {{CommuniaCat|Psalm 52|Psalmum 52}} * [https://web.archive.org/web/20201204011032/https://www.academic-bible.com/en/online-bibles/biblia-sacra-vulgata/read-the-bible-text/bibel/text/lesen/stelle/19/510001/ Psalmus 51] in versione Vulgata Stuttgartensi (iuxta Hebraicum) * [https://web.archive.org/web/20140109114302/http://vulsearch.sourceforge.net/html/Ps.html#x51_1 Psalmus 51] in Vulgata Clementina (versione Gallicana) * [http://www.vatican.va/archive/bible/nova_vulgata/documents/nova-vulgata_vt_psalmorum_lt.html#PSALMUS%2052 Psalmus 52] in [[Nova Vulgata]] * [https://www.chabad.org/library/bible_cdo/aid/16273#showrashi=true Psalmus 52 cum commentario Rashi] {{ling|Hebraice|Anglice}} {{Psalmi}} [[Categoria:Liber Psalmorum]] l6xw3m7h3hmqwurf1jiqbfo0asuvjkx Spelunca Baishiya 0 282123 3970983 3955564 2026-07-08T16:17:16Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970983 wikitext text/x-wiki {{charta locatrix | Thibeti | label = Spelunca Baishiya | lat_deg = 35 |lat_min =27 | lon_deg = 102 | lon_min = 34 | position = left | mark = Black pog.svg | background = | width =400 | float =right | caption = Situs speluncae Baishiya ad fines orientales altae planitiei Thibetanae }} {{res|Spelunca Baishiya}}, [[Sinice]] 白石崖, est caverna sub monte [[carstus|carstico]] ad fines occidentales provinciae [[Gansu]] [[Sinae (regio)|Sinensis]] extremitatemque orientalem provinciae antiquae [[Tibetum|Thibetanae]] [[Amdo]] latens. Est iam diu locus sacer religionis [[Buddhismus|Buddhisticae]], prope monasterium Baishiya neque longe a magno monasterio [[Labrang]] stans. Fuit etiam locus habitationis aevi palaeolithici. [[Mandibulum Xiahe|Mandibulum]] ibi repertum ad progeniem [[Homo Denisovensis|hominum Denisovensium]] attribuitur. Mandibulum anno [[1980]] a monacho quodam dum meditabat repertum statim abbati Labrangensi {{safesubst:Nexus ad paginam creandam creatamve|Jigme Tenpe Wangchug||de|qid=Q15925474}} datum est, qui ad eruditos [[universitas Lanzhouensis|universitatis Lanzhouensis]] mox transmisit. Ibi autem non ante annum [[2010]] inquisitio de forma et origine mandibuli incipitur, duce [[Chen Fahu]], qui anno [[2018]], spelunca partim effossa, aliis vestigiis repertis, os abhinc 160&nbsp;000 depositum statuit et (per analysim proteinorum) progeniei Denisovensi coniunxit. == Bibliographia == * Shara E. Bailey, Jean-Jacques Hublin, Susan C. Antón, "[https://web.archive.org/web/20190713184107/https://www.pnas.org/content/early/2019/07/02/1907557116 Rare dental trait provides morphological evidence of archaic introgression in Asian fossil record]" in ''PNAS'' (8 Iulii 2019) * [[Chen Fahu|Fahu Chen]], "[https://web.archive.org/web/20190714194440/https://zeiss-microscopy.uberflip.com/education/a-late-middle-pleistocene-denisovan-mandible-from-the-tibetan-plateau A late Middle Pleistocene Denisovan mandible from the Tibetan Plateau]" in ''[[Nature]]'' vol. 569 (2019) pp. 409–412 * Ann Gibbons, "[https://www.sciencemag.org/news/2019/05/first-fossil-jaw-denisovans-finally-puts-face-elusive-human-relatives First fossil jaw of Denisovans finally puts a face on elusive human relatives]" in ''[[Science]]'' (1 Maii 2019) * Matthew Warren, "[https://www.nature.com/articles/d41586-019-01395-0 Biggest Denisovan fossil yet spills ancient human’s secrets]" in ''[[Nature]] News'' (1 Maii 2019) == Nexus externi == * Jean-Jacques Hublin, "[https://www.sapiens.org/evolution/xiahe-jaw-denisovan/ How We Found an Elusive Hominin in China]" * "[https://www.hominides.com/html/actualites/denisova-tibet-machoire-160000-ans-1354.php Une mâchoire de Denisovien trouvée au Tibet et datée de 160 000 ans]" (1 Maii 2019) apud ''Hominidés.com'' * [https://web.archive.org/web/20241130081811/https://baike.baidu.com/item/%E7%99%BD%E7%9F%B3%E5%B4%96 De oppido vel monasterio Baishiya] apud ''Baidu'' * [https://web.archive.org/web/20190626184329/http://www.bytravel.cn/Landscape/14/baishiyarongdong.html De oppido vel monasterio Baishiya] apud ''ByTravel'' * [https://piao.ctrip.com/ticket/dest/t1704141.html De monte Baishiya] apud ''Ctrip'' [[Categoria:Cavernae]] [[Categoria:Loci archaeologici Sericae]] [[Categoria:Loci habitati palaeolithici]] [[Categoria:Gansu]] gr8xnsnwt2olhiwgcx0v1uesnjvvk2c Transportator glutamati 0 282818 3970954 3470770 2026-07-08T14:10:45Z Marcus Terentius Bibliophilus 2059 3970954 wikitext text/x-wiki {{cautio}} '''Transportatores glutamati''' sunt [[proteinum|proteina]], quae [[glutamatum]] [[neurotransmissor]]em de [[fissura synaptica]] in propinquas [[cellula glialis|cellulas gliales]] absorbent, quo transmissio in [[bulbulus terminalis|bulbulum terminalem praesynapticum]] fit. Hodie duae subclasses transportatorum glutamati nota sunt: * Transportatores aminoacidorum excitantium (TAAE)<ref>{{cite journal |authors=Parkin GM1, Udawela M., Gibbons A., Dean B. |title=Glutamate transporters, EAAT1 and EAAT2, are potentially important in the pathophysiology and treatment of schizophrenia and affective disorders |journal=World journal of psychiatry |year=2018 |month=Iun |volume=8 |issue=2 |pages=51-63 |url=https://www.ncbi.nlm.nih.gov/pubmed/29988908}}</ref> — ii sunt transportatores ''secundarios'', quod est, ii neurotransmissores in cellulam proprinquam (hic: cellulam glialem) absorbent. * Transportatores glutamati vesiculares (TGLUV) — ii sunt transportatores in ''vesiculis'' neuronorum ''praesynapticorum'' locati, ad vesiculas re-onerandas neurotransmissoris glutamati. Medicamenta futura contra schizophreniam et depressionem ad transportatores glutamati spectare possint. == Notae == <references /> {{NexInt}} * [[Synapsis chemica]] [[Categoria:Systema glutamatergicum (glutamatum)]] [[Categoria:Transportatores neurotransmissoris|Glutamati transportator]] pemksbu8qblyyskc8z9uuchs5gurinx 3970955 3970954 2026-07-08T14:11:52Z Marcus Terentius Bibliophilus 2059 3970955 wikitext text/x-wiki {{cautio}} '''Transportatores glutamati''' sunt [[proteinum|proteina]], quae [[glutamatum]] [[neurotransmissor]]em de [[fissura synaptica]] in propinquas [[cellula glialis|cellulas gliales]] absorbent, quo transmissio in [[bulbulus terminalis|bulbulum terminalem praesynapticum]] fit. Hodie duae subclasses transportatorum glutamati nota sunt: * Transportatores aminoacidorum excitantium (TAAE)<ref>{{cite journal |authors=Parkin GM1, Udawela M., Gibbons A., Dean B. |title=Glutamate transporters, EAAT1 and EAAT2, are potentially important in the pathophysiology and treatment of schizophrenia and affective disorders |journal=World journal of psychiatry |year=2018 |month=Iun |volume=8 |issue=2 |pages=51-63 |url=https://www.ncbi.nlm.nih.gov/pubmed/29988908}}</ref> — ii sunt transportatores ''secundarii'', hoc est ii neurotransmissores in cellulam proximam (hic: cellulam glialem) absorbent. * Transportatores glutamati vesiculares (TGLUV) — ii sunt transportatores in ''vesiculis'' neuronorum ''praesynapticorum'' locati, ad vesiculas re-onerandas neurotransmissoris glutamati. Medicamenta futura contra schizophreniam et depressionem ad transportatores glutamati spectare possint. == Notae == <references /> {{NexInt}} * [[Synapsis chemica]] [[Categoria:Systema glutamatergicum (glutamatum)]] [[Categoria:Transportatores neurotransmissoris|Glutamati transportator]] 4v6nuphycukta5amtjwud5zk4igqpow Gradus caloris 0 284057 3971062 3484257 2026-07-09T07:19:29Z Grufo 64423 Duplam redirectionem correxi 3971062 wikitext text/x-wiki #REDIRECT [[Temperatura]] n695k7exq73u2edoz97tl3fzgb2raf9 Turma nationalis Hiberniae (harpastum XV) 0 284143 3971079 3486244 2026-07-09T10:55:30Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971079 wikitext text/x-wiki {{L}} [[Fasciculus:IRFU flag.svg|thumb|Vexillum harpasticum Hiberniae.]] [[Fasciculus:2009 Six Nations Champions - Ireland.jpg|thumb|Turma virorum victoriam in certamine 6 Nationum celebrans anno [[2009]]]] '''Turma nationalis Hibernicae [[harpastum XV|harpasti XV lusoribus]]''' ([[Anglice]]: ''Ireland national rugby union team'') est manus lusorum [[Hibernia]]e insulae totae, tam civitatis [[Irlandia]]e quam [[Hibernia Septentrionalis|pars Britannica septentrionalis]]. Sunt turmae virorum et mulierum, et ambae in [[Certamen 6 Nationum|Certamine 6 Nationum]] contendent annualiter. Etiam in [[Certamen mundanum harpasticum|Certamine mundano]] pugnat, et lusores turmae Hibernicae electuri sunt [[Leones Britanni et Hiberni|Leonibus]]. Prima turma creatur anno [[1875]]. Hibernia ludet in tuniculis et impiliis [[viridis|viridibus]] cum [[bracae|bracis]] [[albus|albis]]. Insigne turmae est [[trifolium repens|trifolium]]. ==Bibliographia== *English, T. (2018). ''No borders : Playing rugby for Ireland (Grand slam ed.)''. Edinburgo: Arena Sport. *Walmsley, D. (2012). ''Lions of Ireland : A celebration of Irish rugby legends''. Londino {{nexInt}} *[[Harpastum XV in Hibernia]] ==Nexus externi== {{communia|Category:Ireland national rugby union team|Turmam nationalem harpasticam Hiberniae}} * [https://web.archive.org/web/20150905095241/http://www.irishrugby.ie/ireland/teams/ireland.php Situs spublicus] [[Categoria:Turmae nationales (harpastum XV)|Hibernia]] [[Categoria:Hibernia]] 3082usikmx46athsxvy4pgj6rno14rl Thunnini 0 284997 3971050 3776620 2026-07-09T05:37:55Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3971050 wikitext text/x-wiki {{Capsa taxinomica | image = Bluefin-big.jpg | image_caption = ''[[Thunnus thynnus]]'' | regnum = [[Animalia]] | phylum = [[Chordata]] | classis = [[Actinopterygii]] | ordo = [[Perciformes]] | subordo = [[Scombroidei]] | familia = [[Scombridae]] | tribus = '''Thunnini''' | tribus_authority = [[Edwinus Chapin Starks|Starks]], [[1910]] }} '''Thunnini''' sunt [[tribus (taxinomia)|tribus]] [[pisces|piscium]] familiae [[Scombridae|Scombridarum]], ad quem quinque genera pertinent, videlicet ''[[Allothunnus]]'', ''[[Auxis]]'', ''[[Euthynnus]]'', ''[[Katsuwonus]]'', ''[[Thunnus]]''. Multae species huius tribus ab hominibus propter carnes edules venantur. == Species selectae == * ''[[Auxis rochei]]'' * ''[[Euthynnus affinis]]'' * ''[[Katsuwonus pelamis]]'' * ''[[Thunnus alalunga]]'' * ''[[Thunnus thynnus]]'' == Fontes antiqui == * {{Strabo}} [https://el.wikisource.org/wiki/Γεωγραφικά/Γ 3.2.7], [https://el.wikisource.org/wiki/Γεωγραφικά/Ζ#6 7.6.2] * {{Pnh}} [http://penelope.uchicago.edu/Thayer/L/Roman/Texts/Pliny_the_Elder/9*.html#47 9.47-54] == Bibliographia == ; Eruditio antiquior * 1613 : [[Ulysses Aldrovandus]]; Ioannes Cornelius Uterverius, Hieronymus Tamburinus, edd., ''De piscibus libri V, et De cetis lib. unus'' (Bononiae) [https://web.archive.org/web/20110722062049/http://amshistorica.cib.unibo.it/diglib.php?inv=17 pp. 307-324, cf. 327-329] ; Eruditio recentior * ''ICCAT Manual''. International Commission for the Conservation of Atlantic Tuna, 2006- [https://www.iccat.int/en/iccatmanual.html Textus] * Barbara A. Block, E. Donald Stevens, edd., ''Tuna: Physiology, Ecology, and Evolution''. Didacopoli: Academic Press, 2001 {{Google Books|M0ghO6oLXnEC|Paginae selectae}} [https://www.scribd.com/document/343735568/Fish-Physiology-2001-Vol-19-Tuna-Physiology-Ecology-And-Evolution Textus] apud ''ScribD'' * Ashley Fowler, "[https://www.academia.edu/2492033/Onshore-offshore_distribution_and_abundance_of_tuna_larvae_Pisces_Scombridae_Thunnini_in_near-reef_waters_of_the_Coral_Sea Onshore-offshore distribution and abundance of tuna larvae (Pisces: Scombridae: Thunnini) in near-reef waters of the Coral Sea]" in ''Fisheries Bulletin'' vol. 106 (2008) pp. 405–416 * Jeffrey B. Graham, Kathryn Dickson, "[https://www.researchgate.net/publication/8218104_Tuna_comparative_physiology Tuna comparative physiology]" in ''Journal of Experimental Biology'' vol. 207 (2004) pp. 4015-4024 * Takashi Kitagawa, Shingo Kimura, Hideaki Nakata, Harumi Yamada, "[https://web.archive.org/web/20170810224231/http://polaris.nipr.ac.jp/~penguin/oogataHP/pdfarticles/07p69-79.pdf Overview of research on tuna thermo-physiology using electric tags]" in ''Mem. Natl Inst. Polar Res., Spec. Issue'' vol. 58 (2004) pp. 69–79 * Makoto Peter Miyake, Patrice Guillotreau, Chin-Hwa Sun, Gakushi Ishimura, ''[http://www.fao.org/3/a-i1705e.pdf Recent developments in the tuna industry: stocks, fisheries, management, processing, trade and markets]''. Romae: FAO, 2010 * Makoto Peter Miyake, Naozumi Miyabe, Hideki Nakano, ''[http://www.fao.org/3/y5428e/y5428e00.htm Historical trends of tuna catches in the world]''. Romae: FAO, 2004 * Alberto Monllor-Hurtado, Maria Grazia Pennino, José Luis Sanchez-Lizaso, "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178196 Shift in tuna catches due to ocean warming]" in ''PLOS One'' (7 Iunii 2017) * Paul Rhode, ''Thynnorum captura quanti fuerit apud veteres momenti''. Lipsiae: Teubner, 1890 * Gary Sharp, Andrew E. Dizon, ed., ''The Physiological Ecology of Tunas''. Londinii: Academic Press, 1978 {{Google Books|VddqDEK7iqIC|Paginae selectae}} ; De carnibus venditatis * Ana Gordoa, Gustavo Carreras, Nuria Sanz, Jordi Viñas, "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0170809 Tuna Species Substitution in the Spanish Commercial Chain: A Knock-On Effect]" in ''PLOS One'' (26 Ianuarii 2017) * Jacob H. Lowenstein, George Amato, Sergios-Orestis Kolokotronis, "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0007866 The Real maccoyii: Identifying Tuna Sushi with DNA Barcodes – Contrasting Characteristic Attributes and Genetic Distances]" in ''PLOS One'' (18 Novembris 2009) * Carmen G. Sotelo et al., "[https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0196641 Tuna labels matter in Europe: Mislabelling rates in different tuna products]" in ''PLOS One'' (16 Maii 2018) == Nexus externi == {{Fontes biologici}} {{Vicispecies|Thunnini}} * ''International Commission for the Conservation of Atlantic Tunas. Report ... 2018''. Matriti, 2019 [https://www.iccat.int/Documents/BienRep/REP_EN_18-19_I-1.pdf Vol. 1] [https://www.iccat.int/Documents/BienRep/REP_EN_18-19_I-2.pdf vol. 2] * "[http://www.fao.org/fishery/topic/16082/en Biological characteristics of tuna]" apud ''FAO'' * "[http://firms.fao.org/firms/fishery/459/en World Global Tuna Fisheries]" apud ''FAO'' * "[https://paleobiodb.org/classic/checkTaxonInfo?taxon_no=352611 Thunnini]" apud ''PaleoBioDB'' * ''[http://planettuna.com/en/homeeng/ Planet Tuna]'' [[Categoria:Scombridae]] [[Categoria:Tribus animalium]] [[Categoria:Taxa Starks]] [[Categoria:Taxa 1910]] k3iu4fbbb72kvaj3zipss2p0nn5xuga Holocaustum (sacrificium) 0 291778 3970960 3871852 2026-07-08T15:06:10Z LilyKitty 18316 de animalibus in religione Iudaica 3970960 wikitext text/x-wiki '''Holocaustum'''<ref>{{TLL}}</ref> seu '''holocautoma'''<ref>{{TLL}}</ref> (ex [[Graece]], ὁ ὁλόκαυστον —''holókauston—'', ὁλον ‘totum’ atque καυστον ‘ustum’) est [[sacrificium]] Deis inferi, quo in [[ara]] tota res sacrae sive religiosae in [[ignis|igne]] uritur, et differt a sacrificio usitato,<ref>In [[religio Iudaica|religione Iudaica]], exampli gratia, [[ovis]] et [[capra aegagrus hircus]]</ref> ubi pars [[caro|carnis]] a participibus estur. Olim, in [[religio Romana|religione Romanorum]], animalia aurea sive atra ―id est quod ad noctem adstringimur― diis inferi sive manibus sacratae potestate Populi Romani decretae sunt. == Notae == <references /> == Nexus externi == * [https://www.newadvent.org/cathen/07396b.htm De holocaustis] in ''The Catholic Encyclopedia'' (1910) [[Categoria:Sacrificium]] swowfs63b18qy1wbfx9crerhzqx3fb3 Formula:Parametrum/doc 10 308702 3971018 3970856 2026-07-09T00:31:02Z Grufo 64423 Documentationem redintegravi 3971018 wikitext text/x-wiki {{Subpagina documentationis}} {{Formula substituibilis|...}} {{Compendia formulae|para}} {{Videantur etiam|Formula:Parametrum in formula|Formula:Parametrum in formula sine typographia}} Utere hac formula ut parametrum [[Vicipaedia:Formula|formulae]] ostendas. == De usu == * <syntaxhighlight lang="wikitext" inline>Vide argumentum {{para|inspicitur}}</syntaxhighlight> *: ↳ Vide argumentum {{para|inspicitur}} * <syntaxhighlight lang="wikitext" inline>{{para|inspicitur|latinitas}}</syntaxhighlight> *: ↳ {{para|inspicitur|latinitas}} * <syntaxhighlight lang="wikitext" inline>{{para|inspicitur|latinitas|forma=plana}}</syntaxhighlight> *: ↳ {{para|inspicitur|latinitas|forma=plana}} * <syntaxhighlight lang="wikitext" inline>{{para}}</syntaxhighlight> *: ↳ {{para}} * <syntaxhighlight lang="wikitext" inline>{{para|}}</syntaxhighlight> *: ↳ {{para|}} * <syntaxhighlight lang="wikitext" inline>{{para||xxx}}</syntaxhighlight> *: ↳ {{para||xxx}} * <syntaxhighlight lang="wikitext" inline>{{para|2=xxx}}</syntaxhighlight> *: ↳ {{para|2=xxx}} == De argumentis == <templatedata>{ "description": "Haec formula nomen parametri (et scripta quae ipsum continet) ostendit.", "format": "inline", "params": { "1": { "label": "Nomen parametri", "description": "Nomen parametri", "example": "inspicitur", "type": "string", "required": true }, "2": { "label": "Contenta parametri", "description": "Contenta parametri", "example": "latinitas", "type": "string", "required": false }, "forma": { "label": "Forma", "description": "Scribe |forma=plana si parametrum ostentum eadem forma verborum contiguorum scribere vis", "example": "plana", "type": "string", "required": false } } }</templatedata> == Synonyma == * {{Fn|Para}} == Ulteriora si cupis == * {{Fn|Parametrum in formula}} et {{Fn|Parametrum in formula sine typographia}} * {{Fn|Fn}} * {{Fn|Fnp}} * {{Fn|Fsn}} * {{Fn|Fsnp}} <includeonly>{{in harenario aut alibi|| <!-- Categorias sub hac linea adde --> [[Categoria:Formulae|{{PAGENAME}}]] [[Categoria:Formulae intra versum accommodandae|{{PAGENAME}}]] [[Categoria:Formulae administrationis Vicipaediae|{{PAGENAME}}]] [[Categoria:Formulae documentationis|{{PAGENAME}}]] }}</includeonly> ot31twf01zqjd6vub7aay26nq19jew0 Formula:Nexus ad modulum 10 309141 3971022 3937425 2026-07-09T00:35:38Z Grufo 64423 3971022 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#if:{{{1|}}} | &#123;&#123;[[Modulus:{{{1}}}{{{section|}}}|#invoke:{{{1}}}]]{{safesubst:<noinclude />#if:{{{2|/}}} | {{safesubst:<noinclude />#if:{{{2|}}}|&#124;[[Module:{{{1}}}#{{{2}}}|{{{2}}}]]}} | &#124;''functio'' }}{{safesubst:<noinclude />#invoke:params| purging|1|2| all_sorted| setting|hi/p|&#124;|&#61;| list_maybe_with_names }}&#125;&#125; | {{Error|Error: Nomen moduli abest.}} }}</includeonly><noinclude>{{documentation}}</noinclude> au94hizyh6x91ogwc55l3ss0hn8igu8 Sophia Palaeologa 0 310073 3970961 3868522 2026-07-08T15:13:00Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970961 wikitext text/x-wiki {{Capsa hominis Vicidata}} '''Sophia Palaeologa''' ([[Graece]] Σοφία Παλαιολογίνα, [[Russice]] Софья Фоминична, Sophia Thomae filia, circa annum 1455 [[Myzethras|Myzethrae]] nata et 7 Aprilis 1503 [[Moscua]]e mortua) fuit [[magnus Ducatus Moscoviae|magna ducissa vel regina Moscoviae]], [[Ioannes III (magnus dux Moscoviae)|Ioannis III]] uxor et [[Basilius III (magnus dux Moscoviae)|Basilii III]] mater, [[Ioannes Severus|Ioannis Severi avia]]. [[Fasciculus:Pelena by Sophia Palaiologina.jpg|thumb|Velamentum cum cruce [[Mons Golgotha|Golgothensi]] et sanctis multis a Sophia [[Laura Sacrosanctae Trinitatis Sanctique Sergii|monasterio sancti Sergiii]] donatum]] ==Origo== Filia [[Thomas Palaeologus|Thomae Palaeologi]], despotis [[Morea]]e et fratris [[Constantinus XI Palaeologus|Constantini XI]] imperatoris Romani Orientalis ultimi fuit, qua de causa heres coronae Byzantinae interdum putabatur. Mater Sophiae [[Catharina Zacharia]] fuit, filia [[Centurio II|Centurionis II]], [[Achaiae Principatus|prinicipis Achaeae]] ultimi. [[Fasciculus:Crucifixion by Sophia Palaiologina.jpg|thumb|Velamentum cum imagine [[Crucifixio]]nis et sanctis multis a Sophia [[Laura Sacrosanctae Trinitatis Sanctique Sergii|monasterio sancti Sergiii]] donatum]] ==Vita== In Myzethra urbe capitali despotatus Moreae nata, anno 1460, cum Morea a [[Imperium Ottomanicum|Turcis]] capta est, omni cum familia in [[Cercyra]]m fugit, postea [[Roma]]m, ubi [[Sixtus IV]] pontifex Thomam Sophiae patrem heredem coronae Byzantinae agnovit. Patre anno 1465 mortuo [[Basilius Bessario|Bessario]] cardinalis tutelam liberorum eius accepit. Anno 1469 Bessario et [[Paulus II]] pontifex Sophiam [[Ioannes Magnus|Ioanni Moscoviensi]] nuptum proposuerunt, quod anno 1472 factum est. Quamvis [[Ioannes Iuvenis]] Ioannis III ab uxore priore [[Maria Tueriensis|Mariae Borisi filiae]] [[ducatus Tueriensis|Tueriensis]] heres Ioannis et regni iam particeps fuerat, Ioanne Iuvene mortuo liberi Sophiae regnum acceperunt. ==Liberi== Liberos Ioannes et Sophia habuerunt duodecim: # Anna (1474), in infantia mortua # Helena (1475), in infantia mortua # Theodosia (1475—?) # [[Helena Ioannis filia]] (1476—1513), [[Alexander Iagellonides|Alexandri Iagellonidis]] [[Reges et duces Poloniae|regis Poloniae]] uxor # [[Basilius III (magnus dux Moscoviae)|Basilius III]] (1479 — 1533), magnus dux Moscoviae # [[Georgius Ioannis filius]] (1480 — 1536), dux [[Demetriopolis|Demetriopolitanus]] # [[Demetris Vena|Demetrius]] ''Vena'' dictus (''Zhilka'', 1481 — 1521). dux [[Uglicia|Ugliciensis]] # Helena (1484—?) # Eudocia (1483—1513), uxor Petri Ibrahimi filii principis [[Tartari|Tartarici]] # Theodosia (1485 — 1501), uxor principis Basilii Danielis filii Cholmskij # [[Symeon Ioannis filius]] (1487 — 1518), dux [[Caluga|Calugensis]] # [[Andreas Staritiensis|Andreas Ioannis filius]], dux [[Staritia|Staritiensis]] ==Fama== Sophia libros aliquot antiquissimos et rarissimos a familia sua acceptos Mosquam attulisse dicitur, de quibus [[bibliotheca Ioannis Severi]] famosa postea composita est; sed haec fabulosa esse videtur. Sophia, cum Imperii Romani Orientalis heres a nonnullis putabatur et ipsa se putabat, interdum marito et posteris suis ius huius regni reliquisse habetur, cf. [[Mosqua tertia Roma]]. Dona Sophiae in [[Laura Sacrosanctae Trinitatis Sanctique Sergii|Laura Trinitatis Sergiique]] usque adhuc servantur. ==Nexus externi== {{fontes biographici}} * [https://web.archive.org/web/20240529093035/https://bigenc.ru/c/sof-ia-paleolog-083267 De Sophia] in ''Encyclopaedia Russica magna'' {{ling|Russice}} {{Lifetime|1455|1503|Sophia Palaeologa}} [[Categoria:Reginae Moscoviae]] [[Categoria:Palaeologi]] 0iouu0giw7fxj41qlegdw2hl4waausm Formula:Nexus ad iussum MediaVicialem 10 312644 3970988 3970319 2026-07-08T18:05:02Z Grufo 64423 Inconsistentiam vitavi 3970988 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#if:{{{1|}}} |{{safesubst:<noinclude />#switch:{{{1}}} | __NOTOC__ = [[:mw:Help:Magic words#NOTOC|__NOTO<nowiki />C__]] | __FORCETOC__ = [[:mw:Help:Magic words#FORCETOC|__FORC<nowiki />ETOC__]] | __TOC__ = [[:mw:Help:Magic words#TOC|__T<nowiki />OC__]] | __NOEDITSECTION__ = [[:mw:Help:Magic words#NOEDITSECTION|__NOEDI<nowiki />TSEC<nowiki />TION__]] | __NEWSECTIONLINK__ = [[:mw:Help:Magic words#NEWSECTIONLINK|__NE<nowiki />WSECTI<nowiki />ONLI<nowiki />NK__]] | __NONEWSECTIONLINK__ = [[:mw:Help:Magic words#NONEWSECTIONLINK|__NONE<nowiki />WSECTI<nowiki />ONLI<nowiki />NK__]] | __NOGALLERY__ = [[:mw:Help:Magic words#NOGALLERY|__NOG<nowiki />ALLERY__]] | __HIDDENCAT__ = [[:mw:Help:Magic words#HIDDENCAT|__HID<nowiki />DENCAT__]] | __EXPECTUNUSEDCATEGORY__ = [[:mw:Help:Magic words#EXPECTUNUSEDCATEGORY|__EXPEC<nowiki />TUNUSE<nowiki />DCATEGORY__]] | __NOCONTENTCONVERT__ = [[:mw:Help:Magic words#NOCONTENTCONVERT|__NOC<nowiki />ONTENTC<nowiki />ONVERT__]] | __NOCC__ = [[:mw:Help:Magic words#NOCC|__NOC<nowiki />C__]] | __NOTITLECONVERT__ = [[:mw:Help:Magic words#NOTITLECONVERT|__NOTI<nowiki />TLECONVE<nowiki />RT__]] | __NOTC__ = [[:mw:Help:Magic words#NOTC|__NO<nowiki />TC__]] | __START__ = [[:mw:Help:Magic words#START|__STA<nowiki />RT__]] | __END__ = [[:mw:Help:Magic words#END|__E<nowiki />ND__]] | __INDEX__ = [[:mw:Help:Magic words#INDEX|__INDE<nowiki />X__]] | __NOINDEX__ = [[:mw:Help:Magic words#NOINDEX|__NOI<nowiki />NDEX__]] | __STATICREDIRECT__ = [[:mw:Help:Magic words#STATICREDIRECT|__STATICREDI<nowiki />RECT__]] | __EXPECTUNUSEDTEMPLATE__ = [[:mw:Help:Magic words#EXPECTUNUSEDTEMPLATE|__EXPECTU<nowiki />NUSEDTE<nowiki />MPLATE__]] | __NOGLOBAL__ = [[:mw:Help:Magic words#NOGLOBAL|__NOGL<nowiki />OBAL__]] | __DISAMBIG__ = [[:mw:Help:Magic words#DISAMBIG|__DISA<nowiki />MBIG__]] | __EXPECTED_UNCONNECTED_PAGE__ = [[:mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE|__EXPEC<nowiki />TED_UNCO<nowiki />NNECTED_PA<nowiki />GE__]] | __ARCHIVEDTALK__ = [[:mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE|__EXPEC<nowiki />TED_UNCO<nowiki />NNECTED_PA<nowiki />GE__]] | __NOTALK__ = [[:mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE|__EXPEC<nowiki />TED_UNCO<nowiki />NNECTED_PA<nowiki />GE__]] | __EXPECTWITHOUTSCANS__ = [[:mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE|__EXPEC<nowiki />TED_UNCO<nowiki />NNECTED_PA<nowiki />GE__]] | #REDIRECT = [[:mw:Help:Redirects#Creating a redirect|#REDI<nowiki />RECT]] | #default = &#123;&#123;[[:{{safesubst:<noinclude />#switch:{{{1}}} | CURRENTYEAR = mw:Help:Magic words#Date and time | CURRENTMONTH = mw:Help:Magic words#Date and time | CURRENTMONTH1 = mw:Help:Magic words#Date and time | CURRENTMONTH2 = mw:Help:Magic words#Date and time | CURRENTMONTHNAME = mw:Help:Magic words#Date and time | CURRENTMONTHNAMEGEN = mw:Help:Magic words#Date and time | CURRENTMONTHABBREV = mw:Help:Magic words#Date and time | CURRENTDAY = mw:Help:Magic words#Date and time | CURRENTDAY2 = mw:Help:Magic words#Date and time | CURRENTDOW = mw:Help:Magic words#Date and time | CURRENTDAYNAME = mw:Help:Magic words#Date and time | CURRENTTIME = mw:Help:Magic words#Date and time | CURRENTHOUR = mw:Help:Magic words#Date and time | CURRENTWEEK = mw:Help:Magic words#Date and time | CURRENTTIMESTAMP = mw:Help:Magic words#Date and time | LOCALYEAR = mw:Help:Magic words#Date and time | LOCALMONTH = mw:Help:Magic words#Date and time | LOCALMONTH1 = mw:Help:Magic words#Date and time | LOCALMONTH2 = mw:Help:Magic words#Date and time | LOCALMONTHNAME = mw:Help:Magic words#Date and time | LOCALMONTHNAMEGEN = mw:Help:Magic words#Date and time | LOCALMONTHABBREV = mw:Help:Magic words#Date and time | LOCALDAY = mw:Help:Magic words#Date and time | LOCALDAY2 = mw:Help:Magic words#Date and time | LOCALDOW = mw:Help:Magic words#Date and time | LOCALDAYNAME = mw:Help:Magic words#Date and time | LOCALTIME = mw:Help:Magic words#Date and time | LOCALHOUR = mw:Help:Magic words#Date and time | LOCALWEEK = mw:Help:Magic words#Date and time | LOCALTIMESTAMP = mw:Help:Magic words#Date and time | SITENAME = mw:Help:Magic words#Technical metadata | SERVER = mw:Help:Magic words#Technical metadata | SERVERNAME = mw:Help:Magic words#Technical metadata | DIRMARK = mw:Help:Magic words#Technical metadata | DIRECTIONMARK = mw:Help:Magic words#Technical metadata | ARTICLEPATH = mw:Help:Magic words#Technical metadata | SCRIPTPATH = mw:Help:Magic words#Technical metadata | STYLEPATH = mw:Help:Magic words#Technical metadata | CURRENTVERSION = mw:Help:Magic words#Technical metadata | CONTENTLANGUAGE = mw:Help:Magic words#Technical metadata | CONTENTLANG = mw:Help:Magic words#Technical metadata | PAGEID = mw:Help:Magic words#Technical metadata | CASCADINGSOURCES = mw:Help:Magic words#Technical metadata | REVISIONID = mw:Help:Magic words#Technical metadata | REVISIONDAY = mw:Help:Magic words#Technical metadata | REVISIONDAY2 = mw:Help:Magic words#Technical metadata | REVISIONMONTH = mw:Help:Magic words#Technical metadata | REVISIONMONTH1 = mw:Help:Magic words#Technical metadata | REVISIONYEAR = mw:Help:Magic words#Technical metadata | REVISIONTIMESTAMP = mw:Help:Magic words#Technical metadata | REVISIONUSER = mw:Help:Magic words#Technical metadata | REVISIONSIZE = mw:Help:Magic words#Technical metadata | NOEXTERNALLANGLINKS = mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE | NUMBEROFPAGES = mw:Help:Magic words#Technical metadata | NUMBEROFARTICLES = mw:Help:Magic words#Technical metadata | NUMBEROFFILES = mw:Help:Magic words#Technical metadata | NUMBEROFEDITS = mw:Help:Magic words#Technical metadata | NUMBEROFVIEWS = mw:Help:Magic words#Technical metadata | NUMBEROFUSERS = mw:Help:Magic words#Technical metadata | NUMBEROFADMINS = mw:Help:Magic words#Technical metadata | NUMBEROFACTIVEUSERS = mw:Help:Magic words#EXPECTED_UNCONNECTED_PAGE | FULLPAGENAME = mw:Help:Magic words#Page names | PAGENAME = mw:Help:Magic words#Page names | BASEPAGENAME = mw:Help:Magic words#Page names | SUBPAGENAME = mw:Help:Magic words#Page names | SUBJECTPAGENAME = mw:Help:Magic words#Page names | ARTICLEPAGENAME = mw:Help:Magic words#Page names | TALKPAGENAME = mw:Help:Magic words#Page names | ROOTPAGENAME = mw:Help:Magic words#Page names | FULLPAGENAMEE = mw:Help:Magic words#Page names | PAGENAMEE = mw:Help:Magic words#Page names | BASEPAGENAMEE = mw:Help:Magic words#Page names | SUBPAGENAMEE = mw:Help:Magic words#Page names | SUBJECTPAGENAMEE = mw:Help:Magic words#Page names | ARTICLEPAGENAMEE = mw:Help:Magic words#Page names | TALKPAGENAMEE = mw:Help:Magic words#Page names | ROOTPAGENAMEE = mw:Help:Magic words#Page names | NAMESPACE = mw:Help:Magic words#NAMESPACE | NAMESPACENUMBER = mw:Help:Magic words#NAMESPACENUMBER | SUBJECTSPACE = mw:Help:Magic words#SUBJECTSPACE | ARTICLESPACE = mw:Help:Magic words#Namespaces | TALKSPACE = mw:Help:Magic words#TALKSPACE | NAMESPACEE = mw:Help:Magic words#Namespaces | SUBJECTSPACEE = mw:Help:Magic words#Namespaces | TALKSPACEE = mw:Help:Magic words#Namespaces | ! = mw:Help:Magic words#Escaped characters | {{safesubst:<noinclude />=}} = mw:Help:Magic words#Escaped characters | PROTECTIONLEVEL = mw:Help:Magic words#Technical metadata | DISPLAYTITLE = mw:Help:Magic words#DISPLAYTITLE | DEFAULTSORT = mw:Help:Magic words#DEFAULTSORT | PAGESINCATEGORY = mw:Help:Magic words#PAGESINCATEGORY | PAGESINCAT = mw:Help:Magic words#PAGESINCAT | NUMBERINGROUP = mw:Help:Magic words#NUMBERINGROUP | PAGESINNS = mw:Help:Magic words#PAGESINNS | PAGESINNAMESPACE = mw:Help:Magic words#PAGESINNAMESPACE | FULLPAGENAME = mw:Help:Magic words#Page names | PAGENAME = mw:Help:Magic words#Page names | BASEPAGENAME = mw:Help:Magic words#Page names | SUBPAGENAME = mw:Help:Magic words#Page names | SUBJECTPAGENAME = mw:Help:Magic words#Page names | ARTICLEPAGENAME = mw:Help:Magic words#Page names | TALKPAGENAME = mw:Help:Magic words#Page names | ROOTPAGENAME = mw:Help:Magic words#Page names | FULLPAGENAMEE = mw:Help:Magic words#Page names | PAGENAMEE = mw:Help:Magic words#Page names | BASEPAGENAMEE = mw:Help:Magic words#Page names | SUBPAGENAMEE = mw:Help:Magic words#Page names | SUBJECTPAGENAMEE = mw:Help:Magic words#Page names | ARTICLEPAGENAMEE = mw:Help:Magic words#Page names | TALKPAGENAMEE = mw:Help:Magic words#Page names | ROOTPAGENAMEE = mw:Help:Magic words#Page names | NAMESPACE = mw:Help:Magic words#Namespaces | NAMESPACENUMBER = mw:Help:Magic words#Namespaces | SUBJECTSPACE = mw:Help:Magic words#Namespaces | ARTICLESPACE = mw:Help:Magic words#Namespaces | TALKSPACE = mw:Help:Magic words#Namespaces | NAMESPACEE = mw:Help:Magic words#Namespaces | SUBJECTSPACEE = mw:Help:Magic words#Namespaces | TALKSPACEE = mw:Help:Magic words#Namespaces | PAGEID = mw:Help:Magic words#Technical metadata of another page | PAGESIZE = mw:Help:Magic words#Technical metadata of another page | PROTECTIONLEVEL = mw:Help:Magic words#Technical metadata of another page | CASCADINGSOURCES = mw:Help:Magic words#Technical metadata of another page | REVISIONID = mw:Help:Magic words#Technical metadata of another page | REVISIONDAY = mw:Help:Magic words#Technical metadata of another page | REVISIONDAY2 = mw:Help:Magic words#Technical metadata of another page | REVISIONMONTH = mw:Help:Magic words#Technical metadata of another page | REVISIONMONTH1 = mw:Help:Magic words#Technical metadata of another page | REVISIONYEAR = mw:Help:Magic words#Technical metadata of another page | REVISIONTIMESTAMP = mw:Help:Magic words#Technical metadata of another page | REVISIONUSER = mw:Help:Magic words#Technical metadata of another page | SHORTDESC = mw:Extension:Wikibase Client | USERLANGUAGE = mw:Help:Magic words#h-Localization_variables-Variables | #default = {{safesubst:<noinclude />#switch:{{safesubst:<noinclude />lc:{{{1}}}}} | localurl = mw:Help:Magic words#localurl | localurle = mw:Help:Magic words#URL data | fullurl = mw:Help:Magic words#fullurl | fullurle = mw:Help:Magic words#URL data | canonicalurl = mw:Help:Magic words#canonicalurl | canonicalurle = mw:Help:Magic words#URL data | filepath = mw:Help:Magic words#filepath | urlencode = mw:Help:Magic words#urlencode | urldecode = mw:Help:Magic words#URL data | anchorencode = mw:Help:Magic words#anchorencode | noexternallanglinks = mw:Help:Magic words#From Extensions | ns = mw:Help:Magic words#Namespaces | nse = mw:Help:Magic words#Namespaces | formatnum = mw:Help:Magic words#formatnum | #dateformat = mw:Help:Magic words#dateformat | #formatdate = mw:Help:Magic words#formatdate | lc = mw:Help:Magic words#lc | lcfirst = mw:Help:Magic words#lcfirst | uc = mw:Help:Magic words#uc | ucfirst = mw:Help:Magic words#ucfirst | padleft = mw:Help:Magic words#padleft | padright = mw:Help:Magic words#padright | plural = mw:Help:Magic words#PLURAL | grammar = mw:Help:Magic words#GRAMMAR | gender = mw:Help:Magic words#GENDER | int = mw:Help:Magic words#INT | noexternallanglinks = mw:Extension:Wikibase Client | wbreponame = mw:Extension:Wikibase Client | pendingchangelevel = mw:Extension:FlaggedRevs | numberofwikis = mw:Extension:SiteMatrix | #language = mw:Help:Magic words#.23language | #interwikilink = mw:Help:Magic words#interwikilink | #interlanguagelink = mw:Help:Magic words#interlanguagelink | #isbn = mw:Help:Magic words#isbn | #special = mw:Help:Magic words#.23special | #speciale = mw:Help:Magic words#.23speciale | #tag = mw:Help:Magic words#.23tag | #expr = mw:Help:Extension:ParserFunctions#.23expr | #if = mw:Help:Extension:ParserFunctions#.23if | #ifeq = mw:Help:Extension:ParserFunctions#.23ifeq | #iferror = mw:Help:Extension:ParserFunctions#.23iferror | #ifexpr = mw:Help:Extension:ParserFunctions#.23ifexpr | #ifexist = mw:Help:Extension:ParserFunctions#.23ifexist | #rel2abs = mw:Help:Extension:ParserFunctions#.23rel2abs | #switch = mw:Help:Extension:ParserFunctions#.23switch | #time = mw:Help:Extension:ParserFunctions#.23time | #timel = mw:Help:Extension:ParserFunctions#.23timel | #titleparts = mw:Help:Extension:ParserFunctions#.23titleparts | #babel = mw:Extension:Babel#Usage | #categorytree = mw:Extension:CategoryTree#The {{#categorytree}} parser function | #commaseparatedlist = mw:Wikibase/Installation/Advanced_configuration#commaseparatedlist | #coordinates = mw:Extension:GeoData#Parser function | #invoke = mw:Extension:Scribunto#Usage | #lst = mw:Extension:Labeled Section Transclusion#How it works | #lsth = mw:Extension:Labeled Section Transclusion#How it works | #lstx = mw:Extension:Labeled Section Transclusion#How it works | noexternallanglinks = mw:Extension:Wikibase Client | noreplace = mw:Extension:Wikibase Client | pendingchangelevel = mw:Extension:FlaggedRevs | #property = d:Wikidata:How to use data on Wikimedia projects | #statements = d:Wikidata:How to use data on Wikimedia projects | #target = mw:Extension:MassMessage | #default = mw:Help:Magic words#{{{1}}} }} }}|{{{1}}}]]{{safesubst:<noinclude />#invoke:params| cutting|1|0|setting|h/i/p|&#58;|&#124;|&#61;|all_sorted|list_maybe_with_names}}&#125;&#125; }} | {{Error|Error: Iussus mediavicialis abest.}} }}</includeonly><noinclude>{{Documentatio}}</noinclude> gn15hl6x98y53v3k3q76dwk54hm56gc Formula:Nexus ad iussum MediaVicialem/doc 10 312647 3970989 3970320 2026-07-08T18:05:51Z Grufo 64423 Inconsistentiam vitavi 3970989 wikitext text/x-wiki {{Subpagina documentationis}} {{Formula substituibilis|...}} {{Formula tabularia | censens = [[:mw:Help:Magic words|iussus MediaViciales]] ([[Anglice]] ''magic words'') | prodens = singillatim }} {{Lua|Module:Params}} {{Compendia formulae|nim|imn}} Haec formula est simillima formulis {{Fn|Nexus ad formulam}} et {{Fn|Nexus ad modulum}}, at nexus nec ad formulas neque ad modulos, sed ad [[:mw:Help:Magic words#Page names|iussus MediaViciales]] creat. == De usu == * <syntaxhighlight lang="wikitext" inline>{{nim|PAGENAME}}</syntaxhighlight> *: ↳ {{nim|PAGENAME}} * <syntaxhighlight lang="wikitext" inline><code>{{nim|PAGENAME}}</code></syntaxhighlight> *: ↳ <code>{{nim|PAGENAME}}</code> * <syntaxhighlight lang="wikitext" inline>{{nim|language}}</syntaxhighlight> *: ↳ {{nim|language}} * <syntaxhighlight lang="wikitext" inline>{{nim|#invoke}}</syntaxhighlight> *: ↳ {{nim|#invoke}} * <syntaxhighlight lang="wikitext" inline>{{nim|#ifexist}}</syntaxhighlight> *: ↳ {{nim|#ifexist}} * <syntaxhighlight lang="wikitext" inline>{{nim|__NOTOC__}}</syntaxhighlight> *: ↳ {{nim|__NOTOC__}} * <syntaxhighlight lang="wikitext" inline>{{nim|#REDIRECT}}</syntaxhighlight> *: ↳ {{nim|#REDIRECT}} * <syntaxhighlight lang="wikitext" inline>{{nim|#time|<nowiki>[[j xg]] [[Y]]</nowiki> H:i:s|2023-12-03 14:15|la}} </syntaxhighlight> *: ↳ {{nim|#time|<nowiki>[[j xg]] [[Y]]</nowiki> H:i:s|2023-12-03 14:15|la}} * <syntaxhighlight lang="wikitext" inline>{{nim|localurl|MediaWiki|printable=yes}}</syntaxhighlight> *: ↳ {{nim|localurl|MediaWiki|printable=yes}} * <syntaxhighlight lang="wikitext" inline>{{nim|!}}</syntaxhighlight> *: ↳ {{nim|!}} * <syntaxhighlight lang="wikitext" inline>{{nim|{{=}}}}</syntaxhighlight> vel <syntaxhighlight lang="wikitext" inline>{{nim|1==}}</syntaxhighlight> *: ↳ {{nim|{{=}}}} == Synonyma == * {{Fn|Nim}} * {{Fn|Imn}} * {{Fn|Nexus ad iussum mediavicialem}} * {{Fn|Mwl}} – nomen interviciale * {{Fn|Tlm}} == Ulteriora si cupis == * {{Fn|Nexus ad formulam}} * {{Fn|Nexus ad modulum}} * {{Fn|Nexus ad formulam intervicialem}} * {{Fn|Nexus ad modulum intervicialem}} * {{Fn|Metafn}} * {{Fn|Interfn}} <includeonly>{{in harenario aut alibi|| <!-- Categorias sub hac linea adde --> [[Categoria:Formulae|{{PAGENAME}}]] [[Categoria:Formulae intra versum accommodandae|{{PAGENAME}}]] [[Categoria:Formulae administrationis Vicipaediae|{{PAGENAME}}]] [[Categoria:Formulae nexus ad formulas creantes|{{PAGENAME}}]] [[Categoria:Formulae nexuales|{{PAGENAME}}]] [[Categoria:Metaformulae|{{PAGENAME}}]] [[Categoria:Formulae variadicae|{{PAGENAME}}]] [[Categoria:Formulae documentationis|{{PAGENAME}}]] }}</includeonly> klalprap4mbqb9p0wejh8nqrbnl3lqf Toranus (Burgus Collis Fegati) 0 313921 3971066 3954712 2026-07-09T07:43:29Z ~2026-38869-44 211912 3971066 wikitext text/x-wiki {{Capsa urbis Vicidatorum}} [[Fasciculus:Torre Torano di Borgorose.jpg|thumb|upright=1|Turris Torani]] {{Res|Toranus}}<ref>{{*Cfr}} {{Opus | cognomen = Bianchini | nomen = Marcus | titulus = Edilizia storica della Marsica occidentale | annus = 2011 | mensis = 11 | pagina = 76 | locus = [[Roma]]e | domus editoria = Dedalo | url = http://www.rilievoarcheologico.it/marsica_g000003.pdf | isbn = 9788895913292 }}: “Castrum quod {{Lectio|Toranus}} vocatur”.</ref> ({{Barbarice|Turanu}} secundum [[dialectus|dialectum]] localem) est [[vicus urbanus|vicus]] circiter 700 incolarum in [[commune|municipio]] [[Burgus Collis Fegati|Burgi Collis Fegati]], in [[provincia Reatina]], in [[Latium|Latio]], apud fines inter {{safesubst:Nexus ad paginam creandam creatamve|Cicolanum||it|qid=Q3676537}} et {{safesubst:Nexus ad paginam creandam creatamve|Marsica|Marsicam|d|it|qid=Q954684}} situs; 725 [[metrum|metris]] [[maris aequor|super maris aequorem]] iacet, ad pedes {{safesubst:Nexus ad paginam creandam creatamve|Montes Ducissae|Montium Ducissae|it|qid=Q98735941}} et {{safesubst:Nexus ad paginam creandam creatamve|Mons Velinus|Montis Velini|it|qid=Q2631149}}. == Geographia == [[Fasciculus:Torano di Borgorose.jpg|thumb|upright=1|Toranus ab [[aëroplanum|aëroplano]] visus.]] Toranus bene conspicitur e [[autovia|viis autocineticis]] A24 et A25. Locus in duas partes, “Forum” et “Villa” vocatas, [[geographia|geographice]] dividitur, [[collis|colle]] separatas super quo [[turris]] stat et ubi olim erat vetus vicus, quem [[terrae motus]] anni [[1915]] diruit. == Historia == Toranus nomen suum ab antiqua urbe {{safesubst:Nexus ad paginam creandam creatamve|Thora (antiqua urbs)|Thorae|it|qid=Q3993579}} sumit, celebri ob famosum [[templum]] in honorem [[Mars (deus)|Martis]] erectum. Aetate praeromana, Thora fuit una ex praecipuis urbibus {{safesubst:Nexus ad paginam creandam creatamve|Aequi|Aequorum|d|en|qid=Q381053}}, quae a [[Roma]] post plus quam saeculum et dimidium assiduorum bellorum absorpta est. [[Saeculum 3|Saeculo tertio post Christum natum]], Thora facta est urbs florentissima. Primae notitiae de Torano [[medium aevum|aevo medio]] ad initia [[saeculum 12|saeculi duodecimi]] pertinent, cum quidam Annolinus, filius defuncti Oderisii, mense [[September|Septembris]] anni [[1113]], suam partem condominii castrensis, quae tertiae parti congruebat, episcopo [[Reate|Reatino]] Beneincasae cederet.<ref>[https://web.archive.org/web/20240825111023/http://www.prolocoborgorose.eu/Tutto%20Paesi/Tutto%20Torano/home%20page%20torano.htm Sito Ufficiale Pro Loco di Borgorose] ([[Italice]])</ref> {{safesubst:Nexus ad paginam creandam creatamve|Terrae motus Marsicae anni 1915||d|en|qid=Q2257461}} vicum fere ad [[solum]] aequavit; vetus oppidulum, in colle ubi turris stat situm, derelinquendum et inferius reconstruendum fuit. In vīci recenti historia tria gravia infortunia in ambitu localis productionis [[spectaculum pyrotechnicum|pyrobolorum]] notanda sunt, quae anno [[1983]] ad mortem sex hominum<ref>[https://www.giustiziari.it/storie-e-personaggi/esplosione-nella-fabbrica-di-fuochi-di-artificio-sei-morti-e-famiglia-decimata Esplosione nella fabbrica di fuochi di artificio, sei morti e famiglia decimata a Borgorose] ([[Italice]])</ref>, anno [[2023]] ad mortem trium hominum<ref>[https://www.rainews.it/tgr/lazio/articoli/2023/07/l-esplosione-in-un-casale-a-torano-dopo-il-padre-e-morta-anche-la-figlia--ca5ea5ef-0b2b-450c-b4be-2e9dc7912473.html L'esplosione in un casale a Torano. Terza vittima. E' morto anche l'altro figlio] ([[Italice]])</ref> et anno 2026 ad mortem duorum hominum<ref>[https://www.rietinvetrina.it/esplosione-torano-deceduti-mamma-e-figlio-addio-a-simone-e-teresa/] ([[Italice]])</ref> duxerunt. == Pinacotheca == <gallery> File:Chiesa di San Pietro a Torano.jpg|Ecclesia [[Petrus|Sancti Petri]] File:Chiesa di San Martino a Torano.jpg|Ecclesia [[Martinus Turonensis|Sancti Martini]] File:Chiesa di San Sebastiano a Torano.jpg|Ecclesia [[Sebastianus (martyr)|Sancti Sebastiani]] </gallery> == Notae == <references /> {{NexInt}} * [[Burgus Collis Fegati]] * [[Provincia Reatina]] == Nexus externi == {{CommuniaCat|Torano di Borgorose|Toranum}} [[Categoria:Municipia in provincia Reatis]] [[Categoria:Provincia Reatina]] blmcaihi5csupkb74rzmansrnzmucm0 Sopka 0 319252 3970964 3913380 2026-07-08T15:21:43Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 3970964 wikitext text/x-wiki [[Fasciculus:Залив Ольги, море и сопки.jpg|thumb|Sopkae super [[sinus Sanctae Helgae|sinum Sanctae Helgae]] [[territorium Maritimum|territorii Maritimi]] Russiae]] '''Sopka'''<ref>E.g.: "ad rupes vulcanicas ''sopkae'' Kichpinycz", — [https://books.google.ru/books?newbks=1&newbks_redir=0&hl=ru&id=0G5GAQAAMAAJ&dq=sopkae&focus=searchwithinvolume&q=kichpinycz ''Bulletin du Jardin botanique de l'Académie des sciences de l'URSS'', vol. 14, 1914, p. 127]; "supra massam sulphuream ad rupes vulcanicas montis (“[[sopka]]e”). Krascheninnikovii", — [https://pmc.ncbi.nlm.nih.gov/articles/PMC10933792/ ], [https://www.biosoil.ru/storage/entities/publication/21751/204d1a11-e1a1-4972-a1fb-55bf6c76a2f4.pdf ]; cf. {{Symeon|сопка}}</ref> est nomen [[collis]] vel [[mons|montis]] haud altae (usque ad 1000 vel 1500 [[metrum|m]]) in [[Siberia]] australi, [[steppa]] [[Kazachstania|Casachica]]<ref>Cf. [[loca monticulosa Kazachstanica]], ''Kazachskij melkosopočnik''.</ref> et [[Oriens Extremus Russiae|Oriente Extremo Russiae]]. Sed in aliis locis et alii montes ''sopkae'' nominari solent, in [[Camtschatca]] et [[insulae Kurilenses|insulis Kurilensibus]] praesertim [[mons ignifer|montes igniferi]], in litoribus [[mare Album|maris Albi]] colles harenosi, in [[Urales|Uralibus]] declivia haud ardua, in [[regio Pscoviensis|regione Pscoviensi]] iam insulae parvae. In [[archaeologia]] ''sopka'' genus [[tumulus|tumuli]] est. ==Notae== <references /> ==Nexus externi== * [https://web.archive.org/web/20240122094714/https://bigenc.ru/c/sopka-20b490 ''Sopka''] in ''Encyclopaedia Russica magna'' {{ling|Russice}} * [[:s:ru:ЭСБЕ/Сопка|''Sopka'']] in ''[[Lexicon encyclopaedicum Brockhaus et Efron|Lexico encyclopaedico Brockhaus et Efron]]'' {{ling|Russice}} [[Categoria:Montes Russiae| ]] [[Categoria:Verba Russica]] o7jst3cd6vsiidlbjouil1l19pgpxm0 Formula:Nexus ad paginam creandam creatamve 10 320925 3971031 3970477 2026-07-09T01:21:48Z Grufo 64423 Efficacia 3971031 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#if:{{{1|}}} | {{safesubst:<noinclude />#invoke:params| trimming_values| discarding|propositum| renaming_by_replacing|Wikidata|d|1|strict| renaming_by_replacing|wikidata|d|1|strict| entering_substack| entering_substack|new| pulling|qid| pulling|d| detaching_substack| mapping_by_invoking|vicidata|eadem_tessera_si_exsistit_aut_nihil| with_value_not_matching|^%s*$| renaming_by_replacing|^.*$|#qid|1| snapshotting| renaming_by_replacing|#qid|NOMEN_CADUCUM|1|strict| leaving_substack| snapshotting|entering_substack| excluding_numeric_names| detaching_substack| keeping_at_most|1| mixing_names_and_values|NOMEN_CADUCUM|$#wiki<<>>$@| leaving_substack| discarding|1|2| with_value_not_matching|d|strict| keeping_at_most|1| mixing_names_and_values|NOMEN_CADUCUM|$@wiki<<>>{{{1}}}| flushing| entering_substack| detaching_substack| dropping_substack| reinterpreting|NOMEN_CADUCUM|splitter_string||setter_string|<<>>|trim_all| mapping_by_invoking|vicidata|tessera|names_and_values_as|2|1| with_value_not_matching|^%s*$| renaming_by_mixing|#qid| flushing| snapshotting|entering_substack| renaming_by_replacing|#qid|#instantia-iam-creata|strict| mapping_by_invoking|vicidata|titulus_barbarus|values_only_as|tessera|let|1|lawiki| merging_substack| providing|#qid|| merging_substack| discarding|qid| discarding|1|2| squeezing| concat_and_call|Nexus ad paginam creandam creatamve/bivium | #titulus-iam-creatus = {{safesubst:<noinclude />#ifexist:{{{1}}}|{{{1}}}}} | #pagina-desiderata = {{{1}}} | #verba-ostendenda = {{{2|}}} | #propositum = {{{propositum|}}} }} | {{Error|Error: Nomen paginae Latinae ({{para|1}}) abest.}} }}</includeonly><noinclude>{{Documentatio}}</noinclude> fvwbhup7mstypfrrmu2kgrt9hhl01vs Formula:Index paginarum quotidianarum 10 321247 3971034 3955940 2026-07-09T02:05:22Z Grufo 64423 Efficientia 3971034 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#if:{{safesubst:<noinclude />#if:{{{1|}}}||+}}{{safesubst:<noinclude />#ifeq:{{{tabularium|}}}|{{safesubst:<noinclude />FULLPAGENAME}}|+}} | {{safesubst:<noinclude />#if:{{safesubst:<noinclude />Si in substitutione|+}} | {{safesubst:<noinclude />#invoke:params| excluding_numeric_names| entering_substack|new| pulling|promovendae| detaching_substack| reinterpreting|promovendae|trim_all|splitter_string| |setter_string|| with_value_not_matching||strict| squeezing| entering_substack| entering_substack|new| pulling|1| leaving_substack| cutting|0|{{safesubst:<noinclude />Min2 | 1 = {{{longevitas}}} | 2 = {{safesubst:<noinclude />#expr: floor( ( {{safesubst:<noinclude />#time:U|now|la}} - {{safesubst:<noinclude />#time:U|{{{labens}}}000000|la}} ) / 86400 ) }} }}| flushing| detaching_substack| mapping_by_replacing|%s*//%s*| // | scoring|longevitas| combining_values|promovendae|naturally|i| | flushing| leaving_substack| squeezing| reversing_numeric_names| mapping_by_replacing|//.*$||1| renaming_by_calling|Index paginarum quotidianarum/argumentum|names_only_as|dies|let|origo|{{{labens}}}| flushing| leaving_substack| renaming_by_replacing|^(%d%d%d%d)%-(%d%d)$|exsistentes %1%2|1| flushing| entering_substack| with_name_matching|%d+$| detaching_substack| grouping_by_calling|Index paginarum quotidianarum/aggregatio| renaming_by_replacing|^(%d%d%d%d)(%d%d)$|%1-%2|1| merging_substack| concat_and_call|Index paginarum quotidianarum/conservatio }} | {{Sin secus | 1 = {{#invoke:params|new| pulling|promovendae| reinterpreting|promovendae|trim_all|splitter_string| |setter_string|| with_value_not_matching||strict| squeezing| cutting|0|{{#expr: floor( ( {{#time:U|now|la}} - {{#time:U|{{{labens}}}000000|la}} ) / 86400 ) }}| reversing_numeric_names| setting|i| | call_for_each|Index paginarum quotidianarum/prospectus }} | 2 = | 3 = <templatestyles src="Formula:Index paginarum quotidianarum/styles.css" /><div class="exhibitio-paginarum"> | 4 = </div> }} }} | {{safesubst:<noinclude />#ifeq:{{{1|}}}|hodie | {{safesubst:<noinclude />#invoke:params|new| pulling|promovendae| reinterpreting|promovendae|trim_all|splitter_string| |setter_string|| with_value_not_matching||strict| squeezing| cutting|{{safesubst:<noinclude />#expr: -1 - floor( ( {{safesubst:<noinclude />#time:U|now|la}} - {{safesubst:<noinclude />#time:U|{{{labens}}}000000|la}} ) / 86400 ) }}|0| with_name_matching|1|strict| reinterpreting|1|trim_all|splitter_string|//|setter_string|| concat_and_call|Index paginarum quotidianarum/exhibitio }} | {{safesubst:<noinclude />#if:{{safesubst:<noinclude />#if:{{safesubst:<noinclude />Si in substitutione|+}}|{{safesubst:<noinclude />#ifexpr:{{{1}}} < {{safesubst:<noinclude />CURRENTYEAR}}||+}}}} | <noinclude />{<noinclude />{<noinclude />safesubst:<noinclude />{{{tabularium}}}{{safesubst:<noinclude />!}}{{{1}}}<noinclude />}<noinclude />}<noinclude /> | {{safesubst:<noinclude />P{{safesubst:<noinclude />Si in substitutione|2|1}}|{{#ifexpr:{{{1}}} < {{CURRENTYEAR}} | {{Recensio vacua necessaria}} | {{Capsa annuntiationis | color = #84b7de | imago = Info non-talk.svg | 1 = '''Index imperfectum''' Paginae hoc anno promotae hic numerantur, sed nonnulli dies anni nondum praeteriti sunt ([[Special:Purge/{{FULLPAGENAME}}|purgare]]). }} }}{{ivv}}{{ivv}}}}{{safesubst:<noinclude />#invoke:params| excluding_numeric_names| entering_substack|new| pulling|promovendae| detaching_substack| reinterpreting|promovendae|trim_all|splitter_string| |setter_string|| with_value_not_matching||strict| squeezing| entering_substack| cutting|0|{{safesubst:<noinclude />#expr: floor( ( {{safesubst:<noinclude />#time:U|now|la}} - {{safesubst:<noinclude />#time:U|{{{labens}}}000000|la}} ) / 86400 ) }}| detaching_substack| dropping_substack| squeezing| reversing_numeric_names| mapping_by_replacing|//.*$||1| renaming_by_calling|Index paginarum quotidianarum/argumentum|names_only_as|dies|let|origo|{{{labens}}}| leaving_substack| renaming_by_replacing|^(%d%d%d%d)%-(%d%d)$|exsistentes %1%2|1| flushing| entering_substack| with_name_matching|%d+$| detaching_substack| grouping_by_calling|Index paginarum quotidianarum/aggregatio| renaming_by_replacing|^(%d%d%d%d)(%d%d)$|%1-%2|1| merging_substack| with_name_matching|^{{{1}}}%-%d%d$| setting|i| | all_sorted| call_for_each|Index paginarum quotidianarum/mensis }} }} }} }}</includeonly><noinclude>{{Documentatio}}</noinclude> 31dm9o54p81ak4jtnm7vlpw42c039xg Formula:Index paginarum quotidianarum/conservatio 10 321250 3971035 3966949 2026-07-09T02:07:32Z Grufo 64423 Efficientia 3971035 wikitext text/x-wiki <includeonly>{<noinclude />{<noinclude />safesubst:Index paginarum quotidianarum {{safesubst:<noinclude />!}}##{{safesubst:<noinclude />=}}<!-- ###################################################################### SCRIBE NOVAS PAGINAS HIC INFRA Omnes paginae a te promotae *semper summae parti indicis* addendae sunt (etiam quum commentationes antiquissimas inseras). Si plures paginas addis, tibi suademus ut recentiores earum ante vetustiores disponas (ordo tamen haud stricte tibi servandus est). SYNTAXIS: Pagina // Descriptio // Imago NOTA BENE: Paginae iam promotae non sunt delendae! Tantummodo adde paginas novas hic subter, *nihil ex indice detrahens*. NOTA BENE: Si currentem ordinem mutare vis, a te petimus ut recensionem vacuam primum divulges. ############################################################ -->{{safesubst:<noinclude />!}} promovendae {{safesubst:<noinclude />=}} {{{promovendae}}} {{safesubst:<noinclude />!}}?#{{safesubst:<noinclude />=}}<!-- ###################################################################### NOLI HIC SUBTER SCRIBERE! Partes hic subter *non sunt* manu recensendae. Quotienscumque hanc paginam divulgabitur, nostrum mechanema ordinem sponte dabit. ########################################################################### -->{{safesubst:<noinclude />#invoke:params| all_sorted| with_name_matching|^%d%d%d%d%-%d%d$| setting|h/i/p/fn| {{safesubst:<noinclude />!}} | {{safesubst:<noinclude />!}} | {{safesubst:<noinclude />=}} | | list }}{{safesubst:<noinclude />!}}tabularium{{safesubst:<noinclude />=}}{<noinclude />{<noinclude />safesubst:<noinclude />#invoke:params{{safesubst:<noinclude />!}}self<noinclude />}<noinclude />}<noinclude />{{safesubst:<noinclude />!}}labens{{safesubst:<noinclude />=}}{{safesubst:<noinclude />#time:Ymd|now|la}}{{safesubst:<noinclude />!}}longevitas{{safesubst:<noinclude />=}}{{{longevitas}}}{{safesubst:<noinclude />!}}1{{safesubst:<noinclude />=}}{<noinclude />{<noinclude />{<noinclude />1{{safesubst:<noinclude />!}}<noinclude />}<noinclude />}<noinclude />}<noinclude />}<noinclude />}</includeonly><noinclude>{{Documentatio|contenta={{Formula machinaria}}}}</noinclude> lvlj6qxbm4pzv8peeui5hyjox5l590y Gratianus D'Urso 0 324035 3970941 3970932 2026-07-08T12:15:42Z IacobusAmor 1163 3970941 wikitext text/x-wiki {{Pagina non annexa}} [[Fasciculus:Graziano_D'Urso,_baritono.jpg|thumb|Gratianus d'Urso.]] '''Gratianus D'Urso''' ([[Catana]]e natus [[30 Martii]] [[1990]]) est [[baryton]] et [[scriptor]] [[Italia|Italicus]]. . == Biographia == [[Catana|Catinae]] natus et academicis studiis eruditus<ref>https://www.italianoperataormina.com/it/artist/graziano-durso/</ref>, D'Urso primum munus anno 2017 in interludio a Paulo Altieri, ''L'amante burlato''<ref name=":1">https://www.giornaledellamusica.it/recensioni/da-goldoni-a-altieri</ref>, egit, deinde actionem competitivam<ref name=":3">https://ia902807.us.archive.org/5/items/il-corsaro_202603/Il%20corsaro.png</ref> et operaticam<ref name=":6">https://www.rundschau-online.de/region/oberberg/gummersbach-compagnia-d-opera-italiana-di-milano-zeigt-den-maskenball-134049</ref> in [[Italia]]<ref>https://aiacepress.it/taormina-opera-stars-tosca-strepitosa-al-teatro-antico-pensando-gia-al-futuro/</ref>, [[Germania]] <ref name=":4">https://www.wiesbadener-kurier.de/lokales/kreis-main-taunus/eppstein-kreis-main-taunus/umjubelter-opernabend-auf-der-burg-eppstein-1542572</ref>, [[Romania]]<ref>https://mytex.ro/cultura/brasov-marea-gala-a-festivalului-international-de-opera-opereta-si-balet/</ref>, [[Russia]]<ref name=":5">https://kolomnagrad.ru/presscentr/news/kultura_news/6711-mezhdunarodnyy-festival-shkin-opera-proydet-v-kolomne.html</ref>, [[Helvetia]]<ref>https://ia902809.us.archive.org/26/items/svizzera_202603/Svizzera.jpg</ref> exercuit, cum repertorio auctorum romanticorum<ref>https://www.sicilymag.it/belcanto-protagonista-nella-nuova-stagione-della-stagione-della-societa-catanese-amici-della-musica.htm</ref>, ut [[Vincentius Bellini|Vincenzo Bellini]] <ref>https://ia903107.us.archive.org/26/items/bellini-sacro/Bellini%20sacro.png</ref> et Iosepho Verdi<ref name=":7">https://www.pressreader.com/italy/la-sicilia/20251203/283472147551689</ref>, et auctorum Scholae Iuvenilis <ref>https://www.noitv.it/2017/09/cori-concerto-2017-lomaggio-catalani-174205/</ref> . Praeter continuam actionem<ref name=":0">https://www.operabase.com/graziano-durso-a32921/it</ref> in repertorio saeculi undevicesimi<ref>https://www.corrieredellospettacolo.net/2017/07/22/enrico-stinchelli-porta-al-castello-maniace-la-sua-carmen/</ref> et vicesimi<ref>https://archive.org/download/Musmarra/Musmarra.jpg</ref>, etiam in prima moderna repraesentatione <ref>https://ia600706.us.archive.org/34/items/Pacini/Pacini.jpeg</ref>, in repertoriis [[musica sacra|musicae sacrae]]<ref name=":8">https://www.connessiallopera.it/news/2021/catania-concerto-in-cattedrale-con-tre-inediti-di-bellini-in-prima-esecuzione-moderna/</ref>, antiquae <ref>https://www.sicilymag.it/ludusdanielis-coinvolgenti-atmosfere-medievali-tra-sacro-e-storia.htm</ref> et barocae <ref>https://ia600600.us.archive.org/11/items/buonpro/buonpro.jpeg</ref> egit. Simul cum arte agendi, D'Urso ab anno 2021 iter studiorum interdisciplinare elaboravit, ad vocalologiam{{dubsig}} [[ars|artisticam]]<ref>https://www.lulu.com/it/search?sortBy=RELEVANCE&page=1&q=graziano+d%27urso&pageSize=10&adult_audience_rating=00&binding_type_group=HARDCOVER</ref> et reflexionem legalem ad didacticam [[cantus]] applicatam<ref name=":2">https://www.voiceevolutioninstitute.it/category/course/la-responsabilita-civile-dellinsegnante-di-canto?fbclid=IwAR0Tqwxj5eGCrBx9cZFltoYNxk2LgBXEOClrm6BtFAXfYkjN0c8Y_6dHgQE.</ref> spectans. == Directorium (index partialis) == * Iosephus Verdi ** Aida, ''Amonasro''<ref name=":4">{{Cite web|url=https://www.wiesbadener-kurier.de/lokales/kreis-main-taunus/eppstein-kreis-main-taunus/umjubelter-opernabend-auf-der-burg-eppstein-1542572}}</ref> ** Saltatio personata, ''Renato''<ref name=":6">{{Cite web|url=https://www.rundschau-online.de/region/oberberg/gummersbach-compagnia-d-opera-italiana-di-milano-zeigt-den-maskenball-134049}}</ref> ** Traviata, ''Georgius Germont''<ref name=":7">{{Cite web|url=https://www.pressreader.com/italy/la-sicilia/20251203/283472147551689}}</ref> ** Il corsaro (Verdi), ''Seid''<ref name=":3">{{Cite web|url=https://ia902807.us.archive.org/5/items/il-corsaro_202603/Il%20corsaro.png}}</ref> * [[Vincentius Bellini]] ** Missa in A minore, barytono<ref name=":8">{{Cite web|url=https://www.connessiallopera.it/news/2021/catania-concerto-in-cattedrale-con-tre-inediti-di-bellini-in-prima-esecuzione-moderna/}}</ref> * [[Paulus Altieri]] ** Amator derisus, ''Tascadorus''<ref name=":1">{{Cite web|url=https://www.giornaledellamusica.it/recensioni/da-goldoni-a-altieri}}</ref> * [[Leonardus Vincius]]{{dubsig}} ** Damnati Imaginarii, ''Don Chilone''<ref>https://www.balarm.it/news/la-stagione-di-musicamente-a-palermo-note-antiche-barocco-e-artisti-internazionali-163221</ref> == Praemia et recognitiones == * Vincenzo Bellini Prize (2018)<ref>https://www.globusmagazine.it/lions-catania-bellini-al-baritono-graziano-durso-premio-bellini-2018/</ref> * Domenico Danzuzo prize (2019)<ref>https://www.globusmagazine.it/nove-dicembre-la-xviii-edizione-del-domenico-danzuso/</ref> == Publicationes (index partialis) == * [[d:Q138968793|Il canto delle emozioni, 2025. 978-1-326-43606-3]] * [[d:Q138701133|La professionalità dell'insegnante di canto, 2023. 978-1-4478-8083-7]] * [[d:Q138841788|La metodologia dell'insegnante di canto, 2023. 978-1-4467-9385-5]] * [[d:Q138637528|La responsabilità civile dell'insegnante di canto, 2022. 978-1-4716-3472-7]] * [[d:Q138545639|IL BARITONO VERDIANO, 2021. 978-1-105-01570-0]] * [[d:Q140437379|Il canto della mente, 2026. 978-1-291-63095-4]] == Notae == <references /> [[Categoria:Cantores Italici]] [[Categoria:Cantores Siculi]] [[Categoria:In Italia nati]] [[Categoria:In Sicilia nati]] cf9wdt81fzu5byepctq4188w4r0pznz Nulli beneficium 0 324387 3971028 3955136 2026-07-09T01:04:43Z Grufo 64423 Minima typographica 3971028 wikitext text/x-wiki {{Titulus ad litteram}} {{Pagina principalis|Index Carminum Buranorum}} {{Carmen Carminum Buranorum | titulus = | imago = | descriptio = | categoria = | numerus = | auctor = | argumenta = | tempus = | lingua = | contextus = | praecedens = | sequens = }} {{lres|Nulli beneficium}} est initium [[carmen|carminis]] a [[Goliardia|discipulis vagantibus]] [[Latinitas medii aevi|Latine]] scripti, quod in codice [[Carmina Burana|Carminum Buranorum]] sub numero XXXVI reperitur.<ref name="de-ammonitione-prelatorum-33-45">{{Opus | titulus = De ammonitione prelatorum 33-45 | url = https://www.hs-augsburg.de/~harsch/Chronologia/Lspost13/CarminaBurana/bur_cmo4.html }}.</ref> == Textus == {{Versus numerati| 1a.Nulli beneficium iuste penitudinis amputatur, nulli maius vitium quam ingratitudinis imputatur. ergo, presul confitens, esto vere penitens, quia nil confessio lavat, cui contritio denegatur. 1b.Si confessus fueris ore, fit confessio ad salutem, corde si contereris; animi contritio dat virtutem, ut salutem habeas; ut virtutem teneas, relictis prioribus tuam orna moribus iuventutem. 2a.Virtute, non sanguine decet niti; sub honorum culmine corde miti foveas innoxium; reprime flagitium superbi et impii; supremi iudicii memor iuste iudica, predicans non claudica. 2b.Tuum sit contemnere contemnentes et fovere munere nil habentes. relevato debiles et exaltes bumiles. in te sit humilitas, cui mixta sit gravitas, ut lene corripias et serene lenias. 3a.Cui magis committitur, ab eo plus exigitur. quid Domino retribuis pro tot, que tibi tribuit, quod lac et lanam eruis gregis, cuius constituit te pastorem? sed cave ne, cum venerit, te districte tunc conterat ut raptorem! districtus iudex aderit; nunc sustinens considerat peccatorem. 3b.Cum subiectis ne pereas, exempla prava timeas in subiectos transfundere; nam quanto gradus altior cum graviori pendere, tanto labenti gravior lapsus datur. ne desperes, si criminis in latens precipitium pes labatur, nam iuste penitudinis nemini beneficium amputatur.<ref name="de-ammonitione-prelatorum-33-45"/> }} == Descriptio == Hoc carmen morale et pareneticum ad quendam praelatum seu episcopum (''praesul'') dirigitur, ut eum ad veram paenitentiam et ad officia pastoralis curae recte implenda hortetur. Auctor primum momentum contritionis cordis extollit, sine qua externa confessio ore facta inanis habetur, et gravitatem ingratitudinis erga Deum admonet.<ref name="de-ammonitione-prelatorum-33-45"/> In sectionibus sequentibus, carmen virtutes morales pastoris describit: niti debet virtute potius quam nobilitate sanguinis, humiles fovere, superbos reprimere et iuste iudicare. Denique severitas divini iudicii commemoratur, ubi pastor rationem reddere debet de grege sibi commisso, ne non pastor sed raptor inveniatur, quia lapsus ab alto gradu gravior semper habetur.<ref name="de-ammonitione-prelatorum-33-45"/> == Notae == {{reflist}} == Bibliographia == * {{Ecce citatio | id = Lehtonen, 1995 | c = {{Opus | cognomen = Lehtonen | nomen = Thomas Martinus Samuel | nomenclatura = compendiaria | titulus = Fortuna, Money, and the Sublunar World: Eleventh-century Ethical Thought as a Paradigm for Late Medieval Moral Philosophy | annus = 1995 | lingua = en | locus = [[Helsingia (Finnia)|Helsingiae]] | domus editoria = [[Societas Litterarum Finnicarum]] | isbn = 978-951-717-846-4 }} }} {{Carmina Burana}} [[Categoria:Index Carminum Buranorum]] [[Categoria:Litterae Latinae mediaevales]] ltfkta1p9dfeo0po93y4dpcpxbr7nq5 Aegidius Wach 0 325275 3971054 3962383 2026-07-09T06:33:35Z Bartholomite 116968 3971054 wikitext text/x-wiki {{Capsa hominis Vicidatorum}} {{res|Aegidius Wach}} (vulgo ''Gilles''; natus [[Trecae|Trecis]] die [[26 Novembris]] [[1956]] est [[presbyter]] [[Francia|Francicus]] et conditor [[Institutum Christi Regis Summi Sacerdotis|Instituti Christi Regis Summi Sacerdotis]]. Die [[24 Iunii]] [[1979]] ab [[Ioannes Paulus II|Ioanne Paulo PP. II]] ordinatus est. Anno [[1990]] in [[Gabon]] Institutum Christi Regis Summi Sacerdotis condidit. == Bibliographia == * Mongaillard, Vincentius (29 Septembris 2023). [https://www.leparisien.fr/societe/religions/cigares-champagne-et-majordomes-lopulent-train-de-vie-de-monseigneur-wach-fondateur-de-linstitut-du-christ-roi-29-09-2023-5VFUTEGCCZC5NNRMEY7KNO7LEE.php Cigares, champagne et majordomes… L'opulent train de vie de Monseigneur Wach, fondateur de l'Institut du Christ Roi]. ''Le Parisien''. {{ling|Francogallice}} * [https://www.ncregister.com/cna/pope-francis-meets-with-leaders-of-institute-of-christ-the-king-a-latin-mass-group Pope Francis Meets With Leaders of Institute of Christ the King, a Latin Mass Group] (25 Iunii 2024). ''National Catholic Register''. {{ling|Anglice}} == Nexus externi == {{CommuniaCat|Gilles Wach|Aegidium Wach}} {{bio-stipula}} {{Anni vitae|1956||Wach, Aegidius}} [[Categoria:Clerici Gabonis]] [[Categoria:Clerici Franciae]] [[Categoria:Missa Tridentina]] nxbeec7y0b1v9a3ntrh0utgxsgihu7m Terrae motus Venetiolanus anni 2026 0 325848 3971012 3967009 2026-07-08T22:28:51Z LilyKitty 18316 fontem addo 3971012 wikitext text/x-wiki [[Fasciculus:M 7.2 - 24 km ENE of San Felipe, Venezuela.png|thumb|Primus terrae motus magnus Venetiolani magnitudine 7.2 die 24 Iunii 2026]] [[Fasciculus:M 7.5 - 23 km SE of Yumare, Venezuela.png|thumb|Secundus teerae motus magnus Venetiolani magnitudine 7.5 die 24 Inii 2026]] '''Terrae motus Venetiolanus anni 2026''' est series [[terrae motus|terrae motorum]] magnorum quae die [[24 Iunii]] [[2026]] in regione septemtrionali et centrali [[Venetiola]] fit, prumus [[scala Richteriana|magnitudine]] 7.2 in Yaracuy deinde secundus motus magnitudine 7.5 fuit, a quo plus quam 920 homines necati adhuc die 26 Iunii 2026<ref>[https://www.dw.com/en/venezuela-earthquakes-search-intensifies-for-hundreds-trapped/live-77699720 Venezuela earthquake: Race to save those trapped]</ref>, 2600 homines necati adhuc die 6 Iulii 2026,<ref>[https://www.bbc.com/news/articles/czx5k8pxdevo Venezuela earthquakes in maps and graphics - where they hit and how severe they could be]</ref> et plus multos homines [[vulnus|vulnera]] sunt, atque plus quam 46,000 homines iam dispariti sunt ratione hae calamitatis.<ref>[https://www.reuters.com/business/environment/thousands-feared-dead-after-two-major-earthquakes-strike-venezuela-2026-06-25/ Venezuela races to rescue hundreds trapped in rubble after major twin earthquakes]</ref> [[Delicia Rodríguez]] praeses temporaria Venetiola stutum emergentiae cum [[lex militaris|lege militari]] declavit. Communitas internationalis sicut [[Unio Europaea]] et [[Nationes Unitae]]<ref>[https://www.aljazeera.com/news/liveblog/2025/6/25/venezuela-earthquakes-live-two-powerful-quakes-shake-s-american-country Venezuela earthquakes updates:At least 188 killed, 1.500 injured]</ref>, civitates [[America Australis|Americae Australis]], [[America Centralis|Centralis]] et [[Civitas Vaticana]]<ref>[https://www.vaticannews.va/en/pope/news/2026-06/pope-sends-aid-to-earthquake-struck-venezuela.html Pope Leo sends aid to earthquake-struck Venezuela]</ref> [[auxilium humanitarium]] dare opus dixit cum [[solidaritas|solidaritate]]. == Notae == <references/> {{NexInt}} *[[Historia Venetiolae]] == Nexus externi == {{CommuniaCat|2026 earthquakes in Venezuela|Terrae motus Venetiolanus anni 2026}} [[Categoria:Venetiola]] [[Categoria:Terrae motus]] [[Categoria:2026]] o3bj84r6lszl6r2nu90h7safigwfp03 Modulus:Params/ChangeLog 828 325924 3971040 3969437 2026-07-09T02:59:08Z Grufo 64423 Paginam redintegravi 3971040 wikitext text/x-wiki [[File:Amplification-1294300.svg|thumb|The most important changes in [[Module:Params]] are recorded here.]] This is the [[:en:ChangeLog]] page of [[Module:Params]]. All major events in the evolution of the module are recorded here in reverse chronological order. To test the module's capabilities, please visit [[Module:Params/periclitationes|the dedicated testcases page]]. == 9th July 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260709025357}} ([[Special:Diff/3967695/3971038|diff]], [[Special:PermanentLink/3971038|permanent link]])</div> Changes: * The <code>[[Module:Params#scoring|scoring]]</code> modifier now saves the result in a new substack by default, unless the <code>here</code> argument is provided, which restores the previous behavior * Code review == 17th June 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260617223814}} ([[Special:Diff/3967693/3967695|diff]], [[Special:PermanentLink/3967695|permanent link]])</div> Changes: * Minor bugfix in <code>[[Module:Params#mixing_names_and_values|mixing_names_and_values]]</code> * Code review == 15th June 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260615085550}} ([[Special:Diff/3967688/3967693|diff]], [[Special:PermanentLink/3967693|permanent link]])</div> Changes: * (BREAKING CHANGE) The †&nbsp;<code>coins</code> function has been removed (commented out), because {{mwl|#switch}} already covers all the cases * Checks have been introduced to avoid possible repetitions of <code>[[Module:Params#sequential|sequential]]</code>, <code>[[Module:Params#non-sequential|non-sequential]]</code>, <code>[[Module:Params#all_sorted|all_sorted]]</code>, and <code>[[Module:Params#reassorted|reassorted]]</code> * One new modifier has been added to the module: <code>[[Module:Params#scoring|scoring]]</code> * Code review == 22nd April 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260422144528}} ([[Special:Diff/3967686/3967688|diff]], [[Special:PermanentLink/3967688|permanent link]])</div> Changes: * One new modifier has been added to the module: <code>[[Module:Params#evaluating|evaluating]]</code> == 19th March 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260319011643}} ([[Special:Diff/3967684/3967686|diff]], [[Special:PermanentLink/3967686|permanent link]])</div> Changes: * Four new modifiers have been added to the module: <code>[[Module:Params#combining_by_invoking|combining_by_invoking]]</code>, <code>[[Module:Params#combining_by_magic|combining_by_magic]]</code>, <code>[[Module:Params#shifting|shifting]]</code>, and <code>[[Module:Params#splicing|splicing]]</code> (the latter is the development of a modifier that was already present in the code but commented out, formerly called †&nbsp;<code>inserting</code>) * Functions that require integer arguments can now rely on integer check * Code review == 23rd February 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260223012424}} ([[Special:Diff/3967683/3967684|diff]], [[Special:PermanentLink/3967684|permanent link]])</div> Changes: * Three new modifiers have been added to the module: <code>[[Module:Params#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[Module:Params#combining|combining]]</code>, and <code>[[Module:Params#combining_values|combining_values]]</code> * Repeated code fragments have been moved into functions * General code review == 16th January 2026 == <div style="float: right; font-size: .75em;">{{#time:c|20260116035352}} ([[Special:Diff/3967681/3967683|diff]], [[Special:PermanentLink/3967683|permanent link]])</div> Changes: * Support for the <code>alphabetically</code> flag has been added to the <code>[[Module:Params#sorting_sequential_values|sorting_sequential_values]]</code> modifier * Code review (removed unused variable in the internal function <code>make_groups</code>; comments) == 17th October 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20251017092949}} ([[Special:Diff/3967679/3967681|diff]], [[Special:PermanentLink/3967681|permanent link]])</div> Changes: * (BREAKING CHANGE) Nomenclature standardization: The modifiers †&nbsp;<code>converting_values_to_lowercase</code>, †&nbsp;<code>converting_values_to_uppercase</code>, †&nbsp;<code>converting_names_to_lowercase</code>, and †&nbsp;<code>converting_names_to_uppercase</code> have been renamed to <code>[[Module:Params#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[Module:Params#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[Module:Params#renaming_to_lowercase|renaming_to_lowercase]]</code>, and <code>[[Module:Params#renaming_to_uppercase|renaming_to_uppercase]]</code> * A bug affecting the empty-name parameter in <code>[[Module:Params#value_of|value_of]]</code> has been fixed == 30th September 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250930001434}} ([[Special:Diff/3967678/3967679|diff]], [[Special:PermanentLink/3967679|permanent link]])</div> Changes: * The new function <code>[[Module:Params#list_maybe_with_names|list_maybe_with_names]]</code> has been added to the module * Support for the new <code>s</code> slot – created with the [[serial comma|Oxford comma]] in mind – has been added to the <code>[[Module:Params#setting|setting]]</code> modifier * Code review == 15th September 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250915004803}} ([[Special:Diff/3967677/3967678|diff]], [[Special:PermanentLink/3967678|permanent link]])</div> Changes: * The <code>[[Module:Params#dropping_substack|dropping_substack]]</code> modifier has been added to the module * Made sure to follow the same criteria that wikitext follows when determining whether a parameter name is numeric or not – for instance, previously {{nm|params}} considered {{para|0012}} to be a numeric parameter identical to {{para|12}}; wikitext however distinguishes the two * A few minor bugs have been fixed == 23rd July 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250723160846}} ([[Special:Diff/3967671/3967677|diff]], [[Special:PermanentLink/3967677|permanent link]])</div> Changes: * A bug that affected the ''plain flag'' in <code>[[Module:Params#mapping_by_replacing|mapping_by_replacing]]</code> and <code>[[Module:Params#load_replace_args|load_replace_args]]</code> has been fixed * The <code>newtab</code> variable in the internal function <code>copy_or_ref_table()</code>, mistakenly declared as global, has been redeclared as local * A minor bug that affected the module name displayed in <code>[[Module:Params#concat_and_invoke|concat_and_invoke]]</code> has been fixed * A minor bug that affected the error strings generated by <code>[[Module:Params#with_name_matching|with_name_matching]]</code>, <code>[[Module:Params#with_name_not_matching|with_name_not_matching]]</code>, <code>[[Module:Params#with_value_matching|with_value_matching]]</code>, and <code>[[Module:Params#with_value_not_matching|with_value_not_matching]]</code> has been fixed * The code is now in <code>[[:mw:Extension:Scribunto/Lua reference manual#strict|strict]]</code> mode == 29th June 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250629004359}} ([[Special:Diff/3967669/3967671|diff]], [[Special:PermanentLink/3967671|permanent link]])</div> Changes: * (BREAKING CHANGE) The †&nbsp;<code>rotating</code> modifier has been renamed to <code>[[Module:Params#reversing_numeric_names|reversing_numeric_names]]</code> * Three new modifiers have been added to the module: <code>[[Module:Params#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[Module:Params#renaming_by_mixing|renaming_by_mixing]]</code>, and <code>[[Module:Params#mixing_names_and_values|mixing_names_and_values]]</code> * A poor design choice in <code>[[Module:Params#for_each|for_each]]</code> has been fixed<!-- ({{#time:c|20250627024739}} – [[Special:Diff/3967669/3967670|diff]], [[Special:PermanentLink/3967670|permanent link]]) --> == 13th June 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250613041555}} ([[Special:Diff/3967667/3967669|diff]], [[Special:PermanentLink/3967669|permanent link]])</div> Changes: * A small bug affecting <code>...|[[Module:Params#renaming_by_replacing|renaming_by_replacing]]|...|strict|...</code> has been fixed == 4th June 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250604024712}} ([[Special:Diff/3967665/3967667|diff]], [[Special:PermanentLink/3967667|permanent link]])</div> Changes: * Four new modifiers have been added to the module: [[#17th October 2025|†]]&nbsp;<code>converting_values_to_lowercase</code>, [[#17th October 2025|†]]&nbsp;<code>converting_values_to_uppercase</code>, [[#17th October 2025|†]]&nbsp;<code>converting_names_to_lowercase</code>, and [[#17th October 2025|†]]&nbsp;<code>converting_names_to_uppercase</code> == 22nd April 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250422023723}} ([[Special:Diff/3967664/3967665|diff]], [[Special:PermanentLink/3967665|permanent link]])</div> Changes: * (MINOR BREAKING CHANGES) The directives †&nbsp;<code>with_pattern_isep</code>, †&nbsp;<code>with_plain_isep</code>, †&nbsp;<code>with_pattern_psep</code> and †&nbsp;<code>with_plain_psep</code> used by <code>[[Module:Params#parsing|parsing]]</code> and <code>[[Module:Params#reinterpreting|reinterpreting]]</code> have been renamed respectively to <code>splitter_pattern</code>, <code>splitter_string</code>, <code>setter_pattern</code>, and <code>setter_string</code> * Code review == 17th April 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250417021247}} ([[Special:Diff/3967663/3967664|diff]], [[Special:PermanentLink/3967664|permanent link]])</div> Changes: * The <code>[[Module:Params#excluding_non-numeric_names|excluding_non-numeric_names]]</code> and <code>[[Module:Params#excluding_numeric_names|excluding_numeric_names]]</code> modifiers have been added to the module * Code review == 14th April 2025 == <div style="float: right; font-size: .75em;">{{#time:c|20250414182241}} ([[Special:Diff/3967662/3967663|diff]], [[Special:PermanentLink/3967663|permanent link]])</div> Changes: * The [[#15th June 2026|†]]&nbsp;<code>coins</code> and <code>[[Module:Params#unique_coins|unique_coins]]</code> functions have been added to the module * The following modifiers have been added to the module: <code>[[Module:Params#new|new]]</code>, <code>[[Module:Params#parsing|parsing]]</code>, <code>[[Module:Params#reinterpreting|reinterpreting]]</code>, <code>[[Module:Params#combining_by_calling|combining_by_calling]]</code>, <code>[[Module:Params#snapshotting|snapshotting]]</code>, <code>[[Module:Params#remembering|remembering]]</code>, <code>[[Module:Params#entering_substack|entering_substack]]</code>, <code>[[Module:Params#pulling|pulling]]</code>, <code>[[Module:Params#detaching_substack|detaching_substack]]</code>, <code>[[Module:Params#leaving_substack|leaving_substack]]</code>, <code>[[Module:Params#merging_substack|merging_substack]]</code>, <code>[[Module:Params#flushing|flushing]]</code> * Bug fix: Force string conversions in <code>[[Module:Params#mapping_by_invoking|mapping_by_invoking]]</code> and <code>[[Module:Params#renaming_by_invoking|renaming_by_invoking]]</code> (see {{Nexus ad caput|Module talk:String|Protected edit request on 18 October 2024}}) * Code review == 1st October 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20241001185619}} ([[Special:Diff/3967657/3967662|diff]], [[Special:PermanentLink/3967662|permanent link]])</div> Changes: * The <code>[[Module:Params#providing|providing]]</code> and <code>[[Module:Params#grouping_by_calling|grouping_by_calling]]</code> modifiers have been added to the module * Code review == 25th September 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240925004458}} ([[Special:Diff/3967653/3967657|diff]], [[Special:PermanentLink/3967657|permanent link]])</div> Changes: * The <code>[[Module:Params#reassorted|reassorted]]</code>, <code>[[Module:Params#mapping_by_replacing|mapping_by_replacing]]</code> and <code>[[Module:Params#renaming_by_replacing|renaming_by_replacing]]</code> modifiers have been added to the module * Support for the <code>pattern</code> flag has been added to the <code>with_*_matching</code> class of modifiers * Code review (<code>[[Module:Params#filling_the_gaps|filling_the_gaps]]</code>: made sure that the maximum number of available parameters is never exceeded) == 3rd June 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240603142021}} ([[Special:Diff/3967647/3967653|diff]], [[Special:PermanentLink/3967653|permanent link]])</div> Changes: * (BREAKING CHANGES) The †&nbsp;<code>mapping_blindly_by_calling</code>, †&nbsp;<code>mapping_blindly_by_invoking</code>, †&nbsp;<code>renaming_blindly_by_calling</code> and †&nbsp;<code>renaming_blindly_by_invoking</code> modifiers have been removed; the same functionalities have now been moved to <code>[[Module:Params#mapping_by_calling|mapping_by_calling]]</code>, <code>[[Module:Params#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[Module:Params#renaming_by_calling|renaming_by_calling]]</code>, and <code>[[Module:Params#renaming_by_invoking|renaming_by_invoking]]</code> (this breaks compatibility with the former syntax); these modifiers now support a call style flag – please see the documentation for more information * The <code>[[Module:Params#renaming_by_calling|renaming_by_calling]]</code>, <code>[[Module:Params#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[Module:Params#mapping_by_magic|mapping_by_magic]]</code>, and <code>[[Module:Params#mapping_by_magic|mapping_by_magic]]</code> modifiers have been added to the module * Code review == 31st May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240531130534}} ([[Special:Diff/3967642/3967647|diff]], [[Special:PermanentLink/3967647|permanent link]])</div> Changes: * The <code>[[Module:Params#imposing|imposing]]</code> and <code>[[Module:Params#discarding|discarding]]</code> modifiers have been added to the module * Support for the <code>let</code> keyword (for passing non-sequential parameters) has been introduced in the <code>mapping_*</code> and <code>renaming_*</code> class of modifiers * Code review: ** The public interface has been moved to a metatable in order to avoid the duplication of functions ** A different strategy has been adopted in order to avoid nesting infinite calls ** The presentation of the code has had minor adjustments == 29th May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240529183136}} ([[Special:Diff/3967635/3967642|diff]], [[Special:PermanentLink/3967642|permanent link]])</div> Changes: * A different policy has been adopted for zero and negative parameter names directly passed to <code>[[Module:Params#call_for_each_group|call_for_each_group]]</code> (i.e. numerical argument names below <code>1</code> will be decreased by one unit, exactly like it happens for captured numerical prefixes) * In case of collisions during [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#renaming_by_calling|renaming_blindly_by_calling]]</code> and [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#renaming_by_invoking|renaming_blindly_by_invoking]]</code>, renamed parameters will now prevail over unchanged parameters * Code review == 27th May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240527234418}} ([[Special:Diff/3967628/3967635|diff]], [[Special:PermanentLink/3967635|permanent link]])</div> Changes: * The <code>[[Module:Params#call_for_each_group|call_for_each_group]]</code> function and the <code>[[Module:Params#filling_the_gaps|filling_the_gaps]]</code> modifier have been added to the module * Code review == 18th May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240518130625}} ([[Special:Diff/3967624/3967628|diff]], [[Special:PermanentLink/3967628|permanent link]])</div> Changes: * Three new modifiers – <code>[[Module:Params#clearing|clearing]]</code>, [[#29th June 2025|†]]&nbsp;<code>[[Module:Params#reversing_numeric_names|rotating]]</code> and <code>[[Module:Params#sorting_sequential_values|sorting_sequential_values]]</code> – have been added to the module * The †&nbsp;<code>mirroring</code> and †&nbsp;<code>reversing</code> modifiers have been indefinitely removed (in the code they have been respectively renamed to <code>pivoting</code> and <code>mirroring</code> and commented out) == 17th May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240517090349}} ([[Special:Diff/3967620/3967624|diff]], [[Special:PermanentLink/3967624|permanent link]])</div> Changes: * Support for the <code>strict</code> flag has been added to the <code>with_*_matching</code> class of modifiers == 12th May 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240512192630}} ([[Special:Diff/3967610/3967620|diff]], [[Special:PermanentLink/3967620|permanent link]])</div> Changes: * (BREAKING CHANGES) Modifiers †&nbsp;<code>mapping_values_by_calling</code>, †&nbsp;<code>mapping_values_by_invoking</code>, †&nbsp;<code>mapping_values_blindly_by_calling</code> and †&nbsp;<code>mapping_values_blindly_by_invoking</code> have been renamed to <code>[[Module:Params#mapping_by_calling|mapping_by_calling]]</code>, <code>[[Module:Params#mapping_by_invoking|mapping_by_invoking]]</code>, [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_calling|mapping_blindly_by_calling]]</code>, and [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_invoking|mapping_blindly_by_invoking]]</code> * Seven new modifiers – <code>[[Module:Params#cropping|cropping]]</code>, <code>[[Module:Params#purging|purging]]</code>, <code>[[Module:Params#backpurging|backpurging]]</code>, [[#18th May 2024|†]]&nbsp;<code>reversing</code>, [[#18th May 2024|†]]&nbsp;<code>mirroring</code>, [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#renaming_by_calling|renaming_blindly_by_calling]]</code> and [[#3rd June 2024|†]]&nbsp;<code>[[Module:Params#renaming_by_invoking|renaming_blindly_by_invoking]]</code> – have been added to the module * The <code>[[Module:Params#all_sorted|all_sorted]]</code> modifier has now switched to [[natural sort order]] * Code review == 30th January 2024 == <div style="float: right; font-size: .75em;">{{#time:c|20240130110151}} ([[Special:Diff/3967609/3967610|diff]], [[Special:PermanentLink/3967610|permanent link]])</div> Changes: * The <code>[[Module:Params#setting|setting]]</code> modifier now supports the <code>l</code> runtime variable for assigning a last iteration delimiter == 15th January 2024‎ == <div style="float: right; font-size: .75em;">{{#time:c|20240115175402}} ([[Special:Diff/3967607/3967609|diff]], [[Special:PermanentLink/3967609|permanent link]])</div> Changes: * Four new modifiers – [[#12th May 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_calling|mapping_values_by_calling]]</code>, [[#12th May 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_invoking|mapping_values_by_invoking]]</code>, [[#12th May 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_calling|mapping_values_blindly_by_calling]]</code>, and [[#12th May 2024|†]]&nbsp;<code>[[Module:Params#mapping_by_invoking|mapping_values_blindly_by_invoking]]</code> – have been added to the module * One new function – <code>[[Module:Params#concat_and_magic|concat_and_magic]]</code> – has been added to the module * Minor code review == 27th September 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230927102914}} ([[Special:Diff/3967605/3967607|diff]], [[Special:PermanentLink/3967607|permanent link]])</div> Changes: * The <code>[[Module:Params#self|self]]</code> function has been added to the module == 20th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230720013944}} ([[Special:Diff/3967596/3967605|diff]], [[Special:PermanentLink/3967605|permanent link]])</div> Changes: * The logic of modifiers <code>[[Module:Params#with_name_matching|with_name_matching]]</code>, <code>[[Module:Params#with_name_not_matching|with_name_not_matching]]</code>, <code>[[Module:Params#with_value_matching|with_value_matching]]</code> and <code>[[Module:Params#with_value_not_matching|with_value_not_matching]]</code> has been extended * General code review == 15th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230715053835}} ([[Special:Diff/3967595/3967596|diff]], [[Special:PermanentLink/3967596|permanent link]])</div> Changes: * One new modifier has been added to the module: <code>[[Module:Params#all_sorted|all_sorted]]</code> * General code review == 14th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230714093347}} ([[Special:Diff/3967594/3967595|diff]], [[Special:PermanentLink/3967595|permanent link]])</div> Changes: * Two new modifiers – <code>[[Module:Params#squeezing|squeezing]]</code> and <code>[[Module:Params#trimming_values|trimming_values]]</code> – have been added to the module * General code review == 12th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230712071906}} ([[Special:Diff/3967588/3967594|diff]], [[Special:PermanentLink/3967594|permanent link]])</div> Changes: * The <code>[[Module:Params#magic_for_each|magic_for_each]]</code> and <code>[[Module:Params#magic_for_each_value|magic_for_each_value]]</code> functions have been added to the module * The <code>[[Module:Params#setting|setting]]</code> modifier has been added to the module * Structural changes in all iterating functions * (BREAKING CHANGES) The † <code>trimmed</code> modifier has been renamed to <code>[[Module:Params#cutting|cutting]]</code> in order to keep the <code>trimmed</code> keyword reserved for referring to leading and trailing spaces that surround values * Breaking change in the <code>[[Module:Params#list|list]]</code> function: <code>&#123;&#123;&#123;1&#125;&#125;&#125;</code> and <code>&#123;&#123;&#123;2&#125;&#125;&#125;</code> have been swapped * General code review == 10th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230710181050}} ([[Special:Diff/3967571/3967588|diff]], [[Special:PermanentLink/3967588|permanent link]])</div> Changes: * The <code>[[Module:Params#value_of|value_of]]</code> function has been added to the module * Code review == 9th July 2023‎ == <div style="float: right; font-size: .75em;">{{#time:c|20230709202922}} ([[Special:PermanentLink/3967571|permanent link]])</div> The first draft of [[Module:Params]] is out. qq2j20cv4ojkwv0l1wncj8lfyuotf8f Modulus:Params 828 325925 3971029 3969999 2026-07-09T01:07:29Z Grufo 64423 Modulum redintegravi 3971029 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `use`, `use_as`, -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed local tmp1 local tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 elseif tmp1 == 'use' then tmp1 = get_parameter_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 elseif tmp1 == 'use_as' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style, params) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = ctx.pipe[1] if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) local stack = new_substack(ctx) for key, val in pairs(ctx.params) do stack[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) local stack = new_substack(ctx) for key, val in pairs(ctx.oparams) do stack[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) 3ur5886l8gulcse5r9oetz78wzjn26x 3971030 3971029 2026-07-09T01:07:53Z Grufo 64423 3971030 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Copy at most N items (of all kinds) from `src` to `dest` and return `dest` local function copy_table_maxn (dest, src, len) local idx = 1 for key, val in pairs(src) do dest[key] = val idx = idx + 1 if idx > len then break end end return dest end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `use`, `use_as`, -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, keeping_at_most = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed local tmp1 local tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 elseif tmp1 == 'use' then tmp1 = get_parameter_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 elseif tmp1 == 'use_as' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style, params) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local tmp = tonumber(ctx.pipe[1]) if tmp == nil then tmp = new_substack(ctx) for key, val in pairs(src) do tmp[key] = val end return 1 else if tmp < 1 or math.floor(tmp) ~= tmp then error(modutmpame .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, tmp) return 2 end end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to library.keeping_at_most = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end ctx.params = copy_table_maxn({}, ctx.params, len) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = ctx.pipe[1] if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len) else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end return context_iterate(ctx, 2) end ]]-- -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) kj7z5n3rgdum9bffk5ahe7pveiv025b 3971032 3971030 2026-07-09T01:57:59Z Grufo 64423 3971032 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Copy at most N items (of all kinds) from `src` to `dest` and return `dest` local function copy_table_maxn (dest, src, len) local idx = 1 for key, val in pairs(src) do dest[key] = val idx = idx + 1 if idx > len then break end end return dest end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `use`, `use_as`, -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, keeping_at_most = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed local tmp1 local tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 elseif tmp1 == 'use' then tmp1 = get_parameter_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 elseif tmp1 == 'use_as' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style, params) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local tmp = tonumber(ctx.pipe[1]) if tmp == nil then tmp = new_substack(ctx) for key, val in pairs(src) do tmp[key] = val end return 1 else if tmp < 1 or math.floor(tmp) ~= tmp then error(modutmpame .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, tmp) return 2 end end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end if ctx.pipe[2] ~= nil and ctx.pipe[2]:match'^%s*flushing%s*$' then ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 3) end new_substack(ctx)[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to library.keeping_at_most = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end ctx.params = copy_table_maxn({}, ctx.params, len) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = ctx.pipe[1] if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len) else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end return context_iterate(ctx, 2) end ]]-- -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) 9axdu4kjo3hayhnk32efovx3hqh4y3y 3971033 3971032 2026-07-09T02:04:59Z Grufo 64423 3971033 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Copy at most N items (of all kinds) from `src` to `dest` and return `dest` local function copy_table_maxn (dest, src, len) local idx = 1 for key, val in pairs(src) do dest[key] = val idx = idx + 1 if idx > len then break end end return dest end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `use`, `use_as`, -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, keeping_at_most = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed local tmp1 local tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 elseif tmp1 == 'use' then tmp1 = get_parameter_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 elseif tmp1 == 'use_as' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style, params) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local tmp = tonumber(ctx.pipe[1]) if tmp == nil then tmp = new_substack(ctx) for key, val in pairs(src) do tmp[key] = val end return 1 else if tmp < 1 or math.floor(tmp) ~= tmp then error(modutmpame .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, tmp) return 2 end end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end if ctx.pipe[2] ~= nil and ctx.pipe[2]:match'^%s*here%s*$' then ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 3) end new_substack(ctx)[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to library.keeping_at_most = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end ctx.params = copy_table_maxn({}, ctx.params, len) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = ctx.pipe[1] if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len) else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end return context_iterate(ctx, 2) end ]]-- -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) ah485u9fj8maus1alivsluxw8ffyckn 3971038 3971033 2026-07-09T02:53:57Z Grufo 64423 Modulum redintegravi 3971038 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after) local tbl, pin = {}, start_from local tnamed while src[pin] ~= nil and src[pin]:match'^%s*let%s*$' and src[pin + 1] ~= nil and src[pin + 2] ~= nil do tbl[get_parameter_name(src[pin + 1])] = src[pin + 2] pin = pin + 3 end if pin ~= start_from then tnamed, tbl = tbl, {} end local tmp = tonumber(src[pin]) if tmp ~= nil and math.floor(tmp) == tmp then if tmp < 0 then tmp = -1 end local shf = append_after - pin for idx = pin + 1, pin + tmp do tbl[idx + shf] = src[idx] end pin = pin + tmp + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, nargs = load_child_opts(src, style[2] + shf, n_exist) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, nargs, tmp, karg, varg end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end if ctx.pipe[2] ~= nil and ctx.pipe[2]:match'^%s*here%s*$' then ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 3) end new_substack(ctx)[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg = load_callback_opts(opts, 1, mapping_styles.values_only) local model = { title = tname, args = margs } value_maps[looptype](ctx.params, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg = load_callback_opts(opts, 2, mapping_styles.values_only) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](ctx.params, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg = load_callback_opts(opts, 1, mapping_styles.values_only) value_maps[looptype](ctx.params, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 1, mapping_styles.names_only) local model = { title = tname, args = rargs } map_names(ctx.params, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 2, mapping_styles.names_only) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(ctx.params, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 1, mapping_styles.names_only) map_names(ctx.params, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe local tmp if opts[1] ~= nil then tmp = opts[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local argc tmp, argc = load_child_opts(opts, 2, 0) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end local groups = make_groups(ctx.params) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) local stack = new_substack(ctx) for key, val in pairs(ctx.params) do stack[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) local stack = new_substack(ctx) for key, val in pairs(ctx.oparams) do stack[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) eyabtutlf4igvy81jvwa39pi8u61cca 3971039 3971038 2026-07-09T02:55:40Z Grufo 64423 Ad priorem recensionem reversus sum 3971039 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Copy at most N items (of all kinds) from `src` to `dest` and return `dest` local function copy_table_maxn (dest, src, len) local idx = 1 for key, val in pairs(src) do dest[key] = val idx = idx + 1 if idx > len then break end end return dest end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_key_list_sorted (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 0, 0 for key, val in pairs(tbl) do if type(key) == 'number' then nn = nn + 1 nums[nn] = key else nw = nw + 1 words[nw] = key end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn, nw end -- Parse a parameter name string and return it as a string or a number local function get_parameter_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_parameter_name(dkey) if skey ~= realkey then dest[realkey] = val src[skey] = nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Functions and modifiers MUST avoid these names too: `let`, `use`, `use_as`, -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the `frame.args` -- metatable to be copied into a regular table; if they are modifiers they also -- guarantee that they will make their own (modified) copy available local refpipe = { call_for_each_group = true, --coins = true, count = true, evaluating = true, for_each = true, list = true, list_values = true, list_maybe_with_names = true, value_of = true } -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, keeping_at_most = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, --renaming_to_values = true, shifting = true, splicing = true, --swapping_names_and_values = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame) local ctx = {} ctx.frame = child_frame:getParent() ctx.opipe = child_frame.args ctx.oparams = ctx.frame.args ctx.firstposonly = static_iface ctx.iterfunc = pairs ctx.sorttype = 0 ctx.n_parents = 0 ctx.n_children = 0 ctx.n_available = maxfill return ctx end -- Move to the next action within the user-given list local function context_iterate (ctx, n_forward) local nextfn if ctx.pipe[n_forward] ~= nil then nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)' end if nextfn == nil then error(modulename .. ': You must specify a function to call', 0) end if library[nextfn] == nil then if ctx.firstposonly[nextfn] == nil then error(modulename .. ': The function ‘' .. nextfn .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. nextfn .. '’ directive can only appear in first position', 0) end end remove_numeric_keys(ctx.pipe, 1, n_forward) return library[nextfn] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings (dest, opts, start_from) local cmd if opts[start_from] == nil then return start_from - 1 end cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/') :match'^/*(.*[^/])' if cmd == nil then return start_from end local amap, sep, argc = {}, string.byte('/'), start_from + 1 local vname local chr for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val] = opts[argc] amap[key] = nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local newparams = {} local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) if raw_arg == nil then return nil, 1, false end local tmp = raw_arg:match'^%s*(.-)%s*$' if tmp == 'without_sorting' then return nil, 2, false end tmp = sortfunctions[tmp] if tmp == nil then return nil, 1, false end return tmp or nil, 2, true end -- Parse optional user arguments of type `...|[let]|[...][number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed local tmp1 local tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 elseif tmp1 == 'use' then tmp1 = get_parameter_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 elseif tmp1 == 'use_as' and src[pin + 2] ~= nil then tmp1 = get_parameter_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, n_skip, default_style, params) local style local shf local tmp = src[n_skip + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, n_skip - 1 else shf = n_skip end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) tmp = style[1] if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, whoami) if opts[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3 if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[argc] if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl) end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, whoami) local ptns, state, nptns, cnt = {}, 0, 0, 1 local keyw for _, val in ipairs(opts) do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { val, false, false } else keyw = val:match'^%s*(.*%S)' if keyw == nil or mkeywords[keyw] == nil or ( state > 0 and mkeywords[keyw] > 0 ) then break else state = mkeywords[keyw] if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end cnt = cnt + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, cnt end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, start_from, isp, psp) local tmp local optslots, noptslots, argc = { true, true, true }, 3, start_from local trimn, trimu, iplain, pplain = true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] if tmp == nil then break end tmp = tmp:match'^%s*(.-)%s*$' if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then tmp = trim_parse_opts[tmp] trimn, trimu = tmp[1], tmp[2] optslots[1] = nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp = isep_parse_opts[tmp], opts[argc] optslots[2] = nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp = psep_parse_opts[tmp], opts[argc] optslots[3] = nil else break end argc = argc + 1 until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg] = key margs[varg] = val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix local gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix = '' gid = key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel = {} local canvas = {} local idx = 1 local s_pos = 1 local e_pos = string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx] = target:sub(s_pos, e_pos - 1) skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@' idx = idx + 2 s_pos = e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key local val local spos1 local spos2 local pos1 local pos2 local pos3 = 0 local idx = 1 local lenplone = #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return idx end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end idx = idx + 1 else key = get_parameter_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return idx end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx] = val idx = idx + 1 until pos2 == nil return idx end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_parameter_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return idx end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local tmp = tonumber(ctx.pipe[1]) if tmp == nil then tmp = new_substack(ctx) for key, val in pairs(src) do tmp[key] = val end return 1 else if tmp < 1 or math.floor(tmp) ~= tmp then error(modutmpame .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, tmp) return 2 end end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts = ctx.pipe if ctx.pipe[1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local tbl = ctx.params local vars = {} local sortfn, tmp, do_sort = load_sort_opt(opts[2]) local argc = set_strings(vars, opts, tmp + 1) if argc < tmp then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_parameter_name(ctx.pipe[1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache local len if do_sort then local words cache, words, len, tmp = get_key_list_sorted(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache = {} len = 0 for key in pairs(tbl) do len = len + 1 cache[len] = key end end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp = cache[idx] pmap[nss + 1] = pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) } return argc end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx) local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe) if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(ctx.pipe) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tbl = ctx.params if ctx.subset == 1 then for key, val in ipairs(tbl) do fn(key, val) end return end if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset ~= -1 then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn(key, val) end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then for key, val in ipairs(ctx.params) do fn_seq(key, val) end return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.sorttype > 0 then local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort) local sequence = {} for key, val in ipairs(tbl) do sequence[key] = val end if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc = ipairs ctx.subset = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc = pairs ctx.subset = -1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local argc = set_strings(ctx, ctx.pipe, 1) if argc < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, argc + 1) end -- Syntax: #invoke:params|scoring|new parameter name|pipe to library.scoring = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local retval = 0 for _ in pairs(ctx.params) do retval = retval + 1 end if ctx.pipe[2] ~= nil and ctx.pipe[2]:match'^%s*here%s*$' then ctx.params[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 3) end new_substack(ctx)[get_parameter_name(ctx.pipe[1])] = tostring(retval) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen] = key store[key] = val tbl[key] = nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1 for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end nnums = nnums + 1 tmp[key] = val end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax, 1 do tbl[idx] = '' end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl = ctx.params local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end for idx = 1, lcut, 1 do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local lcut = tonumber(ctx.pipe[1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(ctx.pipe[2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin local nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax, 1 do tbl[idx - lshift] = tbl[idx] tbl[idx] = nil end end end end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local idx = tonumber(ctx.pipe[1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local last = tonumber(ctx.pipe[1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(ctx.pipe[2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, 3) end idx = idx - len if last < idx then return context_iterate(ctx, 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local numerics = {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil end end for key, val in pairs(numerics) do tbl[shift - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local tbl, numerics = ctx.params, {} local nmax local nmin for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key] = val tbl[key] = nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tbl, cache, nsize = ctx.params, {}, 0 local tmp for key in pairs(tbl) do if type(key) == 'number' then nsize = nsize + 1 cache[nsize] = key end end table.sort(cache) for idx = math.floor(nsize / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ] tbl[cache[nsize - idx + 1] ] = tmp end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$'] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, 1) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, tbl = ctx.pipe, ctx.params local tmp1 = opts[1] local tmp2 local argc local pos local refp if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[2]), 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, 3, 0 end else pos, argc, refp = tonumber(opts[2]), 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl tmp1 = tonumber(opts[argc]) if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then return context_iterate(ctx, argc) end tmp2 = argc - pos + 1 for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end return context_iterate(ctx, argc + tmp1 + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2] return context_iterate(ctx, 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_parameter_name(ctx.pipe[1]) if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(ctx.pipe[2]) if len == nil then ctx.params[get_parameter_name(ctx.pipe[1])] = nil return context_iterate(ctx, 2) end local key = tonumber(ctx.pipe[1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_matching') local tmp local ptn local tbl = ctx.params local newparams = {} for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_name_not_matching') local tbl = ctx.params if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc) end local yesmatch local ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or] -- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_matching') local nomatch local ptn for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1] -- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local tbl = ctx.params local targets, nptns, argc = load_pattern_args(ctx.pipe, 'with_value_not_matching') local yesmatch local ptn for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to library.keeping_at_most = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end ctx.params = copy_table_maxn({}, ctx.params, len) return context_iterate(ctx, 2) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'mapping_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) if ctx.pipe[1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1] local tbl = ctx.params if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|mapping_to_names|pipe to --[[ library.mapping_to_names = function (ctx) local tbl = ctx.params for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1]) local cache local len if do_sort then local words local wl cache, words, len, wl = get_key_list_sorted(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache = {} len = 0 for _, val in pairs(tbl) do len = len + 1 cache[len] = val end end ctx.params = cache return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let]|[...][number of additional parameters]|[parameter -- 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_invoking = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let]|[...][number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die = load_replace_args(ctx.pipe, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_parameter_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn] = nil tbl[get_parameter_name(repl)] = val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local mix = ctx.pipe[1]:match'^%s*(.-)%s*$' local cache = {} if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_parameter_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, 2) end -- Syntax: #invoke:params|renaming_to_values|pipe to --[[ library.renaming_to_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for _, val in pairs(ctx.params) do cache[val] = val end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let]|[...]|[number of additional arguments]|[argument -- 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = ctx.pipe[1] if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0] = gid model.args = group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '|', '=') local tbl, tmp = ctx.params, get_parameter_name(opts[1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc = load_parse_opts(opts, 2, '!', ':') if opts[1]:match'^%s*(.*%S)' == nil then ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe) return context_iterate(ctx, argc) end local new_opts, cache = {}, {} local shift = parse_parameter_string(cache, opts[1], isep, iplain, psep, pplain, trimnamed, trimunnamed) - argc for key, val in pairs(opts) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val elseif key >= argc then new_opts[key + shift] = val end end for key, val in pairs(cache) do new_opts[key] = val end ctx.pipe = new_opts return context_iterate(ctx, 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning if ctx.pipe[1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local cache = {} local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2] local tmp if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_parameter_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_parameter_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_parameter_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, 3) end -- Syntax: #invoke:params|swapping_names_and_values|pipe to --[[ library.swapping_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do cache[val] = key end ctx.params = cache return context_iterate(ctx, 1) end ]]-- -- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting -- directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' ) + 1) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' ) + 1) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tname = ctx.pipe[1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mname = ctx.pipe[1] if mname ~= nil then mname = mname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = ctx.pipe[2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if ctx.pipe[3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_parameter_name(ctx.pipe[3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local magic = ctx.pipe[1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if ctx.pipe[2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_parameter_name(ctx.pipe[2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, 3) end -- Syntax: #invoke:params|snapshotting|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|pipe to library.remembering = function (ctx) return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl = ctx.params local ncurrparent = ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params = ctx.children[currsnap] ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local parent local tmp = ctx.n_parents if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end tmp = get_parameter_name(opts[1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, 2) end -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len) else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end return context_iterate(ctx, 2) end ]]-- -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substack has been created', 0) end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 return context_iterate(ctx, 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substack has been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params = ctx.parents[ncurrparent] ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 ctx.n_children = currsnap return context_iterate(ctx, 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent = ctx.parents[ncurrparent] local child = ctx.params ctx.params = parent ctx.parents[ncurrparent] = nil ctx.n_parents = ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent = ctx.params local currsnap = ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap] = nil ctx.n_children = currsnap - 1 return context_iterate(ctx, 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2] -- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end remove_numeric_keys(opts, 1, 2) local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end remove_numeric_keys(opts, 1, 1) ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local opts = ctx.pipe if opts[1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = val nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1] = pps ret[nss + 2] = '' ret[nss + 3] = '' ret[nss + 4] = val nss = nss + 4 end, function (key, val) ret[nss + 1] = pps ret[nss + 2] = key ret[nss + 3] = kvs ret[nss + 4] = val nss = nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value -- 2]|[...]|[last coin = value N] --[[ library.coins = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local opts, tbl = ctx.pipe, ctx.params for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end return library.list_values(ctx) end ]]-- -- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin = -- value 2]|[...]|[last coin = value N] library.unique_coins = function (ctx) local opts, tbl = ctx.pipe, ctx.params local tmp for key, val in pairs(tbl) do tmp = get_parameter_name(val) tbl[key] = opts[tmp] opts[tmp] = nil end return library.list_values(ctx) end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) -- NOTE: `ctx.pipe` might be the original metatable! local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params( ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1] = pps ret[nss + 2] = table.concat(cnv) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...] -- |[named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2] -- |[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' table.insert(opts, 1, true) flush_params( ctx, function (key, val) opts[1] = key opts[2] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts = ctx.pipe local tname if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local model = { title = tname, args = opts } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts = ctx.pipe local mname local fname if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local model = { title = 'Module:' .. mname, args = opts } local mfunc = require(model.title)[fname] local ret, nss, ccs = {}, 0, ctx.itersep or '' remove_numeric_keys(opts, 1, 1) flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = mfunc(ctx.frame:newChild(model)) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1] -- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts = ctx.pipe local magic if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params( ctx, function (key, val) opts[1] = val ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:callParserFunction(magic, opts) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables! local tmp if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(ctx.pipe) do if type(key) == 'number' then opts[key - 1] = val else opts[key] = val end end ctx.pipe = opts ctx.params = make_groups(ctx.params) flush_params( ctx, function (gid, group) for key, val in pairs(opts) do group[key] = val end group[0] = gid model.args = group ret[nss + 1] = ccs ret[nss + 2] = ctx.frame:expandTemplate(model) nss = nss + 2 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, false) ctx.params = {} main_loop(ctx, context_iterate(ctx, 1)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (frame) return frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame) ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname]) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) ah485u9fj8maus1alivsluxw8ffyckn Modulus:Params/doc/en 828 325928 3971015 3969625 2026-07-08T23:47:43Z Grufo 64423 Minora 3971015 wikitext text/x-wiki {{module:params/doc/en/main sidebox}} The <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight> module is designed to be adopted by those templates that want to have a deep control of their parameters. It is particularly useful to [[:en:variadic template|variadic template]]s, to which it offers the possibility to count, list, map and propagate the parameters received without knowing their number in advance. The module offers elegant shortcuts to non variadic templates as well. Outside templates it has very few applications; hence, if you plan to make experiments, make sure to do them from within a template, or you will not be able to see much (you can use {{[[module:params/periclitationes/en/sandbox]]}} for that). Under [[Module:Params/periclitationes|./periclitationes/en]] you can find helper templates that can be specifically used for testing the module's capabilities in flexible ways. Finally, under [[Module:Params/doc/en/examples|./doc/en/examples]] you can find some of the examples shown in this documentation page. {{Nota bene|Note:}} In case your template uses <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight>, please add <syntaxhighlight lang="wikitext" inline>{{lua|Module:Params}}</syntaxhighlight> to its documentation page, so that if breaking changes will be introduced in the future the template will be easily traceable without performing <span class="plainlinks">[//en.wikipedia.org/w/index.php?search=insource%3A%2Finvoke%3Aparams%2Fi&title=Special%3ASearch&profile=advanced&fulltext=1&ns10=1&limit=500&sort=last_edit_desc an "in source" search]</span>. Please, do not edit this module without having done extensive testing in the [[Module:Params/harenarium|module's sandbox]] first. == General usage == Among the possibilities that the module offers there is that of performing a series of actions after additional arguments have been concatenated to templates' incoming parameters. As this makes it necessary to keep the argument slots clean from interference, instead of named arguments in order to specify options this module uses ''piping functions'' (i.e. functions that expect to be [[:en:Pipeline (software)|piped]] instead of returning to the caller), or ''modifiers''. This creates a syntax similar to the following example: <syntaxhighlight lang="wikitext">{{#invoke:params|[modifier]|[...]|[modifier]|[...]|function|[...]}}</syntaxhighlight> For instance, as the name suggests, the <code>[[#list|list]]</code> function lists the parameters wherewith a template was called. By default it does not add delimiters, but returns an indistinct blob of text in which keys and values are sticked to each other. However, by using the <code>[[#setting|setting]]</code> modifier, we are able to declare a key-value delimiter (<code>p</code>) and an iteration delimiter (<code>i</code>). And so, if we imagined a template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> containing the following wikitext, <syntaxhighlight lang="wikitext">{{#invoke:params|setting|i/p|<br />|: |list}}</syntaxhighlight> and such template were called with the following parameters, <syntaxhighlight lang="wikitext">{{example template | Beast of Bodmin = A large feline inhabiting Bodmin Moor | Morgawr = A sea serpent | Owlman = A giant owl-like creature }}</syntaxhighlight> the following result would be produced: : Beast of Bodmin: A large feline inhabiting Bodmin Moor<br />Morgawr: A sea serpent<br />Owlman: A giant owl-like creature We can also do more sophisticated things; for instance, by exploiting the possibility to set a header (<code>h</code>) and a footer (<code>f</code>), we can transform the previous code into a generator of [https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element definition lists], <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>|list}}</syntaxhighlight> thus yielding: :; Beast of Bodmin :: A large feline inhabiting Bodmin Moor :; Morgawr :: A sea serpent :; Owlman :: A giant owl-like creature By placing the <code>[[#with_name_matching|with_name_matching]]</code> modifier before the <code>[[#list|list]]</code> function we will be able to filter some parameters out – such as, for instance, all parameter names that do not end with an "n": <syntaxhighlight lang="wikitext">{{#invoke:params|with_name_matching|n$|setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>|list}}</syntaxhighlight> Thus, the previous code will produce: :; Beast of Bodmin :: A large feline inhabiting Bodmin Moor :; Owlman :: A giant owl-like creature This mechanism has the intrinsic advantage that it allows the concatenation of infinite modifiers. And so, in order to get the accurate result that we want to obtain we could write: <syntaxhighlight lang="wikitext">{{#invoke:params| with_name_matching|^B| with_name_matching|n$| with_value_matching|feline| setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>| all_sorted| list }}</syntaxhighlight> Since it is a wikitext-oriented module focused on manipulating collections, its functions and modifiers have loosely been inspired by JavaScript <code>Array</code>'s [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#instance_methods instance methods].<ref>For instance, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map Array.prototype.map()]</code> can remind of <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach Array.prototype.forEach()]</code> can remind of <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice Array.prototype.splice()]</code> can remind of <code>[[#splicing|splicing]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/with Array.prototype.with()]</code> can remind of <code>[[#entering_substack|entering_substack]]&#124;...&#124;[[#merging_substack|merging_substack]]</code>, and so on.</ref> The syntax that emerges from piping functions to one another instead results similar to [[:en:jQuery#Chaining|jQuery's method chains]]. In that sense, this <syntaxhighlight lang="javascript">$("#myElement") .css("background-color", "blue") .addClass("active") .hide() .etc...</syntaxhighlight> might loosely remind of this: <syntaxhighlight lang="wikitext">{{#invoke:params| excluding_non-numeric_names| mapping_by_replacing|[^abdlp]+|| mapping_by_replacing|a|⏒ ||plain| etc... }}</syntaxhighlight> Conceptually the pattern is very similar: each step transforms the result of the previous one. But instead of a jQuery object being indefinitely manipulated, what is indefinitely manipulated here is always a collection of wikitext parameters. === Considerations on code style === Normally on Wikipedia, when templates are written across multiple lines in ''block style'', by convention the pipe sign (<code>&#124;</code>) is written on the left side of each new line, as in the following example: <syntaxhighlight lang="wikitext">{{cite book | last = Bloggs | first = Joe | author-link = Joe Bloggs | date = 1974 | title = Book of Bloggs }}</syntaxhighlight> Doing the same with <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight> however is often impossible, because the module tends to preserve trailing spaces and new lines in all its arguments except in modifier and function names (and, accordingly, a newline character would be parsed as belonging to the last parameter of each line). Because of this, the only safe and meaningful way to invoke this module in ''block style'' is by appending the pipe sign ''at the end of the line, right before a modifier name or a function name'', as in the following example: <syntaxhighlight lang="wikitext">{{#invoke:params| all_sorted| excluding_non-numeric_names| mapping_by_replacing|[^abdlp]+|| mapping_by_replacing|a|⏒ ||plain| mapping_by_replacing|b|⏑ ||plain| mapping_by_replacing|d|⏔ ||plain| mapping_by_replacing|l|‒ ||plain| mapping_by_replacing|p|⏖ ||plain| trimming_values| mapping_by_replacing|%s+|&nbsp;| setting|h/i/f|<big>&nbsp;|&nbsp;&#124; |&nbsp;</big>| list_values }}</syntaxhighlight> === Prototyping new templates === In designing new templates or exploring the module's capabilities, there are two possible approaches that allow to simulate the incoming parameters direcly in a preview window—without having to save the changes first and then test them from a different page. The first approach consists in temporarily exploiting the <syntaxhighlight lang="wikitext" inline><includeonly>...</includeonly></syntaxhighlight> and <syntaxhighlight lang="wikitext" inline><noinclude>...</noinclude></syntaxhighlight> tags properly to include the template's transclusion as well, the second approach consists in temporarily relying on the <code>[[#imposing|imposing]]</code> modifier. For instance, given a template named <syntaxhighlight lang="wikitext" inline>{{My template}}</syntaxhighlight>, whose wikitext is <syntaxhighlight lang="wikitext" inline>{{#invoke:params|value_of|foo}}</syntaxhighlight>, to simulate the transclusion <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three|foo=bar}}</syntaxhighlight>, it is possible to write, temporarily, <syntaxhighlight lang="wikitext"><includeonly>{{#invoke:params|value_of|foo}}</includeonly><noinclude>{{{{#invoke:params|self}}|one|two|three|foo=bar}}</noinclude></syntaxhighlight> or, equivalently, <syntaxhighlight lang="wikitext">{{#invoke:params| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| value_of|foo }}</syntaxhighlight> and then click on “Show preview”. In both cases, the final template must be eventually saved as: <syntaxhighlight lang="wikitext"><includeonly>{{#invoke:params|value_of|foo}}</includeonly><noinclude>{{Documentation}}</noinclude></syntaxhighlight> Here are some suggestions on how to proceed in order to master this module: # Start by using only the <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code> and <code>[[#for_each|for_each]]</code> functions # Learn how to use the <code>[[#setting|setting]]</code> modifier # Learn how to use all the other modifiers # Learn how to use all the other functions === Nomenclature === Most modifiers immediately affect what follows, while others add their action to the queue of actions that will be done last, thus affecting only the way [[#Functions|functions]] behave (e.g. <code>[[#sequential|sequential]]</code>, <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> – as the only action they do consists in ''putting a flag'', these are called “[[#Flag modifiers (piping functions)|flag modifiers]]”). A rule of thumb in the nomenclature is the following: * If a directive is an English adjective or a past participle it is a [[#Flag modifiers (piping functions)|flag modifier]] (e.g. <code>[[#sequential|sequential]]</code>) * If a directive is or contains an English [[:en:gerundive|gerundive]] it is a [[#Modifiers (piping functions)|modifier]] (with the exception of the special, first-position-only <code>[[#new|new]]</code> directive – e.g. <code>[[#squeezing|squeezing]]</code>) * If a directive is anything else (usually an English [[:en:bare infinitive|bare infinitive]]) it is a normal non-piping [[#Functions|function]] (e.g. <code>[[#list_values|list_values]]</code>) The two flag modifiers <code>[[#sequential|sequential]]</code> and <code>[[#non-sequential|non-sequential]]</code> refer to a technical jargon used in wikitext: given a parameter list, the subgroup of ''sequential parameters'' is constituted by the largest group of consecutive numeric parameters starting from {{para|1}} – this is known as the parameters' "sequence". A parameter list that does not have a first parameter specified does not possess a sequence. == Functions == Here follows the list of functions. You might want to see also [[#Flag modifiers (piping functions)|§ Flag modifiers]] and [[#Modifiers (piping functions)|§ Modifiers]]. {{vsep|mundatio=nulla}} === <code>self</code> === {{Capsa tabellaria | titulus = Function <code>self</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|self|code}})</span> | Num. of arguments: 0 | Not affected by: Any modifier | ; See also | : <code>{{intermn|TEMPLATENAME|main|en}}</code>, <code>{{mwl|FULLPAGENAME}}</code> }} ; Brief : ''Return the name of the current template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|self}}</syntaxhighlight> This argumentless function guarantees that the name of the template invoking this module is shown, regardless if this is transcluded or not. As a possible example, if a Wikipedia page named <code>Page X</code> contained only a transclusion of a template named <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight>, and the latter contained the following wikitext, <syntaxhighlight lang="wikitext">{{#invoke:params|self}} {{FULLPAGENAME}}</syntaxhighlight> if we visited <code>Template:Foobar</code> we would see, <pre>Template:Foobar Template:Foobar</pre> whereas if we visited <code>Page X</code> we would see: <pre>Template:Foobar Page X</pre> Therefore by writing <syntaxhighlight lang="wikitext">{{#ifeq:{{#invoke:params|self}}|{{FULLPAGENAME}} | Page is not being transcluded | Page is being transcluded }}</syntaxhighlight> it is possible to understand whether a page is being transcluded or not. For most cases the {{tag|includeonly}} and {{tag|noinclude}} will offer a simpler solution, however there can be cases in which this becomes the way to go. If <code>Page X</code> transcluded <syntaxhighlight lang="wikitext" inline>{{foobar 2}}</syntaxhighlight> and the latter were a redirect to <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight>, we would still see <pre>Template:Foobar Page X</pre> A typical use case of this function is that of providing stable links for editing transcluded templates. E.g.: <syntaxhighlight lang="wikitext">{{edit|{{#invoke:params|self}}|edit this template}}</syntaxhighlight> Another possible use case is that of transcluding a subtemplate. E.g.: <syntaxhighlight lang="wikitext">{{{{#invoke:params|self}}/my subtemplate|foo|bar}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>count</code> === {{Capsa tabellaria | titulus = Function <code>count</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|count|code}})</span> | Num. of arguments: 0 | Often preceeded by: <code>[[#sequential|sequential]]</code> | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#setting|setting]]</code>,<br /><code>[[#sorting_sequential_values|sorting_sequential_val…]]</code>,<br /><code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code> | ; See also | : <code>[[#scoring|scoring]]</code>, <code>{{intermn|ParameterCount||en}}</code> }} ; Brief : ''Count the number of parameters wherewith a template was called'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|count}}</syntaxhighlight> This function does not take arguments. The number that this function yields depends on the modifiers that precede it. For instance, in a template that is called with both named and unnamed parameters, <syntaxhighlight lang="wikitext" inline>{{#invoke:params|count}}</syntaxhighlight> and <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|count}}</syntaxhighlight> will return different results. For the modifier version of this function, see <code>[[#scoring|scoring]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_call</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_call</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_call|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code>, <code>{{intermn|template wrapper|wrap|en}}</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_call|template name|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> This function comes in handy in case of [[:en:Wikipedia:Wrapper templates|wrapper templates]]. For example, if our <syntaxhighlight lang="wikitext" inline>{{wrapper template}}</syntaxhighlight> had the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|concat_and_call|foobar|elbow|earth|room|hello=not today}}</syntaxhighlight> and were called with, <syntaxhighlight lang="wikitext">{{wrapper template|one|two|three|hello=world|wind=spicy}}</syntaxhighlight> the following call to the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template would be performed: <syntaxhighlight lang="wikitext">{{foobar|elbow|earth|room|one|two|three|hello=not today|wind=spicy}}</syntaxhighlight> By using the <code>[[#cutting|cutting]]</code> modifier it is possible to impose numeric positive parameters instead of prepending them. For instance, the following code echoes all incoming parameters to <syntaxhighlight lang="wikitext" inline>{{my template}}</syntaxhighlight>, with the exception of {{para|3}}, which is replaced with <code>hello world</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|3|0|concat_and_call|my template|{{{1|}}}|{{{2|}}}|hello world}}</syntaxhighlight> If the numeric parameters to replace are a limited number, as in the example above, a better alternative to <code>[[#cutting|cutting]]</code> might be <code>[[#imposing|imposing]]</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|imposing|3|hello world|concat_and_call|my template}}</syntaxhighlight> If no other argument besides the ''template name'' is provided this function simply echoes the current parameters to another template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>concat_and_call</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_invoke</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_invoke</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_invoke|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom module'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_invoke|module name|function name|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#concat_and_call|concat_and_call]]</code>, but invokes a module function instead of calling a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>concat_and_invoke</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_magic</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom parser function'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_magic|parser function|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#concat_and_call|concat_and_call]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>concat_and_magic</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>value_of</code> === {{Capsa tabellaria | titulus = Function <code>value_of</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|value_of|code}})</span> | Num. of arguments: 1 | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>f</code>, <code>n</code> | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code> }} ; Brief : ''Get the value of a single parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|value_of|parameter name}}</syntaxhighlight> Without modifiers this function is similar to writing <syntaxhighlight lang="wikitext" inline>{{{parameter name|}}}</syntaxhighlight>. With modifiers, however, it allows reaching parameters that would be unreachable without knowing their number in advance. For instance, writing <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|-2|0|value_of|1}}</syntaxhighlight> will expand to the value of the second-last sequential parameter, independently of how many parameters the template was called with. If no matching parameter is found this function expands to nothing. A header (<code>h</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the strings assigned to the key-value pair delimiter (<code>p</code>), the iteration delimiter (<code>i</code>), the last iteration delimiter (<code>l</code>) and the "serial-comma-like" last iteration delimiter (<code>s</code>) will be ignored. For instance, the {{interfn|If then show|en}} template could be rewritten as <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|setting|h/f/n|{{{3|}}}|{{{4|}}}|{{{2|}}}|value_of|1}}</syntaxhighlight> Simplifying, the following wikitext expands to the first parameter that is not empty: <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching||strict|squeezing|value_of|1}}</syntaxhighlight> Whereas the following wikitext expands to the first parameter that is not blank (i.e. neither empty nor containing only [[whitespace]]s) <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|squeezing|value_of|1}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>list</code> === {{Capsa tabellaria | titulus = Function <code>list</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: = Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>p</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code> }} ; Brief : ''List the template parameters (both their names and their values)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list}}</syntaxhighlight> This function does not take arguments. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which keys and values are sticked to each other. A header (<code>h</code>), a key-value pair delimiter (<code>p</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code>. For example, the following code <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f/n|'''Parameters passed:''' |); | (|)|'''No parameters were passed'''|list}}</syntaxhighlight> will generate an output similar to the following. : '''Parameters passed:''' Owlman (A giant owl-like creature); Beast of Bodmin (A large feline inhabiting Bodmin Moor); Morgawr (A sea serpent) {{vsep|1.5em|mundatio=nulla}} === <code>list_values</code> === {{Capsa tabellaria | titulus = Function <code>list_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list_values|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code>, <code>[[#value_of|value_of]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code>, <code>{{intermn|separated entries||en}}</code> }} ; Brief : ''List the values of the incoming parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list_values}}</syntaxhighlight> This function does not take arguments. The <code>[[#sequential|sequential]]</code> modifier often accompanies this function. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which values are sticked to each other. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code> – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, the following code <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/f/n|'''Values of parameters passed:''' |; |.|'''No parameters were passed'''|list_values}}</syntaxhighlight> will generate an output similar to the following. : '''Values of parameters passed:''' A giant owl-like creature; A large feline inhabiting Bodmin Moor; A sea serpent. This function covers and extends all the cases covered by {{intermn|Separated entries|main|en}}. For instance, the following two examples with “ + ” as delimiter and “ ... ” as conjunction produce a similar result: # <syntaxhighlight lang="wikitext" inline>{{#invoke:separated entries|main|separator=&#32;+&#32;|conjunction=&#32;...&#32;}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l| + | ... |list_values}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>list_maybe_with_names</code> === {{Capsa tabellaria | titulus = Function <code>list_maybe_with_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list_maybe_with_names|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code>, <code>{{intermn|separated entries||en}}</code> }} ; Brief : ''List the values of sequential parameters and the names and the values of non-sequential parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list_maybe_with_names}}</syntaxhighlight> This function does not take arguments. It is a combination of <code>[[#list|list]]</code> and <code>[[#list_values|list_values]]</code>: if a parameter belongs to the parameter sequence only its value will be shown, otherwise both its name and its value will be shown. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which keys and values are sticked to each other. A header (<code>h</code>), a key-value pair delimiter (<code>p</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code>. For example, the following code in <syntaxhighlight lang="wikitext" inline>{{My template}}</syntaxhighlight>, <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f/n|'''Parameters passed:''' |; |→|.|'''No parameters were passed'''|list_maybe_with_names}}</syntaxhighlight> when transcluded as <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three|four|foo=bar|hello=world}}</syntaxhighlight>, will generate an output similar to the following. : '''Parameters passed:''' one; two; three; four; hello→world; foo→bar. This function is particularly useful to mimic the natural transclusion of templates. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>coins</code> === {{Capsa tabellaria | titulus = Function <code>coins</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|coins|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code>, <code>[[#trimming_values|trimming_values]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#unique_coins|unique_coins]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code> }} ; Brief : ''Associate custom strings to possible parameter values and list the custom string when the associated value is present'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|coins|[first coin = value 1]|[second coin = value 2]|[...]|[last coin = value N]}}</syntaxhighlight> This function is identical to the <code>[[#unique_coins|unique_coins]]</code> function, except that it allows the repetition of identical flags. See there for more information. {{vsep|1.5em|mundatio=nulla}} --> === <code>unique_coins</code> === {{Capsa tabellaria | titulus = Function <code>unique_coins</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|unique_coins|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: = Yes | Often preceeded by: = <code>[[#sequential|sequential]]</code>, <code>[[#trimming_values|trimming_values]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <!--<code>[[#coins|coins]]</code>, --><code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code> }} ; Brief : ''Associate custom strings to possible parameter values and list the custom string when the associated value is present, but not more than once'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|unique_coins|[first coin = value 1]|[second coin = value 2]|[...]|[last coin = value N]}}</syntaxhighlight> This function is used to detect the existence of flag parameters. For this reason, it is often accompanied by the <code>[[#sequential|sequential]]</code> modifier (or, equivalently, by <code>...&#124;[[#excluding_non-numeric_names|excluding_non-numeric_names]]&#124;[[#clearing|clearing]]&#124;...</code>). A typical use case of this function is that of constructing [[URL]]s. For example, the following template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> checks for the <code>html</code>, <code>xml</code>, <code>comments</code> and <code>removenowiki</code> flags in order to append respectively the following strings to the final URL: <code>&amp;wpGenerateRawHtml=1</code>, <code>&amp;wpGenerateXml=1</code>, <code>&amp;wpRemoveComments=0</code>, <code>&amp;wpRemoveNowiki=1</code>. <syntaxhighlight lang="wikitext" line>{{#if:{{{input|}}} | <span class="plainlinks">[{{fullurl:Special:ExpandTemplates|wpInput={{urlencode:{{{input}}}|QUERY}}{{#if:{{{title|}}}|&wpContextTitle={{urlencode:{{{title}}}|QUERY}}}}{{#invoke:params|excluding_non-numeric_names|clearing|sequential|trimming_values|unique_coins | html = &wpGenerateRawHtml=1 | xml = &wpGenerateXml=1 | comments = &wpRemoveComments=0 | removenowiki = &wpRemoveNowiki=1 }}}} {{#if:{{{label|}}}|{{{label|}}}|Expand <code>{{{input}}}</code>}}]</span> | {{Error|Error: The {{para|input}} parameter is missing.}} }}</syntaxhighlight> And so, when transcluded as, <syntaxhighlight lang="wikitext">{{example template|comments|xml | input = Hello world {<nowiki />{#time:r{{!}}now}<nowiki />} }}</syntaxhighlight> it will generate the following output: : {{module:params/doc/en/examples/link to expanded template|comments|xml | input = Hello world {<nowiki />{#time:r{{!}}now}<nowiki />} }} A copy of the example above is available at &#123;&#123;[[Module:Params/doc/en/examples/link to expanded template|./doc/en/examples/link to expanded template]]&#125;&#125;. If you want to allow the repetition of identical flags, you can use <code>...&#124;[[#magic_for_each_value|magic_for_each_value]]&#124;[[:mw:Help:Extension:ParserFunctions#.23switch|#switch]]&#124;...</code>. Compare <syntaxhighlight lang="wikitext">{{#invoke:params| setting|i|//| sequential| magic_for_each_value|#switch | lemon = one | apple = two | pear = three | quince = four | grapefruit = five }}</syntaxhighlight> with <syntaxhighlight lang="wikitext">{{#invoke:params| setting|i|//| sequential| unique_coins | lemon = one | apple = two | pear = three | quince = four | grapefruit = five }}</syntaxhighlight> If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which values are sticked to each other. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code> – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#magic_for_each|magic_for_each]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''For each parameter passed to the current template, call a custom template with at least two parameters (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...] }}</syntaxhighlight> Some functions are like shortcuts. The <code>X_for_each|F</code> functions are similar to <code>mapping_by_X(ing)|F|(names_and_values|)list_values</code>. The latter syntax (i.e. the modifier version) allows a <code>values_and_names</code> flag to invert the order from key-value to value-key. All unnamed arguments following the ''template name'' will be placed after the key-value pair. Named arguments will be passed verbatim. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. Calling a template for each key-value pair with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|call_for_each|foobar}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{foobar|$#|$@}}}}</syntaxhighlight> In the first example each key-value pair will be passed to the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template, while in the second example the <code>$#</code> and <code>$@</code> tokens will be expanded ''after'' the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template has been called. In most cases this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>invoke_for_each</code> === {{Capsa tabellaria | titulus = Function <code>invoke_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|invoke_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: = Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#magic_for_each|magic_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, invoke a custom module function with at least two arguments (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|invoke_for_each|module name|module function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each|call_for_each]]</code>, but invokes a module instead of calling a template. Invoking a module function for each key-value pair with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|invoke_for_each|foobar|main}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{#invoke:foobar|main|$#|$@}}}}</syntaxhighlight> In the first example each key-value pair will be passed to the <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main}}</syntaxhighlight> module function, while in the second example the <code>$#</code> and <code>$@</code> tokens will be expanded ''after'' the module function has been invoked. There might be cases in which this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>invoke_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>magic_for_each</code> === {{Capsa tabellaria | titulus = Function <code>magic_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|magic_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, call a magic word with at least two arguments (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|magic_for_each|parser function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each|call_for_each]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>magic_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each|call_for_each]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''For each parameter passed to the current template, call a custom template with at least one parameter (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each_value|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> The <code>[[#sequential|sequential]]</code> modifier often accompanies this function. All unnamed arguments following the ''template name'' will be appended after the value parameter. Named arguments will be passed verbatim. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, calling {{fn|tl|en}} with each parameter can be done by writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|i|, |call_for_each_value|tl}}</syntaxhighlight> This will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|i|, |for_each|{{tl|$@}}}}</syntaxhighlight> In the first example each value will be passed to the {{fn|tl|en}} template, while in the second example the <code>$@</code> token will be expanded ''after'' the {{fn|tl|en}} template has been called. Here this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>invoke_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>invoke_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|invoke_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code> }} ; Brief : ''For each parameter passed to the current template, invoke a custom module function with at least one argument (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|invoke_for_each_value|module name|module function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each_value|call_for_each_value]]</code>, but invokes a module instead of calling a template. Invoking a module function for each value with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|invoke_for_each_value|foobar|main}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{#invoke:foobar|main|$@}}}}</syntaxhighlight> In the first example each value will be passed to the <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main}}</syntaxhighlight> module function, while in the second example the <code>$@</code> token will be expanded ''after'' the module function has been invoked. There might be cases in which this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>invoke_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>magic_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>magic_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|magic_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#magic_for_each|magic_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, call a magic word with at least one argument (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|magic_for_each_value|parser function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each_value|call_for_each_value]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. For example, if a template had the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|ih|&preloadparams%5b%5d{{=}}|magic_for_each_value|urlencode|QUERY}}</syntaxhighlight> and were transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|hello world|àèìòù|foobar}}</syntaxhighlight>, the <code><nowiki>{{</nowiki>[[:mw:Help:Magic words#URL data|urlencode]]:...|QUERY<nowiki>}}</nowiki></code> parser function would be called for each incoming parameter as first argument and with <code>QUERY</code> as second argument, and finally the returned text would be prefixed with <code>&preloadparams%5b%5d=</code>. This would generate, <pre>&preloadparams%5b%5d=hello+world&preloadparams%5b%5d=%C3%A0%C3%A8%C3%AC%C3%B2%C3%B9&preloadparams%5b%5d=foo+bar</pre> which can be used to allow the creation of pages [[:mw:Manual:Creating pages with preloaded text#Using parameters|with preloaded text and parameters]]. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>magic_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each_group</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each_group</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each_group|code}})</span> | Num. of arguments: ''Ad libitum'' | Often preceeded by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''Call a custom template for each group of parameters that have the same numeric suffix'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each_group|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...] }}</syntaxhighlight> In short, this function helps you manage cases like the following, in which a template needs to be transcluded with a variable number of parameters grouped by their identical numerical suffix: <syntaxhighlight lang="wikitext">{{My template | foo 1 = lorem | bar 1 = ipsum | hello 1 = dolor | foo 2 = sit | bar 2 = amet | hello 2 = dolor | foo 3 = consectetur | bar 3 = adipiscing | hello 3 = elit | ... }}</syntaxhighlight> The way it manages this situation is by repeatedly calling a custom template for each group of similar parameters. These will be stripped of their numeric id (i.e. the numeric suffix), which will be passed separetely as '''parameter zero''' (i.e. <code>&#123;&#123;&#123;0&#125;&#125;&#125;</code>) to the custom template. With the group of parameters that do not have a numeric suffix the id will be an empty string. If you are a module writer, you might recognize some distant similarities between this function and <code>[[Module:TableTools#affixNums|TableTools.affixNums]]</code>. A hyphen before the numeric suffix will be interpreted as a minus sign (and therefore the group id will be treated as a negative number). Numeric incoming parameters will be treated as if their prefix were an empty string (these can be captured using <code>&#123;&#123;&#123;&#125;&#125;&#125;</code> or <code>&#123;&#123;&#123;&#124;''fallback text''&#125;&#125;&#125;</code> in the callback template). Spaces between the prefix and the numeric suffix will be ignored (therefore writing {{para|foobar123}} will be identical to writing {{para|foobar&nbsp;123}} – in case of collisions one of the two values will be discarded). In the unlikely scenario that the prefix is itself a number (e.g. {{para|1 1}}, {{para|2 1}}, etc.), if this is <code>0</code> or a negative number it will be decreased by one unit in order to leave the parameter zero undisturbed (so <code>0</code> will become <code>-1</code>, <code>-1</code> will become <code>-2</code>, and so on – if needed, you can use <code>...|[[#purging|purging]]|0|1|...</code> in the callback template to renormalize these numbers). All unnamed arguments that follow the ''template name'' argument will appear as sequential parameters shared across all calls. Named arguments will be passed verbatim. Both named and unnamed arguments passed to this function will be given precedence in case of collisions. Numeric argument names below <code>1</code> will be decreased by one unit (i.e. <code>...|call_for_each_group&#124;example template&#124;0=Hello world&#124;...</code> will become {{para|-1|Hello world}} in the callback template – see above). A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, if a template named <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|reassorted|call_for_each_group|example template|hello|world|foo=bar}}</syntaxhighlight> writing <syntaxhighlight lang="wikitext">{{foobar | 1 = Lorem | 2 = ipsum | bicycle-1 = dolor | bicycle1 = sit | boat1 = amet | car2 = consectetur | bicycle2 = adipiscing | other = elit | sunscreen = vestibulum | = ultricies | foo1 = neque nisl }}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{example template | 0 = | 1 = hello | 2 = world | = ultricies | foo = bar | other = elit | sunscreen = vestibulum }}{{example template | 0 = -1 | 1 = hello | 2 = world | bicycle = dolor | foo = bar }}{{example template | 0 = 1 | 1 = hello | 2 = world | = Lorem | bicycle = sit | boat = amet | foo = bar }}{{example template | 0 = 2 | 1 = hello | 2 = world | = ipsum | bicycle = adipiscing | car = consectetur | foo = bar }}</syntaxhighlight> '''The modifiers <code>[[#sequential|sequential]]</code>, <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code> and <code>[[#reassorted|reassorted]]</code> will affect how groups of parameters will be iterated, not how single parameters will be grouped.''' Before calling this function you will likely want to reduce the list of parameters via one of the <code>with_*_matching</code> group of modifiers (for instance <code>...|with_name_matching|.%-%d+$|or|[^%-]%d+$|call_for_each_group|...</code> leaves only the parameters in which both the prefix and the numeric suffix are not empty strings). The <code>[[#reassorted|reassorted]]</code> modifier often accompanies this function. {{vsep|mundatio=nulla}} {{Anchor|Multilevel substitution warning}}{{Nota bene|Note:}} In writing templates, there is often the habit of signaling [[:mw:Help:Substitution#Multilevel substitution|multilevel substitutions]] using the <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> notation. This is a dangerous practice, because <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> means "write the parameter with an empty name, otherwise write <code>safesubst:</code>". Due to the fact that <code>call_for_each_group</code> '''can pass parameters with an empty name''', a callback template should never use <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> to notate multilevel substitutions, but should use instead <syntaxhighlight lang="wikitext" inline>safesubst:<noinclude /></syntaxhighlight>. Not following this advice can lead to bugs that are hard to debug. {{vsep|mundatio=nulla}} At &#123;&#123;[[Module:Params/doc/en/examples/list of authors|./doc/en/examples/list of authors]]&#125;&#125; you can find an example of how to use this function to list authors the same way {{interfn|Cite book|en}} does. For instance, writing <syntaxhighlight lang="wikitext">{{module:params/doc/en/examples/list of authors | last1 = Playfair | first1 = I. S. O. | author-link1 = Ian Stanley Ord Playfair | last2 = Stitt | first2 = G. M. S. | last3 = Molony | first3 = C. J. C. | last4 = Toomer | first4 = S. E. }}</syntaxhighlight> will generate : {{module:params/doc/en/examples/list of authors | last1 = Playfair | first1 = I. S. O. | author-link1 = Ian Stanley Ord Playfair | last2 = Stitt | first2 = G. M. S. | last3 = Molony | first3 = C. J. C. | last4 = Toomer | first4 = S. E. }} See also &#123;&#123;[[Module:Params/doc/en/examples/tablebox|./doc/en/examples/tablebox]]&#125;&#125; for an example of how to exploit this function to create [[Template:Infobox|infoboxes]], and &#123;&#123;[[Module:Params/doc/en/examples/four cells per row table|./doc/en/examples/four cells per row table]]&#125;&#125; for an example of how to exploit this function to create n-column tables. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each_group</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>for_each</code> === {{Capsa tabellaria | titulus = Function <code>for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|for_each|code}})</span> | Num. of arguments: 1 | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code>, <code>{{intermn|for nowiki||en}}</code>, <code>{{interfn|for nowiki|en}}</code>, <code>{{interfn|expand wikitext|en}}</code> }} ; Brief : ''For each parameter passed to the current template, expand all occurrences of <code>$#</code> and <code>$@</code> within a given text as key and value respectively'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|for_each|wikitext}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|for_each|Arg name: $#, Arg value: $@}}</syntaxhighlight> The text returned by this function is not expanded further (currently this module does not offer an <code>expand_for_each</code> function). If you need wikitext expansion, use either <code>[[#concat_and_call|concat_and_call]]</code> to propagate the incoming parameters altogether to the {{interfn|for nowiki|en}} template, or <code>[[#mapping_by_calling|mapping_by_calling]]</code> to propagate the incoming parameters one by one to {{interfn|expand wikitext|en}}. Example #1 (wikitext expanded via the {{interfn|for nowiki|en}} template – suggested): <syntaxhighlight lang="wikitext">{{#invoke:params|excluding_non-numeric_names|concat_and_call|for nowiki|<br />|<nowiki>Parameter value is "{{{1}}}"</nowiki>}}</syntaxhighlight> Example #2 (wikitext expanded via the {{interfn|expand wikitext|en}} template – less efficient but more flexible): <syntaxhighlight lang="wikitext">{{#invoke:params|setting|i|<br />|mapping_by_calling|expand wikitext|names_and_values_as|2|3| let|1|<nowiki>Parameter name is "{{{2}}}", parameter value is "{{{3}}}"</nowiki>| let|unstrip|yes| list_values}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The argument passed to this function will not be trimmed of its leading and trailing spaces. The <code>for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|mundatio=nulla}} == Flag modifiers (piping functions) == The following are ''flag modifiers'', i.e. functions that add their action to the queue of actions that ''will be done last''. As modifiers, they expect to be piped instead of returning to the caller. Each of them can be piped to either another flag modifier or a [[#Modifiers (piping functions)|modifier]] or a [[#Functions|non-piping function]]. Unlike modifiers, the order in which flag modifiers appear has no consequences. The actions that flag do affects only functions, but do not affect modifiers. {{vsep|mundatio=nulla}} === <code>sequential</code> === {{Capsa tabellaria | titulus = Modifier <code>sequential</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|sequential|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : (In functions only, does not affect modifiers) Reduce the parameter list to the subgroup of consecutive parameters that follow {{para|1}} ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|count}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Its purpose is solely that of signaling to non-piping functions to iterate using Lua <code>ipairs()</code> instead of <code>pairs()</code>. Therefore it does not remove any parameter from the list (to do that, you will need to use <code>...&#124;[[#excluding_non-numeric_names|excluding_non-numeric_names]]&#124;[[#clearing|clearing]]&#124;...</code> instead). Unless there are many intermediate operations that repeatedly iterate through all parameters, simply flagging the parameter list as sequence-only is usually faster than actually removing non-sequential parameters. Using <code>sequential</code> together with <code>[[#non-sequential|non-sequential]]</code> will generate an error. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} Like <code>[[#non-sequential|non-sequential]]</code>, the <code>sequential</code> modifier permanently marks a query. For instance, writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|discarding|1|...}}</syntaxhighlight> will first mark the query as "sequential", then will discard the first element from the sequence (leaving all the others intact). And so, no matter how many other parameters will be present, nothing will be shown. {{vsep|1.5em|mundatio=nulla}} === <code>non-sequential</code> === {{Capsa tabellaria | titulus = Modifier <code>non-sequential</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|non-sequential|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> }} ; Brief : (In functions only, does not affect modifiers) Reduce the parameter list by discarding the subgroup of consecutive parameters that follow {{para|1}} ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|non-sequential|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|non-sequential|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Once flagged with <code>non-sequential</code>, the final function will iterate through the set of parameters that is [[:en:complement (set theory)|complementary]] to the one picked by <code>[[#sequential|sequential]]</code>. Using <code>non-sequential</code> together with <code>[[#sequential|sequential]]</code> will generate an error. The modifier, on the other hand, is compatible with both <code>[[#all_sorted|all_sorted]]</code> and <code>[[#reassorted|reassorted]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} Like <code>[[#sequential|sequential]]</code>, the <code>non-sequential</code> modifier permanently marks a query, and no matter what transformations will follow (see <code>[[#squeezing|squeezing]]</code>) the parameters' "sequence" will not be shown. {{vsep|1.5em|mundatio=nulla}} === <code>all_sorted</code> === {{Capsa tabellaria | titulus = Modifier <code>all_sorted</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|all_sorted|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code>, <code>[[#reassorted|reassorted]]</code> | Has no effects on: <code>[[#count|count]]</code>, <code>[[#value_of|value_of]]</code>, <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> | ; See also | : [[:en:Natural sort order|Natural sort order]], <code>[[#reassorted|reassorted]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code> }} ; Brief : ''(IN FUNCTIONS ONLY, DOES NOT AFFECT MODIFIERS) When the time will come, all parameters will be dispatched sorted: first the numeric ones in ascending order, then the rest in [[:en:Natural sort order|natural order]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|all_sorted|pipe function name}}</syntaxhighlight> {{Nota bene|Note:}} This modifier sorts the way ''functions'' iterate across ''all'' parameters based on ''their names''. If you want to sort ''sequential parameters'' based on ''their values'', see <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Normally only sequential parameters are dispatched sorted, whereas non-sequential ones are dispatched randomly. The <code>all_sorted</code> modifier ensures that nothing is left out of ([[:en:Natural sort order|natural]]) order. Attention must be paid to the fact that parameters whose name is a negative number will appear first. To avoid this the <code>[[#squeezing|squeezing]]</code> modifier can be used.<ref>To be precise, the order will not be strictly alphabetical, because this would imply that a template called with the following parameters <syntaxhighlight lang="wikitext" inline>{{foobar|-4=you|9=wanna|.=me?|11=marry|-8=do}}</syntaxhighlight> would see them reordered as follows: <syntaxhighlight lang="wikitext" inline>{{foobar|-8=do|-4=you|.=me?|9=wanna|11=marry}}</syntaxhighlight> (with the dot in the middle between negative and positive numbers). To avoid this, '''numbers are always displayed first''' (i.e. <syntaxhighlight lang="wikitext" inline>{{foobar|-8=do|-4=you|9=wanna|11=marry|.=me?}}</syntaxhighlight>).</ref> The <code>all_sorted</code> modifier only affects the way parameters are shown, but has no effects on functions that do not iterate or cannot impose an order, such as: * <code>[[#count|count]]</code> * <code>[[#value_of|value_of]]</code> * <code>[[#concat_and_call|concat_and_call]]</code> * <code>[[#concat_and_invoke|concat_and_invoke]]</code> * <code>[[#concat_and_magic|concat_and_magic]]</code> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>all_sorted</code> modifier cannot be used with functions that propagate several parameters together in a single call, like <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, and <code>[[#concat_and_magic|concat_and_magic]]</code>, because during a call the order of arguments is always lost. For the same reason, it is not possible to guess the order of named parameters a template was transcluded with. {{vsep|1.5em|mundatio=nulla}} === <code>reassorted</code> === {{Capsa tabellaria | titulus = Modifier <code>reassorted</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reassorted|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code> | Has no effects on: <code>[[#count|count]]</code>, <code>[[#value_of|value_of]]</code>, <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> | ; See also | : [[:en:Natural sort order|Natural sort order]], <code>[[#all_sorted|all_sorted]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code> }} ; Brief : ''(IN FUNCTIONS ONLY, DOES NOT AFFECT MODIFIERS) When the time will come, all parameters will be dispatched sorted: first non numeric ones in [[:en:Natural sort order|natural order]]'', then the numeric ones in ascending order ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reassorted|pipe function name}}</syntaxhighlight> This modifier is similar to <code>[[#all_sorted|all_sorted]]</code>, but numbers are iterated last (as in "bar, foo, hello, zebra, 1, 2, 3, …"). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>reassorted</code> modifier cannot be used with functions that propagate several parameters together in a single call, like <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, and <code>[[#concat_and_magic|concat_and_magic]]</code>, because during a call the order of arguments is always lost. For the same reason, it is not possible to guess the order of named parameters a template was transcluded with. {{vsep|mundatio=nulla}} == Modifiers (piping functions) == The following are ''modifiers'', i.e. functions that expect to be piped instead of returning to the caller. Each of them can be piped to either another modifier or a [[#Flag modifiers (piping functions)|flag modifier]] or a [[#Functions|non-piping function]]. The actions that modifiers do are done sequentially, in the same order chosen during the invocation of this module. {{vsep|mundatio=nulla}} === <code>setting</code> === {{Capsa tabellaria | titulus = Modifier <code>setting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|setting|code}})</span> | Num. of arguments: 2–8 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>p</code> Key-value delimiter | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} }} ; Brief : ''Define glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|directives|...|pipe function name}}</syntaxhighlight> This modifier allows some internal variables to be set and later be used (currently only by functions). It takes a variable number of arguments, relying on the first argument to understand how many other arguments to read. A few examples will introduce it better than words: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|i|{{!}}|list_values}}</syntaxhighlight> *: ↳ Set the value of ''iteration delimiter'' to <code>|</code>, then list all values * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih|{{!}}|list_values}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, then list all values * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, set ''key-value pair delimiter'' to <code>=</code>, then list all parameters * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p/n|{{!}}|{{=}}|No parameters were passed|list}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, set ''key-value pair delimiter'' to <code>=</code>, set ''fallback text'' to <code>No parameters were passed</code>, then list all parameters The first argument is a slash-separated list of lists of slots to assign; one slot is referred by exactly one character and each list of slots maps exactly one argument. A slot indicates which internal variable to set. If more than one slot is aggregated within the same slash-separated list the same text will be assigned to more than one variable. The slots available are the following: {| class="wikitable" style="margin-left: auto; margin-right: auto;" |- ! Slots ! Variable ! Description |- | <code>p</code> | ''Key-value pair delimiter'' | The string of text that will be placed between each parameter name and its value; it is never inserted by functions that only iterate between values, or by functions that pass the key-value pairs to external calls. |- | <code>i</code> | ''Iteration delimiter'' | The string of text that will be placed between each iteration; it is never inserted unless there are two or more parameters to show when <code>l</code> is not given, or three or more parameters when <code>l</code> is given. |- | <code>l</code> | ''Last iteration delimiter'' | The string of text that will be placed between the second last and the last iteration; it is never inserted unless there are two or more parameters to show; if omitted it defaults to <code>i</code>. |- | <code>s</code> | ''"[[:en:serial comma|serial-comma]]-like" last iteration delimiter'' | The string of text that will be placed between the second last and the last iteration when there are three or more parameters to show; if omitted it defaults to <code>l</code>. |- | <code>h</code> | ''Header text'' | The string of text that will be placed before the iteration begins; it is never inserted if there are no parameters to show. |- | <code>f</code> | ''Footer text'' | The string of text that will be placed after the iteration is over; it is never inserted if there are no parameters to show. |- | <code>n</code> | ''Fallback text'' | The string of text that will be placed if there are no parameters to show. |} All space characters in the ''directives'' argument are discarded. Therefore writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|...}}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{#invoke:params|setting| i h / p |...}}</syntaxhighlight> In theory, instead of assigning different arguments at once (i.e. <syntaxhighlight lang="wikitext" inline>{{...|setting|ih/p|{{!}}|{{=}}|...}}</syntaxhighlight>), it is possible to write separate invocations of <code>setting</code> for each argument, as in <syntaxhighlight lang="wikitext" inline>{{...|setting|ih|{{!}}|setting|p|{{=}}...}}</syntaxhighlight>. This method however will be slightly less efficient. The <code>s</code> slot has been created with the [[:en:Serial comma|Oxford comma]] in mind. For instance, the following imaginary <syntaxhighlight lang="wikitext" inline>{{Foobar see also}}</syntaxhighlight> template adds a comma before the "and" conjunction when more than two page names are provided: <syntaxhighlight lang="wikitext">{{Hatnote|{{{altphrase|Foobar see also}}}: {{#if:{{{1|}}} | {{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l/s|, | and |, and |for_each|[[$@]]}} | {{Error|{{interfn|Foobar see also|en}} requires at least one page name}} }}}}</syntaxhighlight> You can find this example at &#123;&#123;[[Module:Params/doc/en/examples/Oxford comma|./doc/en/examples/Oxford comma]]&#125;&#125;. Thus, <syntaxhighlight lang="wikitext" inline>{{module:params/doc/en/examples/Oxford comma|Latin|English|German|Italian}}</syntaxhighlight> will generate {{module:params/doc/en/examples/Oxford comma|Latin|English|German|Italian}} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>setting</code> modifier name will be trimmed of its surrounding spaces. The ''directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>scoring</code> === {{Capsa tabellaria | titulus = Modifier <code>scoring</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|scoring|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <code>[[#count|count]]</code> }} ; Brief : ''Count the number of parameters wherewith a template was called and save the result into a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|scoring|new parameter name|pipe function name}}</syntaxhighlight> This is the modifier version of the <code>[[#count|count]]</code> function: instead of outputting the number of current parameters, the result will be saved into a new parameter (which will not be counted in the result). Since this is a modifier, [[#Flag modifiers (piping functions)|flag modifiers]] like <code>[[#sequential|sequential]]</code> and <code>[[#non-sequential|non-sequential]]</code> won't affect the result. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>scoring</code> modifier name and the ''new parameter name'' argument will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>squeezing</code> === {{Capsa tabellaria | titulus = Modifier <code>squeezing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|squeezing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[Module:TableTools#compressSparseArray|TableTools.compressSparseArray]]</code> }} ; Brief : ''Rearrange all parameters that have numeric names to form a compact sequence starting from 1, keeping the same order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|squeezing|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|squeezing|sequential|setting|i/p|<br />|: |list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. If you are a module writer, you might recognize some similarities between this function and <code>[[Module:TableTools#compressSparseArray|TableTools.compressSparseArray]]</code>. The following three concatenations will lead to the same result of discarding all parameters with numeric names: # <syntaxhighlight lang="wikitext" inline>{{...|excluding_numeric_names|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|with_name_not_matching|^%-?%d+$|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|non-sequential|squeezing|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|squeezing|non-sequential|...}}</syntaxhighlight> The first solution is the most optimized one. Furthermore, in the last two solutions the numeric parameters are discarded just before the final function is invoked (sometimes this might be a wanted result). {{vsep|1.5em|mundatio=nulla}} === <code>filling_the_gaps</code> === {{Capsa tabellaria | titulus = Modifier <code>filling_the_gaps</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|filling_the_gaps|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#squeezing|squeezing]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : ''Assign an empty string to all undefined numeric parameters between 1 or a lower numeric parameter name provided and the maximum numeric parameter provided'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|filling_the_gaps|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|filling_the_gaps|sequential|setting|i/p|<br />|: |list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Note that when all numeric parameters are lower than 1, the gap between 1 and the lowest numeric parameter will not be filled. The following table provides some examples. {| class="wikitable" style="margin-left: auto; margin-right: auto;" |+ Numeric parameters provided |- ! Before calling <code>filling_the_gaps</code> ! After calling <code>filling_the_gaps</code> |- | <code>&#124;1&#61;...</code> | <code>&#124;1&#61;...</code> |- | <code>&#124;2&#61;...</code> | <code>&#124;1&#61;</code>, <code>&#124;2&#61;...</code> |- | <code>&#124;6&#61;...</code>, <code>&#124;9&#61;...</code> | <code>&#124;1&#61;</code>, <code>&#124;2&#61;</code>, <code>&#124;3&#61;</code>, <code>&#124;4&#61;</code>, <code>&#124;5&#61;</code>, <code>&#124;6&#61;...</code>, <code>&#124;7&#61;</code>, <code>&#124;8&#61;</code>, <code>&#124;9&#61;...</code> |- | <code>&#124;-5&#61;...</code>, <code>&#124;-3&#61;...</code> | <code>&#124;-5&#61;...</code>, <code>&#124;-4&#61;</code>, <code>&#124;-3&#61;...</code> |- | <code>&#124;-5&#61;...</code>, <code>&#124;-3&#61;...</code>, <code>&#124;1&#61;...</code> | <code>&#124;-5&#61;...</code>, <code>&#124;-4&#61;</code>, <code>&#124;-3&#61;...</code>, <code>&#124;-2&#61;</code>, <code>&#124;-1&#61;</code>, <code>&#124;0&#61;</code>, <code>&#124;1&#61;...</code> |- | <code>&#124;-1&#61;...</code> | <code>&#124;-1&#61;...</code> |- | <code>&#124;-2&#61;...</code> | <code>&#124;-2&#61;...</code> |} {{Nota bene|Note:}} There is a safety limit of at most 1024 undefined parameters that can be filled using this modifier. {{vsep|1.5em|mundatio=nulla}} === <code>clearing</code> === {{Capsa tabellaria | titulus = Modifier <code>clearing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|clearing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code> }} ; Brief : ''Remove all numeric parameters that are not in the sequence'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|clearing|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Unlike <code>[[#sequential|sequential]]</code> – which affects only the way parameters are shown – this modifier actually removes all non-sequential numeric parameters, albeit leaves non-numeric parameters intact. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|clearing|setting|i/p|<br />|: |list}}</syntaxhighlight> If you want to remove also non-numeric parameters, add the <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code> modifier: <syntaxhighlight lang="wikitext">{{#invoke:params|clearing|excluding_non-numeric_names|setting|i/p|<br />|: |list}}</syntaxhighlight> If you want instead to remove sequential parameters and leave the rest, you have two possibilities. You can either use <code>&#123;&#123;...&#124;[[#cutting|cutting]]&#124;-1&#124;1&#124;...&#125;&#125;</code> when you want to shift the remaining numeric parameters accordingly: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|-1|1|setting|i/p|<br />|: |list}}</syntaxhighlight> Or you can use <code>&#123;&#123;...&#124;[[#entering_substack|entering_substack]]&#124;[[#clearing|clearing]]&#124;[[#detaching_substack|detaching_substack]]&#124;[[#dropping_substack|dropping_substack]]&#124;...&#125;&#125;</code> if you want the remaining non-sequential parameters to keep occupying the same position as before: <syntaxhighlight lang="wikitext">{{#invoke:params|entering_substack|clearing|detaching_substack|dropping_substack|setting|i/p|<br />|: |list}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>cutting</code> === {{Capsa tabellaria | titulus = Modifier <code>cutting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|cutting|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from the beginning and the end '''of the parameters' sequence''', shifting everything else accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|left trim|right trim|pipe function name}}</syntaxhighlight> The first argument indicates how many sequential parameters must be removed from the beginning of the parameter sequence, the second argument indicates how many sequential parameters must be removed from the end of the parameter list. If any of the two arguments contains a negative number its absolute value indicates what must be left ''on the opposite side'' – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-3|0|list}}</syntaxhighlight> indicates that the last three arguments must not be discarded. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|0|2|sequential|call_for_each_value|example template}}</syntaxhighlight> If the absolute value of the sum of the two arguments (left and right cut) is greater than the number of ''sequential'' parameters available, the behavior will be the same as if the sum had been equal to the number of sequential parameters available, both when this is a positive value and when it is a negative value (with opposite results). After the desired sequential parameters have been discarded, '''all''' other positive numeric parameters will be shifted accordingly. In some cases it might be necessary to concatenate more than one invocation of the <code>cutting</code> modifier. For instance, the following code prints the last unnamed parameter passed, but only if at least two parameters were passed: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|cutting|1|0|cutting|-1|0|list_values}}</syntaxhighlight> {{Nota bene|Note:|Suggestion:}} Although <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-1|1|...}}</syntaxhighlight> de facto gets rid of all sequential parameters, in most cases it is clearer and more idiomatic to write <syntaxhighlight lang="wikitext" inline>{{#invoke:params|non-sequential|...}}</syntaxhighlight> to obtain the same effect. The last method however cannot be used when it is important that sequential parameters are removed before a particular modifier is called, because <code>[[#non-sequential|non-sequential]]</code> does not take effect until the final function is invoked. Writing instead <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|cutting|-1|1|...}}</syntaxhighlight> will leave zero arguments to show. {{vsep|1.5em|mundatio=nulla}} === <code>cropping</code> === {{Capsa tabellaria | titulus = Modifier <code>cropping</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|cropping|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from the beginning and the end of the '''list of numeric parameters''' (not only the sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cropping|left crop|right crop|pipe function name}}</syntaxhighlight> This modifier is very similar to <code>[[#cutting|cutting]]</code>, but instead of removing arguments from the extremities of the parameters' ''sequence'', arguments will be removed counting from the first and the last numeric arguments given (i.e. {{para|-1000|...}} and {{para|1000|...}} in the case of <syntaxhighlight lang="wikitext" inline>{{foobar|-1000=hello|1=my|1000=darling}}</syntaxhighlight>). If any of the two arguments contains a negative number its absolute value indicates what must be left ''on the opposite side''. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|cropping|2|1|sequential|call_for_each_value|example template}}</syntaxhighlight> For instance, when a template transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|-2=minus two|0=zero|1=one|2=two|3=three|19=nineteen|20=twenty}}</syntaxhighlight> uses the <code>[[#cutting|cutting]]</code> modifier with <code>2</code> and <code>1</code> as arguments, the following parameters are left: : -2: minus two : 0: zero : 16: nineteen : 17: twenty If instead the template were to use the <code>cropping</code> modifier with <code>2</code> and <code>1</code> as arguments, as in the example above, the following parameters would be left: : 0: zero : 1: one : 2: two : 3: three : 19: nineteen If the absolute value of the sum of the two arguments (left and right crop) is greater than the difference between the largest and the lowest ''numeric'' parameters available, the behavior will be the same as if the sum had been equal to the number of numeric parameters available, both when this is a positive value and when it is a negative value (with opposite results). When ''sequential'' parameters are present among the discarded parameters, all the remaining numeric parameters greater than zero will be shifted accordingly. {{vsep|1.5em|mundatio=nulla}} === <code>purging</code> === {{Capsa tabellaria | titulus = Modifier <code>purging</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|purging|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from any point of the list of numeric parameters, shifting everything accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|purging|start offset|length|pipe function name}}</syntaxhighlight> The first argument indicates at which point in the parameter list the removal must begin, the second argument indicates how many parameters must be discarded among it and what lies ''on the right side''. If the second argument contains zero or a negative number its absolute value indicates what must be left ''at the end of the right side'' of the list of numeric parameters – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|purging|5|0|list}}</syntaxhighlight> indicates that every numeric argument whose numeric name is greater than <code>4</code> must be removed. Example #1 (purge the first parameter): <syntaxhighlight lang="wikitext">{{#invoke:params|purging|1|1|call_for_each_value|example template}}</syntaxhighlight> Example #2 (purge the second, third, and four parameters): <syntaxhighlight lang="wikitext">{{#invoke:params|purging|2|3|call_for_each_value|example template}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>backpurging</code> === {{Capsa tabellaria | titulus = Modifier <code>backpurging</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|backpurging|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from any point of the list of numeric parameters, moving backwards and shifting everything accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|backpurging|start offset|length|pipe function name}}</syntaxhighlight> The first argument indicates at which point in the parameter list the removal must begin, the second argument indicates how many parameters must be discarded among it and what lies ''on the left side''. If the second argument contains zero or a negative number its absolute value indicates what must be left ''at the end of the left side'' of the list of numeric parameters – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|backpurging|5|0|list}}</syntaxhighlight> indicates that every numeric argument whose numeric name is less than <code>6</code> must be removed. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|backpurging|3|1|call_for_each_value|example template}}</syntaxhighlight> The following code removes all parameters with negative and zero numeric names, then lists the rest: <syntaxhighlight lang="wikitext">{{#invoke:params|backpurging|0|0|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>shifting</code> === {{Capsa tabellaria | titulus = Modifier <code>shifting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|shifting|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Add a positive or a negative number to all numeric parameter names'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|shifting|addend|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|shifting|-2|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>shifting</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>reversing_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>reversing_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reversing_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones), making sure that the largest numeric parameter and {{para|1}} are swapped'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reversing_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|reversing_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> An example that uses this function is available at &#123;&#123;[[Module:Params/doc/en/examples/watchlist|./doc/en/examples/watchlist]]&#125;&#125;. {{Nota bene|Note:}} If negative parameters are present this function becomes non-invertible. This means that <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reversing_numeric_names|reversing_numeric_names|...}}</syntaxhighlight> will not restore the original parameter names, but will shift all numeric parameters so that what formerly was the smallest parameter name will now become {{para|1}}. <!-- {{vsep|1.5em|mundatio=nulla}} === <code>mirroring_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>mirroring_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mirroring_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mirroring_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier reverses the order of numeric parameters, making sure that the minimum and the maximum numeric parameters remain always the same (albeit inverted). Example: <syntaxhighlight lang="wikitext">{{#invoke:params|mirroring_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>pivoting_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>pivoting_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|pivoting_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones), '''keeping the parameters' sequence always centered''''' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|pivoting_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier reverses the order of numeric parameters, making sure that those in the parameters' sequence always remain in the sequence. As a consequence, the values of the minimum and the maximum numeric parameters may change. If no sequence is present this modifier is identical to <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|pivoting_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>swapping_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>swapping_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|swapping_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Swap the lowest numeric parameter with the highest, the second lowest with the second highest, and so on, keeping the sequence in the same place albeit in reverse order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|swapping_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|swapping_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> --> {{vsep|1.5em|mundatio=nulla}} === <code>sorting_sequential_values</code> === {{Capsa tabellaria | titulus = Modifier <code>sorting_sequential_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|sorting_sequential_values|code}})</span> | Num. of arguments: 0 or 1 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> }} ; Brief : ''Sort the order of sequential values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sorting_sequential_values|[criterion]|pipe function name}}</syntaxhighlight> {{Nota bene|Note:}} This modifier sorts ''sequential parameters'' based on ''their values''. If you want to sort the way ''functions'' iterate across ''all'' parameters based on ''their names'', see <code>[[#all_sorted|all_sorted]]</code>. This modifier optionally supports one argument to specify the sorting criterion. Currently the only possible criterions are <code>alphabetically</code>, for ordering sequential values in [[:en:alphabetical order|alphabetical sort order]], and <code>naturally</code>, for ordering sequential values in [[:en:Natural sort order|natural sort order]]. If this argument is omitted it defaults to <code>alphabetically</code>. Example (alphabetical sort order): <syntaxhighlight lang="wikitext">{{#invoke:params|sorting_sequential_values|for_each|[$#: $@]}}</syntaxhighlight> Example (natural sort order): <syntaxhighlight lang="wikitext">{{#invoke:params|sorting_sequential_values|naturally|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>splicing</code> === {{Capsa tabellaria | titulus = Modifier <code>splicing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|splicing|code}})</span> | Num. of arguments: ''Ad libitum'' (min. 2) | Repeatable: Yes | ; See also | : <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Add or remove numeric parameters from any position, shifting the list of numeric parameters accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|splicing|[add to position]|position|increment|[number of elements to write]|...|pipe function name}}</syntaxhighlight> This modifier is able to resize the array of numeric parameters and write new parameters in any given position. It constitutes the only way this module has to insert numeric parameters and make space for them. For instance, if a template was called as <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three}}</syntaxhighlight> and—independently of how many sequential parameters were passed—you want to insert <code>...&#124;hello&#124;world&#124;...</code> before the last sequential parameter (thus creating in this case <syntaxhighlight lang="wikitext" inline>{{My template|one|two|hello|world|three}}</syntaxhighlight>), <code>splicing</code> becomes the way to go (in this case <syntaxhighlight lang="wikitext" inline>...|splicing|add_last_of_sequence|0|2|2|hello|world|...</syntaxhighlight>). The ''add to position'' optional flag argument can either be <code>add_nothing</code>, <code>add_smallest_number</code>, <code>add_last_of_sequence</code>, or <code>add_largest_number</code>. When omitted it defaults to <code>add_nothing</code>. These numbers refer to the array as it was before being resized, and the chosen number will be summed to the ''position'' argument. The ''position'' and ''increment'' arguments can be zero or positive or negative numbers. When ''increment'' is positive the array of numeric parameters will be increased, when it is negative it will be decreased and one or more parameters will be removed. The optional argument ''number of elements to write'' indicates how many parameters must be written in the given position. It must be followed by an equal number of arguments. When omitted it defaults to <code>0</code>. If this number is larger than ''increment'' the pre-existing parameters in excess will be overwritten, if it is minor instead the missing parameters will be left undefined. For instance, imagining a template transcluded as, <syntaxhighlight lang="wikitext">{{My template|-3=minus three|-2=minus two|-1=minus one|0=zero|one|two|three|15=fifteen}}</syntaxhighlight> and extrapolating the following constants, * ''smallest number'' = −3 * ''last of sequence'' = 3 * ''largest number'' = 15 the following table summarizes how the incoming parameters are manipulated by <code>splicing</code>. {| class="wikitable" |- ! Use of <code>splicing</code> ! Computed ''position'' ! Result |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|4|2|2|hello|world|...</syntaxhighlight> | <code>4</code> + ''nothing'' = 4 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|4|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_last_of_sequence|1|2|2|hello|world|...</syntaxhighlight> | <code>1</code> + ''last of sequence'' = 4 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_last_of_sequence|1|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_smallest_number|-2|2|2|hello|world|...</syntaxhighlight> | <code>-2</code> + ''smallest number'' = −5 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_smallest_number|-2|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_largest_number|-2|100|2|hello|world|...</syntaxhighlight> | <code>-2</code> + ''largest number'' = 13 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_largest_number|-2|100|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_nothing|1|0|1|hello|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_nothing|1|0|1|hello| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_nothing|1|-1|1|hello|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_nothing|1|-1|1|hello| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|1|-1|...</syntaxhighlight> or <syntaxhighlight lang="wikitext" inline>...|splicing|1|-1|0|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|1|-1| setting|i/p|; |→| all_sorted| list }} |} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The values of the parameters inserted will not be trimmed of their leading and trailing spaces. The arguments ''add to position'', ''position'', ''length'' and ''how many'' and the <code>splicing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>imposing</code> === {{Capsa tabellaria | titulus = Modifier <code>imposing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|imposing|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#providing|providing]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Impose a new value to a pre-existing parameter or create a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|imposing|name|value|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|imposing|foo|bar|imposing|hello|world|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The value assigned will not be trimmed of its leading and trailing spaces. The name of the parameter and the <code>imposing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>providing</code> === {{Capsa tabellaria | titulus = Modifier <code>providing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|providing|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#imposing|imposing]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Assign a new value to a parameter, but only when missing, otherwise keep the previous value'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|providing|name|value|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|providing|foo|bar|providing|hello|world|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The value assigned will not be trimmed of its leading and trailing spaces. The name of the parameter and the <code>providing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>discarding</code> === {{Capsa tabellaria | titulus = Modifier <code>discarding</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|discarding|code}})</span> | Num. of arguments: 1 or 2 | Repeatable: Yes | ; See also | : <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Discard one or more numeric parameters or one non-numeric parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|discarding|name|[how many]|pipe function name}}</syntaxhighlight> If, and only if, the name of the parameter is numeric, it is possible to add a second argument to indicate how many contiguous parameters must be discarded starting from the first argument. If the discarded parameters is part of the parameters' sequence one or more holes will be created. To avoid creating holes, use <code>[[#purging|purging]]</code> or <code>[[#backpurging|backpurging]]</code> or <code>[[#shifting|shifting]]</code>. Example #1 (discard the parameter named {{para|hello}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|hello|for_each|[$#: $@]}}</syntaxhighlight> Example #2 (discard the parameter named {{para|5}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|5|for_each|[$#: $@]}}</syntaxhighlight> Example #3 (discard the parameters named {{para|1}}, {{para|2}}, {{para|3}} and {{para|4}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|1|4|for_each|[$#: $@]}}</syntaxhighlight> It is possible to use this modifier to check for unknown parameters: <syntaxhighlight lang="wikitext">{{#ifexpr:{{#invoke:params|discarding|hello|discarding|wind|count}} > 0 | {{Error|Error: The only parameters accepted are {{para|hello}} and {{para|wind}}.}} | Everything is good: do something }}</syntaxhighlight> You can find this example at &#123;&#123;[[Module:Params/doc/en/examples/check for unknown parameters|./doc/en/examples/check for unknown parameters]]&#125;&#125;. For instance, <syntaxhighlight lang="wikitext" inline>{{module:params/doc/en/examples/check for unknown parameters|hello=world|wind=surfing}}</syntaxhighlight> will generate : {{module:params/doc/en/examples/check for unknown parameters|hello=world|wind=surfing}} For simple cases like this, however, dedicated modules are available; you might want to have a look at: * {{intermn|Check for unknown parameters|check|en}} * {{intermn|Check for deprecated parameters|check|en}} * {{intermn|Check for clobbered parameters|check|en}} * {{intermn|Parameter validation|validateparams|en}} * {{intermn|TemplatePar|valid|en}} When used to discard single parameters, this modifier is equivalent to writing <code>...&#124;[[#with_name_not_matching|with_name_not_matching]]&#124;''parameter name''&#124;strict&#124;...</code>. However, due to the fact that <code>[[#with_name_not_matching|with_name_not_matching]]</code> needs to cross-check for the possible presence of <code>or</code> keywords, using <code>discarding</code> will be slightly more efficient. {{Nota bene|Note:}} All arguments passed to this modifier and the <code>discarding</code> modifier name itself will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>excluding_non-numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>excluding_non-numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|excluding_non-numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : ''Discard all non-numeric parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|excluding_non-numeric_names|pipe function name}}</syntaxhighlight> This modifier is only syntax sugar for <code>...&#124;with_name_matching&#124;^%-?%d+$&#124;...</code> (but using a slighly faster optimization). For the inverse modifier, see <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>. If you want to remove also non-sequential parameters, add the <code>[[#clearing|clearing]]</code> modifier to the pipeline (<code>...&#124;excluding_non-numeric_names&#124;clearing&#124;...</code>). {{vsep|1.5em|mundatio=nulla}} === <code>excluding_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>excluding_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|excluding_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code> }} ; Brief : ''Discard all numeric parameters (not only the sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|excluding_numeric_names|pipe function name}}</syntaxhighlight> This modifier is only syntax sugar for <code>...&#124;with_name_not_matching&#124;^%-?%d+$&#124;...</code> (but using a slighly faster optimization). For the inverse modifier, see <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>with_name_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_name_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_name_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose name ''does not match '''any''''' of the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_name_matching|target 1|[plain flag 1]|[or]|[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a ''plain flag'' is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The ''plain flag'' can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. To express a [[:en:Disjunction (logical connective)|logical OR]] the <code>or</code> keyword is available. To express a [[:en:Logical conjunction|logical AND]] instead, concatenate more invocations of <code>with_name_matching</code>. {{vsep|mundatio=nulla}} For the sake of argument we will imagine that we are invoking <code>with_name_matching</code> from within the {{interfn|Infobox artery|en}} template, and this is being called with the following parameters: <syntaxhighlight lang="wikitext">{{Infobox artery | Name = Pulmonary artery | Latin = truncus pulmonalis, arteria pulmonalis | Image = {{Heart diagram 250px}} | Caption = Anterior (frontal) view of the opened heart. (Pulmonary artery upper right.) | Image2 = Alveoli diagram.png | Caption2 = Diagram of the alveoli with both cross-section and external view. | BranchFrom = [[right ventricle]] | BranchTo = | Vein = [[pulmonary vein]] | Precursor = truncus arteriosus | Supplies = }}</syntaxhighlight> {{vsep|mundatio=nulla}} Test cases: * List only the parameters whose names match against the <code>^Image</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Image|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image={{Heart diagram 250px}}|Image2=Alveoli diagram.png</nowiki> * List the parameters whose names match against both patterns <code>^Image</code> '''and''' <code>%d+$</code>: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Image|with_name_matching|%d+$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image2=Alveoli diagram.png</nowiki> * List the parameters whose names match against either the <code>^Name</code> '''or''' the <code>^Latin$</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Name$|or|^Latin$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Latin=truncus pulmonalis, arteria pulmonalis|Name=Pulmonary artery</nowiki> * List the parameters whose names match against either the <code>ma</code> plain string '''or''' the <code>me$</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|ma|plain|or|me$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image={{Heart diagram 250px}}|Name=Pulmonary artery|Image2=Alveoli diagram.png</nowiki> {{vsep|mundatio=nulla}} Using <code>with_name_matching</code> it is easy to emulate the behaviour of [[:en:Module:Enumerate]] (or similar modules). For instance, the following examples creates a bullet list of all the parameters passed of type <code>&#124;foobar1</code>, <code>&#124;foobar2</code> … <code>&#124;foobarN</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|with_name_matching|^foobar%d+$|setting|ih| * |list_values}}</syntaxhighlight> It is possible to see this example live at &#123;&#123;[[Module:Params/doc/en/examples/enumerate|./doc/en/examples/enumerate]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_name_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_name_not_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_name_not_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_name_not_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>,<code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose name ''matches '''all''''' the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_name_not_matching|target 1|[plain flag 1]|[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. To express a [[:en:Disjunction (logical connective)|logical OR]] the <code>or</code> keyword is available. To express a [[:en:Logical conjunction|logical AND]] instead, concatenate more invocations of <code>with_name_not_matching</code>. {{vsep|mundatio=nulla}} For the sake of argument we will imagine that we are invoking <code>with_name_not_matching</code> from within the {{interfn|Infobox artery|en}} template, and this is being transcluded using the same parameters that we had imagined in the previous example at <code>[[#with_name_matching|with_name_matching]]</code>: * List only the parameters whose names do not match against the <code>a</code> pattern: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Supplies=|Vein=pulmonary vein</nowiki> * List the parameters whose names do not match against the <code>a</code> plain string '''and''' do not match against the <code>l</code> plain string either: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|plain|with_name_not_matching|l|plain|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Vein=pulmonary vein</nowiki> * List the parameters whose names do not match against either the <code>a</code> plain string '''or''' the <code>n</code> plain string: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|plain|or|n|plain|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Supplies=|Image={{Heart diagram 250px}}|Name=Pulmonary artery|Image2=Alveoli diagram.png|Vein=pulmonary vein</nowiki> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} For the sake of efficiency, please don't use this modifier with the <code>strict</code> flag unless accompanied by <code>or</code>, use <code>[[#discarding|discarding]]</code> instead! {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_name_not_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_value_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_value_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_value_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose value ''does not match '''any''''' of the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_value_matching|target 1|[plain flag 1]|[or]|[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Exactly like <code>[[#with_name_matching|with_name_matching]]</code>, but applied to parameter values instead of names. Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_matching|banana|count}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_value_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_value_not_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_value_not_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_value_not_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code> }} ; Brief : ''Discard all parameters whose value ''matches '''all''''' the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_value_not_matching|target 1|[plain flag 1]|[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Exactly like <code>[[#with_name_not_matching|with_name_not_matching]]</code>, but applied to parameter values instead of names. Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. For instance, before calling <code>[[#list|list]]</code>, the following code will get rid of all blank parameters (i.e. parameters whose values contain only zero or more spaces): <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|setting|hi/p|{{!}}|{{=}}|list}}</syntaxhighlight> A typical use case of this modifier is that of purging all empty incoming parameters before calling another template, especially when this [[:en:Help:Conditional expressions#Checking for template parameters|distinguishes between empty and undefined parameters]]. <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|concat_and_call|my template}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_value_not_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>trimming_values</code> === {{Capsa tabellaria | titulus = Modifier <code>trimming_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|trimming_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes }} ; Brief : ''Remove leading and trailing spaces from values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|trimming_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Most modifiers are order-dependent, therefore placing <code>trimming_values</code> in different positions can generate different results. For instance, imagining our <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> being called with the following spaced arguments: <syntaxhighlight lang="wikitext" inline>{{example template| wanna | be | my | friend | ? }}</syntaxhighlight>. If <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_matching|%s+$|trimming_values|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> the following text would be printed: <code>1=wanna|2=be|3=my|4=friend|5=?</code>. But if instead it contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|trimming_values|with_value_matching|%s+$|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> no arguments would be shown. Order affects also performance, and how many values will be trimmed of their leading and trailing spaces will depend on where <code>trimming_values</code> is placed. For instance, if a template were invoked with 50 parameters and its code contained <syntaxhighlight lang="wikitext" inline>{{#invoke:params|trimming_values|cutting|-1|0|list}}</syntaxhighlight>, first all its values would be trimmed of leading and trailing blank spaces and then its first 49 parameters would be discarded. On the other hand, writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-1|0|trimming_values|list}}</syntaxhighlight> would first discard 49 parameters and then trim the only value left, resulting in a more efficient code. As a general rule, placing <code>trimming_values</code> as the last modifier is usually the best choice. In most cases placing <code>trimming_values</code> together with <code>non-sequential</code> will result in an empty call with no effects, because non-sequential parameters are normally stripped of their leading and trailing spaces by default – this however depends on the caller, and if the current template is being called by a module it is in theory possible in specific conditions for named parameters to retain their leading and trailing spaces (namely in non-sequential numeric parameters). Using <code>trimming_values</code> makes this module behave like other Wikipedia modules behave. For example, if we wanted to emulate {{intermn|Separated entries|main|en}}, writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i|XXXX|list_values}}</syntaxhighlight> will be equivalent to writing, <syntaxhighlight lang="wikitext">{{#invoke:separated entries|main|separator=XXXX}}</syntaxhighlight> whereas writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l|XXXX|YYYY|list_values}}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{#invoke:separated entries|main|separator=XXXX|conjunction=YYYY}}</syntaxhighlight> The &#123;&#123;[[Module:Params/doc/en/examples/trim and call|./doc/en/examples/trim and call]]&#125;&#125; example template shows how to call any arbitrary template trimming all parameters beforehand. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_to_lowercase</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_lowercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_lowercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter values to lower case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_lowercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter values to lower [[:en:Letter case|case]]. It is identical to writing <code>...&#124;[[#mapping_by_magic|mapping_by_magic]]&#124;[[:mw:Help:Magic words#lc|lc]]&#124;...</code>, but without the burden of calling a parser function. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_to_uppercase</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_uppercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_uppercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter values to upper case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_uppercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter values to upper [[:en:Letter case|case]]. It is identical to writing <code>...&#124;[[#mapping_by_magic|mapping_by_magic]]&#124;[[:mw:Help:Magic words#uc|uc]]&#124;...</code>, but without the burden of calling a parser function. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the expansion of a given template repeatedly called with one parameter (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|template name|[call style]|[let]|[...]|[number of additional parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by another template. The latter will be repeatedly called with at least one parameter as first sequential parameter: the parameter's value. It is possible to pass the parameter's value as a different parameter, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''template name'' (see below). If the ''call style flag'' or (if omitted) the ''template name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the mapping template. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''template name'' is followed by a number, this will be parsed as the amount of positional parameters to add. '''These will always follow''' the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the parameters assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_calling|foobar|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{foobar|VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_calling|foobar|names_and_values|let|rice|nope|let|curry|lots!|2|hello|world|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{foobar|NAME|VALUE|hello|world|rice=nope|curry=lots!}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). Possible ''call style flags'' are: {| class="wikitable" |- ! ''Call style flag'' ! Example ! Corresponding call |- | <code>names_and_values</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_and_values|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|NAME|VALUE|hello|world|foo=bar}}</syntaxhighlight> |- | <code>values_and_names</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_and_names|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|VALUE|NAME|hello|world|foo=bar}}</syntaxhighlight> |- | <code>names_only</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_only|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|NAME|hello|world|foo=bar}}</syntaxhighlight> |- | <code>values_only</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_only|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|VALUE|hello|world|foo=bar}}</syntaxhighlight> |- | <code>names_and_values_as&#124;...&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_and_values_as|my_name|my_value|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_name=NAME|my_value=VALUE|foo=bar}}</syntaxhighlight> |- | <code>names_only_as&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_only_as|my_name|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_name=NAME|foo=bar}}</syntaxhighlight> |- | <code>values_only_as&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_only_as|my_value|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_value=VALUE|foo=bar}}</syntaxhighlight> |- | <code>blindly</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|blindly|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|foo=bar}}</syntaxhighlight> |} If the ''call style flags'' argument is omitted it defaults to <code>values_only</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_calling</code> modifier name itself, the ''template name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional parameters will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_invoking|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the text returned by a given module function repeatedly invoked with at least one argument (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_invoking|module name|function name|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by a custom module function. The latter will be repeatedly called with at least one argument as first sequential argument: the parameter's value. It is possible to pass the parameter's value as a different argument, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''function name'' (see <code>[[#mapping_by_calling|mapping_by_calling]]</code> for the list of possible flags). If omitted, the ''call style flags'' argument defaults to <code>values_only</code>. If the ''call style flag'' or (if omitted) the ''function name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the mapping module function. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''function name'' is followed by a number, this will be parsed as the amount of positional parameters to add. These will always follow the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the arguments assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_invoking|foobar|main|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main|VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_invoking|foobar|main|names_and_values|let|rice|nope|let|curry|lots!|2|hello|world|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main|NAME|VALUE|hello|world|rice=nope|curry=lots!}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_invoking</code> modifier name itself, the ''module name'', the ''function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#magic_for_each|magic_for_each]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the expansion of a given parser function repeatedly called with at least one argument (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_magic|parser function|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by a [[:mw:Help:Magic words#Parser functions|parser function]]. The latter will be repeatedly called with at least one argument as first sequential argument: the parameter's value. It is possible to pass the parameter's value as a different argument, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''parser function name'' (see <code>[[#mapping_by_calling|mapping_by_calling]]</code> for the list of possible flags). If omitted, the ''call style flags'' argument defaults to <code>values_only</code>. If the ''call style flag'' or (if omitted) the ''template name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the parser function. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''template name'' is followed by a number, this will be parsed as the amount of positional arguments to add. These will always follow the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the arguments assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_magic|uc|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{uc:VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_magic|plural|names_and_values|1|They are many|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{plural:NAME|VALUE|They are many}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_magic</code> modifier name itself, the parser function's name, the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_replacing</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_replacing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_replacing|code}})</span> | Num. of arguments: 2–4 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values performing [[:en:String operations#String substitution|string substitutions]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_replacing|target|replace|[count]|[plain flag]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the result of a string substitution. Its syntax is very simlar to {{intermn|string|replace|en}}. Internally the modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> function to perform substitutions; therefore, unless a ''plain flag'' is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The ''plain flag'' can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In <code>strict</code> mode the ''replace'' argument will not accept directives (e.g. <code>%0</code>, <code>%1</code>, etc.). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. The ''count'' argument prescribes how many substitutions will be performed at most ''within each parameter'' (it does not count how many parameters will be modified). If blank or omitted, all matches found will be substituted. This modifier uses <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> for performance reasons; if you need to use <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> instead, you will need to invoke the <code>[[Module:String#replace|replace]]</code> function from [[Module:String]] via <code>...&#124;[[#mapping_by_invoking|mapping_by_invoking]]&#124;[[Module:String|string]]&#124;[[Module:String#replace|replace]]&#124;...</code>. The following table shows examples of equivalent instructions. Please be aware that invoking <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> can be much slower. {| class="wikitable" |- ! <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> ! <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> (via [[Module:String]]) |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;false&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;count&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;false&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;plain&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;2&#124;target&#124;replace&#124;...</code><br />or, equivalently,<br /><code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;true&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;count&#124;plain&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;3&#124;target&#124;replace&#124;count&#124;...</code><br />or, equivalently,<br /><code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;true&#124;...</code> |} There is not a corresponding translation for the <code>strict</code> flag in [[Module:String]]. However, as it goes with the <code>plain</code> flag, in that case you won't need <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> in the first place. For example, <syntaxhighlight lang="wikitext">...|mapping_by_renaming|foo|bar|1|...</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">...|mapping_by_invoking|string|replace|4|foo|bar|1|false|...</syntaxhighlight> The first syntax, however, will be less computationally expensive. At &#123;&#123;[[Module:Params/doc/en/examples/informal tablebox|./doc/en/examples/informal tablebox]]&#125;&#125; you can find an example on how to exploit this function to create "informal" [[:en:Template:Infobox|infoboxes]]. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' and ''replace'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, the ''count'' argument, and the <code>mapping_by_replacing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_mixing</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_mixing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_mixing|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values replacing their current values with the expansion of a custom string containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_mixing|mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the expansion of a custom string that expects the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter values in quotes <syntaxhighlight lang="wikitext">...|mapping_by_mixing|"$@"|...</syntaxhighlight> whereas the following code will replace all values with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|mapping_by_mixing|[$#::$@]|...</syntaxhighlight> <!-- If you need to map all parameters exactly matching their names, please use <code>[[#mapping_to_names|mapping_to_names]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The <code>mapping_by_mixing</code> modifier name itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>mapping_to_names</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#renaming_to_values|renaming_to_values]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code>, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing the latter with their parameter name'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. After calling this modifier, all parameters will have their value identical to their name. It is a shortcut for <code>...&#124;[[#mapping_by_mixing|mapping_by_mixing]]&#124;$#&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>mapping_to_names</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>renaming_to_lowercase</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_lowercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_lowercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter names to lower case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_lowercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter names to lower [[Letter case|case]]. It is identical to writing <code>...&#124;[[#renaming_by_magic|renaming_by_magic]]&#124;[[:mw:Help:Magic words#lc|lc]]&#124;...</code>, but without the burden of calling a parser function. {{Nota bene|Note:}} In case of collisions between identical names, only one parameter, randomly chosen, will be left for a given name. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_to_uppercase</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_uppercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_uppercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter names to upper case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_uppercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter names to upper [[Letter case|case]]. It is identical to writing <code>...&#124;[[#renaming_by_magic|renaming_by_magic]]&#124;[[:mw:Help:Magic words#uc|uc]]&#124;...</code>, but without the burden of calling a parser function. {{Nota bene|Note:}} In case of collisions between identical names, only one parameter, randomly chosen, will be left for a given name. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_to_sequence</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_sequence</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_sequence|code}})</span> | Num. of arguments: 0–1 (variable) | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameter names using sequential integers and possibly following a sort order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_sequence|[sort order]|pipe function name}}</syntaxhighlight> This modifier renames all parameter names using increasing sequential integers, possibly following a given sort order. The ''sort order'' optional flag specifies what sort order must be followed. Possible values are <code>alphabetically</code>, <code>naturally</code> (for [[:en:Natural sort order|natural sort order]]) and <code>without_sorting</code>. When omitted it defaults to <code>without_sorting</code>. '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence|naturally| setting|i/p|<br />|: | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence|naturally| setting|i/p|<br />|: | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence| setting|i/p|<br />|: | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence| setting|i/p|<br />|: | list }} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>renaming_to_sequence</code> modifier name and the ''sort order'' argument will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the expansion of a given template repeatedly called with at least one parameter (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_calling|template name|[call style]|[let]|[...]|[number of additional parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_calling|mapping_by_calling]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses {{interfn|2x|en}} to rename all incoming parameters by doubling their names: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|renaming_by_calling|2x|list}}</syntaxhighlight> Same, but adding a hyphen in between: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|renaming_by_calling|2x|1|-|list}}</syntaxhighlight> The following example calls the {{Fn|P1}} template to rename all parameters using their value as their new name: <syntaxhighlight lang="wikitext">{{#invoke:params|renaming_by_calling|P1|values_only|for_each|[$#: $@]}}</syntaxhighlight> This modifier can be particularly useful for sanitizing parameter names (e.g. collapsing several spaces into single spaces, changing the [[:en:Letter case|letter case]], and so on). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_calling</code> modifier name itself, the ''template name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_invoking|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a given module function repeatedly called with at least one argument (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_invoking|module name|function name|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses {{intermn|string|rep|en}} to rename all parameters of type {{para|a}}, {{para|b}}, … {{para|z}} into {{para|aaa}}, {{para|bbb}} … {{para|zzz}}: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|with_name_matching|^%a$|renaming_by_invoking|string|rep|1|3|list}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_invoking</code> modifier name itself, the ''module name'', the ''function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a given parser function repeatedly called with at least one argument (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_magic|parser function|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_magic|mapping_by_magic]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses &#123;&#123;[[:mw:Special:MyLanguage/expr##expr|#expr]]&#125;&#125; to transform all numeric parameters into even numbers (you can replace the expression <code>%0 * 2</code> with any other expression): <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|excluding_non-numeric_names|renaming_by_replacing|^.*$|%0 * 2|1|renaming_by_magic|#expr|setting|h/i/p/f|[|][|: |]|list}}</syntaxhighlight> An example that uses this function with the {{mwl|REVISIONTIMESTAMP}} magic word is available at &#123;&#123;[[Module:Params/doc/en/examples/watchlist|./doc/en/examples/watchlist]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_magic</code> modifier name itself, the ''parser function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_replacing</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_replacing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_replacing|code}})</span> | Num. of arguments: 2–4 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a [[:en:String operations#String substitution|string substitutions]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_replacing|target|replace|[count]|[plain flag]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped (however they are not stripped while searching for the name to replace). Since there can be only one parameter name that matches exactly a literal string, when used with the <code>strict</code> flag this modifier directly accesses the requested key without looping through the entire list of parameters (so it will be much faster). For instance, the following example renames all parameters of type {{para|arg1}}, {{para|arg2}}, … {{para|argN}} into {{para|1}}, {{para|2}} … {{para|N}}, thus creating a novel sequence: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|h/i/p/f|[|][|: |]|with_name_matching|^arg%d+$|renaming_by_replacing|^arg(%d+)$|%1|1|list}}</syntaxhighlight> This modifier can be particularly useful for sanitizing parameter names (e.g. collapsing several spaces into single spaces, changing the [[:en:Letter case|letter case]], and so on). For performance reasons this modifier uses <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code>; if you need to use <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> instead, you will need to invoke the <code>[[Module:String#replace|replace]]</code> function from [[Module:String]] via <code>...&#124;[[#renaming_by_invoking|renaming_by_invoking]]&#124;[[Module:String|string]]&#124;[[Module:String#replace|replace]]&#124;...</code>. The following table shows examples of equivalent instructions. Please be aware that invoking <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> can be much slower. {| class="wikitable" |- ! <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> ! <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> (via [[Module:String]]) |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;false&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;count&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;false&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;plain&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;2&#124;target&#124;replace&#124;...</code><br />or, equivalently,<br /><code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;true&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;count&#124;plain&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;3&#124;target&#124;replace&#124;count&#124;...</code><br />or, equivalently,<br /><code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;true&#124;...</code> |} There is not a corresponding translation for the <code>strict</code> flag in [[Module:String]]. However, as it goes with the <code>plain</code> flag, in that case you won't need <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> in the first place. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' and ''replace'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, the ''count'' argument, and the <code>mapping_by_replacing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_mixing</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_mixing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_mixing|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''Rename all parameters, replacing their former names with the expansion of a custom string containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_mixing|mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the expansion of a custom string that expects the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter names in quotes <syntaxhighlight lang="wikitext">...|renaming_by_mixing|"$#"|...</syntaxhighlight> whereas the following code will replace all parameter names with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|renaming_by_mixing|[$#::$@]|...</syntaxhighlight> <!-- If you need to rename all parameters exactly matching their values, please use <code>[[#renaming_to_values|renaming_to_values]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The <code>renaming_by_mixing</code> modifier name itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>renaming_to_values</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_names|mapping_to_names]]</code>, <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code>, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code> }} ; Brief : ''Rename all parameters, replacing their name with their current value'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. After calling this modifier, all parameters will have their name identical to their value. It is a shortcut for <code>...&#124;[[#renaming_by_mixing|renaming_by_mixing]]&#124;$@&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>renaming_to_values</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>grouping_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>grouping_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|grouping_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes<ref>Unless followed by <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> in few bizarre situations, there is virtually no use in calling this modifier more than once.</ref> | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Group the parameters that have the same numeric suffix into novel parameters, whose names will be numbers and whose values will be decided by a custom template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|grouping_by_calling|template name|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#call_for_each_group|call_for_each_group]]</code>. This means that after calling this modifier the old parameters will be (temporarily) gone and the only parameters left will be novel parameters whose names will be numbers (or an empty string if parameters without a numeric suffix were present) and whose content will be decided by a custom template. Like other modifiers in the <code>mapping_*</code> and <code>renaming_*</code> family, it is possible to impose own parameters on the callback template by using the syntax <code>...|[let]|[...]|[number of additional sequential arguments]|[argument 1]|[argument 2]|[...]|[argument N]|...</code>. Unlike the other <code>mapping_*</code> and <code>renaming_*</code> modifiers, however (but like <code>[[#call_for_each_group|call_for_each_group]]</code>), sequential parameters here will not be appended, but will ''replace'' possible parsed parameters. And so, writing <syntaxhighlight lang="wikitext">{{#invoke:params|...|grouping_by_calling|MY TEMPLATE|let|foo|bar|let|hello|world|3|one|two|three|list_values}}</syntaxhighlight> is identical to writing <syntaxhighlight lang="wikitext">{{#invoke:params|...|call_for_each_group|MY TEMPLATE|foo=bar|hello=world|one|two|three}}</syntaxhighlight> In the example above the main difference will be that the first solution will allow to pass the newly grouped parameters at once to another template or module (via <code>[[#concat_and_call|concat_and_call]]</code> or <code>[[#concat_and_invoke|concat_and_invoke]]</code>) or, if needed, perform further fine-tuning operations concerning the new parameters. Please refer to the documentation of <code>[[#call_for_each_group|call_for_each_group]]</code> for further information on the parameters passed to the callback template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>grouping_by_calling</code> modifier name itself, the ''template name'', the <code>let</code> keyword, the passed parameter names, and the number of additional parameters will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>parsing</code> === {{Capsa tabellaria | titulus = Modifier <code>parsing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|parsing|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | Often accompanied by: <code>[[#new|new]]</code> | ; See also | : <code>[[#new|new]]</code>, <code>{{intermn|ArrayList||en}}</code>, <code>{{interfn|Array|en}}</code> }} ; Brief : ''Create new parameters by parsing a parameter string'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|parsing|string to parse|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> This modifier allows to add an infinity of new parameters by using a parameter string. By default this expects <code>&#124;</code> as separator between parameters and <code>&#61;</code> as separator between keys and values, but it is possible to specify other strings or patterns. The parsed parameters will overwrite existing parameters of the same name. For this reason, the <code>[[#new|new]]</code> directive often accompanies this modifier. Examples: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one{{!}}two{{!}}three{{!}}foo{{=}}bar{{!}}hello{{=}}world|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one{{!}}two{{!}}three{{!}}foo{{=}}bar{{!}}hello{{=}}world|for_each|[$#:$@]}} * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one, two; three. foo: bar, hello: world|trim_all|splitter_pattern|[,;.]|setter_string|:|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one, two; three. foo: bar, hello: world|trim_all|splitter_pattern|[,;.]|setter_string|:|for_each|[$#:$@]}} * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one/two/ three / foo % bar /hello%world|setter_string|%|trim_none|splitter_string|/|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one/two/ three / foo % bar /hello%world|setter_string|%|trim_none|splitter_string|/|for_each|[$#:$@]}} The ''trim flag'' argument can be placed in any position after the ''string to parse'' (not necessarily in second position) and can have one of the following values: <code>trim_none</code>, <code>trim_named</code>, <code>trim_positional</code>, <code>trim_all</code>. If omitted, it defaults to <code>trim_named</code>. The ''iteration delimiter setter'' can be placed in any position after the ''string to parse'' (not necessarily in third position), must be ''immediately'' followed by a user-given string, and can be either <code>splitter_string</code> or <code>splitter_pattern</code>. If omitted, the two arguments default to <code>splitter_string&#124;&#123;&#123;!&#125;&#125;</code>. If the custom string is empty (but not if it is blank but not empty) the string to parse will be assumed not to have any iteration delimiters (this will result in one single parameter being parsed). The ''key-value delimiter setter'' can be placed in any position after the ''string to parse'' (not necessarily in fifth position), must be ''immediately'' followed by a user-given string, and can be either <code>setter_string</code> or <code>setter_pattern</code>. If omitted, the two arguments default to <code>setter_string&#124;&#123;&#123;&#61;&#125;&#125;</code>. If the custom string is empty (but not if it is blank but not empty) the string to parse will be assumed not to have any key-value delimiters (this will result in a sequence-only list of parameters being parsed). {| class="wikitable" style="margin-left: auto; margin-right: auto;" |+ Possible options |- ! Setting a trim flag ! Setting an iteration delimiter ! Setting a key-value delimiter |- | <code>trim_none</code><br /> <code>trim_named</code><br /> <code>trim_positional</code><br /> <code>trim_all</code> | <code>splitter_string&#124;...</code><br /> <code>splitter_pattern&#124;...</code> | <code>setter_string&#124;...</code><br /> <code>setter_pattern&#124;...</code> |} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>parsing</code> modifier name itself, the ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>reinterpreting</code> === {{Capsa tabellaria | titulus = Modifier <code>reinterpreting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reinterpreting|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | ; See also | : <code>[[#parsing|parsing]]</code>, <code>{{intermn|ArrayList||en}}</code>, <code>{{interfn|Array|en}}</code> }} ; Brief : ''Use the content of a parameter as a parameter string to parse, after removing the parameter itself'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reinterpreting|parameter name|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> This modifier works exactly like <code>[[#parsing|parsing]]</code>, but takes the content of a disposable parameter as input. See there for further information. The parameter passed to this modifier will be immediately deleted. The parsed parameters will overwrite existing parameters of the same name. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|new|pulling|1|reinterpreting|1|splitter_string|,|trim_all|concat_and_call|See also}}</syntaxhighlight> An example that shows how to use this function to transclude a custom template with custom parameters is available at &#123;&#123;[[Module:Params/doc/en/examples/constructed transclusion|./doc/en/examples/constructed transclusion]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>reinterpreting</code> modifier name itself, the ''parameter name'', ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>evaluating</code> === {{Capsa tabellaria | titulus = Modifier <code>evaluating</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|evaluating|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | ; See also | : <code>[[#parsing|parsing]]</code>, <code>[[#reinterpreting|reinterpreting]]</code> }} ; Brief : ''Create new directives by parsing a parameter string'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|evaluating|string to parse|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> In order to facilitate scripting, the directives wherewith this module is invoked can be added or removed on the fly. The <code>evaluating</code> modifier works exactly like <code>[[#parsing|parsing]]</code>, but the parsed input will be interpreted as directives for this module rather than new template parameters (see there for further information). All directives can be parsed through this modifier. Named parsed parameters will overwrite existing parameters of the same name. Unlike <code>[[#parsing|parsing]]</code>, here the default separators are <code>!</code> and <code>:</code> instead of <code>&#123;&#123;!&#125;&#125;</code> and <code>&#123;&#123;&#61;&#125;&#125;</code>. Moreover a blank input will be discarded. '''Example:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| all_sorted| setting|i/p|; | → | evaluating|{{#if:{{{SOMETHING|}}} | imposing!1!one!imposing!2!two!imposing!3!three | imposing!100!hundred!imposing!200!two hundred!imposing!300!three hundred }}| list }}</syntaxhighlight> '''Result:''' : {{#invoke:params|new| all_sorted| setting|i/p|; | → | evaluating|{{#if:{{{SOMETHING|}}} | imposing!1!one!imposing!2!two!imposing!3!three | imposing!100!hundred!imposing!200!two hundred!imposing!300!three hundred }} |list }} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>evaluating</code> modifier name itself, the ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mixing_names_and_values</code> === {{Capsa tabellaria | titulus = Modifier <code>mixing_names_and_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mixing_names_and_values|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''Rewrite all parameters, replacing names and values with the expansion of two custom strings containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mixing_names_and_values|name mixing string|value mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes names and values of the parameters the current template is being called with, replacing each of them with the expansion of two custom strings that expect the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter names and values in quotes <syntaxhighlight lang="wikitext">...|mixing_names_and_values|"$#"|"$@"|...</syntaxhighlight> whereas the following code will replace all names with the string <code>VALUE/NAME</code> and all values with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|mixing_names_and_values|$@/$#|[$#::$@]|...</syntaxhighlight> <!-- If you need to swap names and values verbatim, please use <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''value mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The ''name mixing string'' argument and <code>mixing_names_and_values</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>swapping_names_and_values</code> === {{Capsa tabellaria | titulus = Modifier <code>swapping_names_and_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|swapping_names_and_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_names|mapping_to_names]]</code>, <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#renaming_to_values|renaming_to_values]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code> }} ; Brief : ''Rewrite all parameters swapping their names and values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|swapping_names_and_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is a shortcut for <code>...&#124;[[#mixing_names_and_values|mixing_names_and_values]]&#124;$@&#124;$#&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>swapping_names_and_values</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>combining</code> === {{Capsa tabellaria | titulus = Modifier <code>combining</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining|code}})</span> | Num. of arguments: 2–10 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>p</code> Key-value delimiter | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} | ; See also | : <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#list|list]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code> }} ; Brief : ''Combine all parameter names and values into a single parameter, possibly using a sort order and glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining|new parameter name|[sort order]|setting directives|...|pipe function name}}</syntaxhighlight> This modifier combines all parameter names and values into a single new parameter (whose name can be identical to that of a pre-existing parameter). It can be broadly considered as a “modifier version” of the <code>[[#list|list]]</code> function. The ''new parameter name'' argument specifies the name of the new parameter that must be created. The ''sort order'' optional flag argument specifies a sort order. Possible values are <code>alphabetically</code>, <code>naturally</code> (for [[:en:Natural sort order|natural sort order]]) and <code>without_sorting</code>. When omitted it defaults to <code>without_sorting</code>. The ''setting directives'' argument is identical to the first argument of the <code>[[#setting|setting]]</code> modifier, and accordingly is followed by a variable number of arguments (up to seven—see <code>[[#setting|setting]]</code> for more information). Differently than in <code>[[#setting|setting]]</code>, here the ''setting directives'' argument can be left empty (but not omitted). For a similar modifier that combines only values and omits parameter names, see the <code>[[#combining_values|combining_values]]</code> modifier. '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>combining</code> modifier name, the ''new parameter name'' argument and the ''sort order'' argument will be trimmed of their surrounding spaces. The ''setting directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>combining_values</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_values|code}})</span> | Num. of arguments: 2–10 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#list|list]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code> }} ; Brief : ''Combine all parameter names and values into a single parameter, possibly using a sort order and glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_values|new parameter name|[sort order]|setting directives|...|pipe function name}}</syntaxhighlight> This modifier combines all parameter values into a single new parameter (whose name can be identical to that of a pre-existing parameter). It can be broadly considered as a “modifier version” of the <code>[[#list_values|list_values]]</code> function. Its syntax is identical to that of <code>[[#combining|combining]]</code>; see there for more information. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>combining_values</code> modifier name, the ''new parameter name'' argument and the ''sort order'' argument will be trimmed of their surrounding spaces. The ''setting directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_calling|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a custom template and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_calling|template name|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_call|concat_and_call]]</code>. This means that after calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. For instance, using [[Module:Params/periclitationes/en/tdummy echo sb|./testcases/tdummy echo sb]] as callback template, a template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> with the following content, <syntaxhighlight lang="wikitext">{{#invoke:params|combining_by_calling|Module:Params/periclitationes/en/tdummy echo sb|my_new_parameter|for_each|[$#:$@]}}</syntaxhighlight> when transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|one|two|three|hello=world|foo=bar}}</syntaxhighlight> will produce : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|hello|world| imposing|foo|bar| combining_by_calling|Module:Params/periclitationes/en/tdummy echo sb|my_new_parameter|for_each|[$#:$@]}} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_calling</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_invoking|code}})</span> | Num. of arguments: 3 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a custom module function and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_invoking|module name|function name|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_invoke|concat_and_invoke]]</code>. It works similarly to how <code>[[#combining_by_calling|combining_by_calling]]</code> works, except that it invokes a module function instead of calling a template. After calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_invoking</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_magic|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a parser function and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_magic|parser function|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_magic|concat_and_magic]]</code>. It works similarly to how <code>[[#combining_by_calling|combining_by_calling]]</code> works, except that it calls a parser function instead of calling a template. After calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_magic</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>snapshotting</code> === {{Capsa tabellaria | titulus = Modifier <code>snapshotting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|snapshotting|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Eventually followed by: Either <code>[[#entering_substack|entering_substack]]</code> or <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Push a copy of the current parameter list to the queue of parameter lists'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|snapshotting|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This module has a stacking mechanism that allows to isolate groups of parameters, work separately on them, and then merge them back to the original stack. The modifiers dedicated to this mechanism are: * <code>[[#snapshotting|snapshotting]]</code> * <code>[[#remembering|remembering]]</code> * <code>[[#entering_substack|entering_substack]]</code> * <code>[[#pulling|pulling]]</code> * <code>[[#detaching_substack|detaching_substack]]</code> * <code>[[#dropping_substack|dropping_substack]]</code> * <code>[[#leaving_substack|leaving_substack]]</code> * <code>[[#merging_substack|merging_substack]]</code> * <code>[[#flushing|flushing]]</code> Every time the <code>snapshotting</code> modifier is used, the current list of parameters (together with their values) will be copied and added to a queue. When the <code>[[#entering_substack|entering_substack]]</code> modifier is used, the list of parameters on top of the queue will temporarily become the current parameters, and all other modifiers will affect only this substack. After completing the job, the <code>[[#merging_substack|merging_substack]]</code> will merge the current substack to the parent stack. If no parameter lists have been snapshotted before calling <code>[[#entering_substack|entering_substack]]</code>, the latter will automatically make a snapshot of the current parameters. Once inside a substack, it is possible to enter a subsubstack using the same machinery. The <code>[[#detaching_substack|detaching_substack]]</code> modifier erases the current parameters from the parent stack, allowing the current stack to rename its parameters freely and merge them back to the parent stack, renamed. It is possible to leave a substack without merging it to the parent by using the <code>[[#leaving_substack|leaving_substack]]</code> modifier. In this case, at some point it will be necessary to call <code>[[#flushing|flushing]]</code> in order to merge the stack previously left unmerged. Alternatively, it will be possible to enter it again by calling <code>[[#entering_substack|entering_substack]]</code>, and finally merge it via <code>[[#merging_substack|merging_substack]]</code>. It is also possible to drop and discard a substack completely via <code>[[#dropping_substack|dropping_substack]]</code> An example will probably clarify the mechanism better than anything else: <syntaxhighlight lang="wikitext" line> {{#invoke:params|new|<!-- Ignore the incoming parameters and manually assign some parameters (we will simulate the following incoming parameters: |one|two|three|four|foo=bar|hello=world ...) --> imposing|1|one| imposing|2|two| imposing|3|three| imposing|4|four| imposing|foo|bar| imposing|hello|world| entering_substack|<!-- Enter into a substack (the `snapshotting` modifier will be automatically invoked for us) --> excluding_numeric_names|<!-- Exclude numeric parameters --> detaching_substack|<!-- Remove the current parameters from the parent stack --> renaming_by_replacing|^.*$|This was called "%0"|1|<!-- Rename the parameters in this substack --> merging_substack| entering_substack|new|<!-- Enter into a new empty substack --> pulling|1|<!-- Pull the parameter named "1" from the parent stack --> mapping_by_replacing|^.*$|This value once was "%0"|1|<!-- Replace the content of the parameters in this substack --> merging_substack| for_each|[$#:$@]}} </syntaxhighlight> The code above will result in: : {{#invoke:params|new|<!-- Ignore the incoming parameters and manually assign some parameters (we will simulate the following incoming parameters: |one|two|three|four|foo=bar|hello=world ...) --> imposing|1|one| imposing|2|two| imposing|3|three| imposing|4|four| imposing|foo|bar| imposing|hello|world| entering_substack|<!-- Enter into a substack (the `snapshotting` modifier will be automatically invoked for us) --> excluding_numeric_names|<!-- Exclude numeric parameters --> detaching_substack|<!-- Remove the current parameters from the parent stack --> renaming_by_replacing|^.*$|This was called "%0"|1|<!-- Rename all parameters --> merging_substack| entering_substack|new|<!-- Enter into a new empty substack --> pulling|1|<!-- Pull the parameter named "1" from the parent stack --> mapping_by_replacing|^.*$|This value once was "%0"|1|<!-- Replace the content of all parameters --> merging_substack| for_each|[$#:$@]}} A more advanced example is available at &#123;&#123;[[Module:Params/doc/en/examples/universal page list|./doc/en/examples/universal page list]]&#125;&#125;. {{vsep|1.5em|mundatio=nulla}} === <code>remembering</code> === {{Capsa tabellaria | titulus = Modifier <code>remembering</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|remembering|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Eventually followed by: Either <code>[[#entering_substack|entering_substack]]</code> or <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Push a copy of the original (unmodified) parameter list to the queue of snapshots'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|remembering|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is somewhat similar to <code>[[#snapshotting|snapshotting]]</code>, except that it retrieves the parameters that were originally passed to the calling template before being affected by the module's modifiers. The modifier works also after the <code>[[#new|new]]</code> directive. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>entering_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>entering_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|entering_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | May be immediately followed by: <code>[[#new|new]]</code> | Eventually followed by: Either <code>[[#merging_substack|merging_substack]]</code> or <code>[[#leaving_substack|leaving_substack]]</code> followed by <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Enter the first stack in the queue of parameter lists, or copy the current parameters into a substack if the queue is empty'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|entering_substack|[new]|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. Once in a substack, it is possible to go back to the parent stack using three different modifiers: <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code> and <code>[[#dropping_substack|dropping_substack]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>pulling</code> === {{Capsa tabellaria | titulus = Modifier <code>pulling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|pulling|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | Often preceeded by: <code>[[#new|new]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Pull a single parameter from the parent stack or from the stack of the original parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|pulling|parameter name|pipe function name}}</syntaxhighlight> See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. If this modifer is not used in a substack, the parameter will be pulled from the original (unmodified) parameter list. {{vsep|1.5em|mundatio=nulla}} === <code>detaching_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>detaching_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|detaching_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Remove from the parent stack the parameters that are present in the current stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|detaching_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>dropping_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>dropping_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|dropping_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Go back to the parent stack dropping the current substack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|dropping_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>leaving_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>leaving_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|leaving_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Leave the current substack without merging it, and return to the parent stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|leaving_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. See <code>[[#flushing|flushing]]</code> for an example of how to use this modifier. {{vsep|1.5em|mundatio=nulla}} === <code>merging_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>merging_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|merging_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Leave the current stack after merging it with the parent stack, then return to the latter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|merging_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>flushing</code> === {{Capsa tabellaria | titulus = Modifier <code>flushing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|flushing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code> }} ; Brief : ''Merge the first stack in the queue of snapshotted parameters with the current stack.'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|flushing|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is used in conjunction with either <code>[[#leaving_substack|leaving_substack]]</code> or <code>[[#snapshotting|snapshotting]]</code>. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. In the following wrapper of an <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight>, the three parameters {{para|1}}, {{para|2}}, and {{para|3}} are used as aliases for {{para|title}}, {{para|author}}, and {{para|language}} respectively. The <code>flushing</code> modifier ensures that in case both are present, the named alias will have the precedence over the positional alias. <syntaxhighlight lang="wikitext">{{#invoke:params| entering_substack| discarding|1| discarding|2| discarding|3| leaving_substack| renaming_by_replacing|1|title|strict| renaming_by_replacing|2|author|strict| renaming_by_replacing|3|language|strict| flushing| concat_and_call|example template }}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>new</code> === {{Capsa tabellaria | titulus = Modifier <code>new</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|new|code}})</span> | Num. of arguments: 0 | Repeatable: No | Restrictions: First position only | ; See also | : <code>[[#parsing|parsing]]</code>, <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#discarding|discarding]]</code> }} ; Brief : ''Get rid of all the incoming parameters and create a new (empty) parameter stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier can only appear in first position, or if substacks are present, immediately after the <code>[[#entering_substack|entering_substack]]</code> directive. When in first position, its main purpose is that of extending the facilities offered by this module (e.g. <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, etc.) to custom lists of strings, independently of the incoming parameters. When inside a stack, it signals that the snapshot of the current parameters must be ignored for that stack. The existence of the <code>new</code> modifier also facilitates debugging the module. The newly created parameter stack can be populated via <code>[[#parsing|parsing]]</code>, <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, or <code>[[#splicing|splicing]]</code>. The incoming parameters can always be retrieved back using the <code>[[#remembering|remembering]]</code> and <code>[[#pulling|pulling]]</code> modifiers. Examples: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|imposing|1|foo|imposing|2|bar|mapping_by_replacing|^.|!%1|list_values}}</syntaxhighlight> *: ↳ {{#invoke:params|new|imposing|1|foo|imposing|2|bar|mapping_by_replacing|^.|!%1|list_values}} {{vsep|1.5em|mundatio=nulla}} == Subpages == * [[Module:Params/ChangeLog]] – Record of the most important changes in the module's code * [[Module:Params/periclitationes/en]] – Testing the module's capabilities * [[Module:Params/doc/en/examples]] – Some of the examples mentioned in this documentation The complete list of subpages is available [[Special:PrefixIndex/Module:Params/|here]]. == Notes == <references /> == See also == * {{intermn|TemplatePar||en}} * {{intermn|ParameterCount||en}} * {{intermn|Separated entries|main|en}} * {{intermn|Enumerate|main|en}} * {{ml|Check for unknown parameters|check}} * {{intermn|Check for deprecated parameters|check|en}} * {{intermn|Check for clobbered parameters|check|en}} * {{intermn|Parameter validation||en}} * {{intermn|Expand wikitext|main|en}} * {{intermn|For loop|main|en}} and {{interfn|For loop|en}} * {{intermn|For nowiki|template|en}} and {{interfn|For nowiki|en}} * {{intermn|Template wrapper|wrap|en}} * {{intermn|ArrayList||en}} * {{intermn|TEMPLATENAME|main|en}} <includeonly>{{in harenario aut alibi||2= <!-- Categorias sub hac linea adde --> [[Categoria:Formulae|{{PAGENAME}}]] [[Categoria:Formulae variadicae|!]] }}</includeonly> gnsysgjzjd5lhaawtbcsavsn3atrbb9 3971037 3971015 2026-07-09T02:52:27Z Grufo 64423 3971037 wikitext text/x-wiki {{module:params/doc/en/main sidebox}} The <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight> module is designed to be adopted by those templates that want to have a deep control of their parameters. It is particularly useful to [[:en:variadic template|variadic template]]s, to which it offers the possibility to count, list, map and propagate the parameters received without knowing their number in advance. The module offers elegant shortcuts to non variadic templates as well. Outside templates it has very few applications; hence, if you plan to make experiments, make sure to do them from within a template, or you will not be able to see much (you can use {{[[module:params/periclitationes/en/sandbox]]}} for that). Under [[Module:Params/periclitationes|./periclitationes/en]] you can find helper templates that can be specifically used for testing the module's capabilities in flexible ways. Finally, under [[Module:Params/doc/en/examples|./doc/en/examples]] you can find some of the examples shown in this documentation page. {{Nota bene|Note:}} In case your template uses <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight>, please add <syntaxhighlight lang="wikitext" inline>{{lua|Module:Params}}</syntaxhighlight> to its documentation page, so that if breaking changes will be introduced in the future the template will be easily traceable without performing <span class="plainlinks">[//en.wikipedia.org/w/index.php?search=insource%3A%2Finvoke%3Aparams%2Fi&title=Special%3ASearch&profile=advanced&fulltext=1&ns10=1&limit=500&sort=last_edit_desc an "in source" search]</span>. Please, do not edit this module without having done extensive testing in the [[Module:Params/harenarium|module's sandbox]] first. == General usage == Among the possibilities that the module offers there is that of performing a series of actions after additional arguments have been concatenated to templates' incoming parameters. As this makes it necessary to keep the argument slots clean from interference, instead of named arguments in order to specify options this module uses ''piping functions'' (i.e. functions that expect to be [[:en:Pipeline (software)|piped]] instead of returning to the caller), or ''modifiers''. This creates a syntax similar to the following example: <syntaxhighlight lang="wikitext">{{#invoke:params|[modifier]|[...]|[modifier]|[...]|function|[...]}}</syntaxhighlight> For instance, as the name suggests, the <code>[[#list|list]]</code> function lists the parameters wherewith a template was called. By default it does not add delimiters, but returns an indistinct blob of text in which keys and values are sticked to each other. However, by using the <code>[[#setting|setting]]</code> modifier, we are able to declare a key-value delimiter (<code>p</code>) and an iteration delimiter (<code>i</code>). And so, if we imagined a template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> containing the following wikitext, <syntaxhighlight lang="wikitext">{{#invoke:params|setting|i/p|<br />|: |list}}</syntaxhighlight> and such template were called with the following parameters, <syntaxhighlight lang="wikitext">{{example template | Beast of Bodmin = A large feline inhabiting Bodmin Moor | Morgawr = A sea serpent | Owlman = A giant owl-like creature }}</syntaxhighlight> the following result would be produced: : Beast of Bodmin: A large feline inhabiting Bodmin Moor<br />Morgawr: A sea serpent<br />Owlman: A giant owl-like creature We can also do more sophisticated things; for instance, by exploiting the possibility to set a header (<code>h</code>) and a footer (<code>f</code>), we can transform the previous code into a generator of [https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element definition lists], <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>|list}}</syntaxhighlight> thus yielding: :; Beast of Bodmin :: A large feline inhabiting Bodmin Moor :; Morgawr :: A sea serpent :; Owlman :: A giant owl-like creature By placing the <code>[[#with_name_matching|with_name_matching]]</code> modifier before the <code>[[#list|list]]</code> function we will be able to filter some parameters out – such as, for instance, all parameter names that do not end with an "n": <syntaxhighlight lang="wikitext">{{#invoke:params|with_name_matching|n$|setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>|list}}</syntaxhighlight> Thus, the previous code will produce: :; Beast of Bodmin :: A large feline inhabiting Bodmin Moor :; Owlman :: A giant owl-like creature This mechanism has the intrinsic advantage that it allows the concatenation of infinite modifiers. And so, in order to get the accurate result that we want to obtain we could write: <syntaxhighlight lang="wikitext">{{#invoke:params| with_name_matching|^B| with_name_matching|n$| with_value_matching|feline| setting|h/p/i/f|<dl><dt>|</dt><dd>|</dd><dt>|</dd></dl>| all_sorted| list }}</syntaxhighlight> Since it is a wikitext-oriented module focused on manipulating collections, its functions and modifiers have loosely been inspired by JavaScript <code>Array</code>'s [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#instance_methods instance methods].<ref>For instance, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map Array.prototype.map()]</code> can remind of <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach Array.prototype.forEach()]</code> can remind of <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice Array.prototype.splice()]</code> can remind of <code>[[#splicing|splicing]]</code>, <code>[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/with Array.prototype.with()]</code> can remind of <code>[[#entering_substack|entering_substack]]&#124;...&#124;[[#merging_substack|merging_substack]]</code>, and so on.</ref> The syntax that emerges from piping functions to one another instead results similar to [[:en:jQuery#Chaining|jQuery's method chains]]. In that sense, this <syntaxhighlight lang="javascript">$("#myElement") .css("background-color", "blue") .addClass("active") .hide() .etc...</syntaxhighlight> might loosely remind of this: <syntaxhighlight lang="wikitext">{{#invoke:params| excluding_non-numeric_names| mapping_by_replacing|[^abdlp]+|| mapping_by_replacing|a|⏒ ||plain| etc... }}</syntaxhighlight> Conceptually the pattern is very similar: each step transforms the result of the previous one. But instead of a jQuery object being indefinitely manipulated, what is indefinitely manipulated here is always a collection of wikitext parameters. === Considerations on code style === Normally on Wikipedia, when templates are written across multiple lines in ''block style'', by convention the pipe sign (<code>&#124;</code>) is written on the left side of each new line, as in the following example: <syntaxhighlight lang="wikitext">{{cite book | last = Bloggs | first = Joe | author-link = Joe Bloggs | date = 1974 | title = Book of Bloggs }}</syntaxhighlight> Doing the same with <syntaxhighlight lang="wikitext" inline>{{#invoke:params}}</syntaxhighlight> however is often impossible, because the module tends to preserve trailing spaces and new lines in all its arguments except in modifier and function names (and, accordingly, a newline character would be parsed as belonging to the last parameter of each line). Because of this, the only safe and meaningful way to invoke this module in ''block style'' is by appending the pipe sign ''at the end of the line, right before a modifier name or a function name'', as in the following example: <syntaxhighlight lang="wikitext">{{#invoke:params| all_sorted| excluding_non-numeric_names| mapping_by_replacing|[^abdlp]+|| mapping_by_replacing|a|⏒ ||plain| mapping_by_replacing|b|⏑ ||plain| mapping_by_replacing|d|⏔ ||plain| mapping_by_replacing|l|‒ ||plain| mapping_by_replacing|p|⏖ ||plain| trimming_values| mapping_by_replacing|%s+|&nbsp;| setting|h/i/f|<big>&nbsp;|&nbsp;&#124; |&nbsp;</big>| list_values }}</syntaxhighlight> === Prototyping new templates === In designing new templates or exploring the module's capabilities, there are two possible approaches that allow to simulate the incoming parameters direcly in a preview window—without having to save the changes first and then test them from a different page. The first approach consists in temporarily exploiting the <syntaxhighlight lang="wikitext" inline><includeonly>...</includeonly></syntaxhighlight> and <syntaxhighlight lang="wikitext" inline><noinclude>...</noinclude></syntaxhighlight> tags properly to include the template's transclusion as well, the second approach consists in temporarily relying on the <code>[[#imposing|imposing]]</code> modifier. For instance, given a template named <syntaxhighlight lang="wikitext" inline>{{My template}}</syntaxhighlight>, whose wikitext is <syntaxhighlight lang="wikitext" inline>{{#invoke:params|value_of|foo}}</syntaxhighlight>, to simulate the transclusion <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three|foo=bar}}</syntaxhighlight>, it is possible to write, temporarily, <syntaxhighlight lang="wikitext"><includeonly>{{#invoke:params|value_of|foo}}</includeonly><noinclude>{{{{#invoke:params|self}}|one|two|three|foo=bar}}</noinclude></syntaxhighlight> or, equivalently, <syntaxhighlight lang="wikitext">{{#invoke:params| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| value_of|foo }}</syntaxhighlight> and then click on “Show preview”. In both cases, the final template must be eventually saved as: <syntaxhighlight lang="wikitext"><includeonly>{{#invoke:params|value_of|foo}}</includeonly><noinclude>{{Documentation}}</noinclude></syntaxhighlight> Here are some suggestions on how to proceed in order to master this module: # Start by using only the <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code> and <code>[[#for_each|for_each]]</code> functions # Learn how to use the <code>[[#setting|setting]]</code> modifier # Learn how to use all the other modifiers # Learn how to use all the other functions === Nomenclature === Most modifiers immediately affect what follows, while others add their action to the queue of actions that will be done last, thus affecting only the way [[#Functions|functions]] behave (e.g. <code>[[#sequential|sequential]]</code>, <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> – as the only action they do consists in ''putting a flag'', these are called “[[#Flag modifiers (piping functions)|flag modifiers]]”). A rule of thumb in the nomenclature is the following: * If a directive is an English adjective or a past participle it is a [[#Flag modifiers (piping functions)|flag modifier]] (e.g. <code>[[#sequential|sequential]]</code>) * If a directive is or contains an English [[:en:gerundive|gerundive]] it is a [[#Modifiers (piping functions)|modifier]] (with the exception of the special, first-position-only <code>[[#new|new]]</code> directive – e.g. <code>[[#squeezing|squeezing]]</code>) * If a directive is anything else (usually an English [[:en:bare infinitive|bare infinitive]]) it is a normal non-piping [[#Functions|function]] (e.g. <code>[[#list_values|list_values]]</code>) The two flag modifiers <code>[[#sequential|sequential]]</code> and <code>[[#non-sequential|non-sequential]]</code> refer to a technical jargon used in wikitext: given a parameter list, the subgroup of ''sequential parameters'' is constituted by the largest group of consecutive numeric parameters starting from {{para|1}} – this is known as the parameters' "sequence". A parameter list that does not have a first parameter specified does not possess a sequence. == Functions == Here follows the list of functions. You might want to see also [[#Flag modifiers (piping functions)|§ Flag modifiers]] and [[#Modifiers (piping functions)|§ Modifiers]]. {{vsep|mundatio=nulla}} === <code>self</code> === {{Capsa tabellaria | titulus = Function <code>self</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|self|code}})</span> | Num. of arguments: 0 | Not affected by: Any modifier | ; See also | : <code>{{intermn|TEMPLATENAME|main|en}}</code>, <code>{{mwl|FULLPAGENAME}}</code> }} ; Brief : ''Return the name of the current template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|self}}</syntaxhighlight> This argumentless function guarantees that the name of the template invoking this module is shown, regardless if this is transcluded or not. As a possible example, if a Wikipedia page named <code>Page X</code> contained only a transclusion of a template named <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight>, and the latter contained the following wikitext, <syntaxhighlight lang="wikitext">{{#invoke:params|self}} {{FULLPAGENAME}}</syntaxhighlight> if we visited <code>Template:Foobar</code> we would see, <pre>Template:Foobar Template:Foobar</pre> whereas if we visited <code>Page X</code> we would see: <pre>Template:Foobar Page X</pre> Therefore by writing <syntaxhighlight lang="wikitext">{{#ifeq:{{#invoke:params|self}}|{{FULLPAGENAME}} | Page is not being transcluded | Page is being transcluded }}</syntaxhighlight> it is possible to understand whether a page is being transcluded or not. For most cases the {{tag|includeonly}} and {{tag|noinclude}} will offer a simpler solution, however there can be cases in which this becomes the way to go. If <code>Page X</code> transcluded <syntaxhighlight lang="wikitext" inline>{{foobar 2}}</syntaxhighlight> and the latter were a redirect to <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight>, we would still see <pre>Template:Foobar Page X</pre> A typical use case of this function is that of providing stable links for editing transcluded templates. E.g.: <syntaxhighlight lang="wikitext">{{edit|{{#invoke:params|self}}|edit this template}}</syntaxhighlight> Another possible use case is that of transcluding a subtemplate. E.g.: <syntaxhighlight lang="wikitext">{{{{#invoke:params|self}}/my subtemplate|foo|bar}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>count</code> === {{Capsa tabellaria | titulus = Function <code>count</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|count|code}})</span> | Num. of arguments: 0 | Often preceeded by: <code>[[#sequential|sequential]]</code> | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#setting|setting]]</code>,<br /><code>[[#sorting_sequential_values|sorting_sequential_val…]]</code>,<br /><code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code> | ; See also | : <code>[[#scoring|scoring]]</code>, <code>{{intermn|ParameterCount||en}}</code> }} ; Brief : ''Count the number of parameters wherewith a template was called'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|count}}</syntaxhighlight> This function does not take arguments. The number that this function yields depends on the modifiers that precede it. For instance, in a template that is called with both named and unnamed parameters, <syntaxhighlight lang="wikitext" inline>{{#invoke:params|count}}</syntaxhighlight> and <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|count}}</syntaxhighlight> will return different results. For the modifier version of this function, see <code>[[#scoring|scoring]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_call</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_call</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_call|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code>, <code>{{intermn|template wrapper|wrap|en}}</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_call|template name|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> This function comes in handy in case of [[:en:Wikipedia:Wrapper templates|wrapper templates]]. For example, if our <syntaxhighlight lang="wikitext" inline>{{wrapper template}}</syntaxhighlight> had the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|concat_and_call|foobar|elbow|earth|room|hello=not today}}</syntaxhighlight> and were called with, <syntaxhighlight lang="wikitext">{{wrapper template|one|two|three|hello=world|wind=spicy}}</syntaxhighlight> the following call to the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template would be performed: <syntaxhighlight lang="wikitext">{{foobar|elbow|earth|room|one|two|three|hello=not today|wind=spicy}}</syntaxhighlight> By using the <code>[[#cutting|cutting]]</code> modifier it is possible to impose numeric positive parameters instead of prepending them. For instance, the following code echoes all incoming parameters to <syntaxhighlight lang="wikitext" inline>{{my template}}</syntaxhighlight>, with the exception of {{para|3}}, which is replaced with <code>hello world</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|3|0|concat_and_call|my template|{{{1|}}}|{{{2|}}}|hello world}}</syntaxhighlight> If the numeric parameters to replace are a limited number, as in the example above, a better alternative to <code>[[#cutting|cutting]]</code> might be <code>[[#imposing|imposing]]</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|imposing|3|hello world|concat_and_call|my template}}</syntaxhighlight> If no other argument besides the ''template name'' is provided this function simply echoes the current parameters to another template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>concat_and_call</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_invoke</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_invoke</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_invoke|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom module'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_invoke|module name|function name|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#concat_and_call|concat_and_call]]</code>, but invokes a module function instead of calling a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>concat_and_invoke</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>concat_and_magic</code> === {{Capsa tabellaria | titulus = Function <code>concat_and_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|concat_and_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code> }} ; Brief : ''Prepend positive numeric arguments to the current parameters, or impose non-numeric or negative numeric arguments, then propagate everything to a custom parser function'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|concat_and_magic|parser function|[prepend 1]|[prepend 2]|[...]|[prepend n]|[named item 1=value 1]|[...]|[named item n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#concat_and_call|concat_and_call]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>concat_and_magic</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>value_of</code> === {{Capsa tabellaria | titulus = Function <code>value_of</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|value_of|code}})</span> | Num. of arguments: 1 | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>f</code>, <code>n</code> | Not affected by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code> }} ; Brief : ''Get the value of a single parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|value_of|parameter name}}</syntaxhighlight> Without modifiers this function is similar to writing <syntaxhighlight lang="wikitext" inline>{{{parameter name|}}}</syntaxhighlight>. With modifiers, however, it allows reaching parameters that would be unreachable without knowing their number in advance. For instance, writing <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|-2|0|value_of|1}}</syntaxhighlight> will expand to the value of the second-last sequential parameter, independently of how many parameters the template was called with. If no matching parameter is found this function expands to nothing. A header (<code>h</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the strings assigned to the key-value pair delimiter (<code>p</code>), the iteration delimiter (<code>i</code>), the last iteration delimiter (<code>l</code>) and the "serial-comma-like" last iteration delimiter (<code>s</code>) will be ignored. For instance, the {{interfn|If then show|en}} template could be rewritten as <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|setting|h/f/n|{{{3|}}}|{{{4|}}}|{{{2|}}}|value_of|1}}</syntaxhighlight> Simplifying, the following wikitext expands to the first parameter that is not empty: <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching||strict|squeezing|value_of|1}}</syntaxhighlight> Whereas the following wikitext expands to the first parameter that is not blank (i.e. neither empty nor containing only [[whitespace]]s) <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|squeezing|value_of|1}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>list</code> === {{Capsa tabellaria | titulus = Function <code>list</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: = Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>p</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code> }} ; Brief : ''List the template parameters (both their names and their values)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list}}</syntaxhighlight> This function does not take arguments. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which keys and values are sticked to each other. A header (<code>h</code>), a key-value pair delimiter (<code>p</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code>. For example, the following code <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f/n|'''Parameters passed:''' |); | (|)|'''No parameters were passed'''|list}}</syntaxhighlight> will generate an output similar to the following. : '''Parameters passed:''' Owlman (A giant owl-like creature); Beast of Bodmin (A large feline inhabiting Bodmin Moor); Morgawr (A sea serpent) {{vsep|1.5em|mundatio=nulla}} === <code>list_values</code> === {{Capsa tabellaria | titulus = Function <code>list_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list_values|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code>, <code>[[#value_of|value_of]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code>, <code>{{intermn|separated entries||en}}</code> }} ; Brief : ''List the values of the incoming parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list_values}}</syntaxhighlight> This function does not take arguments. The <code>[[#sequential|sequential]]</code> modifier often accompanies this function. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which values are sticked to each other. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code> – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, the following code <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/f/n|'''Values of parameters passed:''' |; |.|'''No parameters were passed'''|list_values}}</syntaxhighlight> will generate an output similar to the following. : '''Values of parameters passed:''' A giant owl-like creature; A large feline inhabiting Bodmin Moor; A sea serpent. This function covers and extends all the cases covered by {{intermn|Separated entries|main|en}}. For instance, the following two examples with “ + ” as delimiter and “ ... ” as conjunction produce a similar result: # <syntaxhighlight lang="wikitext" inline>{{#invoke:separated entries|main|separator=&#32;+&#32;|conjunction=&#32;...&#32;}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l| + | ... |list_values}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>list_maybe_with_names</code> === {{Capsa tabellaria | titulus = Function <code>list_maybe_with_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|list_maybe_with_names|code}})</span> | Num. of arguments: 0 | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code><!--, <code>[[#coins|coins]]</code>-->, <code>[[#unique_coins|unique_coins]]</code>, <code>{{intermn|separated entries||en}}</code> }} ; Brief : ''List the values of sequential parameters and the names and the values of non-sequential parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|list_maybe_with_names}}</syntaxhighlight> This function does not take arguments. It is a combination of <code>[[#list|list]]</code> and <code>[[#list_values|list_values]]</code>: if a parameter belongs to the parameter sequence only its value will be shown, otherwise both its name and its value will be shown. If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which keys and values are sticked to each other. A header (<code>h</code>), a key-value pair delimiter (<code>p</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code>. For example, the following code in <syntaxhighlight lang="wikitext" inline>{{My template}}</syntaxhighlight>, <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f/n|'''Parameters passed:''' |; |→|.|'''No parameters were passed'''|list_maybe_with_names}}</syntaxhighlight> when transcluded as <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three|four|foo=bar|hello=world}}</syntaxhighlight>, will generate an output similar to the following. : '''Parameters passed:''' one; two; three; four; hello→world; foo→bar. This function is particularly useful to mimic the natural transclusion of templates. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>coins</code> === {{Capsa tabellaria | titulus = Function <code>coins</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|coins|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code>, <code>[[#trimming_values|trimming_values]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#unique_coins|unique_coins]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code> }} ; Brief : ''Associate custom strings to possible parameter values and list the custom string when the associated value is present'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|coins|[first coin = value 1]|[second coin = value 2]|[...]|[last coin = value N]}}</syntaxhighlight> This function is identical to the <code>[[#unique_coins|unique_coins]]</code> function, except that it allows the repetition of identical flags. See there for more information. {{vsep|1.5em|mundatio=nulla}} --> === <code>unique_coins</code> === {{Capsa tabellaria | titulus = Function <code>unique_coins</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|unique_coins|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: = Yes | Often preceeded by: = <code>[[#sequential|sequential]]</code>, <code>[[#trimming_values|trimming_values]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <!--<code>[[#coins|coins]]</code>, --><code>[[#list_values|list_values]]</code>, <code>[[#value_of|value_of]]</code> }} ; Brief : ''Associate custom strings to possible parameter values and list the custom string when the associated value is present, but not more than once'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|unique_coins|[first coin = value 1]|[second coin = value 2]|[...]|[last coin = value N]}}</syntaxhighlight> This function is used to detect the existence of flag parameters. For this reason, it is often accompanied by the <code>[[#sequential|sequential]]</code> modifier (or, equivalently, by <code>...&#124;[[#excluding_non-numeric_names|excluding_non-numeric_names]]&#124;[[#clearing|clearing]]&#124;...</code>). A typical use case of this function is that of constructing [[URL]]s. For example, the following template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> checks for the <code>html</code>, <code>xml</code>, <code>comments</code> and <code>removenowiki</code> flags in order to append respectively the following strings to the final URL: <code>&amp;wpGenerateRawHtml=1</code>, <code>&amp;wpGenerateXml=1</code>, <code>&amp;wpRemoveComments=0</code>, <code>&amp;wpRemoveNowiki=1</code>. <syntaxhighlight lang="wikitext" line>{{#if:{{{input|}}} | <span class="plainlinks">[{{fullurl:Special:ExpandTemplates|wpInput={{urlencode:{{{input}}}|QUERY}}{{#if:{{{title|}}}|&wpContextTitle={{urlencode:{{{title}}}|QUERY}}}}{{#invoke:params|excluding_non-numeric_names|clearing|sequential|trimming_values|unique_coins | html = &wpGenerateRawHtml=1 | xml = &wpGenerateXml=1 | comments = &wpRemoveComments=0 | removenowiki = &wpRemoveNowiki=1 }}}} {{#if:{{{label|}}}|{{{label|}}}|Expand <code>{{{input}}}</code>}}]</span> | {{Error|Error: The {{para|input}} parameter is missing.}} }}</syntaxhighlight> And so, when transcluded as, <syntaxhighlight lang="wikitext">{{example template|comments|xml | input = Hello world {<nowiki />{#time:r{{!}}now}<nowiki />} }}</syntaxhighlight> it will generate the following output: : {{module:params/doc/en/examples/link to expanded template|comments|xml | input = Hello world {<nowiki />{#time:r{{!}}now}<nowiki />} }} A copy of the example above is available at &#123;&#123;[[Module:Params/doc/en/examples/link to expanded template|./doc/en/examples/link to expanded template]]&#125;&#125;. If you want to allow the repetition of identical flags, you can use <code>...&#124;[[#magic_for_each_value|magic_for_each_value]]&#124;[[:mw:Help:Extension:ParserFunctions#.23switch|#switch]]&#124;...</code>. Compare <syntaxhighlight lang="wikitext">{{#invoke:params| setting|i|//| sequential| magic_for_each_value|#switch | lemon = one | apple = two | pear = three | quince = four | grapefruit = five }}</syntaxhighlight> with <syntaxhighlight lang="wikitext">{{#invoke:params| setting|i|//| sequential| unique_coins | lemon = one | apple = two | pear = three | quince = four | grapefruit = five }}</syntaxhighlight> If the <code>[[#setting|setting]]</code> modifier was not placed earlier, this function will not add delimiters, but will return an indistinct blob of text in which values are sticked to each other. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via <code>[[#setting|setting]]</code> – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#magic_for_each|magic_for_each]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''For each parameter passed to the current template, call a custom template with at least two parameters (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...] }}</syntaxhighlight> Some functions are like shortcuts. The <code>X_for_each|F</code> functions are similar to <code>mapping_by_X(ing)|F|(names_and_values|)list_values</code>. The latter syntax (i.e. the modifier version) allows a <code>values_and_names</code> flag to invert the order from key-value to value-key. All unnamed arguments following the ''template name'' will be placed after the key-value pair. Named arguments will be passed verbatim. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. Calling a template for each key-value pair with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|call_for_each|foobar}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{foobar|$#|$@}}}}</syntaxhighlight> In the first example each key-value pair will be passed to the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template, while in the second example the <code>$#</code> and <code>$@</code> tokens will be expanded ''after'' the <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> template has been called. In most cases this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>invoke_for_each</code> === {{Capsa tabellaria | titulus = Function <code>invoke_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|invoke_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: = Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#magic_for_each|magic_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, invoke a custom module function with at least two arguments (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|invoke_for_each|module name|module function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each|call_for_each]]</code>, but invokes a module instead of calling a template. Invoking a module function for each key-value pair with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|invoke_for_each|foobar|main}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{#invoke:foobar|main|$#|$@}}}}</syntaxhighlight> In the first example each key-value pair will be passed to the <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main}}</syntaxhighlight> module function, while in the second example the <code>$#</code> and <code>$@</code> tokens will be expanded ''after'' the module function has been invoked. There might be cases in which this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>invoke_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>magic_for_each</code> === {{Capsa tabellaria | titulus = Function <code>magic_for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|magic_for_each|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, call a magic word with at least two arguments (key and value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|magic_for_each|parser function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each|call_for_each]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>magic_for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each|call_for_each]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''For each parameter passed to the current template, call a custom template with at least one parameter (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each_value|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> The <code>[[#sequential|sequential]]</code> modifier often accompanies this function. All unnamed arguments following the ''template name'' will be appended after the value parameter. Named arguments will be passed verbatim. A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, calling {{fn|tl|en}} with each parameter can be done by writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|i|, |call_for_each_value|tl}}</syntaxhighlight> This will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|i|, |for_each|{{tl|$@}}}}</syntaxhighlight> In the first example each value will be passed to the {{fn|tl|en}} template, while in the second example the <code>$@</code> token will be expanded ''after'' the {{fn|tl|en}} template has been called. Here this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>invoke_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>invoke_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|invoke_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code> }} ; Brief : ''For each parameter passed to the current template, invoke a custom module function with at least one argument (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|invoke_for_each_value|module name|module function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each_value|call_for_each_value]]</code>, but invokes a module instead of calling a template. Invoking a module function for each value with <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|invoke_for_each_value|foobar|main}}</syntaxhighlight> will be different from writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|for_each|{{#invoke:foobar|main|$@}}}}</syntaxhighlight> In the first example each value will be passed to the <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main}}</syntaxhighlight> module function, while in the second example the <code>$@</code> token will be expanded ''after'' the module function has been invoked. There might be cases in which this will make no difference, however there are several situations where it will lead to nonsensical results. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''module name'' and the ''function name'' will not be trimmed of their leading and trailing spaces. The <code>invoke_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>magic_for_each_value</code> === {{Capsa tabellaria | titulus = Function <code>magic_for_each_value</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|magic_for_each_value|code}})</span> | Num. of arguments: ''Ad libitum'' | [[#all_sorted|Sortable]]: Yes | Often preceeded by: <code>[[#sequential|sequential]]</code> | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#magic_for_each|magic_for_each]]</code> }} ; Brief : ''For each parameter passed to the current template, call a magic word with at least one argument (i.e. the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|magic_for_each_value|parser function|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...]}}</syntaxhighlight> Exactly like <code>[[#call_for_each_value|call_for_each_value]]</code>, but calls a [[:mw:Help:Magic words#Parser functions|parser function]] instead of a template. For example, if a template had the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|ih|&preloadparams%5b%5d{{=}}|magic_for_each_value|urlencode|QUERY}}</syntaxhighlight> and were transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|hello world|àèìòù|foobar}}</syntaxhighlight>, the <code><nowiki>{{</nowiki>[[:mw:Help:Magic words#URL data|urlencode]]:...|QUERY<nowiki>}}</nowiki></code> parser function would be called for each incoming parameter as first argument and with <code>QUERY</code> as second argument, and finally the returned text would be prefixed with <code>&preloadparams%5b%5d=</code>. This would generate, <pre>&preloadparams%5b%5d=hello+world&preloadparams%5b%5d=%C3%A0%C3%A8%C3%AC%C3%B2%C3%B9&preloadparams%5b%5d=foo+bar</pre> which can be used to allow the creation of pages [[:mw:Manual:Creating pages with preloaded text#Using parameters|with preloaded text and parameters]]. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the magic word will not be trimmed of their leading and trailing spaces. The <code>magic_for_each_value</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>call_for_each_group</code> === {{Capsa tabellaria | titulus = Function <code>call_for_each_group</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|call_for_each_group|code}})</span> | Num. of arguments: ''Ad libitum'' | Often preceeded by: <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>{{intermn|for loop||en}}</code>, <code>{{interfn|for loop|en}}</code> }} ; Brief : ''Call a custom template for each group of parameters that have the same numeric suffix'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|call_for_each_group|template name|[append 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param n=value n]|[...] }}</syntaxhighlight> In short, this function helps you manage cases like the following, in which a template needs to be transcluded with a variable number of parameters grouped by their identical numerical suffix: <syntaxhighlight lang="wikitext">{{My template | foo 1 = lorem | bar 1 = ipsum | hello 1 = dolor | foo 2 = sit | bar 2 = amet | hello 2 = dolor | foo 3 = consectetur | bar 3 = adipiscing | hello 3 = elit | ... }}</syntaxhighlight> The way it manages this situation is by repeatedly calling a custom template for each group of similar parameters. These will be stripped of their numeric id (i.e. the numeric suffix), which will be passed separetely as '''parameter zero''' (i.e. <code>&#123;&#123;&#123;0&#125;&#125;&#125;</code>) to the custom template. With the group of parameters that do not have a numeric suffix the id will be an empty string. If you are a module writer, you might recognize some distant similarities between this function and <code>[[Module:TableTools#affixNums|TableTools.affixNums]]</code>. A hyphen before the numeric suffix will be interpreted as a minus sign (and therefore the group id will be treated as a negative number). Numeric incoming parameters will be treated as if their prefix were an empty string (these can be captured using <code>&#123;&#123;&#123;&#125;&#125;&#125;</code> or <code>&#123;&#123;&#123;&#124;''fallback text''&#125;&#125;&#125;</code> in the callback template). Spaces between the prefix and the numeric suffix will be ignored (therefore writing {{para|foobar123}} will be identical to writing {{para|foobar&nbsp;123}} – in case of collisions one of the two values will be discarded). In the unlikely scenario that the prefix is itself a number (e.g. {{para|1 1}}, {{para|2 1}}, etc.), if this is <code>0</code> or a negative number it will be decreased by one unit in order to leave the parameter zero undisturbed (so <code>0</code> will become <code>-1</code>, <code>-1</code> will become <code>-2</code>, and so on – if needed, you can use <code>...|[[#purging|purging]]|0|1|...</code> in the callback template to renormalize these numbers). All unnamed arguments that follow the ''template name'' argument will appear as sequential parameters shared across all calls. Named arguments will be passed verbatim. Both named and unnamed arguments passed to this function will be given precedence in case of collisions. Numeric argument names below <code>1</code> will be decreased by one unit (i.e. <code>...|call_for_each_group&#124;example template&#124;0=Hello world&#124;...</code> will become {{para|-1|Hello world}} in the callback template – see above). A header (<code>h</code>), an iteration delimiter (<code>i</code>), a last iteration delimiter (<code>l</code>), a "[[:en:serial comma|serial-comma]]-like" last iteration delimiter (<code>s</code>), a footer (<code>f</code>), and a fallback text (<code>n</code>) can be declared via the <code>[[#setting|setting]]</code> modifier – the string assigned to the key-value pair delimiter (<code>p</code>) will be ignored. For example, if a template named <syntaxhighlight lang="wikitext" inline>{{foobar}}</syntaxhighlight> contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|reassorted|call_for_each_group|example template|hello|world|foo=bar}}</syntaxhighlight> writing <syntaxhighlight lang="wikitext">{{foobar | 1 = Lorem | 2 = ipsum | bicycle-1 = dolor | bicycle1 = sit | boat1 = amet | car2 = consectetur | bicycle2 = adipiscing | other = elit | sunscreen = vestibulum | = ultricies | foo1 = neque nisl }}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{example template | 0 = | 1 = hello | 2 = world | = ultricies | foo = bar | other = elit | sunscreen = vestibulum }}{{example template | 0 = -1 | 1 = hello | 2 = world | bicycle = dolor | foo = bar }}{{example template | 0 = 1 | 1 = hello | 2 = world | = Lorem | bicycle = sit | boat = amet | foo = bar }}{{example template | 0 = 2 | 1 = hello | 2 = world | = ipsum | bicycle = adipiscing | car = consectetur | foo = bar }}</syntaxhighlight> '''The modifiers <code>[[#sequential|sequential]]</code>, <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code> and <code>[[#reassorted|reassorted]]</code> will affect how groups of parameters will be iterated, not how single parameters will be grouped.''' Before calling this function you will likely want to reduce the list of parameters via one of the <code>with_*_matching</code> group of modifiers (for instance <code>...|with_name_matching|.%-%d+$|or|[^%-]%d+$|call_for_each_group|...</code> leaves only the parameters in which both the prefix and the numeric suffix are not empty strings). The <code>[[#reassorted|reassorted]]</code> modifier often accompanies this function. {{vsep|mundatio=nulla}} {{Anchor|Multilevel substitution warning}}{{Nota bene|Note:}} In writing templates, there is often the habit of signaling [[:mw:Help:Substitution#Multilevel substitution|multilevel substitutions]] using the <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> notation. This is a dangerous practice, because <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> means "write the parameter with an empty name, otherwise write <code>safesubst:</code>". Due to the fact that <code>call_for_each_group</code> '''can pass parameters with an empty name''', a callback template should never use <syntaxhighlight lang="wikitext" inline>{{{|safesubst:}}}</syntaxhighlight> to notate multilevel substitutions, but should use instead <syntaxhighlight lang="wikitext" inline>safesubst:<noinclude /></syntaxhighlight>. Not following this advice can lead to bugs that are hard to debug. {{vsep|mundatio=nulla}} At &#123;&#123;[[Module:Params/doc/en/examples/list of authors|./doc/en/examples/list of authors]]&#125;&#125; you can find an example of how to use this function to list authors the same way {{interfn|Cite book|en}} does. For instance, writing <syntaxhighlight lang="wikitext">{{module:params/doc/en/examples/list of authors | last1 = Playfair | first1 = I. S. O. | author-link1 = Ian Stanley Ord Playfair | last2 = Stitt | first2 = G. M. S. | last3 = Molony | first3 = C. J. C. | last4 = Toomer | first4 = S. E. }}</syntaxhighlight> will generate : {{module:params/doc/en/examples/list of authors | last1 = Playfair | first1 = I. S. O. | author-link1 = Ian Stanley Ord Playfair | last2 = Stitt | first2 = G. M. S. | last3 = Molony | first3 = C. J. C. | last4 = Toomer | first4 = S. E. }} See also &#123;&#123;[[Module:Params/doc/en/examples/tablebox|./doc/en/examples/tablebox]]&#125;&#125; for an example of how to exploit this function to create [[Template:Infobox|infoboxes]], and &#123;&#123;[[Module:Params/doc/en/examples/four cells per row table|./doc/en/examples/four cells per row table]]&#125;&#125; for an example of how to exploit this function to create n-column tables. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this function except the ''template name'' will not be trimmed of their leading and trailing spaces. The <code>call_for_each_group</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>for_each</code> === {{Capsa tabellaria | titulus = Function <code>for_each</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|for_each|code}})</span> | Num. of arguments: 1 | [[#all_sorted|Sortable]]: Yes | Relevant [[#setting|function-only variables]]: <code>h</code>, <code>i</code>, <code>l</code>, <code>s</code>, <code>f</code>, <code>n</code> | ; See also | : <code>[[#list|list]]</code>, <code>[[#list_values|list_values]]</code>, <code>[[#list_maybe_with_names|list_maybe_with_names]]</code>, <code>{{intermn|for nowiki||en}}</code>, <code>{{interfn|for nowiki|en}}</code>, <code>{{interfn|expand wikitext|en}}</code> }} ; Brief : ''For each parameter passed to the current template, expand all occurrences of <code>$#</code> and <code>$@</code> within a given text as key and value respectively'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|for_each|wikitext}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|for_each|Arg name: $#, Arg value: $@}}</syntaxhighlight> The text returned by this function is not expanded further (currently this module does not offer an <code>expand_for_each</code> function). If you need wikitext expansion, use either <code>[[#concat_and_call|concat_and_call]]</code> to propagate the incoming parameters altogether to the {{interfn|for nowiki|en}} template, or <code>[[#mapping_by_calling|mapping_by_calling]]</code> to propagate the incoming parameters one by one to {{interfn|expand wikitext|en}}. Example #1 (wikitext expanded via the {{interfn|for nowiki|en}} template – suggested): <syntaxhighlight lang="wikitext">{{#invoke:params|excluding_non-numeric_names|concat_and_call|for nowiki|<br />|<nowiki>Parameter value is "{{{1}}}"</nowiki>}}</syntaxhighlight> Example #2 (wikitext expanded via the {{interfn|expand wikitext|en}} template – less efficient but more flexible): <syntaxhighlight lang="wikitext">{{#invoke:params|setting|i|<br />|mapping_by_calling|expand wikitext|names_and_values_as|2|3| let|1|<nowiki>Parameter name is "{{{2}}}", parameter value is "{{{3}}}"</nowiki>| let|unstrip|yes| list_values}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The argument passed to this function will not be trimmed of its leading and trailing spaces. The <code>for_each</code> ''function name'' itself, instead, will be trimmed of its surrounding spaces. {{vsep|mundatio=nulla}} == Flag modifiers (piping functions) == The following are ''flag modifiers'', i.e. functions that add their action to the queue of actions that ''will be done last''. As modifiers, they expect to be piped instead of returning to the caller. Each of them can be piped to either another flag modifier or a [[#Modifiers (piping functions)|modifier]] or a [[#Functions|non-piping function]]. Unlike modifiers, the order in which flag modifiers appear has no consequences. The actions that flag do affects only functions, but do not affect modifiers. {{vsep|mundatio=nulla}} === <code>sequential</code> === {{Capsa tabellaria | titulus = Modifier <code>sequential</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|sequential|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> | ; See also | : <code>[[#non-sequential|non-sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : (In functions only, does not affect modifiers) Reduce the parameter list to the subgroup of consecutive parameters that follow {{para|1}} ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|count}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Its purpose is solely that of signaling to non-piping functions to iterate using Lua <code>ipairs()</code> instead of <code>pairs()</code>. Therefore it does not remove any parameter from the list (to do that, you will need to use <code>...&#124;[[#excluding_non-numeric_names|excluding_non-numeric_names]]&#124;[[#clearing|clearing]]&#124;...</code> instead). Unless there are many intermediate operations that repeatedly iterate through all parameters, simply flagging the parameter list as sequence-only is usually faster than actually removing non-sequential parameters. Using <code>sequential</code> together with <code>[[#non-sequential|non-sequential]]</code> will generate an error. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} Like <code>[[#non-sequential|non-sequential]]</code>, the <code>sequential</code> modifier permanently marks a query. For instance, writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|discarding|1|...}}</syntaxhighlight> will first mark the query as "sequential", then will discard the first element from the sequence (leaving all the others intact). And so, no matter how many other parameters will be present, nothing will be shown. {{vsep|1.5em|mundatio=nulla}} === <code>non-sequential</code> === {{Capsa tabellaria | titulus = Modifier <code>non-sequential</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|non-sequential|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> }} ; Brief : (In functions only, does not affect modifiers) Reduce the parameter list by discarding the subgroup of consecutive parameters that follow {{para|1}} ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|non-sequential|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|non-sequential|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Once flagged with <code>non-sequential</code>, the final function will iterate through the set of parameters that is [[:en:complement (set theory)|complementary]] to the one picked by <code>[[#sequential|sequential]]</code>. Using <code>non-sequential</code> together with <code>[[#sequential|sequential]]</code> will generate an error. The modifier, on the other hand, is compatible with both <code>[[#all_sorted|all_sorted]]</code> and <code>[[#reassorted|reassorted]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} Like <code>[[#sequential|sequential]]</code>, the <code>non-sequential</code> modifier permanently marks a query, and no matter what transformations will follow (see <code>[[#squeezing|squeezing]]</code>) the parameters' "sequence" will not be shown. {{vsep|1.5em|mundatio=nulla}} === <code>all_sorted</code> === {{Capsa tabellaria | titulus = Modifier <code>all_sorted</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|all_sorted|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code>, <code>[[#reassorted|reassorted]]</code> | Has no effects on: <code>[[#count|count]]</code>, <code>[[#value_of|value_of]]</code>, <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> | ; See also | : [[:en:Natural sort order|Natural sort order]], <code>[[#reassorted|reassorted]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code> }} ; Brief : ''(IN FUNCTIONS ONLY, DOES NOT AFFECT MODIFIERS) When the time will come, all parameters will be dispatched sorted: first the numeric ones in ascending order, then the rest in [[:en:Natural sort order|natural order]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|all_sorted|pipe function name}}</syntaxhighlight> {{Nota bene|Note:}} This modifier sorts the way ''functions'' iterate across ''all'' parameters based on ''their names''. If you want to sort ''sequential parameters'' based on ''their values'', see <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Normally only sequential parameters are dispatched sorted, whereas non-sequential ones are dispatched randomly. The <code>all_sorted</code> modifier ensures that nothing is left out of ([[:en:Natural sort order|natural]]) order. Attention must be paid to the fact that parameters whose name is a negative number will appear first. To avoid this the <code>[[#squeezing|squeezing]]</code> modifier can be used.<ref>To be precise, the order will not be strictly alphabetical, because this would imply that a template called with the following parameters <syntaxhighlight lang="wikitext" inline>{{foobar|-4=you|9=wanna|.=me?|11=marry|-8=do}}</syntaxhighlight> would see them reordered as follows: <syntaxhighlight lang="wikitext" inline>{{foobar|-8=do|-4=you|.=me?|9=wanna|11=marry}}</syntaxhighlight> (with the dot in the middle between negative and positive numbers). To avoid this, '''numbers are always displayed first''' (i.e. <syntaxhighlight lang="wikitext" inline>{{foobar|-8=do|-4=you|9=wanna|11=marry|.=me?}}</syntaxhighlight>).</ref> The <code>all_sorted</code> modifier only affects the way parameters are shown, but has no effects on functions that do not iterate or cannot impose an order, such as: * <code>[[#count|count]]</code> * <code>[[#value_of|value_of]]</code> * <code>[[#concat_and_call|concat_and_call]]</code> * <code>[[#concat_and_invoke|concat_and_invoke]]</code> * <code>[[#concat_and_magic|concat_and_magic]]</code> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>all_sorted</code> modifier cannot be used with functions that propagate several parameters together in a single call, like <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, and <code>[[#concat_and_magic|concat_and_magic]]</code>, because during a call the order of arguments is always lost. For the same reason, it is not possible to guess the order of named parameters a template was transcluded with. {{vsep|1.5em|mundatio=nulla}} === <code>reassorted</code> === {{Capsa tabellaria | titulus = Modifier <code>reassorted</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reassorted|code}})</span> | Num. of arguments: 0 | Repeatable: No | Conflicts with: <code>[[#sequential|sequential]]</code>, <code>[[#all_sorted|all_sorted]]</code> | Has no effects on: <code>[[#count|count]]</code>, <code>[[#value_of|value_of]]</code>, <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, <code>[[#concat_and_magic|concat_and_magic]]</code> | ; See also | : [[:en:Natural sort order|Natural sort order]], <code>[[#all_sorted|all_sorted]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code> }} ; Brief : ''(IN FUNCTIONS ONLY, DOES NOT AFFECT MODIFIERS) When the time will come, all parameters will be dispatched sorted: first non numeric ones in [[:en:Natural sort order|natural order]]'', then the numeric ones in ascending order ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reassorted|pipe function name}}</syntaxhighlight> This modifier is similar to <code>[[#all_sorted|all_sorted]]</code>, but numbers are iterated last (as in "bar, foo, hello, zebra, 1, 2, 3, …"). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>reassorted</code> modifier cannot be used with functions that propagate several parameters together in a single call, like <code>[[#concat_and_call|concat_and_call]]</code>, <code>[[#concat_and_invoke|concat_and_invoke]]</code>, and <code>[[#concat_and_magic|concat_and_magic]]</code>, because during a call the order of arguments is always lost. For the same reason, it is not possible to guess the order of named parameters a template was transcluded with. {{vsep|mundatio=nulla}} == Modifiers (piping functions) == The following are ''modifiers'', i.e. functions that expect to be piped instead of returning to the caller. Each of them can be piped to either another modifier or a [[#Flag modifiers (piping functions)|flag modifier]] or a [[#Functions|non-piping function]]. The actions that modifiers do are done sequentially, in the same order chosen during the invocation of this module. {{vsep|mundatio=nulla}} === <code>setting</code> === {{Capsa tabellaria | titulus = Modifier <code>setting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|setting|code}})</span> | Num. of arguments: 2–8 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>p</code> Key-value delimiter | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} }} ; Brief : ''Define glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|directives|...|pipe function name}}</syntaxhighlight> This modifier allows some internal variables to be set and later be used (currently only by functions). It takes a variable number of arguments, relying on the first argument to understand how many other arguments to read. A few examples will introduce it better than words: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|i|{{!}}|list_values}}</syntaxhighlight> *: ↳ Set the value of ''iteration delimiter'' to <code>|</code>, then list all values * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih|{{!}}|list_values}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, then list all values * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|list}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, set ''key-value pair delimiter'' to <code>=</code>, then list all parameters * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p/n|{{!}}|{{=}}|No parameters were passed|list}}</syntaxhighlight> *: ↳ Set the value of both ''header text'' and ''iteration delimiter'' to <code>|</code>, set ''key-value pair delimiter'' to <code>=</code>, set ''fallback text'' to <code>No parameters were passed</code>, then list all parameters The first argument is a slash-separated list of lists of slots to assign; one slot is referred by exactly one character and each list of slots maps exactly one argument. A slot indicates which internal variable to set. If more than one slot is aggregated within the same slash-separated list the same text will be assigned to more than one variable. The slots available are the following: {| class="wikitable" style="margin-left: auto; margin-right: auto;" |- ! Slots ! Variable ! Description |- | <code>p</code> | ''Key-value pair delimiter'' | The string of text that will be placed between each parameter name and its value; it is never inserted by functions that only iterate between values, or by functions that pass the key-value pairs to external calls. |- | <code>i</code> | ''Iteration delimiter'' | The string of text that will be placed between each iteration; it is never inserted unless there are two or more parameters to show when <code>l</code> is not given, or three or more parameters when <code>l</code> is given. |- | <code>l</code> | ''Last iteration delimiter'' | The string of text that will be placed between the second last and the last iteration; it is never inserted unless there are two or more parameters to show; if omitted it defaults to <code>i</code>. |- | <code>s</code> | ''"[[:en:serial comma|serial-comma]]-like" last iteration delimiter'' | The string of text that will be placed between the second last and the last iteration when there are three or more parameters to show; if omitted it defaults to <code>l</code>. |- | <code>h</code> | ''Header text'' | The string of text that will be placed before the iteration begins; it is never inserted if there are no parameters to show. |- | <code>f</code> | ''Footer text'' | The string of text that will be placed after the iteration is over; it is never inserted if there are no parameters to show. |- | <code>n</code> | ''Fallback text'' | The string of text that will be placed if there are no parameters to show. |} All space characters in the ''directives'' argument are discarded. Therefore writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|...}}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{#invoke:params|setting| i h / p |...}}</syntaxhighlight> In theory, instead of assigning different arguments at once (i.e. <syntaxhighlight lang="wikitext" inline>{{...|setting|ih/p|{{!}}|{{=}}|...}}</syntaxhighlight>), it is possible to write separate invocations of <code>setting</code> for each argument, as in <syntaxhighlight lang="wikitext" inline>{{...|setting|ih|{{!}}|setting|p|{{=}}...}}</syntaxhighlight>. This method however will be slightly less efficient. The <code>s</code> slot has been created with the [[:en:Serial comma|Oxford comma]] in mind. For instance, the following imaginary <syntaxhighlight lang="wikitext" inline>{{Foobar see also}}</syntaxhighlight> template adds a comma before the "and" conjunction when more than two page names are provided: <syntaxhighlight lang="wikitext">{{Hatnote|{{{altphrase|Foobar see also}}}: {{#if:{{{1|}}} | {{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l/s|, | and |, and |for_each|[[$@]]}} | {{Error|{{interfn|Foobar see also|en}} requires at least one page name}} }}}}</syntaxhighlight> You can find this example at &#123;&#123;[[Module:Params/doc/en/examples/Oxford comma|./doc/en/examples/Oxford comma]]&#125;&#125;. Thus, <syntaxhighlight lang="wikitext" inline>{{module:params/doc/en/examples/Oxford comma|Latin|English|German|Italian}}</syntaxhighlight> will generate {{module:params/doc/en/examples/Oxford comma|Latin|English|German|Italian}} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>setting</code> modifier name will be trimmed of its surrounding spaces. The ''directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>scoring</code> === {{Capsa tabellaria | titulus = Modifier <code>scoring</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|scoring|code}})</span> | Num. of arguments: 1–2 | Repeatable: Yes | ; See also | : <code>[[#count|count]]</code> }} ; Brief : ''Count the number of parameters wherewith a template was called and save the result into a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|scoring|new parameter name|[here]|pipe function name}}</syntaxhighlight> This is the modifier version of the <code>[[#count|count]]</code> function: instead of outputting the number of current parameters, the result will be saved into a new parameter (which will not be counted in the result). By default this new parameter will be placed '''in a new substack''', unless the <code>here</code> flag argument is specified, in which case the result will be saved in the current stack. Since <code>scoring</code> is a modifier, [[#Flag modifiers (piping functions)|flag modifiers]] like <code>[[#sequential|sequential]]</code> and <code>[[#non-sequential|non-sequential]]</code> won't affect the result. Example #1: Count the current parameters and save the result in a new substack: <syntaxhighlight lang="wikitex">{{#invoke:params| scoring|total| mapping_by_mixing|☑ $@| flushing| setting|i/p|<br />| → | list }}</syntaxhighlight> Example #2: Count the current parameters and save the result in the current stack: <syntaxhighlight lang="wikitex">{{#invoke:params| scoring|total|here| setting|i/p|<br />| → | list }}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>scoring</code> modifier name, the ''new parameter name'' argument, and the possible <code>here</code> flag will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>squeezing</code> === {{Capsa tabellaria | titulus = Modifier <code>squeezing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|squeezing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[Module:TableTools#compressSparseArray|TableTools.compressSparseArray]]</code> }} ; Brief : ''Rearrange all parameters that have numeric names to form a compact sequence starting from 1, keeping the same order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|squeezing|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|squeezing|sequential|setting|i/p|<br />|: |list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. If you are a module writer, you might recognize some similarities between this function and <code>[[Module:TableTools#compressSparseArray|TableTools.compressSparseArray]]</code>. The following three concatenations will lead to the same result of discarding all parameters with numeric names: # <syntaxhighlight lang="wikitext" inline>{{...|excluding_numeric_names|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|with_name_not_matching|^%-?%d+$|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|non-sequential|squeezing|...}}</syntaxhighlight> # <syntaxhighlight lang="wikitext" inline>{{...|squeezing|non-sequential|...}}</syntaxhighlight> The first solution is the most optimized one. Furthermore, in the last two solutions the numeric parameters are discarded just before the final function is invoked (sometimes this might be a wanted result). {{vsep|1.5em|mundatio=nulla}} === <code>filling_the_gaps</code> === {{Capsa tabellaria | titulus = Modifier <code>filling_the_gaps</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|filling_the_gaps|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#squeezing|squeezing]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : ''Assign an empty string to all undefined numeric parameters between 1 or a lower numeric parameter name provided and the maximum numeric parameter provided'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|filling_the_gaps|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|filling_the_gaps|sequential|setting|i/p|<br />|: |list}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Note that when all numeric parameters are lower than 1, the gap between 1 and the lowest numeric parameter will not be filled. The following table provides some examples. {| class="wikitable" style="margin-left: auto; margin-right: auto;" |+ Numeric parameters provided |- ! Before calling <code>filling_the_gaps</code> ! After calling <code>filling_the_gaps</code> |- | <code>&#124;1&#61;...</code> | <code>&#124;1&#61;...</code> |- | <code>&#124;2&#61;...</code> | <code>&#124;1&#61;</code>, <code>&#124;2&#61;...</code> |- | <code>&#124;6&#61;...</code>, <code>&#124;9&#61;...</code> | <code>&#124;1&#61;</code>, <code>&#124;2&#61;</code>, <code>&#124;3&#61;</code>, <code>&#124;4&#61;</code>, <code>&#124;5&#61;</code>, <code>&#124;6&#61;...</code>, <code>&#124;7&#61;</code>, <code>&#124;8&#61;</code>, <code>&#124;9&#61;...</code> |- | <code>&#124;-5&#61;...</code>, <code>&#124;-3&#61;...</code> | <code>&#124;-5&#61;...</code>, <code>&#124;-4&#61;</code>, <code>&#124;-3&#61;...</code> |- | <code>&#124;-5&#61;...</code>, <code>&#124;-3&#61;...</code>, <code>&#124;1&#61;...</code> | <code>&#124;-5&#61;...</code>, <code>&#124;-4&#61;</code>, <code>&#124;-3&#61;...</code>, <code>&#124;-2&#61;</code>, <code>&#124;-1&#61;</code>, <code>&#124;0&#61;</code>, <code>&#124;1&#61;...</code> |- | <code>&#124;-1&#61;...</code> | <code>&#124;-1&#61;...</code> |- | <code>&#124;-2&#61;...</code> | <code>&#124;-2&#61;...</code> |} {{Nota bene|Note:}} There is a safety limit of at most 1024 undefined parameters that can be filled using this modifier. {{vsep|1.5em|mundatio=nulla}} === <code>clearing</code> === {{Capsa tabellaria | titulus = Modifier <code>clearing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|clearing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code> }} ; Brief : ''Remove all numeric parameters that are not in the sequence'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|clearing|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Unlike <code>[[#sequential|sequential]]</code> – which affects only the way parameters are shown – this modifier actually removes all non-sequential numeric parameters, albeit leaves non-numeric parameters intact. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|clearing|setting|i/p|<br />|: |list}}</syntaxhighlight> If you want to remove also non-numeric parameters, add the <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code> modifier: <syntaxhighlight lang="wikitext">{{#invoke:params|clearing|excluding_non-numeric_names|setting|i/p|<br />|: |list}}</syntaxhighlight> If you want instead to remove sequential parameters and leave the rest, you have two possibilities. You can either use <code>&#123;&#123;...&#124;[[#cutting|cutting]]&#124;-1&#124;1&#124;...&#125;&#125;</code> when you want to shift the remaining numeric parameters accordingly: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|-1|1|setting|i/p|<br />|: |list}}</syntaxhighlight> Or you can use <code>&#123;&#123;...&#124;[[#entering_substack|entering_substack]]&#124;[[#clearing|clearing]]&#124;[[#detaching_substack|detaching_substack]]&#124;[[#dropping_substack|dropping_substack]]&#124;...&#125;&#125;</code> if you want the remaining non-sequential parameters to keep occupying the same position as before: <syntaxhighlight lang="wikitext">{{#invoke:params|entering_substack|clearing|detaching_substack|dropping_substack|setting|i/p|<br />|: |list}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>cutting</code> === {{Capsa tabellaria | titulus = Modifier <code>cutting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|cutting|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from the beginning and the end '''of the parameters' sequence''', shifting everything else accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|left trim|right trim|pipe function name}}</syntaxhighlight> The first argument indicates how many sequential parameters must be removed from the beginning of the parameter sequence, the second argument indicates how many sequential parameters must be removed from the end of the parameter list. If any of the two arguments contains a negative number its absolute value indicates what must be left ''on the opposite side'' – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-3|0|list}}</syntaxhighlight> indicates that the last three arguments must not be discarded. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|cutting|0|2|sequential|call_for_each_value|example template}}</syntaxhighlight> If the absolute value of the sum of the two arguments (left and right cut) is greater than the number of ''sequential'' parameters available, the behavior will be the same as if the sum had been equal to the number of sequential parameters available, both when this is a positive value and when it is a negative value (with opposite results). After the desired sequential parameters have been discarded, '''all''' other positive numeric parameters will be shifted accordingly. In some cases it might be necessary to concatenate more than one invocation of the <code>cutting</code> modifier. For instance, the following code prints the last unnamed parameter passed, but only if at least two parameters were passed: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|cutting|1|0|cutting|-1|0|list_values}}</syntaxhighlight> {{Nota bene|Note:|Suggestion:}} Although <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-1|1|...}}</syntaxhighlight> de facto gets rid of all sequential parameters, in most cases it is clearer and more idiomatic to write <syntaxhighlight lang="wikitext" inline>{{#invoke:params|non-sequential|...}}</syntaxhighlight> to obtain the same effect. The last method however cannot be used when it is important that sequential parameters are removed before a particular modifier is called, because <code>[[#non-sequential|non-sequential]]</code> does not take effect until the final function is invoked. Writing instead <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sequential|cutting|-1|1|...}}</syntaxhighlight> will leave zero arguments to show. {{vsep|1.5em|mundatio=nulla}} === <code>cropping</code> === {{Capsa tabellaria | titulus = Modifier <code>cropping</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|cropping|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from the beginning and the end of the '''list of numeric parameters''' (not only the sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cropping|left crop|right crop|pipe function name}}</syntaxhighlight> This modifier is very similar to <code>[[#cutting|cutting]]</code>, but instead of removing arguments from the extremities of the parameters' ''sequence'', arguments will be removed counting from the first and the last numeric arguments given (i.e. {{para|-1000|...}} and {{para|1000|...}} in the case of <syntaxhighlight lang="wikitext" inline>{{foobar|-1000=hello|1=my|1000=darling}}</syntaxhighlight>). If any of the two arguments contains a negative number its absolute value indicates what must be left ''on the opposite side''. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|cropping|2|1|sequential|call_for_each_value|example template}}</syntaxhighlight> For instance, when a template transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|-2=minus two|0=zero|1=one|2=two|3=three|19=nineteen|20=twenty}}</syntaxhighlight> uses the <code>[[#cutting|cutting]]</code> modifier with <code>2</code> and <code>1</code> as arguments, the following parameters are left: : -2: minus two : 0: zero : 16: nineteen : 17: twenty If instead the template were to use the <code>cropping</code> modifier with <code>2</code> and <code>1</code> as arguments, as in the example above, the following parameters would be left: : 0: zero : 1: one : 2: two : 3: three : 19: nineteen If the absolute value of the sum of the two arguments (left and right crop) is greater than the difference between the largest and the lowest ''numeric'' parameters available, the behavior will be the same as if the sum had been equal to the number of numeric parameters available, both when this is a positive value and when it is a negative value (with opposite results). When ''sequential'' parameters are present among the discarded parameters, all the remaining numeric parameters greater than zero will be shifted accordingly. {{vsep|1.5em|mundatio=nulla}} === <code>purging</code> === {{Capsa tabellaria | titulus = Modifier <code>purging</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|purging|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from any point of the list of numeric parameters, shifting everything accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|purging|start offset|length|pipe function name}}</syntaxhighlight> The first argument indicates at which point in the parameter list the removal must begin, the second argument indicates how many parameters must be discarded among it and what lies ''on the right side''. If the second argument contains zero or a negative number its absolute value indicates what must be left ''at the end of the right side'' of the list of numeric parameters – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|purging|5|0|list}}</syntaxhighlight> indicates that every numeric argument whose numeric name is greater than <code>4</code> must be removed. Example #1 (purge the first parameter): <syntaxhighlight lang="wikitext">{{#invoke:params|purging|1|1|call_for_each_value|example template}}</syntaxhighlight> Example #2 (purge the second, third, and four parameters): <syntaxhighlight lang="wikitext">{{#invoke:params|purging|2|3|call_for_each_value|example template}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>backpurging</code> === {{Capsa tabellaria | titulus = Modifier <code>backpurging</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|backpurging|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Remove zero or more parameters from any point of the list of numeric parameters, moving backwards and shifting everything accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|backpurging|start offset|length|pipe function name}}</syntaxhighlight> The first argument indicates at which point in the parameter list the removal must begin, the second argument indicates how many parameters must be discarded among it and what lies ''on the left side''. If the second argument contains zero or a negative number its absolute value indicates what must be left ''at the end of the left side'' of the list of numeric parameters – i.e. <syntaxhighlight lang="wikitext" inline>{{#invoke:params|backpurging|5|0|list}}</syntaxhighlight> indicates that every numeric argument whose numeric name is less than <code>6</code> must be removed. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|backpurging|3|1|call_for_each_value|example template}}</syntaxhighlight> The following code removes all parameters with negative and zero numeric names, then lists the rest: <syntaxhighlight lang="wikitext">{{#invoke:params|backpurging|0|0|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>shifting</code> === {{Capsa tabellaria | titulus = Modifier <code>shifting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|shifting|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Add a positive or a negative number to all numeric parameter names'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|shifting|addend|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|shifting|-2|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>shifting</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>reversing_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>reversing_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reversing_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones), making sure that the largest numeric parameter and {{para|1}} are swapped'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reversing_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|reversing_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> An example that uses this function is available at &#123;&#123;[[Module:Params/doc/en/examples/watchlist|./doc/en/examples/watchlist]]&#125;&#125;. {{Nota bene|Note:}} If negative parameters are present this function becomes non-invertible. This means that <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reversing_numeric_names|reversing_numeric_names|...}}</syntaxhighlight> will not restore the original parameter names, but will shift all numeric parameters so that what formerly was the smallest parameter name will now become {{para|1}}. <!-- {{vsep|1.5em|mundatio=nulla}} === <code>mirroring_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>mirroring_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mirroring_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mirroring_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier reverses the order of numeric parameters, making sure that the minimum and the maximum numeric parameters remain always the same (albeit inverted). Example: <syntaxhighlight lang="wikitext">{{#invoke:params|mirroring_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>pivoting_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>pivoting_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|pivoting_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Reverse the order of all numeric parameters (not only sequential ones), '''keeping the parameters' sequence always centered''''' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|pivoting_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier reverses the order of numeric parameters, making sure that those in the parameters' sequence always remain in the sequence. As a consequence, the values of the minimum and the maximum numeric parameters may change. If no sequence is present this modifier is identical to <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|pivoting_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>swapping_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>swapping_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|swapping_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#sorting_sequential_values|sorting_sequential_values]]</code>, <code>[[#splicing|splicing]]</code> }} ; Brief : ''Swap the lowest numeric parameter with the highest, the second lowest with the second highest, and so on, keeping the sequence in the same place albeit in reverse order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|swapping_numeric_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|swapping_numeric_names|for_each|[$#: $@]}}</syntaxhighlight> --> {{vsep|1.5em|mundatio=nulla}} === <code>sorting_sequential_values</code> === {{Capsa tabellaria | titulus = Modifier <code>sorting_sequential_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|sorting_sequential_values|code}})</span> | Num. of arguments: 0 or 1 | Repeatable: Yes | Often accompanied by: <code>[[#sequential|sequential]]</code> | ; See also | : <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code><!--, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>-->, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code> }} ; Brief : ''Sort the order of sequential values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|sorting_sequential_values|[criterion]|pipe function name}}</syntaxhighlight> {{Nota bene|Note:}} This modifier sorts ''sequential parameters'' based on ''their values''. If you want to sort the way ''functions'' iterate across ''all'' parameters based on ''their names'', see <code>[[#all_sorted|all_sorted]]</code>. This modifier optionally supports one argument to specify the sorting criterion. Currently the only possible criterions are <code>alphabetically</code>, for ordering sequential values in [[:en:alphabetical order|alphabetical sort order]], and <code>naturally</code>, for ordering sequential values in [[:en:Natural sort order|natural sort order]]. If this argument is omitted it defaults to <code>alphabetically</code>. Example (alphabetical sort order): <syntaxhighlight lang="wikitext">{{#invoke:params|sorting_sequential_values|for_each|[$#: $@]}}</syntaxhighlight> Example (natural sort order): <syntaxhighlight lang="wikitext">{{#invoke:params|sorting_sequential_values|naturally|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>splicing</code> === {{Capsa tabellaria | titulus = Modifier <code>splicing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|splicing|code}})</span> | Num. of arguments: ''Ad libitum'' (min. 2) | Repeatable: Yes | ; See also | : <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#sequential|sequential]]</code>, <code>[[#squeezing|squeezing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#shifting|shifting]]</code>, <code>[[#reversing_numeric_names|reversing_numeric_names]]</code>, <code>[[#mirroring_numeric_names|mirroring_numeric_names]]</code>, <code>[[#pivoting_numeric_names|pivoting_numeric_names]]</code>, <code>[[#swapping_numeric_names|swapping_numeric_names]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#all_sorted|all_sorted]]</code>, <code>[[#reassorted|reassorted]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Add or remove numeric parameters from any position, shifting the list of numeric parameters accordingly'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|splicing|[add to position]|position|increment|[number of elements to write]|...|pipe function name}}</syntaxhighlight> This modifier is able to resize the array of numeric parameters and write new parameters in any given position. It constitutes the only way this module has to insert numeric parameters and make space for them. For instance, if a template was called as <syntaxhighlight lang="wikitext" inline>{{My template|one|two|three}}</syntaxhighlight> and—independently of how many sequential parameters were passed—you want to insert <code>...&#124;hello&#124;world&#124;...</code> before the last sequential parameter (thus creating in this case <syntaxhighlight lang="wikitext" inline>{{My template|one|two|hello|world|three}}</syntaxhighlight>), <code>splicing</code> becomes the way to go (in this case <syntaxhighlight lang="wikitext" inline>...|splicing|add_last_of_sequence|0|2|2|hello|world|...</syntaxhighlight>). The ''add to position'' optional flag argument can either be <code>add_nothing</code>, <code>add_smallest_number</code>, <code>add_last_of_sequence</code>, or <code>add_largest_number</code>. When omitted it defaults to <code>add_nothing</code>. These numbers refer to the array as it was before being resized, and the chosen number will be summed to the ''position'' argument. The ''position'' and ''increment'' arguments can be zero or positive or negative numbers. When ''increment'' is positive the array of numeric parameters will be increased, when it is negative it will be decreased and one or more parameters will be removed. The optional argument ''number of elements to write'' indicates how many parameters must be written in the given position. It must be followed by an equal number of arguments. When omitted it defaults to <code>0</code>. If this number is larger than ''increment'' the pre-existing parameters in excess will be overwritten, if it is minor instead the missing parameters will be left undefined. For instance, imagining a template transcluded as, <syntaxhighlight lang="wikitext">{{My template|-3=minus three|-2=minus two|-1=minus one|0=zero|one|two|three|15=fifteen}}</syntaxhighlight> and extrapolating the following constants, * ''smallest number'' = −3 * ''last of sequence'' = 3 * ''largest number'' = 15 the following table summarizes how the incoming parameters are manipulated by <code>splicing</code>. {| class="wikitable" |- ! Use of <code>splicing</code> ! Computed ''position'' ! Result |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|4|2|2|hello|world|...</syntaxhighlight> | <code>4</code> + ''nothing'' = 4 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|4|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_last_of_sequence|1|2|2|hello|world|...</syntaxhighlight> | <code>1</code> + ''last of sequence'' = 4 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_last_of_sequence|1|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_smallest_number|-2|2|2|hello|world|...</syntaxhighlight> | <code>-2</code> + ''smallest number'' = −5 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_smallest_number|-2|2|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_largest_number|-2|100|2|hello|world|...</syntaxhighlight> | <code>-2</code> + ''largest number'' = 13 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_largest_number|-2|100|2|hello|world| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_nothing|1|0|1|hello|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_nothing|1|0|1|hello| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|add_nothing|1|-1|1|hello|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|add_nothing|1|-1|1|hello| setting|i/p|; |→| all_sorted| list }} |- style="vertical-align: top;" | <syntaxhighlight lang="wikitext" inline>...|splicing|1|-1|...</syntaxhighlight> or <syntaxhighlight lang="wikitext" inline>...|splicing|1|-1|0|...</syntaxhighlight> | <code>1</code> + ''nothing'' = 1 | {{#invoke:params|new| imposing|-3|minus three| imposing|-2|minus two| imposing|-1|minus one| imposing|0|zero| imposing|1|one| imposing|2|two| imposing|3|three| imposing|15|fifteen| splicing|1|-1| setting|i/p|; |→| all_sorted| list }} |} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The values of the parameters inserted will not be trimmed of their leading and trailing spaces. The arguments ''add to position'', ''position'', ''length'' and ''how many'' and the <code>splicing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>imposing</code> === {{Capsa tabellaria | titulus = Modifier <code>imposing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|imposing|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#providing|providing]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Impose a new value to a pre-existing parameter or create a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|imposing|name|value|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|imposing|foo|bar|imposing|hello|world|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The value assigned will not be trimmed of its leading and trailing spaces. The name of the parameter and the <code>imposing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>providing</code> === {{Capsa tabellaria | titulus = Modifier <code>providing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|providing|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#imposing|imposing]]</code>, <code>[[#discarding|discarding]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#filling_the_gaps|filling_the_gaps]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Assign a new value to a parameter, but only when missing, otherwise keep the previous value'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|providing|name|value|pipe function name}}</syntaxhighlight> Example: <syntaxhighlight lang="wikitext">{{#invoke:params|providing|foo|bar|providing|hello|world|for_each|[$#: $@]}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The value assigned will not be trimmed of its leading and trailing spaces. The name of the parameter and the <code>providing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>discarding</code> === {{Capsa tabellaria | titulus = Modifier <code>discarding</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|discarding|code}})</span> | Num. of arguments: 1 or 2 | Repeatable: Yes | ; See also | : <code>[[#clearing|clearing]]</code>, <code>[[#cutting|cutting]]</code>, <code>[[#cropping|cropping]]</code>, <code>[[#purging|purging]]</code>, <code>[[#backpurging|backpurging]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#new|new]]</code> }} ; Brief : ''Discard one or more numeric parameters or one non-numeric parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|discarding|name|[how many]|pipe function name}}</syntaxhighlight> If, and only if, the name of the parameter is numeric, it is possible to add a second argument to indicate how many contiguous parameters must be discarded starting from the first argument. If the discarded parameters is part of the parameters' sequence one or more holes will be created. To avoid creating holes, use <code>[[#purging|purging]]</code> or <code>[[#backpurging|backpurging]]</code> or <code>[[#shifting|shifting]]</code>. Example #1 (discard the parameter named {{para|hello}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|hello|for_each|[$#: $@]}}</syntaxhighlight> Example #2 (discard the parameter named {{para|5}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|5|for_each|[$#: $@]}}</syntaxhighlight> Example #3 (discard the parameters named {{para|1}}, {{para|2}}, {{para|3}} and {{para|4}}): <syntaxhighlight lang="wikitext">{{#invoke:params|discarding|1|4|for_each|[$#: $@]}}</syntaxhighlight> It is possible to use this modifier to check for unknown parameters: <syntaxhighlight lang="wikitext">{{#ifexpr:{{#invoke:params|discarding|hello|discarding|wind|count}} > 0 | {{Error|Error: The only parameters accepted are {{para|hello}} and {{para|wind}}.}} | Everything is good: do something }}</syntaxhighlight> You can find this example at &#123;&#123;[[Module:Params/doc/en/examples/check for unknown parameters|./doc/en/examples/check for unknown parameters]]&#125;&#125;. For instance, <syntaxhighlight lang="wikitext" inline>{{module:params/doc/en/examples/check for unknown parameters|hello=world|wind=surfing}}</syntaxhighlight> will generate : {{module:params/doc/en/examples/check for unknown parameters|hello=world|wind=surfing}} For simple cases like this, however, dedicated modules are available; you might want to have a look at: * {{intermn|Check for unknown parameters|check|en}} * {{intermn|Check for deprecated parameters|check|en}} * {{intermn|Check for clobbered parameters|check|en}} * {{intermn|Parameter validation|validateparams|en}} * {{intermn|TemplatePar|valid|en}} When used to discard single parameters, this modifier is equivalent to writing <code>...&#124;[[#with_name_not_matching|with_name_not_matching]]&#124;''parameter name''&#124;strict&#124;...</code>. However, due to the fact that <code>[[#with_name_not_matching|with_name_not_matching]]</code> needs to cross-check for the possible presence of <code>or</code> keywords, using <code>discarding</code> will be slightly more efficient. {{Nota bene|Note:}} All arguments passed to this modifier and the <code>discarding</code> modifier name itself will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>excluding_non-numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>excluding_non-numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|excluding_non-numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#clearing|clearing]]</code> }} ; Brief : ''Discard all non-numeric parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|excluding_non-numeric_names|pipe function name}}</syntaxhighlight> This modifier is only syntax sugar for <code>...&#124;with_name_matching&#124;^%-?%d+$&#124;...</code> (but using a slighly faster optimization). For the inverse modifier, see <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>. If you want to remove also non-sequential parameters, add the <code>[[#clearing|clearing]]</code> modifier to the pipeline (<code>...&#124;excluding_non-numeric_names&#124;clearing&#124;...</code>). {{vsep|1.5em|mundatio=nulla}} === <code>excluding_numeric_names</code> === {{Capsa tabellaria | titulus = Modifier <code>excluding_numeric_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|excluding_numeric_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code> }} ; Brief : ''Discard all numeric parameters (not only the sequential ones)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|excluding_numeric_names|pipe function name}}</syntaxhighlight> This modifier is only syntax sugar for <code>...&#124;with_name_not_matching&#124;^%-?%d+$&#124;...</code> (but using a slighly faster optimization). For the inverse modifier, see <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>with_name_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_name_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_name_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose name ''does not match '''any''''' of the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_name_matching|target 1|[plain flag 1]|[or]|[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a ''plain flag'' is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The ''plain flag'' can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. To express a [[:en:Disjunction (logical connective)|logical OR]] the <code>or</code> keyword is available. To express a [[:en:Logical conjunction|logical AND]] instead, concatenate more invocations of <code>with_name_matching</code>. {{vsep|mundatio=nulla}} For the sake of argument we will imagine that we are invoking <code>with_name_matching</code> from within the {{interfn|Infobox artery|en}} template, and this is being called with the following parameters: <syntaxhighlight lang="wikitext">{{Infobox artery | Name = Pulmonary artery | Latin = truncus pulmonalis, arteria pulmonalis | Image = {{Heart diagram 250px}} | Caption = Anterior (frontal) view of the opened heart. (Pulmonary artery upper right.) | Image2 = Alveoli diagram.png | Caption2 = Diagram of the alveoli with both cross-section and external view. | BranchFrom = [[right ventricle]] | BranchTo = | Vein = [[pulmonary vein]] | Precursor = truncus arteriosus | Supplies = }}</syntaxhighlight> {{vsep|mundatio=nulla}} Test cases: * List only the parameters whose names match against the <code>^Image</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Image|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image={{Heart diagram 250px}}|Image2=Alveoli diagram.png</nowiki> * List the parameters whose names match against both patterns <code>^Image</code> '''and''' <code>%d+$</code>: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Image|with_name_matching|%d+$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image2=Alveoli diagram.png</nowiki> * List the parameters whose names match against either the <code>^Name</code> '''or''' the <code>^Latin$</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|^Name$|or|^Latin$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Latin=truncus pulmonalis, arteria pulmonalis|Name=Pulmonary artery</nowiki> * List the parameters whose names match against either the <code>ma</code> plain string '''or''' the <code>me$</code> pattern: *: ↳ <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_matching|ma|plain|or|me$|list}}</syntaxhighlight> *:: ↳ <nowiki>|Image={{Heart diagram 250px}}|Name=Pulmonary artery|Image2=Alveoli diagram.png</nowiki> {{vsep|mundatio=nulla}} Using <code>with_name_matching</code> it is easy to emulate the behaviour of [[:en:Module:Enumerate]] (or similar modules). For instance, the following examples creates a bullet list of all the parameters passed of type <code>&#124;foobar1</code>, <code>&#124;foobar2</code> … <code>&#124;foobarN</code>: <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|with_name_matching|^foobar%d+$|setting|ih| * |list_values}}</syntaxhighlight> It is possible to see this example live at &#123;&#123;[[Module:Params/doc/en/examples/enumerate|./doc/en/examples/enumerate]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_name_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_name_not_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_name_not_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_name_not_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#excluding_numeric_names|excluding_numeric_names]]</code>, <code>[[#excluding_non-numeric_names|excluding_non-numeric_names]]</code>,<code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose name ''matches '''all''''' the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_name_not_matching|target 1|[plain flag 1]|[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. To express a [[:en:Disjunction (logical connective)|logical OR]] the <code>or</code> keyword is available. To express a [[:en:Logical conjunction|logical AND]] instead, concatenate more invocations of <code>with_name_not_matching</code>. {{vsep|mundatio=nulla}} For the sake of argument we will imagine that we are invoking <code>with_name_not_matching</code> from within the {{interfn|Infobox artery|en}} template, and this is being transcluded using the same parameters that we had imagined in the previous example at <code>[[#with_name_matching|with_name_matching]]</code>: * List only the parameters whose names do not match against the <code>a</code> pattern: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Supplies=|Vein=pulmonary vein</nowiki> * List the parameters whose names do not match against the <code>a</code> plain string '''and''' do not match against the <code>l</code> plain string either: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|plain|with_name_not_matching|l|plain|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Vein=pulmonary vein</nowiki> * List the parameters whose names do not match against either the <code>a</code> plain string '''or''' the <code>n</code> plain string: *: <syntaxhighlight lang="wikitext" inline>{{#invoke:params|setting|ih/p|{{!}}|{{=}}|with_name_not_matching|a|plain|or|n|plain|list}}</syntaxhighlight> *:: ↳ <nowiki>|Precursor=truncus arteriosus|Supplies=|Image={{Heart diagram 250px}}|Name=Pulmonary artery|Image2=Alveoli diagram.png|Vein=pulmonary vein</nowiki> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} For the sake of efficiency, please don't use this modifier with the <code>strict</code> flag unless accompanied by <code>or</code>, use <code>[[#discarding|discarding]]</code> instead! {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_name_not_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_value_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_value_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_value_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_not_matching|with_value_not_matching]]</code> }} ; Brief : ''Discard all parameters whose value ''does not match '''any''''' of the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_value_matching|target 1|[plain flag 1]|[or]|[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Exactly like <code>[[#with_name_matching|with_name_matching]]</code>, but applied to parameter values instead of names. Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_matching|banana|count}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_value_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>with_value_not_matching</code> === {{Capsa tabellaria | titulus = Modifier <code>with_value_not_matching</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|with_value_not_matching|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#with_name_matching|with_name_matching]]</code>, <code>[[#with_name_not_matching|with_name_not_matching]]</code>, <code>[[#with_value_matching|with_value_matching]]</code> }} ; Brief : ''Discard all parameters whose value ''matches '''all''''' the given patterns'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|with_value_not_matching|target 1|[plain flag 1]|[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain flag N]|pipe function name}}</syntaxhighlight> Exactly like <code>[[#with_name_not_matching|with_name_not_matching]]</code>, but applied to parameter values instead of names. Internally this modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.find|string.find()]]</code> function to find whether parameter names match against given patterns; therefore, unless a plain flag is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The plain flag can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. For instance, before calling <code>[[#list|list]]</code>, the following code will get rid of all blank parameters (i.e. parameters whose values contain only zero or more spaces): <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|setting|hi/p|{{!}}|{{=}}|list}}</syntaxhighlight> A typical use case of this modifier is that of purging all empty incoming parameters before calling another template, especially when this [[:en:Help:Conditional expressions#Checking for template parameters|distinguishes between empty and undefined parameters]]. <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_not_matching|^%s*$|concat_and_call|my template}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, and the <code>with_value_not_matching</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>trimming_values</code> === {{Capsa tabellaria | titulus = Modifier <code>trimming_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|trimming_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes }} ; Brief : ''Remove leading and trailing spaces from values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|trimming_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. Most modifiers are order-dependent, therefore placing <code>trimming_values</code> in different positions can generate different results. For instance, imagining our <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> being called with the following spaced arguments: <syntaxhighlight lang="wikitext" inline>{{example template| wanna | be | my | friend | ? }}</syntaxhighlight>. If <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|with_value_matching|%s+$|trimming_values|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> the following text would be printed: <code>1=wanna|2=be|3=my|4=friend|5=?</code>. But if instead it contained the following code, <syntaxhighlight lang="wikitext">{{#invoke:params|trimming_values|with_value_matching|%s+$|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> no arguments would be shown. Order affects also performance, and how many values will be trimmed of their leading and trailing spaces will depend on where <code>trimming_values</code> is placed. For instance, if a template were invoked with 50 parameters and its code contained <syntaxhighlight lang="wikitext" inline>{{#invoke:params|trimming_values|cutting|-1|0|list}}</syntaxhighlight>, first all its values would be trimmed of leading and trailing blank spaces and then its first 49 parameters would be discarded. On the other hand, writing <syntaxhighlight lang="wikitext" inline>{{#invoke:params|cutting|-1|0|trimming_values|list}}</syntaxhighlight> would first discard 49 parameters and then trim the only value left, resulting in a more efficient code. As a general rule, placing <code>trimming_values</code> as the last modifier is usually the best choice. In most cases placing <code>trimming_values</code> together with <code>non-sequential</code> will result in an empty call with no effects, because non-sequential parameters are normally stripped of their leading and trailing spaces by default – this however depends on the caller, and if the current template is being called by a module it is in theory possible in specific conditions for named parameters to retain their leading and trailing spaces (namely in non-sequential numeric parameters). Using <code>trimming_values</code> makes this module behave like other Wikipedia modules behave. For example, if we wanted to emulate {{intermn|Separated entries|main|en}}, writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i|XXXX|list_values}}</syntaxhighlight> will be equivalent to writing, <syntaxhighlight lang="wikitext">{{#invoke:separated entries|main|separator=XXXX}}</syntaxhighlight> whereas writing <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|trimming_values|with_value_not_matching||strict|squeezing|setting|i/l|XXXX|YYYY|list_values}}</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">{{#invoke:separated entries|main|separator=XXXX|conjunction=YYYY}}</syntaxhighlight> The &#123;&#123;[[Module:Params/doc/en/examples/trim and call|./doc/en/examples/trim and call]]&#125;&#125; example template shows how to call any arbitrary template trimming all parameters beforehand. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_to_lowercase</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_lowercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_lowercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter values to lower case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_lowercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter values to lower [[:en:Letter case|case]]. It is identical to writing <code>...&#124;[[#mapping_by_magic|mapping_by_magic]]&#124;[[:mw:Help:Magic words#lc|lc]]&#124;...</code>, but without the burden of calling a parser function. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_to_uppercase</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_uppercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_uppercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter values to upper case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_uppercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter values to upper [[:en:Letter case|case]]. It is identical to writing <code>...&#124;[[#mapping_by_magic|mapping_by_magic]]&#124;[[:mw:Help:Magic words#uc|uc]]&#124;...</code>, but without the burden of calling a parser function. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#call_for_each|call_for_each]]</code>, <code>[[#call_for_each_value|call_for_each_value]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the expansion of a given template repeatedly called with one parameter (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|template name|[call style]|[let]|[...]|[number of additional parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by another template. The latter will be repeatedly called with at least one parameter as first sequential parameter: the parameter's value. It is possible to pass the parameter's value as a different parameter, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''template name'' (see below). If the ''call style flag'' or (if omitted) the ''template name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the mapping template. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''template name'' is followed by a number, this will be parsed as the amount of positional parameters to add. '''These will always follow''' the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the parameters assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_calling|foobar|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{foobar|VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_calling|foobar|names_and_values|let|rice|nope|let|curry|lots!|2|hello|world|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{foobar|NAME|VALUE|hello|world|rice=nope|curry=lots!}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). Possible ''call style flags'' are: {| class="wikitable" |- ! ''Call style flag'' ! Example ! Corresponding call |- | <code>names_and_values</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_and_values|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|NAME|VALUE|hello|world|foo=bar}}</syntaxhighlight> |- | <code>values_and_names</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_and_names|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|VALUE|NAME|hello|world|foo=bar}}</syntaxhighlight> |- | <code>names_only</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_only|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|NAME|hello|world|foo=bar}}</syntaxhighlight> |- | <code>values_only</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_only|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|VALUE|hello|world|foo=bar}}</syntaxhighlight> |- | <code>names_and_values_as&#124;...&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_and_values_as|my_name|my_value|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_name=NAME|my_value=VALUE|foo=bar}}</syntaxhighlight> |- | <code>names_only_as&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|names_only_as|my_name|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_name=NAME|foo=bar}}</syntaxhighlight> |- | <code>values_only_as&#124;...</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|values_only_as|my_value|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|my_value=VALUE|foo=bar}}</syntaxhighlight> |- | <code>blindly</code> | <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_calling|example template|blindly|let|foo|bar|2|hello|world|setting|i/p|<br />| → |list}}</syntaxhighlight> | <syntaxhighlight lang="wikitext" inline>{{example template|hello|world|foo=bar}}</syntaxhighlight> |} If the ''call style flags'' argument is omitted it defaults to <code>values_only</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_calling</code> modifier name itself, the ''template name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional parameters will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_invoking|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#invoke_for_each|invoke_for_each]]</code>, <code>[[#invoke_for_each_value|invoke_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the text returned by a given module function repeatedly invoked with at least one argument (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_invoking|module name|function name|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by a custom module function. The latter will be repeatedly called with at least one argument as first sequential argument: the parameter's value. It is possible to pass the parameter's value as a different argument, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''function name'' (see <code>[[#mapping_by_calling|mapping_by_calling]]</code> for the list of possible flags). If omitted, the ''call style flags'' argument defaults to <code>values_only</code>. If the ''call style flag'' or (if omitted) the ''function name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the mapping module function. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''function name'' is followed by a number, this will be parsed as the amount of positional parameters to add. These will always follow the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the arguments assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_invoking|foobar|main|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main|VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_invoking|foobar|main|names_and_values|let|rice|nope|let|curry|lots!|2|hello|world|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{#invoke:foobar|main|NAME|VALUE|hello|world|rice=nope|curry=lots!}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_invoking</code> modifier name itself, the ''module name'', the ''function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#magic_for_each|magic_for_each]]</code>, <code>[[#magic_for_each_value|magic_for_each_value]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing their content with the expansion of a given parser function repeatedly called with at least one argument (the parameter's value)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_magic|parser function|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the text returned by a [[:mw:Help:Magic words#Parser functions|parser function]]. The latter will be repeatedly called with at least one argument as first sequential argument: the parameter's value. It is possible to pass the parameter's value as a different argument, or pass the parameter's name as well, by specifying a ''call style flag'' immediately after the ''parser function name'' (see <code>[[#mapping_by_calling|mapping_by_calling]]</code> for the list of possible flags). If omitted, the ''call style flags'' argument defaults to <code>values_only</code>. If the ''call style flag'' or (if omitted) the ''template name'' is followed by one or more groups of three arguments led by the <code>let</code> keyword (i.e. <code>let&#124;name&#124;value</code>), these will be passed to the parser function. If the last group of three arguments or (if omitted) the ''call style flag'' or (if omitted) the ''template name'' is followed by a number, this will be parsed as the amount of positional arguments to add. These will always follow the current parameter's name and/or value if any of the latter are passed using a numeric name greater than zero. In case of collisions, the arguments assigned via the <code>let</code> keyword will be given precedence over everything else. For instance, before listing all parameters, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_magic|uc|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will replace each value with the expansion of <syntaxhighlight lang="wikitext" inline>{{uc:VALUE}}</syntaxhighlight> (where <code>VALUE</code> indicates each different value). On the other hand, <syntaxhighlight lang="wikitext">{{#invoke:params|mapping_by_magic|plural|names_and_values|1|They are many|setting|i/p|{{!}}|{{=}}|list}}</syntaxhighlight> will do the same, but using the expansion of <syntaxhighlight lang="wikitext" inline>{{plural:NAME|VALUE|They are many}}</syntaxhighlight> (where <code>NAME</code> and <code>VALUE</code> indicate each different name and value). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>mapping_by_magic</code> modifier name itself, the parser function's name, the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_replacing</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_replacing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_replacing|code}})</span> | Num. of arguments: 2–4 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values performing [[:en:String operations#String substitution|string substitutions]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_replacing|target|replace|[count]|[plain flag]|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the result of a string substitution. Its syntax is very simlar to {{intermn|string|replace|en}}. Internally the modifier uses Lua's <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> function to perform substitutions; therefore, unless a ''plain flag'' is set, please use the same syntax of [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]]. The ''plain flag'' can be either <code>plain</code> or <code>strict</code> or omitted. When omitted it is assumed that the target string is a Lua pattern. The difference between <code>plain</code> and <code>strict</code> is that the latter also requires that the lengths match (this happens only when the two strings are 100% identical). In <code>strict</code> mode the ''replace'' argument will not accept directives (e.g. <code>%0</code>, <code>%1</code>, etc.). In order to facilitate wikitext scripting in the ''plain flag'' argument, the <code>pattern</code> keyword is available too, equivalent to omitting the argument. The ''count'' argument prescribes how many substitutions will be performed at most ''within each parameter'' (it does not count how many parameters will be modified). If blank or omitted, all matches found will be substituted. This modifier uses <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> for performance reasons; if you need to use <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> instead, you will need to invoke the <code>[[Module:String#replace|replace]]</code> function from [[Module:String]] via <code>...&#124;[[#mapping_by_invoking|mapping_by_invoking]]&#124;[[Module:String|string]]&#124;[[Module:String#replace|replace]]&#124;...</code>. The following table shows examples of equivalent instructions. Please be aware that invoking <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> can be much slower. {| class="wikitable" |- ! <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> ! <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> (via [[Module:String]]) |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;false&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;count&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;false&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;plain&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;2&#124;target&#124;replace&#124;...</code><br />or, equivalently,<br /><code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;true&#124;...</code> |- | <code>...&#124;mapping_by_replacing&#124;target&#124;replace&#124;count&#124;plain&#124;...</code> | <code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;3&#124;target&#124;replace&#124;count&#124;...</code><br />or, equivalently,<br /><code>...&#124;mapping_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;true&#124;...</code> |} There is not a corresponding translation for the <code>strict</code> flag in [[Module:String]]. However, as it goes with the <code>plain</code> flag, in that case you won't need <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> in the first place. For example, <syntaxhighlight lang="wikitext">...|mapping_by_renaming|foo|bar|1|...</syntaxhighlight> will be equivalent to writing <syntaxhighlight lang="wikitext">...|mapping_by_invoking|string|replace|4|foo|bar|1|false|...</syntaxhighlight> The first syntax, however, will be less computationally expensive. At &#123;&#123;[[Module:Params/doc/en/examples/informal tablebox|./doc/en/examples/informal tablebox]]&#125;&#125; you can find an example on how to exploit this function to create "informal" [[:en:Template:Infobox|infoboxes]]. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' and ''replace'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, the ''count'' argument, and the <code>mapping_by_replacing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mapping_by_mixing</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_by_mixing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_by_mixing|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values replacing their current values with the expansion of a custom string containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_by_mixing|mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the expansion of a custom string that expects the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter values in quotes <syntaxhighlight lang="wikitext">...|mapping_by_mixing|"$@"|...</syntaxhighlight> whereas the following code will replace all values with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|mapping_by_mixing|[$#::$@]|...</syntaxhighlight> <!-- If you need to map all parameters exactly matching their names, please use <code>[[#mapping_to_names|mapping_to_names]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The <code>mapping_by_mixing</code> modifier name itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>mapping_to_names</code> === {{Capsa tabellaria | titulus = Modifier <code>mapping_to_names</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mapping_to_names|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#renaming_to_values|renaming_to_values]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code>, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code> }} ; Brief : ''[[:en:Map (higher-order function)|Map]] all parameter values, replacing the latter with their parameter name'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mapping_to_names|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. After calling this modifier, all parameters will have their value identical to their name. It is a shortcut for <code>...&#124;[[#mapping_by_mixing|mapping_by_mixing]]&#124;$#&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>mapping_to_names</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>renaming_to_lowercase</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_lowercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_lowercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter names to lower case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_lowercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter names to lower [[Letter case|case]]. It is identical to writing <code>...&#124;[[#renaming_by_magic|renaming_by_magic]]&#124;[[:mw:Help:Magic words#lc|lc]]&#124;...</code>, but without the burden of calling a parser function. {{Nota bene|Note:}} In case of collisions between identical names, only one parameter, randomly chosen, will be left for a given name. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_to_uppercase</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_uppercase</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_uppercase|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Convert all parameter names to upper case'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_uppercase|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier converts all parameter names to upper [[Letter case|case]]. It is identical to writing <code>...&#124;[[#renaming_by_magic|renaming_by_magic]]&#124;[[:mw:Help:Magic words#uc|uc]]&#124;...</code>, but without the burden of calling a parser function. {{Nota bene|Note:}} In case of collisions between identical names, only one parameter, randomly chosen, will be left for a given name. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_to_sequence</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_sequence</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_sequence|code}})</span> | Num. of arguments: 0–1 (variable) | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameter names using sequential integers and possibly following a sort order'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_sequence|[sort order]|pipe function name}}</syntaxhighlight> This modifier renames all parameter names using increasing sequential integers, possibly following a given sort order. The ''sort order'' optional flag specifies what sort order must be followed. Possible values are <code>alphabetically</code>, <code>naturally</code> (for [[:en:Natural sort order|natural sort order]]) and <code>without_sorting</code>. When omitted it defaults to <code>without_sorting</code>. '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence|naturally| setting|i/p|<br />|: | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence|naturally| setting|i/p|<br />|: | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence| setting|i/p|<br />|: | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|zebra|window| imposing|foo|bar| imposing|hello|world| renaming_to_sequence| setting|i/p|<br />|: | list }} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>renaming_to_sequence</code> modifier name and the ''sort order'' argument will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the expansion of a given template repeatedly called with at least one parameter (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_calling|template name|[call style]|[let]|[...]|[number of additional parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_calling|mapping_by_calling]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses {{interfn|2x|en}} to rename all incoming parameters by doubling their names: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|renaming_by_calling|2x|list}}</syntaxhighlight> Same, but adding a hyphen in between: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|renaming_by_calling|2x|1|-|list}}</syntaxhighlight> The following example calls the {{Fn|P1}} template to rename all parameters using their value as their new name: <syntaxhighlight lang="wikitext">{{#invoke:params|renaming_by_calling|P1|values_only|for_each|[$#: $@]}}</syntaxhighlight> This modifier can be particularly useful for sanitizing parameter names (e.g. collapsing several spaces into single spaces, changing the [[:en:Letter case|letter case]], and so on). {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_calling</code> modifier name itself, the ''template name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_invoking|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a given module function repeatedly called with at least one argument (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_invoking|module name|function name|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses {{intermn|string|rep|en}} to rename all parameters of type {{para|a}}, {{para|b}}, … {{para|z}} into {{para|aaa}}, {{para|bbb}} … {{para|zzz}}: <syntaxhighlight lang="wikitext">{{#invoke:params|setting|h/i/p/f|[|][|: |]|with_name_matching|^%a$|renaming_by_invoking|string|rep|1|3|list}}</syntaxhighlight> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_invoking</code> modifier name itself, the ''module name'', the ''function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_magic|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a given parser function repeatedly called with at least one argument (the parameter's former name)'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_magic|parser function|[call style]|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_magic|mapping_by_magic]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped. Here, if omitted, the ''call style flags'' argument defaults to <code>names_only</code>. For instance, the following example uses &#123;&#123;[[:mw:Special:MyLanguage/expr##expr|#expr]]&#125;&#125; to transform all numeric parameters into even numbers (you can replace the expression <code>%0 * 2</code> with any other expression): <syntaxhighlight lang="wikitext">{{#invoke:params|all_sorted|excluding_non-numeric_names|renaming_by_replacing|^.*$|%0 * 2|1|renaming_by_magic|#expr|setting|h/i/p/f|[|][|: |]|list}}</syntaxhighlight> An example that uses this function with the {{mwl|REVISIONTIMESTAMP}} magic word is available at &#123;&#123;[[Module:Params/doc/en/examples/watchlist|./doc/en/examples/watchlist]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>renaming_by_magic</code> modifier name itself, the ''parser function name'', the ''call style flag'', the <code>let</code> keyword, the passed parameter names, and the number of additional arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_replacing</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_replacing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_replacing|code}})</span> | Num. of arguments: 2–4 | Repeatable: Yes | ; See also | : <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values]]</code> }} ; Brief : ''Rename all parameters, replacing their former names with the text returned by a [[:en:String operations#String substitution|string substitutions]]'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_replacing|target|replace|[count]|[plain flag]|pipe function name}}</syntaxhighlight> This modifier works similarly to <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, but instead of replacing parameters' values '''it renames the parameters themselves'''. Care must be used knowing that if a new name collides with another new name one of the two parameters will be removed without knowing which one. New names and old names do not create collisions. If a name is returned identical it will be considered as "unchanged" and in case of conflicts the renamed one will prevail. Possible leading and trailing spaces in the new names are always stripped (however they are not stripped while searching for the name to replace). Since there can be only one parameter name that matches exactly a literal string, when used with the <code>strict</code> flag this modifier directly accesses the requested key without looping through the entire list of parameters (so it will be much faster). For instance, the following example renames all parameters of type {{para|arg1}}, {{para|arg2}}, … {{para|argN}} into {{para|1}}, {{para|2}} … {{para|N}}, thus creating a novel sequence: <syntaxhighlight lang="wikitext">{{#invoke:params|sequential|setting|h/i/p/f|[|][|: |]|with_name_matching|^arg%d+$|renaming_by_replacing|^arg(%d+)$|%1|1|list}}</syntaxhighlight> This modifier can be particularly useful for sanitizing parameter names (e.g. collapsing several spaces into single spaces, changing the [[:en:Letter case|letter case]], and so on). For performance reasons this modifier uses <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code>; if you need to use <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> instead, you will need to invoke the <code>[[Module:String#replace|replace]]</code> function from [[Module:String]] via <code>...&#124;[[#renaming_by_invoking|renaming_by_invoking]]&#124;[[Module:String|string]]&#124;[[Module:String#replace|replace]]&#124;...</code>. The following table shows examples of equivalent instructions. Please be aware that invoking <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> can be much slower. {| class="wikitable" |- ! <code>[[:mw:Extension:Scribunto/Lua reference manual#string.gsub|string.gsub()]]</code> ! <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> (via [[Module:String]]) |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;false&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;count&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;false&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;plain&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;2&#124;target&#124;replace&#124;...</code><br />or, equivalently,<br /><code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;&#124;true&#124;...</code> |- | <code>...&#124;renaming_by_replacing&#124;target&#124;replace&#124;count&#124;plain&#124;...</code> | <code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;3&#124;target&#124;replace&#124;count&#124;...</code><br />or, equivalently,<br /><code>...&#124;renaming_by_invoking&#124;string&#124;replace&#124;4&#124;target&#124;replace&#124;count&#124;true&#124;...</code> |} There is not a corresponding translation for the <code>strict</code> flag in [[Module:String]]. However, as it goes with the <code>plain</code> flag, in that case you won't need <code>[[:mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub|mw.ustring.gsub()]]</code> in the first place. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''target'' and ''replace'' arguments passed to this modifier will not be trimmed of their leading and trailing spaces. The <code>or</code>, <code>plain</code>, <code>strict</code> and <code>pattern</code> keywords, the ''count'' argument, and the <code>mapping_by_replacing</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} === <code>renaming_by_mixing</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_by_mixing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_by_mixing|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''Rename all parameters, replacing their former names with the expansion of a custom string containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_by_mixing|mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes the content of the parameters the current template is being called with, replacing each of them with the expansion of a custom string that expects the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter names in quotes <syntaxhighlight lang="wikitext">...|renaming_by_mixing|"$#"|...</syntaxhighlight> whereas the following code will replace all parameter names with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|renaming_by_mixing|[$#::$@]|...</syntaxhighlight> <!-- If you need to rename all parameters exactly matching their values, please use <code>[[#renaming_to_values|renaming_to_values]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The <code>renaming_by_mixing</code> modifier name itself, instead, will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>renaming_to_values</code> === {{Capsa tabellaria | titulus = Modifier <code>renaming_to_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|renaming_to_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_names|mapping_to_names]]</code>, <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code>, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code> }} ; Brief : ''Rename all parameters, replacing their name with their current value'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|renaming_to_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. After calling this modifier, all parameters will have their name identical to their value. It is a shortcut for <code>...&#124;[[#renaming_by_mixing|renaming_by_mixing]]&#124;$@&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>renaming_to_values</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>grouping_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>grouping_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|grouping_by_calling|code}})</span> | Num. of arguments: ''Ad libitum'' | Repeatable: Yes<ref>Unless followed by <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> in few bizarre situations, there is virtually no use in calling this modifier more than once.</ref> | ; See also | : <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#call_for_each_group|call_for_each_group]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code> }} ; Brief : ''Group the parameters that have the same numeric suffix into novel parameters, whose names will be numbers and whose values will be decided by a custom template'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|grouping_by_calling|template name|[let]|[...]|[number of additional arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#call_for_each_group|call_for_each_group]]</code>. This means that after calling this modifier the old parameters will be (temporarily) gone and the only parameters left will be novel parameters whose names will be numbers (or an empty string if parameters without a numeric suffix were present) and whose content will be decided by a custom template. Like other modifiers in the <code>mapping_*</code> and <code>renaming_*</code> family, it is possible to impose own parameters on the callback template by using the syntax <code>...|[let]|[...]|[number of additional sequential arguments]|[argument 1]|[argument 2]|[...]|[argument N]|...</code>. Unlike the other <code>mapping_*</code> and <code>renaming_*</code> modifiers, however (but like <code>[[#call_for_each_group|call_for_each_group]]</code>), sequential parameters here will not be appended, but will ''replace'' possible parsed parameters. And so, writing <syntaxhighlight lang="wikitext">{{#invoke:params|...|grouping_by_calling|MY TEMPLATE|let|foo|bar|let|hello|world|3|one|two|three|list_values}}</syntaxhighlight> is identical to writing <syntaxhighlight lang="wikitext">{{#invoke:params|...|call_for_each_group|MY TEMPLATE|foo=bar|hello=world|one|two|three}}</syntaxhighlight> In the example above the main difference will be that the first solution will allow to pass the newly grouped parameters at once to another template or module (via <code>[[#concat_and_call|concat_and_call]]</code> or <code>[[#concat_and_invoke|concat_and_invoke]]</code>) or, if needed, perform further fine-tuning operations concerning the new parameters. Please refer to the documentation of <code>[[#call_for_each_group|call_for_each_group]]</code> for further information on the parameters passed to the callback template. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>grouping_by_calling</code> modifier name itself, the ''template name'', the <code>let</code> keyword, the passed parameter names, and the number of additional parameters will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>parsing</code> === {{Capsa tabellaria | titulus = Modifier <code>parsing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|parsing|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | Often accompanied by: <code>[[#new|new]]</code> | ; See also | : <code>[[#new|new]]</code>, <code>{{intermn|ArrayList||en}}</code>, <code>{{interfn|Array|en}}</code> }} ; Brief : ''Create new parameters by parsing a parameter string'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|parsing|string to parse|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> This modifier allows to add an infinity of new parameters by using a parameter string. By default this expects <code>&#124;</code> as separator between parameters and <code>&#61;</code> as separator between keys and values, but it is possible to specify other strings or patterns. The parsed parameters will overwrite existing parameters of the same name. For this reason, the <code>[[#new|new]]</code> directive often accompanies this modifier. Examples: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one{{!}}two{{!}}three{{!}}foo{{=}}bar{{!}}hello{{=}}world|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one{{!}}two{{!}}three{{!}}foo{{=}}bar{{!}}hello{{=}}world|for_each|[$#:$@]}} * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one, two; three. foo: bar, hello: world|trim_all|splitter_pattern|[,;.]|setter_string|:|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one, two; three. foo: bar, hello: world|trim_all|splitter_pattern|[,;.]|setter_string|:|for_each|[$#:$@]}} * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|parsing|one/two/ three / foo % bar /hello%world|setter_string|%|trim_none|splitter_string|/|for_each|[$#:$@]}}</syntaxhighlight> *: ↳ {{#invoke:params|new|parsing|one/two/ three / foo % bar /hello%world|setter_string|%|trim_none|splitter_string|/|for_each|[$#:$@]}} The ''trim flag'' argument can be placed in any position after the ''string to parse'' (not necessarily in second position) and can have one of the following values: <code>trim_none</code>, <code>trim_named</code>, <code>trim_positional</code>, <code>trim_all</code>. If omitted, it defaults to <code>trim_named</code>. The ''iteration delimiter setter'' can be placed in any position after the ''string to parse'' (not necessarily in third position), must be ''immediately'' followed by a user-given string, and can be either <code>splitter_string</code> or <code>splitter_pattern</code>. If omitted, the two arguments default to <code>splitter_string&#124;&#123;&#123;!&#125;&#125;</code>. If the custom string is empty (but not if it is blank but not empty) the string to parse will be assumed not to have any iteration delimiters (this will result in one single parameter being parsed). The ''key-value delimiter setter'' can be placed in any position after the ''string to parse'' (not necessarily in fifth position), must be ''immediately'' followed by a user-given string, and can be either <code>setter_string</code> or <code>setter_pattern</code>. If omitted, the two arguments default to <code>setter_string&#124;&#123;&#123;&#61;&#125;&#125;</code>. If the custom string is empty (but not if it is blank but not empty) the string to parse will be assumed not to have any key-value delimiters (this will result in a sequence-only list of parameters being parsed). {| class="wikitable" style="margin-left: auto; margin-right: auto;" |+ Possible options |- ! Setting a trim flag ! Setting an iteration delimiter ! Setting a key-value delimiter |- | <code>trim_none</code><br /> <code>trim_named</code><br /> <code>trim_positional</code><br /> <code>trim_all</code> | <code>splitter_string&#124;...</code><br /> <code>splitter_pattern&#124;...</code> | <code>setter_string&#124;...</code><br /> <code>setter_pattern&#124;...</code> |} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>parsing</code> modifier name itself, the ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>reinterpreting</code> === {{Capsa tabellaria | titulus = Modifier <code>reinterpreting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|reinterpreting|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | ; See also | : <code>[[#parsing|parsing]]</code>, <code>{{intermn|ArrayList||en}}</code>, <code>{{interfn|Array|en}}</code> }} ; Brief : ''Use the content of a parameter as a parameter string to parse, after removing the parameter itself'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|reinterpreting|parameter name|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> This modifier works exactly like <code>[[#parsing|parsing]]</code>, but takes the content of a disposable parameter as input. See there for further information. The parameter passed to this modifier will be immediately deleted. The parsed parameters will overwrite existing parameters of the same name. Example: <syntaxhighlight lang="wikitext">{{#invoke:params|new|pulling|1|reinterpreting|1|splitter_string|,|trim_all|concat_and_call|See also}}</syntaxhighlight> An example that shows how to use this function to transclude a custom template with custom parameters is available at &#123;&#123;[[Module:Params/doc/en/examples/constructed transclusion|./doc/en/examples/constructed transclusion]]&#125;&#125;. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>reinterpreting</code> modifier name itself, the ''parameter name'', ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>evaluating</code> === {{Capsa tabellaria | titulus = Modifier <code>evaluating</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|evaluating|code}})</span> | Num. of arguments: 1–6 | Repeatable: Yes | ; See also | : <code>[[#parsing|parsing]]</code>, <code>[[#reinterpreting|reinterpreting]]</code> }} ; Brief : ''Create new directives by parsing a parameter string'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|evaluating|string to parse|[trim flag]|[iteration delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe function name}}</syntaxhighlight> In order to facilitate scripting, the directives wherewith this module is invoked can be added or removed on the fly. The <code>evaluating</code> modifier works exactly like <code>[[#parsing|parsing]]</code>, but the parsed input will be interpreted as directives for this module rather than new template parameters (see there for further information). All directives can be parsed through this modifier. Named parsed parameters will overwrite existing parameters of the same name. Unlike <code>[[#parsing|parsing]]</code>, here the default separators are <code>!</code> and <code>:</code> instead of <code>&#123;&#123;!&#125;&#125;</code> and <code>&#123;&#123;&#61;&#125;&#125;</code>. Moreover a blank input will be discarded. '''Example:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| all_sorted| setting|i/p|; | → | evaluating|{{#if:{{{SOMETHING|}}} | imposing!1!one!imposing!2!two!imposing!3!three | imposing!100!hundred!imposing!200!two hundred!imposing!300!three hundred }}| list }}</syntaxhighlight> '''Result:''' : {{#invoke:params|new| all_sorted| setting|i/p|; | → | evaluating|{{#if:{{{SOMETHING|}}} | imposing!1!one!imposing!2!two!imposing!3!three | imposing!100!hundred!imposing!200!two hundred!imposing!300!three hundred }} |list }} {{Nota bene|Note:}} All arguments passed to this modifier except the <code>evaluating</code> modifier name itself, the ''trim flag'', ''iteration delimiter setter'' and ''key-value delimiter setter'' arguments will not be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>mixing_names_and_values</code> === {{Capsa tabellaria | titulus = Modifier <code>mixing_names_and_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|mixing_names_and_values|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <!--<code>[[#mapping_to_names|mapping_to_names]]</code>, --><code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code><!--, <code>[[#renaming_to_values|renaming_to_values]]</code>-->, <code>[[#grouping_by_calling|grouping_by_calling]]</code><!--, <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>--> }} ; Brief : ''Rewrite all parameters, replacing names and values with the expansion of two custom strings containing the <code>$#</code> and <code>$@</code> placeholders'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|mixing_names_and_values|name mixing string|value mixing string|pipe function name}}</syntaxhighlight> This modifier (temporarily) changes names and values of the parameters the current template is being called with, replacing each of them with the expansion of two custom strings that expect the same syntax as the <code>[[#for_each|for_each]]</code> function. For instance, the following code will wrap all parameter names and values in quotes <syntaxhighlight lang="wikitext">...|mixing_names_and_values|"$#"|"$@"|...</syntaxhighlight> whereas the following code will replace all names with the string <code>VALUE/NAME</code> and all values with the string <code>&#91;NAME::VALUE&#93;</code>, where <code>NAME</code> and <code>VALUE</code> are each parameter's name and value: <syntaxhighlight lang="wikitext">...|mixing_names_and_values|$@/$#|[$#::$@]|...</syntaxhighlight> <!-- If you need to swap names and values verbatim, please use <code>[[#swapping_names_and_values|swapping_names_and_values]]</code>. --> {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The ''value mixing string'' argument passed to this modifier will not be trimmed of its leading and trailing spaces. The ''name mixing string'' argument and <code>mixing_names_and_values</code> modifier name itself, instead, will be trimmed of their surrounding spaces. {{vsep|1.5em|mundatio=nulla}} <!-- === <code>swapping_names_and_values</code> === {{Capsa tabellaria | titulus = Modifier <code>swapping_names_and_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|swapping_names_and_values|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#mapping_to_names|mapping_to_names]]</code>, <code>[[#mapping_by_mixing|mapping_by_mixing]]</code>, <code>[[#mapping_to_lowercase|mapping_to_lowercase]]</code>, <code>[[#mapping_to_uppercase|mapping_to_uppercase]]</code>, <code>[[#mapping_by_calling|mapping_by_calling]]</code>, <code>[[#mapping_by_invoking|mapping_by_invoking]]</code>, <code>[[#mapping_by_magic|mapping_by_magic]]</code>, <code>[[#renaming_to_lowercase|renaming_to_lowercase]]</code>, <code>[[#renaming_to_uppercase|renaming_to_uppercase]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code>, <code>[[#renaming_by_calling|renaming_by_calling]]</code>, <code>[[#renaming_by_invoking|renaming_by_invoking]]</code>, <code>[[#renaming_by_magic|renaming_by_magic]]</code>, <code>[[#renaming_by_replacing|renaming_by_replacing]]</code>, <code>[[#renaming_by_mixing|renaming_by_mixing]]</code>, <code>[[#renaming_to_values|renaming_to_values]]</code>, <code>[[#grouping_by_calling|grouping_by_calling]]</code>, <code>[[#mixing_names_and_values|mixing_names_and_values]]</code> }} ; Brief : ''Rewrite all parameters swapping their names and values'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|swapping_names_and_values|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is a shortcut for <code>...&#124;[[#mixing_names_and_values|mixing_names_and_values]]&#124;$@&#124;$#&#124;...</code>, but slightly more efficient. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>swapping_names_and_values</code> modifier name will be trimmed of its surrounding spaces. {{vsep|1.5em|mundatio=nulla}} --> === <code>combining</code> === {{Capsa tabellaria | titulus = Modifier <code>combining</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining|code}})</span> | Num. of arguments: 2–10 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>p</code> Key-value delimiter | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} | ; See also | : <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#list|list]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code> }} ; Brief : ''Combine all parameter names and values into a single parameter, possibly using a sort order and glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining|new parameter name|[sort order]|setting directives|...|pipe function name}}</syntaxhighlight> This modifier combines all parameter names and values into a single new parameter (whose name can be identical to that of a pre-existing parameter). It can be broadly considered as a “modifier version” of the <code>[[#list|list]]</code> function. The ''new parameter name'' argument specifies the name of the new parameter that must be created. The ''sort order'' optional flag argument specifies a sort order. Possible values are <code>alphabetically</code>, <code>naturally</code> (for [[:en:Natural sort order|natural sort order]]) and <code>without_sorting</code>. When omitted it defaults to <code>without_sorting</code>. The ''setting directives'' argument is identical to the first argument of the <code>[[#setting|setting]]</code> modifier, and accordingly is followed by a variable number of arguments (up to seven—see <code>[[#setting|setting]]</code> for more information). Differently than in <code>[[#setting|setting]]</code>, here the ''setting directives'' argument can be left empty (but not omitted). For a similar modifier that combines only values and omits parameter names, see the <code>[[#combining_values|combining_values]]</code> modifier. '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|naturally|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|foo|bar| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|h/i/p/l/s/f/n|⟨|, |:| and |, and |⟩|NO PARAMETERS ARE PRESENT| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} '''Wikitext:''' <syntaxhighlight lang="wikitext">{{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|| setting|i/p|<br />| {{=}} | list }}</syntaxhighlight> '''Effect:''' : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|wind3|ccc| imposing|wind1|aaa| imposing|wind2|bbb| imposing|wind12|ddd| combining|my_new_parameter|| setting|i/p|<br />| {{=}} | list }} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>combining</code> modifier name, the ''new parameter name'' argument and the ''sort order'' argument will be trimmed of their surrounding spaces. The ''setting directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>combining_values</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_values</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_values|code}})</span> | Num. of arguments: 2–10 (variable) | Repeatable: Yes | ; Memory slots | : {{Series versibus dissaepta | <code>i</code> Iteration delimiter | <code>l</code> Last iteration delimiter | <code>h</code> Header text | <code>f</code> Footer text | <code>n</code> Fallback text | <code>s</code> “[[:en:serial comma|serial-comma]]-like” last iteration delimiter }} | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#list|list]]</code>, <code>[[#renaming_to_sequence|renaming_to_sequence]]</code> }} ; Brief : ''Combine all parameter names and values into a single parameter, possibly using a sort order and glue strings'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_values|new parameter name|[sort order]|setting directives|...|pipe function name}}</syntaxhighlight> This modifier combines all parameter values into a single new parameter (whose name can be identical to that of a pre-existing parameter). It can be broadly considered as a “modifier version” of the <code>[[#list_values|list_values]]</code> function. Its syntax is identical to that of <code>[[#combining|combining]]</code>; see there for more information. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} The <code>combining_values</code> modifier name, the ''new parameter name'' argument and the ''sort order'' argument will be trimmed of their surrounding spaces. The ''setting directives'' argument will be stripped of all space characters, including internal spaces. All other arguments passed to this modifier will be parsed verbatim (i.e. leading and trailing spaces will not be removed). {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_calling</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_calling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_calling|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a custom template and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_calling|template name|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_call|concat_and_call]]</code>. This means that after calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. For instance, using [[Module:Params/periclitationes/en/tdummy echo sb|./testcases/tdummy echo sb]] as callback template, a template named <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight> with the following content, <syntaxhighlight lang="wikitext">{{#invoke:params|combining_by_calling|Module:Params/periclitationes/en/tdummy echo sb|my_new_parameter|for_each|[$#:$@]}}</syntaxhighlight> when transcluded as <syntaxhighlight lang="wikitext" inline>{{example template|one|two|three|hello=world|foo=bar}}</syntaxhighlight> will produce : {{#invoke:params|new| imposing|1|one| imposing|2|two| imposing|3|three| imposing|hello|world| imposing|foo|bar| combining_by_calling|Module:Params/periclitationes/en/tdummy echo sb|my_new_parameter|for_each|[$#:$@]}} {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_calling</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_invoking</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_invoking</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_invoking|code}})</span> | Num. of arguments: 3 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_magic|combining_by_magic]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a custom module function and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_invoking|module name|function name|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_invoke|concat_and_invoke]]</code>. It works similarly to how <code>[[#combining_by_calling|combining_by_calling]]</code> works, except that it invokes a module function instead of calling a template. After calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_invoking</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>combining_by_magic</code> === {{Capsa tabellaria | titulus = Modifier <code>combining_by_magic</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|combining_by_magic|code}})</span> | Num. of arguments: 2 | Repeatable: Yes | ; See also | : <code>[[#combining|combining]]</code>, <code>[[#combining_values|combining_values]]</code>, <code>[[#combining_by_calling|combining_by_calling]]</code>, <code>[[#combining_by_invoking|combining_by_invoking]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#concat_and_call|concat_and_call]]</code> }} ; Brief : ''Pass all current parameters to a parser function and save the returned output as a new parameter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|combining_by_magic|parser function|new parameter name|pipe function name}}</syntaxhighlight> This is the piping version of <code>[[#concat_and_magic|concat_and_magic]]</code>. It works similarly to how <code>[[#combining_by_calling|combining_by_calling]]</code> works, except that it calls a parser function instead of calling a template. After calling this modifier the old parameters will be (temporarily) gone and the only parameter left will be what is specified in the ''new parameter name'' argument. Since after using this modifier all parameters will be grouped into one single parameter, to pass additional parameters to the callback template you can safely use <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, or <code>[[#parsing|parsing]]</code>. {{vsep|mundatio=nulla}} {{Nota bene|Note:}} All arguments passed to this modifier and the <code>combining_by_magic</code> modifier name will be trimmed of their leading and trailing spaces. {{vsep|1.5em|mundatio=nulla}} === <code>snapshotting</code> === {{Capsa tabellaria | titulus = Modifier <code>snapshotting</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|snapshotting|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Eventually followed by: Either <code>[[#entering_substack|entering_substack]]</code> or <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Push a copy of the current parameter list to the queue of parameter lists'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|snapshotting|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This module has a stacking mechanism that allows to isolate groups of parameters, work separately on them, and then merge them back to the original stack. The modifiers dedicated to this mechanism are: * <code>[[#snapshotting|snapshotting]]</code> * <code>[[#remembering|remembering]]</code> * <code>[[#entering_substack|entering_substack]]</code> * <code>[[#pulling|pulling]]</code> * <code>[[#detaching_substack|detaching_substack]]</code> * <code>[[#dropping_substack|dropping_substack]]</code> * <code>[[#leaving_substack|leaving_substack]]</code> * <code>[[#merging_substack|merging_substack]]</code> * <code>[[#flushing|flushing]]</code> Every time the <code>snapshotting</code> modifier is used, the current list of parameters (together with their values) will be copied and added to a queue. When the <code>[[#entering_substack|entering_substack]]</code> modifier is used, the list of parameters on top of the queue will temporarily become the current parameters, and all other modifiers will affect only this substack. After completing the job, the <code>[[#merging_substack|merging_substack]]</code> will merge the current substack to the parent stack. If no parameter lists have been snapshotted before calling <code>[[#entering_substack|entering_substack]]</code>, the latter will automatically make a snapshot of the current parameters. Once inside a substack, it is possible to enter a subsubstack using the same machinery. The <code>[[#detaching_substack|detaching_substack]]</code> modifier erases the current parameters from the parent stack, allowing the current stack to rename its parameters freely and merge them back to the parent stack, renamed. It is possible to leave a substack without merging it to the parent by using the <code>[[#leaving_substack|leaving_substack]]</code> modifier. In this case, at some point it will be necessary to call <code>[[#flushing|flushing]]</code> in order to merge the stack previously left unmerged. Alternatively, it will be possible to enter it again by calling <code>[[#entering_substack|entering_substack]]</code>, and finally merge it via <code>[[#merging_substack|merging_substack]]</code>. It is also possible to drop and discard a substack completely via <code>[[#dropping_substack|dropping_substack]]</code> An example will probably clarify the mechanism better than anything else: <syntaxhighlight lang="wikitext" line> {{#invoke:params|new|<!-- Ignore the incoming parameters and manually assign some parameters (we will simulate the following incoming parameters: |one|two|three|four|foo=bar|hello=world ...) --> imposing|1|one| imposing|2|two| imposing|3|three| imposing|4|four| imposing|foo|bar| imposing|hello|world| entering_substack|<!-- Enter into a substack (the `snapshotting` modifier will be automatically invoked for us) --> excluding_numeric_names|<!-- Exclude numeric parameters --> detaching_substack|<!-- Remove the current parameters from the parent stack --> renaming_by_replacing|^.*$|This was called "%0"|1|<!-- Rename the parameters in this substack --> merging_substack| entering_substack|new|<!-- Enter into a new empty substack --> pulling|1|<!-- Pull the parameter named "1" from the parent stack --> mapping_by_replacing|^.*$|This value once was "%0"|1|<!-- Replace the content of the parameters in this substack --> merging_substack| for_each|[$#:$@]}} </syntaxhighlight> The code above will result in: : {{#invoke:params|new|<!-- Ignore the incoming parameters and manually assign some parameters (we will simulate the following incoming parameters: |one|two|three|four|foo=bar|hello=world ...) --> imposing|1|one| imposing|2|two| imposing|3|three| imposing|4|four| imposing|foo|bar| imposing|hello|world| entering_substack|<!-- Enter into a substack (the `snapshotting` modifier will be automatically invoked for us) --> excluding_numeric_names|<!-- Exclude numeric parameters --> detaching_substack|<!-- Remove the current parameters from the parent stack --> renaming_by_replacing|^.*$|This was called "%0"|1|<!-- Rename all parameters --> merging_substack| entering_substack|new|<!-- Enter into a new empty substack --> pulling|1|<!-- Pull the parameter named "1" from the parent stack --> mapping_by_replacing|^.*$|This value once was "%0"|1|<!-- Replace the content of all parameters --> merging_substack| for_each|[$#:$@]}} A more advanced example is available at &#123;&#123;[[Module:Params/doc/en/examples/universal page list|./doc/en/examples/universal page list]]&#125;&#125;. {{vsep|1.5em|mundatio=nulla}} === <code>remembering</code> === {{Capsa tabellaria | titulus = Modifier <code>remembering</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|remembering|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Eventually followed by: Either <code>[[#entering_substack|entering_substack]]</code> or <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Push a copy of the original (unmodified) parameter list to the queue of snapshots'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|remembering|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is somewhat similar to <code>[[#snapshotting|snapshotting]]</code>, except that it retrieves the parameters that were originally passed to the calling template before being affected by the module's modifiers. The modifier works also after the <code>[[#new|new]]</code> directive. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>entering_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>entering_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|entering_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | May be immediately followed by: <code>[[#new|new]]</code> | Eventually followed by: Either <code>[[#merging_substack|merging_substack]]</code> or <code>[[#leaving_substack|leaving_substack]]</code> followed by <code>[[#flushing|flushing]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Enter the first stack in the queue of parameter lists, or copy the current parameters into a substack if the queue is empty'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|entering_substack|[new]|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. Once in a substack, it is possible to go back to the parent stack using three different modifiers: <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code> and <code>[[#dropping_substack|dropping_substack]]</code>. {{vsep|1.5em|mundatio=nulla}} === <code>pulling</code> === {{Capsa tabellaria | titulus = Modifier <code>pulling</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|pulling|code}})</span> | Num. of arguments: 1 | Repeatable: Yes | Often preceeded by: <code>[[#new|new]]</code> | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Pull a single parameter from the parent stack or from the stack of the original parameters'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|pulling|parameter name|pipe function name}}</syntaxhighlight> See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. If this modifer is not used in a substack, the parameter will be pulled from the original (unmodified) parameter list. {{vsep|1.5em|mundatio=nulla}} === <code>detaching_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>detaching_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|detaching_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Remove from the parent stack the parameters that are present in the current stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|detaching_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>dropping_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>dropping_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|dropping_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Go back to the parent stack dropping the current substack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|dropping_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>leaving_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>leaving_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|leaving_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Leave the current substack without merging it, and return to the parent stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|leaving_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. See <code>[[#flushing|flushing]]</code> for an example of how to use this modifier. {{vsep|1.5em|mundatio=nulla}} === <code>merging_substack</code> === {{Capsa tabellaria | titulus = Modifier <code>merging_substack</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|merging_substack|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | Restrictions: Usable only inside substacks | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code>, <code>[[#flushing|flushing]]</code> }} ; Brief : ''Leave the current stack after merging it with the parent stack, then return to the latter'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|merging_substack|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifer can only be used in a substack. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. {{vsep|1.5em|mundatio=nulla}} === <code>flushing</code> === {{Capsa tabellaria | titulus = Modifier <code>flushing</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|flushing|code}})</span> | Num. of arguments: 0 | Repeatable: Yes | ; See also | : <code>[[#snapshotting|snapshotting]]</code>, <code>[[#remembering|remembering]]</code>, <code>[[#entering_substack|entering_substack]]</code>, <code>[[#pulling|pulling]]</code>, <code>[[#merging_substack|merging_substack]]</code>, <code>[[#detaching_substack|detaching_substack]]</code>, <code>[[#dropping_substack|dropping_substack]]</code>, <code>[[#leaving_substack|leaving_substack]]</code> }} ; Brief : ''Merge the first stack in the queue of snapshotted parameters with the current stack.'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|flushing|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier is used in conjunction with either <code>[[#leaving_substack|leaving_substack]]</code> or <code>[[#snapshotting|snapshotting]]</code>. See <code>[[#snapshotting|snapshotting]]</code> for more information on the stacking mechanism. In the following wrapper of an <syntaxhighlight lang="wikitext" inline>{{example template}}</syntaxhighlight>, the three parameters {{para|1}}, {{para|2}}, and {{para|3}} are used as aliases for {{para|title}}, {{para|author}}, and {{para|language}} respectively. The <code>flushing</code> modifier ensures that in case both are present, the named alias will have the precedence over the positional alias. <syntaxhighlight lang="wikitext">{{#invoke:params| entering_substack| discarding|1| discarding|2| discarding|3| leaving_substack| renaming_by_replacing|1|title|strict| renaming_by_replacing|2|author|strict| renaming_by_replacing|3|language|strict| flushing| concat_and_call|example template }}</syntaxhighlight> {{vsep|1.5em|mundatio=nulla}} === <code>new</code> === {{Capsa tabellaria | titulus = Modifier <code>new</code> <span style="nowrap">({{module:params/doc/nexus ad functionem ostendendam|new|code}})</span> | Num. of arguments: 0 | Repeatable: No | Restrictions: First position only | ; See also | : <code>[[#parsing|parsing]]</code>, <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, <code>[[#splicing|splicing]]</code>, <code>[[#discarding|discarding]]</code> }} ; Brief : ''Get rid of all the incoming parameters and create a new (empty) parameter stack'' ; Syntax : <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|pipe function name}}</syntaxhighlight> This modifier does not take arguments besides the name of the function that will follow. This modifier can only appear in first position, or if substacks are present, immediately after the <code>[[#entering_substack|entering_substack]]</code> directive. When in first position, its main purpose is that of extending the facilities offered by this module (e.g. <code>[[#mapping_by_replacing|mapping_by_replacing]]</code>, <code>[[#with_value_matching|with_value_matching]]</code>, etc.) to custom lists of strings, independently of the incoming parameters. When inside a stack, it signals that the snapshot of the current parameters must be ignored for that stack. The existence of the <code>new</code> modifier also facilitates debugging the module. The newly created parameter stack can be populated via <code>[[#parsing|parsing]]</code>, <code>[[#imposing|imposing]]</code>, <code>[[#providing|providing]]</code>, or <code>[[#splicing|splicing]]</code>. The incoming parameters can always be retrieved back using the <code>[[#remembering|remembering]]</code> and <code>[[#pulling|pulling]]</code> modifiers. Examples: * <syntaxhighlight lang="wikitext" inline>{{#invoke:params|new|imposing|1|foo|imposing|2|bar|mapping_by_replacing|^.|!%1|list_values}}</syntaxhighlight> *: ↳ {{#invoke:params|new|imposing|1|foo|imposing|2|bar|mapping_by_replacing|^.|!%1|list_values}} {{vsep|1.5em|mundatio=nulla}} == Subpages == * [[Module:Params/ChangeLog]] – Record of the most important changes in the module's code * [[Module:Params/periclitationes/en]] – Testing the module's capabilities * [[Module:Params/doc/en/examples]] – Some of the examples mentioned in this documentation The complete list of subpages is available [[Special:PrefixIndex/Module:Params/|here]]. == Notes == <references /> == See also == * {{intermn|TemplatePar||en}} * {{intermn|ParameterCount||en}} * {{intermn|Separated entries|main|en}} * {{intermn|Enumerate|main|en}} * {{ml|Check for unknown parameters|check}} * {{intermn|Check for deprecated parameters|check|en}} * {{intermn|Check for clobbered parameters|check|en}} * {{intermn|Parameter validation||en}} * {{intermn|Expand wikitext|main|en}} * {{intermn|For loop|main|en}} and {{interfn|For loop|en}} * {{intermn|For nowiki|template|en}} and {{interfn|For nowiki|en}} * {{intermn|Template wrapper|wrap|en}} * {{intermn|ArrayList||en}} * {{intermn|TEMPLATENAME|main|en}} <includeonly>{{in harenario aut alibi||2= <!-- Categorias sub hac linea adde --> [[Categoria:Formulae|{{PAGENAME}}]] [[Categoria:Formulae variadicae|!]] }}</includeonly> d8oymikj8iygx0wizt0jbm0syklu9z9 Tractatus de salis cathartici amari natura 0 326551 3970986 3970273 2026-07-08T17:27:15Z Andronikos Komnenos 1527 3970986 wikitext text/x-wiki {{Titulus italicus}} {{ires|Tractatus de salis cathartici amari, in aquis Ebeshamensibus et huiusmodi aliis, contenti natura et usu}} est opusculum a [[Nehemias Grew|Nehemia Grew]] anno [[1695]] [[Latine]] divulgatum de [[thermae|aquis mineralibus]] amaris quae [[Ebeshamum|Ebeshami]] in [[Surregia]] prope [[Londinium]] surrigebant. Aquae anno [[1620]] inventae sunt. [[Thermae Ebeshamenses]] ab hoc anno usque in saeculum XVIII medium frequentabantur. == Editiones == * 1695 : ''Tractatus de salis cathartici amari, in aquis Ebeshamensibus et hujusmodi aliis, contenti natura et usu''. Londini: S. Smith & B. Walford; [https://archive.org/details/b30332047/page/n9/mode/2up textus]; [https://archive.org/details/bim_early-english-books-1641-1700_tractatus-de-salis-catha_grew-nehemiah_1695/mode/1up aliud exemplar] * 1697 (versio pirata) : ''A treatise of the nature and use of the bitter purging salt obtain'd in Epsom, and such other waters''. Londinii: Francis Moult; [https://archive.org/details/bim_early-english-books-1641-1700_a-treatise-of-the-nature_grew-nehemiah_1697_0 textus]; [https://quod.lib.umich.edu/e/eebo/a42118.0001.001/ editio interretialis apud Michiganenses] * 1697 (Robert Bridges, interpr.) : ''A treatise of the nature and use of the bitter purging salt, easily known from all counterfeits by its bitter taste''. Londinii: Walter Kettilby; [https://archive.org/details/b30324397/page/n9/mode/2up Textus] * 1700 reimpressum; [https://archive.org/details/b30769632/page/n1/mode/2up textus] == Bibliographia == * Nehemiah Grew, ''A.D. 1698: no. 354. Grew's patent [way of makeing the salt of the purgeing waters perfectly fine in large quantities and very cheape, so as to be comonly prescribed and taken as a generall medicine]''. Londinii: Great Seal Patent Office, 1857; [https://archive.org/details/b30746942/page/n1/mode/2up Textus] * Adrian Johns, ''Piracy: The Intellectual Property Wars from Gutenberg to Gates''. Chicagi: University of Chicago Press, 2010. ISBN 978 0 226 40118 8 * William LeFanu, ''Nehemiah Grew, MD, FRS: A Study and Bibliography of His Writings''. Winchester: St. Paul's Bibliographies, 1990 * Julie Peters, "[https://www.lrb.co.uk/the-paper/v32/n21/julie-peters/a-glorious-thing A glorious thing]" in ''[[London Review of Books']]'' vol. 32 no. 21 (4 Novembris 2010) * Alex Sakula, "[https://www.researchgate.net/publication/16156004_The_waters_of_Epsom_Spa The waters of Epsom Spa]" in ''Journal of the Royal College of Physicians of London'' vol. 16 (1982) pp. 124-128 * Alex Sakula, '"Doctor Nehemiah Grew (1641-1712) and the Epsom salts" in ''Clio Medica'' vol. 19 (1984) pp. 1-21 [[Categoria:Scripta 1695]] [[Categoria:Angliae scripta]] [[Categoria:Litterae Latinae recentioris aevi]] [[Categoria:Litterae Anglice versae]] [[Categoria:Thermae]] [[Categoria:Libri de medicamentis]] i23vv0r4q83ut8ditroaeoh6weba5yy 3970987 3970986 2026-07-08T17:39:37Z Andronikos Komnenos 1527 imago 3970987 wikitext text/x-wiki {{Titulus italicus}} [[Fasciculus:Grew Treatise 1697 tp.jpg|thumb|Titulus editionis Anglicae 1697) divulgatae, auctore consentiente]] {{ires|Tractatus de salis cathartici amari, in aquis Ebeshamensibus et huiusmodi aliis, contenti natura et usu}} est opusculum a [[Nehemias Grew|Nehemia Grew]] anno [[1695]] [[Latine]] divulgatum de [[thermae|aquis mineralibus]] amaris quae [[Ebeshamum|Ebeshami]] in [[Surregia]] prope [[Londinium]] surrigebant. Aquae anno [[1620]] inventae sunt. [[Thermae Ebeshamenses]] ab hoc anno usque in saeculum XVIII medium frequentabantur. == Editiones == * 1695 : ''Tractatus de salis cathartici amari, in aquis Ebeshamensibus et hujusmodi aliis, contenti natura et usu''. Londini: S. Smith & B. Walford; [https://archive.org/details/b30332047/page/n9/mode/2up textus]; [https://archive.org/details/bim_early-english-books-1641-1700_tractatus-de-salis-catha_grew-nehemiah_1695/mode/1up aliud exemplar] * 1697 (versio pirata) : ''A treatise of the nature and use of the bitter purging salt obtain'd in Epsom, and such other waters''. Londinii: Francis Moult; [https://archive.org/details/bim_early-english-books-1641-1700_a-treatise-of-the-nature_grew-nehemiah_1697_0 textus]; [https://quod.lib.umich.edu/e/eebo/a42118.0001.001/ editio interretialis apud Michiganenses] * 1697 (Robert Bridges, interpr.) : ''A treatise of the nature and use of the bitter purging salt, easily known from all counterfeits by its bitter taste''. Londinii: Walter Kettilby; [https://archive.org/details/b30324397/page/n9/mode/2up Textus] * 1700 reimpressum; [https://archive.org/details/b30769632/page/n1/mode/2up textus] == Bibliographia == * Nehemiah Grew, ''A.D. 1698: no. 354. Grew's patent [way of makeing the salt of the purgeing waters perfectly fine in large quantities and very cheape, so as to be comonly prescribed and taken as a generall medicine]''. Londinii: Great Seal Patent Office, 1857; [https://archive.org/details/b30746942/page/n1/mode/2up Textus] * Adrian Johns, ''Piracy: The Intellectual Property Wars from Gutenberg to Gates''. Chicagi: University of Chicago Press, 2010. ISBN 978 0 226 40118 8 * William LeFanu, ''Nehemiah Grew, MD, FRS: A Study and Bibliography of His Writings''. Winchester: St. Paul's Bibliographies, 1990 * Julie Peters, "[https://www.lrb.co.uk/the-paper/v32/n21/julie-peters/a-glorious-thing A glorious thing]" in ''[[London Review of Books']]'' vol. 32 no. 21 (4 Novembris 2010) * Alex Sakula, "[https://www.researchgate.net/publication/16156004_The_waters_of_Epsom_Spa The waters of Epsom Spa]" in ''Journal of the Royal College of Physicians of London'' vol. 16 (1982) pp. 124-128 * Alex Sakula, '"Doctor Nehemiah Grew (1641-1712) and the Epsom salts" in ''Clio Medica'' vol. 19 (1984) pp. 1-21 [[Categoria:Scripta 1695]] [[Categoria:Angliae scripta]] [[Categoria:Litterae Latinae recentioris aevi]] [[Categoria:Litterae Anglice versae]] [[Categoria:Thermae]] [[Categoria:Libri de medicamentis]] 0ea3gnehr8769hm2rf39u0mx2edc9fu 3971076 3970987 2026-07-09T10:25:33Z Andronikos Komnenos 1527 3971076 wikitext text/x-wiki {{Titulus italicus}} [[Fasciculus:Grew Tractatus 1695 tp.jpg|thumb|Titulus editionis priscae Latine anno 1695 divulgatae]] [[Fasciculus:Grew Treatise 1697 tp.jpg|thumb|Titulus editionis Anglicae anno 1697 exeunte divulgatae, auctore consentiente]] {{ires|Tractatus de salis cathartici amari, in aquis Ebeshamensibus et huiusmodi aliis, contenti natura et usu}} est opusculum a [[Nehemias Grew|Nehemia Grew]] anno [[1695]] [[Latine]] divulgatum de [[thermae|aquis mineralibus]] amaris quae [[Ebeshamum|Ebeshami]] in [[Surregia]] prope [[Londinium]] surrigebant. Aquae anno [[1620]] inventae sunt. [[Thermae Ebeshamenses]] ab hoc anno usque in saeculum XVIII medium frequentabantur. == Editiones == * 1695 : ''Tractatus de salis cathartici amari, in aquis Ebeshamensibus et hujusmodi aliis, contenti natura et usu''. Londini: S. Smith & B. Walford; [https://archive.org/details/b30332047/page/n9/mode/2up textus]; [https://archive.org/details/bim_early-english-books-1641-1700_tractatus-de-salis-catha_grew-nehemiah_1695/mode/1up aliud exemplar] * 1697 (versio pirata) : ''A treatise of the nature and use of the bitter purging salt obtain'd in Epsom, and such other waters''. Londinii: Francis Moult; [https://archive.org/details/bim_early-english-books-1641-1700_a-treatise-of-the-nature_grew-nehemiah_1697_0 textus]; [https://quod.lib.umich.edu/e/eebo/a42118.0001.001/ editio interretialis apud Michiganenses] * 1697 (Robert Bridges, interpr.) : ''A treatise of the nature and use of the bitter purging salt, easily known from all counterfeits by its bitter taste''. Londinii: Walter Kettilby; [https://archive.org/details/b30324397/page/n9/mode/2up Textus] * 1700 reimpressum; [https://archive.org/details/b30769632/page/n1/mode/2up textus] == Bibliographia == * Nehemiah Grew, ''A.D. 1698: no. 354. Grew's patent [way of makeing the salt of the purgeing waters perfectly fine in large quantities and very cheape, so as to be comonly prescribed and taken as a generall medicine]''. Londinii: Great Seal Patent Office, 1857; [https://archive.org/details/b30746942/page/n1/mode/2up Textus] * Adrian Johns, ''Piracy: The Intellectual Property Wars from Gutenberg to Gates''. Chicagi: University of Chicago Press, 2010. ISBN 978 0 226 40118 8 * William LeFanu, ''Nehemiah Grew, MD, FRS: A Study and Bibliography of His Writings''. Winchester: St. Paul's Bibliographies, 1990 * Julie Peters, "[https://www.lrb.co.uk/the-paper/v32/n21/julie-peters/a-glorious-thing A glorious thing]" in ''[[London Review of Books']]'' vol. 32 no. 21 (4 Novembris 2010) * Alex Sakula, "[https://www.researchgate.net/publication/16156004_The_waters_of_Epsom_Spa The waters of Epsom Spa]" in ''Journal of the Royal College of Physicians of London'' vol. 16 (1982) pp. 124-128 * Alex Sakula, '"Doctor Nehemiah Grew (1641-1712) and the Epsom salts" in ''Clio Medica'' vol. 19 (1984) pp. 1-21 [[Categoria:Scripta 1695]] [[Categoria:Angliae scripta]] [[Categoria:Litterae Latinae recentioris aevi]] [[Categoria:Litterae Anglice versae]] [[Categoria:Thermae]] [[Categoria:Libri de medicamentis]] bwuneo4zvk7r1y0aey76b4bockahdfi 3971077 3971076 2026-07-09T10:34:17Z Andronikos Komnenos 1527 3971077 wikitext text/x-wiki {{Titulus italicus}} [[Fasciculus:Grew Tractatus 1695 tp.jpg|thumb|Titulus editionis priscae Latine anno 1695 divulgatae]] [[Fasciculus:Grew Treatise 1697 tp.jpg|thumb|Titulus editionis Anglicae anno 1697 exeunte divulgatae, auctore consentiente]] {{ires|Tractatus de salis cathartici amari, in aquis Ebeshamensibus et huiusmodi aliis, contenti natura et usu}} est opusculum a [[Nehemias Grew|Nehemia Grew]] anno [[1695]] [[Latine]] divulgatum de [[thermae|aquis mineralibus]] amaris quae [[Ebeshamum|Ebeshami]] in [[Surregia]] prope [[Londinium]] surrigebant. Aquae anno [[1620]] inventae sunt; [[minerale]], quod [[Epsomita]] nuncupatur, ex aquis extrahi potest. [[Thermae Ebeshamenses]] ab eo anno usque in saeculum XVIII medium frequentabantur. == Editiones == * 1695 : ''Tractatus de salis cathartici amari, in aquis Ebeshamensibus et hujusmodi aliis, contenti natura et usu''. Londini: S. Smith & B. Walford; [https://archive.org/details/b30332047/page/n9/mode/2up textus]; [https://archive.org/details/bim_early-english-books-1641-1700_tractatus-de-salis-catha_grew-nehemiah_1695/mode/1up aliud exemplar] * 1697 (versio pirata) : ''A treatise of the nature and use of the bitter purging salt obtain'd in Epsom, and such other waters''. Londinii: Francis Moult; [https://archive.org/details/bim_early-english-books-1641-1700_a-treatise-of-the-nature_grew-nehemiah_1697_0 textus]; [https://quod.lib.umich.edu/e/eebo/a42118.0001.001/ editio interretialis apud Michiganenses] * 1697 (Robert Bridges, interpr.) : ''A treatise of the nature and use of the bitter purging salt, easily known from all counterfeits by its bitter taste''. Londinii: Walter Kettilby; [https://archive.org/details/b30324397/page/n9/mode/2up Textus] * 1700 reimpressum; [https://archive.org/details/b30769632/page/n1/mode/2up textus] == Bibliographia == * Nehemiah Grew, ''A.D. 1698: no. 354. Grew's patent [way of makeing the salt of the purgeing waters perfectly fine in large quantities and very cheape, so as to be comonly prescribed and taken as a generall medicine]''. Londinii: Great Seal Patent Office, 1857; [https://archive.org/details/b30746942/page/n1/mode/2up Textus] * Adrian Johns, ''Piracy: The Intellectual Property Wars from Gutenberg to Gates''. Chicagi: University of Chicago Press, 2010. ISBN 978 0 226 40118 8 * William LeFanu, ''Nehemiah Grew, MD, FRS: A Study and Bibliography of His Writings''. Winchester: St. Paul's Bibliographies, 1990 * Julie Peters, "[https://www.lrb.co.uk/the-paper/v32/n21/julie-peters/a-glorious-thing A glorious thing]" in ''[[London Review of Books']]'' vol. 32 no. 21 (4 Novembris 2010) * Alex Sakula, "[https://www.researchgate.net/publication/16156004_The_waters_of_Epsom_Spa The waters of Epsom Spa]" in ''Journal of the Royal College of Physicians of London'' vol. 16 (1982) pp. 124-128 * Alex Sakula, '"Doctor Nehemiah Grew (1641-1712) and the Epsom salts" in ''Clio Medica'' vol. 19 (1984) pp. 1-21 [[Categoria:Scripta 1695]] [[Categoria:Angliae scripta]] [[Categoria:Litterae Latinae recentioris aevi]] [[Categoria:Litterae Anglice versae]] [[Categoria:Thermae]] [[Categoria:Libri de medicamentis]] squwinpgqba3vjmwkmwj5einfhcpq0s Erlingus 0 326613 3971053 3970603 2026-07-09T06:25:58Z Bartholomite 116968 capsa 3971053 wikitext text/x-wiki {{Nomen|genus=Masculinum|origo=Nordica antiqua|significatio=cognatum iarli|imago=Erling Haaland France v Norway 26 June 26-008.jpg|capitulum=Erlingus Haaland}} {{res|Erlingus}}<ref>[https://baekur.is/search?facetBook=&facetAuthor=&facetVolume=&facetFromTo=&searchType=TEXT&titleSearchText=Magni&authorSearchText=&keywordSearchText=&searchText=Erlingus Res.]</ref> est [[nomen]] masculinum, originem [[Lingua Nordica antiqua|linguae Nordicae antiquae]] ''Erlingr'', significans "cognatum [[iarlus|iarli]]." ==In linguis frequentibus formae== * [[Danice]]: Erling * [[Lingua Faeroensis|Faeroenice]]: Erlingur * [[Islandice]]: Erlingur * [[Norvegice]]: Erling, Elling * [[Lingua Suecica antiqua|Suecice antique]]: Ærlinger, Arlingus, Yrling, Herlingus ** [[Suecice]]: Erling, Elling == Homines == * [[Erlingus Haaland]] * [[Erlingus Persson]] * [[Erlingus Skakke]] * [[Erlingus Steinvegg]] == Notae == <references /> [[Categoria:Paginae de nominibus discretivae]] [[Categoria:Praenomina]] [[Categoria:Praenomina masculina]] 8nnfo88ala3nmlkhjulhwzk232ejt87 Formula:Parametrum in formula sine typographia 10 326615 3971020 3970651 2026-07-09T00:34:25Z Grufo 64423 -‘|color-nominis=’ 3971020 wikitext text/x-wiki <includeonly>&#123;&#123;&#123;{{safesubst:<noinclude />#if:{{{1|}}} | <span style="color: #19177c;">{{{1}}}</span> }}{{safesubst:<noinclude />#ifeq:{{{2|+}}}|{{{2|-}}} | &#124;{{{2|}}} }}&#125;&#125;&#125;</includeonly><noinclude>{{Documentatio|Formula:Parametrum in formula/doc}}</noinclude> jkcjws6cy4fp3dr6o7ydnd7ro7nggrc Formula:Parametrum in formula 10 326618 3971019 3970652 2026-07-09T00:33:57Z Grufo 64423 -‘|color-nominis=’ 3971019 wikitext text/x-wiki <includeonly><code>&#123;&#123;&#123;{{safesubst:<noinclude />#if:{{{1|}}} | <span style="color: {{{color-nominis|#19177c}}};">{{{1}}}</span> }}{{safesubst:<noinclude />#ifeq:{{{2|+}}}|{{{2|-}}} | &#124;{{{2|}}} }}&#125;&#125;&#125;</code></includeonly><noinclude>{{Documentatio|proprietas=distributa}}</noinclude> 8s4juhhxs0prs0lyokamx6ws7ysqrni 3971021 3971019 2026-07-09T00:34:47Z Grufo 64423 3971021 wikitext text/x-wiki <includeonly><code>&#123;&#123;&#123;{{safesubst:<noinclude />#if:{{{1|}}} | <span style="color: #19177c;">{{{1}}}</span> }}{{safesubst:<noinclude />#ifeq:{{{2|+}}}|{{{2|-}}} | &#124;{{{2|}}} }}&#125;&#125;&#125;</code></includeonly><noinclude>{{Documentatio|proprietas=distributa}}</noinclude> ja5lmomw3zfw58jw0oofhxu1wvq1hdk Universitas Saratoviensis 0 326655 3970990 2026-07-08T18:46:21Z Alexander Gerashchenko 331 Paginam instituit, scribens '{{Capsa scholae Vicidata}} [[Fasciculus:Univer_saratov.JPG|thumb|Universitas Saratoviensis]] '''Universitas Saratoviensis'''<ref>"Universitas Regia Saratoviensis"[https://www.google.ru/books/edition/Pamietnik_obchodu_jubileuszowego_w_250_r/2hBxAAAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitas+Regia+Saratoviensis%22&dq=%22Universitas+Regia+Saratoviensis%22&printsec=frontcover]; "Universitatis Saratoviensis"[https://www.google.ru/books/edition/%D0%9F%D1%80%D0%B0%D0%B7%D0%...' 3970990 wikitext text/x-wiki {{Capsa scholae Vicidata}} [[Fasciculus:Univer_saratov.JPG|thumb|Universitas Saratoviensis]] '''Universitas Saratoviensis'''<ref>"Universitas Regia Saratoviensis"[https://www.google.ru/books/edition/Pamietnik_obchodu_jubileuszowego_w_250_r/2hBxAAAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitas+Regia+Saratoviensis%22&dq=%22Universitas+Regia+Saratoviensis%22&printsec=frontcover]; "Universitatis Saratoviensis"[https://www.google.ru/books/edition/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%9A%D0%B0%D0%B7%D0%B0%D0%BD%D1%81%D0%BA/YX8_AQAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitatis+Saratoviensis%22&dq=%22Universitatis+Saratoviensis%22&printsec=frontcover].</ref>, nunc rite '''Universitas Nationalis Exploratoria Publica Saratovienis Černyševskiana''' ([[Russice]]: Саратовский национальный исследовательский государственный университет имени Н. Г. Чернышевского, [[translitteratio|tr.]] ''Saratovskij nacional'nyj issledovatel'skij gosudarstvennyj universitet imeni N. G. Černyševskogo'') vocatur, est [[universitas]] publica [[Russia]]e, [[Saratovia]]e in urbe sita. Anno [[1909]], ultima ex universitatibus [[Imperium Russicum|Imperii Russici]], ab [[imperatores Russiae|imperatore]] [[Nicolaus II (imperator Russiae)|Nicolao II]] condita, initio Universitas Imperialis (seu Caesarea vel Regia) Nicolai in honorem imperatoris nominabatur. Anno [[1923]] universitas illa Saratoviensis, iam publica, in honorem [[Nicolaus Černyševskij|Nicolai Černyševskij]] nominata est. Anno [[2010]] una ex universitatibus nationalibus exploratoriis [[Foederatio Russica|Foederationis Russicae]] facta est. Facultates (ordines) tredecim et instituta educationis octo nunc habet. {{Uni-stipula}} == Nota == <references /> == Nexus externi == {{CommuniaCat|Saratov State University|Universitatem Saratoviensem}} * [http://www.sgu.ru/ Situs universitatis] {{ling|Russice}} [[Categoria:Universitas Saratoviensis| ]] [[Categoria:Constituta 1909]] hvy2p30btivb18tqlfbcouf8t962mu4 3971004 3970990 2026-07-08T21:52:40Z IacobusAmor 1163 ~ 3971004 wikitext text/x-wiki {{Capsa scholae Vicidata}} [[Fasciculus:Univer_saratov.JPG|thumb|Universitas Saratoviensis.]] '''Universitas Saratoviensis'''<ref>"Universitas Regia Saratoviensis"[https://www.google.ru/books/edition/Pamietnik_obchodu_jubileuszowego_w_250_r/2hBxAAAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitas+Regia+Saratoviensis%22&dq=%22Universitas+Regia+Saratoviensis%22&printsec=frontcover]; "Universitatis Saratoviensis"[https://www.google.ru/books/edition/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%9A%D0%B0%D0%B7%D0%B0%D0%BD%D1%81%D0%BA/YX8_AQAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitatis+Saratoviensis%22&dq=%22Universitatis+Saratoviensis%22&printsec=frontcover].</ref>, nunc rite '''Universitas Nationalis Exploratoria Publica Saratovienis Černyševskiana''' ([[Russice]] Саратовский национальный исследовательский государственный университет имени Н. Г. Чернышевского, [[translitteratio|tr.]] ''Saratovskij nacional'nyj issledovatel'skij gosudarstvennyj universitet imeni N. G. Černyševskogo''), est [[universitas publica]] [[Russia]]e, [[Saratovia]]e in urbe sita. Anno [[1909]], ultima ex [[universitas|universitatibus]] [[Imperium Russicum|Imperii Russici]], ab [[imperatores Russiae|imperatore]] [[Nicolaus II (imperator Russiae)|Nicolao II]] condita, initio '''Universitas Imperialis''' (seu '''Caesarea''' vel '''Regia''') '''Nicolai''' in honorem imperatoris nominabatur. Anno [[1923]], iam universitas publica, in honorem [[Nicolaus Černyševskij|Nicolai Černyševskij]] nominata est. Anno [[2010]], una ex universitatibus nationalibus exploratoriis [[Foederatio Russica|Foederationis Russicae]] facta est. Ordines [[professor]]um tredecim et instituta [[educatio]]nis octo nunc habet. == Nota == <references /> == Nexus externi == {{CommuniaCat|Saratov State University|Universitatem Saratoviensem}} * [http://www.sgu.ru/ Situs interretialis universitatis.] {{ling|Russice}} {{Uni-stipula}} [[Categoria:Constituta 1909]] [[Categoria:Universitas Saratoviensis| ]] cmyufxqpf6oa46lhx4autbbad3sno9o 3971014 3971004 2026-07-08T23:01:06Z Bartholomite 116968 /* Nexus externi */ 3971014 wikitext text/x-wiki {{Capsa scholae Vicidata}} [[Fasciculus:Univer_saratov.JPG|thumb|Universitas Saratoviensis.]] '''Universitas Saratoviensis'''<ref>"Universitas Regia Saratoviensis"[https://www.google.ru/books/edition/Pamietnik_obchodu_jubileuszowego_w_250_r/2hBxAAAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitas+Regia+Saratoviensis%22&dq=%22Universitas+Regia+Saratoviensis%22&printsec=frontcover]; "Universitatis Saratoviensis"[https://www.google.ru/books/edition/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%9A%D0%B0%D0%B7%D0%B0%D0%BD%D1%81%D0%BA/YX8_AQAAIAAJ?hl=ru&gbpv=1&bsq=%22Universitatis+Saratoviensis%22&dq=%22Universitatis+Saratoviensis%22&printsec=frontcover].</ref>, nunc rite '''Universitas Nationalis Exploratoria Publica Saratovienis Černyševskiana''' ([[Russice]] Саратовский национальный исследовательский государственный университет имени Н. Г. Чернышевского, [[translitteratio|tr.]] ''Saratovskij nacional'nyj issledovatel'skij gosudarstvennyj universitet imeni N. G. Černyševskogo''), est [[universitas publica]] [[Russia]]e, [[Saratovia]]e in urbe sita. Anno [[1909]], ultima ex [[universitas|universitatibus]] [[Imperium Russicum|Imperii Russici]], ab [[imperatores Russiae|imperatore]] [[Nicolaus II (imperator Russiae)|Nicolao II]] condita, initio '''Universitas Imperialis''' (seu '''Caesarea''' vel '''Regia''') '''Nicolai''' in honorem imperatoris nominabatur. Anno [[1923]], iam universitas publica, in honorem [[Nicolaus Černyševskij|Nicolai Černyševskij]] nominata est. Anno [[2010]], una ex universitatibus nationalibus exploratoriis [[Foederatio Russica|Foederationis Russicae]] facta est. Ordines [[professor]]um tredecim et instituta [[educatio]]nis octo nunc habet. == Nota == <references /> == Nexus externi == {{CommuniaCat|Saratov State University|Universitatem Saratoviensem}} {{Fontes geographici}} * [http://www.sgu.ru/ Situs interretialis universitatis.] {{ling|Russice}} {{Uni-stipula}} [[Categoria:Constituta 1909]] [[Categoria:Universitas Saratoviensis| ]] hxrxwg8h6y2j5kfqmzlfklb7xnigset Formula:De formula adhibenda 10 326656 3971023 2026-07-09T00:36:10Z Grufo 64423 Prima adumbratio 3971023 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#tag:templatedata|{{safesubst:<noinclude />#invoke:params| discarding|discrimen| with_value_not_matching||strict| renaming_by_replacing|%s+(%d+)$|%1| with_name_matching |summarium|strict|or |dispositio|strict|or |ordo|strict|or |^nomen%d+$|or |^descriptio%d+$|or |^synonyma%d+$|or |^imitans%d+$|or |^titulus%d+$|or |^forma%d+$|or |^omissio%d+$|or |^exordium%d+$|or |^exemplum%d+$|or |^suasiones%d+$|or |^praesentia%d+$|or |^relictio%d+$| mapping_by_replacing|["\]|\%0| entering_substack| with_name_matching|.%-?%d+$| detaching_substack| grouping_by_calling|De formula adhibenda/argumentum| combining_values|params|naturally|h/i/f|{ |, | }| leaving_substack| renaming_by_replacing|summarium|description|strict| renaming_by_replacing|dispositio|format|strict| entering_substack|new| pulling|format| detaching_substack| with_value_matching|verticalis|strict|or|horizontalis|strict| mapping_by_replacing|verticalis|block|1|strict| mapping_by_replacing|horizontalis|inline|1|strict| merging_substack| entering_substack|new| pulling|ordo| detaching_substack| reinterpreting|ordo|trim_all|setter_string||splitter_string|{{{param order separator|,}}}| combining_values|paramOrder|h/i/f|[ "|", "|" ]| with_value_not_matching|^%s*$| leaving_substack| mapping_by_mixing|"$@"| flushing| flushing| setting|h/i/p/f|{ "|, "|": | }| all_sorted| list }}}}</includeonly><noinclude>{{Documentatio}}</noinclude> chqmzsmin1qajiwewrx0g52wtx4nc1k Formula:De formula adhibenda/argumentum 10 326657 3971024 2026-07-09T00:36:35Z Grufo 64423 Prima adumbratio 3971024 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude />#invoke:params| imposing|{{safesubst:<noinclude />#if:{{{forma|}}}|type|forma}}|{{safesubst:<noinclude />#switch:{{{forma|}}} | ignota = unknown | textualis = string | vicitextualis = content | fracta = unbalanced-wikitext | titularis = wiki-page-name | fascicularis = wiki-file-name | formularis = wiki-template-name | usoria = wiki-user-name | numeralis = number | booleana = boolean | temporalis = date | internexualis = url | #default = {{{forma|}}} }}| discarding|nomen| discarding|discrimen| discarding|praesentia| discarding|forma| purging|0|1| renaming_by_replacing|imitans|inherits|strict| renaming_by_replacing|titulus|label|strict| renaming_by_replacing|descriptio|description|strict| renaming_by_replacing|omissio|default|strict| renaming_by_replacing|exordium|autovalue|strict| renaming_by_replacing|exemplum|example|strict| renaming_by_replacing|relictio|deprecated|strict| entering_substack|new| pulling|synonyma| detaching_substack| reinterpreting|synonyma|trim_all|setter_string||splitter_string|{{{discrimen|,}}}| combining_values|aliases|h/i/f|[ "|", "|" ]| with_value_not_matching|^%s*$| leaving_substack| entering_substack|new| pulling|suasiones| detaching_substack| reinterpreting|suasiones|trim_all|setter_string||splitter_string|{{{discrimen|,}}}| combining_values|suggestedvalues|h/i/f|[ "|", "|" ]| with_value_not_matching|^%s*$| leaving_substack| mapping_by_mixing|"$@"| imposing|{{safesubst:<noinclude />#ifeq:{{{praesentia|}}}|suasa | suggested | required }}|{{safesubst:<noinclude />#switch:{{{praesentia|}}} | necessaria | suasa = true | #default = false }}| providing|required|false| flushing| flushing| setting|h/i/p/f|"{{{nomen|{{{0}}}}}}": { "|, "|": | }| all_sorted| list }}</includeonly><noinclude>{{Documentatio|contenta={{Formula machinaria}}}}</noinclude> sto2rf0o2xk0v7n37fs35rxdhc1tr91 Formula:De formula adhibenda/doc 10 326658 3971026 2026-07-09T00:45:31Z Grufo 64423 Prima adumbratio 3971026 wikitext text/x-wiki {{Non Latine}} {{Subpagina documentationis}} {{Formula substituibilis|...}} {{Formula transitoria}} {{Lua|Modulus:Params}} The <syntaxhighlight lang="wikitext" inline>{{De formula adhibenda}}</syntaxhighlight> template inserts [[:mw:Help:TemplateData|template data]] into a documentation page using parameters as input. In order to ensure compatibility with [[:mw:Help:TemplateData|the template data editor]], it is suggested (although it is not required) that this template be [[Auxilium:Substitutio|substituted]] (<syntaxhighlight lang="wikitext" inline>{{subst:De formula adhibenda|...}}</syntaxhighlight>) as soon as the documented template enters a stable phase. == De usu == The following wikitext <syntaxhighlight lang="wikitext">{{De formula adhibenda | summarium = Use this template to indicate that an article is in need of cleanup. | dispositio = horizontalis | titulus 1 = exemplum parameter 1 | descriptio 1 = exemplum parameter descriptio 1 | forma 1 = textualis | titulus 2 = exemplum parameter 2 | descriptio 2 = exemplum parameter descriptio 2 | forma 2 = textualis | exemplum 2 = Hello world | nomen 3 = date | titulus 3 = Month and year | descriptio 3 = The month and year that the template was added | forma 3 = textualis | exordium 3 = <nowiki>{{SUBST:CURRENTMONTHNAME}} {{SUBST:CURRENTYEAR}}</nowiki> | exemplum 3 = January 2013 | praesentia 3 = suasa | nomen 4 = reason | synonyma 4 = 3 | titulus 4 = Reason | descriptio 4 = The reason the article is in need of cleanup | forma 4 = textualis | nomen 5 = talk | synonyma 5 = talksection, talkpart | titulus 5 = Talk page section | descriptio 5 = The section of the talk page containing relevant discussion | forma 5 = textualis | ordo = 1, 2, date, reason, talk }}</syntaxhighlight> will expand into the following wikitext: <syntaxhighlight lang="wikitext"><templatedata>{ "description": "Use this template to indicate that an article is in need of cleanup.", "format": "inline", "paramOrder": [ "1", "2", "date", "reason", "talk" ], "params": { "1": { "description": "exemplum parameter descriptio 1", "label": "exemplum parameter 1", "required": false, "type": "string" }, "2": { "description": "exemplum parameter descriptio 2", "example": "Hello world", "label": "exemplum parameter 2", "required": false, "type": "string" }, "date": { "autovalue": "{{SUBST:CURRENTMONTHNAME}} {{SUBST:CURRENTYEAR}}", "description": "The month and year that the template was added", "example": "January 2013", "label": "Month and year", "required": false, "suggested": true, "type": "string" }, "reason": { "aliases": [ "3" ], "description": "The reason the article is in need of cleanup", "label": "Reason", "required": false, "type": "string" }, "talk": { "aliases": [ "talksection", "talkpart" ], "description": "The section of the talk page containing relevant discussion", "label": "Talk page section", "required": false, "type": "string" } } }</templatedata></syntaxhighlight> The array-containing parameters {{para|ordo}}, {{para|suasiones N}}, and {{para|synonyma N}} by default use the comma as separator; you can specify a different separator via the special parameter {{para|discrimen}} (e.g.: {{para|discrimen|///}}). == Parameter documentation == The following documentation has been created using this very template. {{De formula adhibenda | summarium = Use this template to insert template data into a documentation page using parameters as input. | dispositio = verticalis | nomen 1 = summarium | titulus 1 = Template description | descriptio 1 = The ‘descriptio’ parameter describes what the template does. It is optional but highly recommended. | forma 1 = textualis | praesentia 1 = suasa | nomen 2 = dispositio | titulus 2 = Template format | descriptio 2 = The ‘dispositio’ parameter describes how the template's wikitext should be laid out. This can be set to the standard formats of ‘horizontalis’ (‘inline’) and ‘verticalis’ (‘block’), or the user can input a set of wikitext symbols to create a custom format. | forma 2 = textualis | exemplum 2 = verticalis | nomen 3 = ordo | titulus 3 = Parameter order | descriptio 3 = The ‘ordo’ parameter is an optional list that causes the parameters of a template to be displayed in a specific order when added in the template editor. By default it expects a comma as separator; you can specify a different separator via the special parameter ‘discrimen’. | forma 3 = textualis | exemplum 3 = 1, 2, date, reason, talk | nomen 4 = discrimen | titulus 4 = List separator | descriptio 4 = By default the ‘ordo’ parameter expects a comma as separator; using this parameter you can specify a different separator. | forma 4 = textualis | exemplum 4 = /// | nomen 5 = nomen 1 | titulus 5 = First parameter's name | descriptio 5 = Name of the first parameter. When omitted it defaults to the numeric suffix of this parameter's name (‘1’). | forma 5 = textualis | omissio 5 = 1 | nomen 6 = titulus 1 | titulus 6 = First parameter's title | descriptio 6 = Label of the first parameter. | forma 6 = textualis | praesentia 6 = suasa | nomen 7 = descriptio 1 | titulus 7 = First parameter's description | descriptio 7 = Description of the first parameter. | forma 7 = textualis | praesentia 7 = suasa | nomen 8 = synonyma 1 | titulus 8 = First parameter's aliases | descriptio 8 = Aliases of the first parameter. By default this parameter expects a comma as separator; you can specify a different separator via the special parameter ‘discrimen’. | forma 8 = textualis | nomen 9 = imitans 1 | titulus 9 = First parameter's external inheritance | descriptio 9 = This is an optional parameter for when the first parameter should inherit all of the template data of another parameter. These can then be overridden by any parameters specified for the inheriting parameter. | forma 9 = textualis | nomen 10 = forma 1 | titulus 10 = First parameter's type | descriptio 10 = Currently the supported types are: ‘ignota’ (‘unknown’), ‘textualis’ (‘string’), ‘vicitextualis’ (‘content’), ‘fracta’ (‘unbalanced-wikitext’), ‘titularis’ (‘wiki-page-name’), ‘fascicularis’ (‘wiki-file-name’), ‘formularis’ (‘wiki-template-name’), ‘usoria’ (‘wiki-user-name’), ‘numeralis’ (‘number’), ‘booleana’ (‘boolean’), ‘temporalis’ (‘date’), ‘internexualis’ (‘url’). | forma 10 = textualis | praesentia 10 = suasa | nomen 11 = omissio 1 | titulus 11 = First parameter's default value | descriptio 11 = Some template parameters have a default value; the value is used unless overridden by the user. The ‘omissio 1’ item is an optional item, documentary only, that is intended to communicate this default value of the first parameter to the user. The value need not match the actual default (if there is one) and has no functional effect. (Not to be confused with ‘exordium 1’, which is a functional parameter that fills in a field for the user.) | forma 11 = textualis | nomen 12 = exordium 1 | titulus 12 = First parameter's auto value | descriptio 12 = The first parameter can be assigned an ‘exordium 1’. When a user adds the template to a page, this value will automatically appear in the input box. For example, many cleanup templates need the date added; setting the ‘exordium 1’ for the template's first parameter to be <nowiki>{{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}</nowiki>, the month and year that the template was added will be filled in automatically. | forma 12 = textualis | exemplum 12 = <<nowiki />nowiki><nowiki>{{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}</nowiki><<nowiki />/nowiki> | nomen 13 = exemplum 1 | titulus 13 = First parameter's example value | descriptio 13 = The ‘exemplum 1’ parameter is optional and documentary only; its value contains an example that helps the template's user understand the correct way to fill in the first parameter (not to be confused with ‘|praesentia 1=suasa’; see that entry for more informaion). | forma 13 = textualis | nomen 14 = suasiones 1 | titulus 14 = First parameter's suggested values | descriptio 14 = The parameter property ‘suasiones 1’ lets you define a list of values for the first parameter to be shown to visual editor users in a dropdown for easy selection. You can add suggested values to be displayed in the visual editor for parameters which have their forma set to one of the following options: ‘Content’, ‘Line’, ‘String’, ‘Number’, ‘Unknown’, ‘Unbalanced wikitext’. Other types (‘file’, ‘page’, ‘template’, ‘user’, ‘date’, ‘boolean’, ‘URL’) are not currently supported because they have special functionalities in the visual editor already, such as autocomplete, which would interfere with the drop-down menu for suggested values in the visual editor. By default this parameter expects a comma as separator; you can specify a different separator via the special parameter ‘discrimen’. | forma 14 = textualis | nomen 15 = praesentia 1 | titulus 15 = First parameter's status | descriptio 15 = The ‘praesentia 1’ parameter can be set to ‘necessaria’ or ‘suasa’ or ‘voluntaria’. When unspecified the value defaults to ‘voluntaria’. Use ‘|praesentia 1=necessaria’ to determine that filling in the first parameter is mandatory for the template. Use instead ‘|praesentia 1=suasa’ when the first parameter is not mandatory but strongly recommended for template users to provide. When filling in this parameter, the user will see this suggestion. | forma 15 = textualis | nomen 16 = relictio 1 | titulus 16 = First parameter's deprecated status | descriptio 16 = The ‘relictio 1’ parameter can be set to ‘true’, ‘false’, or a string describing what users should instead do. When unspecified the value defaults to ‘false’. This is a status for when the first parameter should not be used any more but still exist for the time being. This could be because uses of the template are being moved from one set of parameters to another. | forma 16 = textualis | ordo = summarium, dispositio, ordo, discrimen, nomen 1, titulus 1, descriptio 1, synonyma 1, imitans 1, forma 1, omissio 1, exordium 1, exemplum 1, suasiones 1, praesentia 1, relictio 1 }} == Subformulae auxiliares == * {{Fn|De formula adhibenda/argumentum}} == Ulteriora si cupis == * [[:mw:Help:TemplateData]] <includeonly>{{in harenario aut alibi|| <!-- Categorias sub hac linea adde --> [[Categoria:Formulae|{{PAGENAME}}]] [[Categoria:Formulae quae seorsos versus creant|{{PAGENAME}}]] [[Categoria:Formulae documentationis|{{PAGENAME}}]] [[Categoria:Formulae variadicae|{{PAGENAME}}]] }}</includeonly> tg5agenrgw7gs5el1iycf014ryg2geh Congregatio de Cultu Divino et Disciplina Sacramentorum 0 326659 3971056 2026-07-09T06:35:00Z Bartholomite 116968 Bartholomite movit paginam [[Congregatio de Cultu Divino et Disciplina Sacramentorum]] ad [[Dicasterium de Cultu Divino et Disciplina Sacramentorum]]: nunc 3971056 wikitext text/x-wiki #REDIRECT [[Dicasterium de Cultu Divino et Disciplina Sacramentorum]] irp6fqm481l8ubvj5no17lrwe921ed2 Temperatura thermodynamica 0 326660 3971061 2026-07-09T07:18:30Z Grufo 64423 Grufo movit paginam [[Temperatura thermodynamica]] ad [[Temperatura]]: Non video cur “temperatura” tantum non sufficiat 3971061 wikitext text/x-wiki #REDIRECT [[Temperatura]] n695k7exq73u2edoz97tl3fzgb2raf9 Mutianum (Langobardia) 0 326661 3971063 2026-07-09T07:24:05Z Rei Momo 58149 Paginam instituit, scribens '{{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico (LO) - frazione Muzzano.jpg|thumb|Ecclesia et vetera casa paroecialis Mutianii]] '''Mutianum''' ([[Lingua Italiana|Italiane]] ''Muzzano''; dialecto Laudensi ''Müsàn'') est [[Vicus Italiae|vicus urbanus]] [[Agellum Gomperticum|Agelli Gompertici]] in [[Provincia Laudensis|Provincia Laudensi]] [[Italia]]e situs. Circiter triginta chiliometra ad meridiem Mediolani situm est. == Historia == Nomen vici ori...' 3971063 wikitext text/x-wiki {{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico (LO) - frazione Muzzano.jpg|thumb|Ecclesia et vetera casa paroecialis Mutianii]] '''Mutianum''' ([[Lingua Italiana|Italiane]] ''Muzzano''; dialecto Laudensi ''Müsàn'') est [[Vicus Italiae|vicus urbanus]] [[Agellum Gomperticum|Agelli Gompertici]] in [[Provincia Laudensis|Provincia Laudensi]] [[Italia]]e situs. Circiter triginta chiliometra ad meridiem Mediolani situm est. == Historia == Nomen vici originem Romanam innuit (enim in ea regione ''Gens Mutia'' agros possidebat).<ref>Giovanni Agnelli, Lodi ed il suo territorio nella storia, nella geografia e nell'arte, Lodi, Lodigraf, 1990 [1917], p. 575, ISBN 88-7121-046-8</ref> Anno 1869, pars civitatis Agelli Gompertici factum est. == Ecclesia Catholica Romana == * [[Dioecesis Laudensis]] {{NexInt}} * [[Langobardia]] (''regio''), * [[Provincia Laudensis]], * [[Laus Nova]] (''urbs''), == Notae == <references /> == Nexus externi == * [https://www.lombardiabeniculturali.it/istituzioni/toponimi/6000143/ Mutianum apud lombardiabeniculturali.it situs] {{CommuniaCat|Muzzano (Zelo Buon Persico)|Mutianum (Langobardia)}} [[Categoria:Fractiones in Provincia Laudensi]] ha7yhpgxi4xxd1x6i3pko9psjyjz8h7 3971071 3971063 2026-07-09T08:43:44Z Rei Momo 58149 3971071 wikitext text/x-wiki {{Capsa urbis Vicidata}} [[Fasciculus:Zelo Buon Persico (LO) - frazione Muzzano.jpg|thumb|Ecclesia et vetera casa paroecialis Mutianii]] '''Mutianum''' ([[Lingua Italiana|Italiane]] ''Muzzano''; dialecto Laudensi ''Müsàn'') est [[Vicus Italiae|vicus urbanus]] [[Agellum Gomperticum|Agelli Gompertici]] in [[Provincia Laudensis|Provincia Laudensi]] [[Italia]]e situs. Circiter triginta chiliometra ad meridiem Mediolani situm est. == Historia == Nomen vici originem Romanam innuit (enim in ea regione ''Gens Mutia'' agros possidebat).<ref>Giovanni Agnelli, Lodi ed il suo territorio nella storia, nella geografia e nell'arte, Lodi, Lodigraf, 1990 [1917], p. 575, ISBN 88-7121-046-8</ref> Anno 1869, pars civitatis Agelli Gompertici factum est. == Monumenta et praeclari loci == * Ecclesia paroecialis, sanctorum Cosmae et Damiani dicata. * [[Coemeterium Mutiani|Parvum coemeterium]], quod adhuc triginta fere sepulchra continet. == Ecclesia Catholica Romana == * [[Dioecesis Laudensis]] {{NexInt}} * [[Langobardia]] (''regio''), * [[Provincia Laudensis]], * [[Laus Nova]] (''urbs''), == Notae == <references /> == Nexus externi == * [https://www.lombardiabeniculturali.it/istituzioni/toponimi/6000143/ Mutianum apud lombardiabeniculturali.it situs] {{CommuniaCat|Muzzano (Zelo Buon Persico)|Mutianum (Langobardia)}} [[Categoria:Fractiones in Provincia Laudensi]] 3buplg9o1n6hse784nflb82ujv8vkdw