Vicipaedia lawiki https://la.wikipedia.org/wiki/Vicipaedia:Pagina_prima MediaWiki 1.47.0-wmf.24 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 Marcus Tullius Cicero 0 164 3995524 3995365 2026-10-18T20:19:30Z Marcus Terentius Bibliophilus 2059 /* De familia */ 3995524 wikitext text/x-wiki {{L1}} {{Videdis|Cicero (discretiva)}} {{Capsa hominis Vicidata}} {{res|Marcus Tullius Cicero}} (natus [[3 Ianuarii]] [[106 a.C.n.]]; mortuus [[7 Decembris]] [[43 a.C.n.|43]]) fuit [[orator]], [[philosophus]], [[poeta]], [[ars rhetorica|rhetor]], [[civilitas|vir rei publicae]] peritissimus, qui idem excellentissimus [[scriptor]], peritus illius clari [[lingua Latina|sermonis]], aestimari solet. Ipse fuit primus in [[gens Tullia|gente Tullia]] qui Cicero appellatus est, et cognomen traxisse dicitur a [[cicer]]ibus, quod eius [[legumen|leguminis]] ferendi rationem optime calleret. Alii ab habitu [[facies|faciei]] eum ita cognominatum putant, vel quod maculis ciceri similibus aspersus esset, vel quod in extrema nasi parte [[Tuber (fungus)|tuber]]culum figura ciceris habuerit. == Vita == [[Fasciculus:Marci Tullii Ciceronis Opera Omnia.tif|thumb|''Opera omnia'', 1566]] Cicero [[Arpinum|Arpini]] in [[municipium|municipio]] [[Latium|Latio]] natus est anno [[106 a.C.n.|centesimo sexto ante Christum natum]]. [[Formiae]] autem necatus scelere iussu [[Marcus Antonius|M. Antoni]] patrato est anno [[43 a.C.n.|quadragesimo tertio ante Christum natum]]. Cicero [[puer]] [[Roma]]e informatus ad omne disciplinae genus est, una cum fratre suo. [[Gens Tullia]] antiqua nobilitate equestri nota possidebat haud parvam rem familiarem fortunasque satis amplas, ut quae ingeniosissimo puero liberalem institutionem suppeditare possent. Cicero, qui [[nihil]] in re publica immutari volebat, aegre quidem ferebat se cum [[Gaius Marius|Mario]], qui tunc celebrior esset longeque paratior ad res novandas, comparari. === De iuventute === Cicero Romae educatus, ubi (sint modo vera quae apud [[Plutarchus|Plutarchum]], modo respuendus, modo locuples auctor, legimus) egregio ingenio praeditus, ceteris condiscipulis suis praestabat,<ref>Plutarchus, Cicero 2.2.</ref> et liberalibus studiis imbutus magistros, sicut [[Quintus Mucius Scaevola Pontifex|Mucium Scaevolam]], habuit partim ibidem, partim doctissimos in [[Graecia]] viros. Satis constat Ciceroni, id quod ille saepius commemoravit, ab initio eam philosophorum sectam placuisse, cuius praecepta cum ad ingenium tum ad negotia oratoris optime referri posse viderentur. [[Academia|Academicos]] enim recentiores, qui nihil pro certo haberent, recusavit tamquam disiunctos a vita vera usuque rerum, quem [[philosophia]]e ille tam prope vinciendum aestimavit ut mores cuique et sententias, ac praesertim acta moderatio philosophiae regeret. Philosophiam enim Cicero in primis usui destinari censuit, utpote quae mentem animumque erudiat, cogitantem hominem ad mortem beatam praeparet metuque levaret: philosophia, velum detrahens vitae terrestribus rebus artissime constrictae, dolorem vitae imminuens, pura aeternaque adpetens, docere secundum Ciceronem debuit morti obviam ire quasi e corporis vinculis tandem liberaremur, qua laxatione solum referret quo propius iustitiam moderationemque a nobis agnitas vixissemus, quamque constanter vitae tulissemus dolores. Cicero quidem [[Philo]]nem secutus est, qui non solum [[ars rhetorica|artem oratoriam]] simul atque philosophiam doceret, verum hanc etiam ab illa secerni posse negaret. A [[Sophistae|sophistis]] enim profectus, si sapientia cum eloquentia coniungeretur, eam demum [[humanitas|humanitatem]] esse dixit. Neque etiam fieri potuit, quin Cicero ad doctrinam Philonis ipsam libenter traheretur. Qui affirmavit semper in utramque partem esse disputandum nec, quid verum esset, quaerendum, sed, quod cuique veri simile esse videretur, id esse tenendum. Nec mirum; nam Ciceronis ipsius omnis ars in eo nitebatur, quod audientibus persuaderi posset. Cicero etiam conatus est versificare, in quibus numerantur conversiones [[Homerus|Homeri]] et ''[[Phaenomena (Aratus)|Phaenomenorum]]'' [[Aratus Solensis|Arati]], ad quas [[Publius Vergilius Maro|Vergilius]] postea in ''[[Georgica|Georgicon]]'' libris praecepta quaedam rettulit colonorum. Singulari fuit atque eximia eloquentiae facultate, cuius ope imprimis actionibus [[Gaius Verres|Verrinis]], quamquam homo novus erat, per omnes honorum gradus suo anno ad consulatum adscendit. Antea intrans cursum honorum, Cicero erat miles cum Pompeiano Strabone in Bello Sociali, tum in [[cursus honorum|cursum honorum]] adulescens intrat: fuit [[quaestor]] anno 76 a.C.n., dein proquaestor provinciae [[Sicilia]]e; [[aedilis]] anno 69; [[praetor]] anno 66. Omnes magistratus in suo anno egit. === De consulatu === [[Fasciculus:Cilicia (Imperium Romanum).png|thumb|Provinciae Romanae: [[Cilicia]] [[flavus|flavo]] colore est, cuius provinciae annis a [[51 a.C.n.|51]] ad [[50 a.C.n.]] fuit Cicero [[proconsul]].]] In consulatu ([[63 a.C.n.]]), [[Catilina]]e [[Catilinae coniuratio|coniurationem]] detexit, et rem publicam ab exitio servavit, quam ob rem est a populo conclamatus [[Pater Patriae]], sed cum quosdam patricios Catilinae socios, indicta causa, ex senatus consultu in [[carcer]]e necandos curavisset, [[Publius Clodius Pulcher|Publio Clodio]] legem ferente in exsilium pulsus est. Decimo sexto autem mense decreto senatus revocatus est. post Cicero erat consul, Cicero factus est proconsul Ciliciae anno [[51 a.C.n.]] Cicero, qui mirum in modum sui laudandi cupidus erat, primum consul [[epistula]]m de rebus a se gestis magnam ad [[Pompeii|Pompeium]] misit, quae periit non secus atque cetera eius opera de ea re confecta. Tum spes in [[Archias|Archia]] poeta Graeco posuit, qui morem ab [[Ennius|Ennio]] institutum secutus eoque tempore multa admiratione affectus in viris illustribus populi Romani celebrandis desudabat. Ab eo, qui [[carmen heroicum]] unum ad [[Quintus Lutatius Catulus|Catulum]] de bello cum [[Cimbri]]s gesto, alterum de victoria a [[Lucius Licinius Lucullus|Lucullo]] de [[Mithridates VI (rex Ponti)|Mithridate]] reportata scripserat, Cicero impetrare voluit, ut consulatus etiam sui laudes caneret. Ideo pro Archia accusato, quod fraude civitatem sibi Romanam comparavisset, anno [[62 a.C.n.|62]], causam dixit oratione, quae exstat. Anno vero proximo mense Maio, ad [[Titus Pomponius Atticus|Atticum]] amicum scripsit Archiam a [[Lucullus|Lucullo]] ad [[Metelli|Metellos]] studium videri contulisse suum (Att. 1.16.14 sq.), quam ob rem ipse denique laudes suas inchoavit. === De senectute et morte === Cicero, [[Gaius Iulius Caesar|Caesare]] in [[Gallia]] bellum gerente, multas orationes civiles Romae habuit; multas litteras conscripsit. Nihil paene de sexto decennio novimus, nisi ille orationibus tempora descripsisset. Multos defendit accusavitque, ideoque permulta nomina nobis tradita sunt, quorum semina non habemus. Cicero in [[bellum civile|bello civili]] [[Gnaeus Pompeius Magnus|Pompeium]] Caesari reconciliare temptavit, quia Gaium Iulium Caesarem [[pontifex maximus|pontificem maximum]] cognovit; Pompeium autem consularem appellavit. Cum religionem Caesaris auctoritatemque Pompei imperatoris fundamenta rei publicae habenda esse postularet, pluris tamen iuris auctoritatem quam religionis aestimavit. Bello civili stetit a partibus Pompeii; nihilominus, a Caesare victore veniam impetravit. Quo interfecto, [[Triumviratus|triumviris]] Romae velut regnantibus, [[Marcus Antonius|Antonii]] et [[Gaius Iulius Caesar Octavianus Augustus|Octavii]] et [[Marcus Aemilius Lepidus|Lepidi]] Cicero [[Proscriptiones (43 a.C.n.)|proscriptus]] ab Herennio [[Centurio|centurione]] et Popillio [[Tribunus militum|tribuno militum]] occisus est, quem parricidii reum olim defenderat. Annos natus 64, cum a villa sua prope [[Capua]]m ad mare fugiens lectica deferretur, Cicero trucidatus est iussu Antonii, quem orationibus "[[Philippicae (Cicero)|Philippicis]]" suis ille summopere irritaverat. Ad Antonium caput Ciceronis et manus praecisae delatae sunt et in [[rostrum|rostris]] deinde expositae.<ref>[[Plutarchus]], ''Cicero'' 48–49. [[Annaeus Seneca maior|Seneca Maior]], ''Suasoriae'' 6.17; 6.22 (= Livius: [[Ab urbe condita]], fragmenta 59 et 60). [[Appianus Alexandrinus|Appianus]], ''Bell. civ.'' IV,73-82.</ref> [[Fulvia (uxor Antonii)|Fulvia]] vero Antonii uxor linguam crinali acu repetitis ictibus, multisque exsecrationibus, feminea vindicatione transfixit. Qui circumstabant horruisse dicuntur gaudium quo Fulvia mariti honorem, Cicerone oratore tam diu ludibrio publico praebitum, ulta est cum Ciceronis linguam acu transfigeret manusque insultaret quas ille candidas mollesque agitavisset odium in Antonium senatui pleno etiam atque etiam verbis commovens atrocibus.<ref>[http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Cassius_Dio/47*.html#8.4].</ref> Res tamen facta, quamvis petulanter, finis auctoritatem Romae habuit, cum terminum tam publicum tam publico bello imposuit quod Cicero cum Antonio ferociter gesserat, Flavia Antonium maritum victorem clamante, victumque Ciceronem usque in ipsius ore inimicum punitum. === De familia === Cicero uxorem duxit [[Terentia (uxor Ciceronis)|Terentiam]] et ex ea genuit [[Marcus Tullius Cicero (Iunior)|Marcum]] filium atque [[Tullia (filia Ciceronis)|Tulliam]] filiam (de cuius morte vehementer doluit). Frater ei fuit tribus annis minor [[Quintus Tullius Cicero|Quintus]] qui sororem eius optimi amici Pomponii Attici uxorem duxerat: matrimonium non concors non erat et orator Arpinas saepe Atticum et fratrem Quintum ad reconciliationem hortabatur<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.17.1-4 et I.20.11.</ref>. Cognatus quoque erat cum [[Gaius Marius|Mario]] per aviam Gratidiam. === De villis et domo urbana === Plures villas habuit Cicero: praeter [[Arpinum|Arpinatem]] paternam<ref>''[[Ad Atticum]]'' I.16.18</ref> [[Tusculum|Tusculanam]] maxime amabat et ab amico Attico petebat ut e Graecia ornamenta varia sibi mitteret ad eam ornandam<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' libro primo.</ref>. Quae villa illustris facta est quia ibi Cicero studebat, legebat, scribebat, philosophabatur (unde ''[[Tusculanae disputationes]]'' dictae). [[Formiae|Formianam]] villam quoque possidebat. Anno 62 post consulatum domum [[Marcus Licinius Crassus (triumvir)|Marci Crassi]] in [[Mons Palatinus|Palatino monte]] magno pretio<ref>''[[Epistulae ad familiares|Ad Familiares]]'' V.6.2: 3 500 000 HS.</ref> emit quod rumores malignos suscitavit<ref>[[Aulus Gellius]] XII.12. ''[[Invectiva in Ciceronem]]'' 3. Cf ''[[Epistulae ad Atticum]]'' I.12.1 (pecuniam mutuandam quaerit).</ref>. Magnam summam enim tum a [[Publius Cornelius Sulla|P. Sylla]] mutuatus est, quem apud iudices [[Pro Sulla|defendit]] et adfirmavit non esse e Catilinae coniuratis. == Opera == Plurima composuit, quorum maior pars exstat: multos [[liber|libros]] de eloquentia [[philosophia]]que, elegantissimas [[epistula]]s, multas et peritissimas [[oratio]]nes, necnon fragmenta [[carmen|carminum]]. Opera Ciceronis documenta uberrima illius temporis habenda sunt quo respublica est in imperium conversa, quo motu cursus gentium Italiae Europaeque vehementer inflexus in perpetuum est, atque post [[Europa]]m, vita orbis reliqui totius terrarum. Cicero inter patres [[lingua Latina|linguae Latinae]] vocari potest, ac nisi ille facultates verba [[philosophia Graeca|philosophiae Graecae]] in linguam Latinam [[interpres|vertendi]] adhibuisset, multa verba huius disciplinae ignota vel obscura essent. {{Cicero tituli}} == Fortuna == [[Fasciculus:William Blake - Marcus Tullius Cicero - Manchester City Gallery - Tempera on canvas c 1800.jpg|thumb|Cicero famam perennem habet: hic, anno [[1800]], est pictus a [[Gulielmus Blake|Gulielmo Blake]].]] Erant quoque qui Ciceronem suo tempore reprehenderent propter illam verborum copiam, id est supervacuorum verborum flumen, qui ab Seneca quasi deficentia quaedam significationis et studii videbatur. In his recognosces et [[Attica|Atticistarum]] contentionem in Ciceronem, et [[Asia]]norum studium in Ciceronianam concinnitatem, sobriam verborum coniunctorum dispositionem. Ad hoc eius detrectatores maligne ad memoriam revocant versus principem in ''De Consulatu Suo,'' illum infelicem "O fortunatam natam me consule Romam," qui argumentum Ciceronis superbiae ac vaniloquentiae semper ostendebatur. Ciceronem illis famosis verbis se ipsum alterum [[Romulus|Romulum]] esse affirmantem auctor [[invectiva]]e cuiusdam illudit appellans eum "Romule Arpinas".<ref>[[Sallustius|(Pseudo-)Sallustius]], ''In M. Tullium Ciceronem invectiva'' 7.</ref> Sed his duobus milibus annorum qui nos ab illo discernunt, nulla acta est aetas quin Ciceronis facundia culmen linguae Latinae haberetur, quin verbis compositionique et eloquentiae eius maximo ardore studeretur, quin qui Latinas litteras discebant iis magistri proponerent Ciceronis orationes ante alias omnes subito imitandas. == Notae == <references/> == Bibliographia == [[Fasciculus:Cistophor of Marcus Tullius Cicero.jpg|thumb|upright=0.8|[[Cistophorus]] [[Apamea (Phrygia)|Apameae]] cusus cum nomine Marci Tulli Ciceronis qui proconsul [[Cilicia|Ciliciae]] anno 51/[[50 a.C.n.]] fuit.]] * {{Fabricius Latina}} pp. 88-149 * Eleanor Winsor Leach, "Gendering Clodius" in ''Classical World'' vol. 94 (2001) pp. 335-359. * von Albrecht, Michael. ''Cicero's Style: A Synopsis.'' Lugduni Batavorum et Bostoniae: Brill, 2003. ISBN 9004129618. * [[Ernestus Badian|Badian, E]]: "Cicero and the Commission of 146 B.C.", ''Collection Latomus'' 101 (1969), 54-65. * {{Cite book |last=Caldwell |first=Taylor |title=A Pillar of Iron |url=https://archive.org/details/pillarofiron0000cald_l2s6 |publisher=Doubleday & Company |location=New York |year=1965 |isbn=0385053037}}. * Cicero, Marcus Tullius, Cicero’s letters to Atticus, Vol, I, II, IV, VI, [[Cambridge University Press]], Great Britain, 1965. * Cicero, Marcus Tullius, Latin extracts of Cicero on Himself, translated by Charles Gordon Cooper, University of Queensland Press, Brisbane, 1963. * Cicero, Marcus Tullius, Selected Political Speeches, Penguin Books Ltd, Great Britain, 1969. * Cicero, Marcus Tullius, De Officiis (On Duties), conv. [[Walter Miller (philologist)|Walter Miller]]. Harvard University Press, 1913, ISBN 978-0-674-99033-3, ISBN 0-674-99033-1. * Cicero, Marcus Tullius, Selected Works, Penguin Books Ltd, Great Britain, 1971. * Cowell, F R: ''Cicero and the Roman Republic'' (Penguin Books, 1948; liber saepissime impressus) * {{Cite book |last=Everitt |first=Anthony |title=Cicero: the life and times of Rome's greatest politician |url=https://archive.org/details/cicerolifetimeso0000ever |publisher=Random House |location=New York |year=2001 |isbn=0375507469}} * {{Cite book |title=The Last Generation of the Roman Republic |last=Gruen |first=Erich S. |year=1974 |publisher=University of California Press |location= |isbn= }} * {{Cite book |title=This was Cicero |url=https://archive.org/details/bwb_O4-BPQ-161 |last=Haskell |first=H. J. |authorlink= |coauthors= |year=1942 |publisher=Alfred A. Knopf}} * Haury, Auguste. ''L'Ironie et l'humeur chez Cicéron.'' Lugduni Batavorum: Brill, 1955. OCLC 381672. * Hutchinson, G. O. ''Cicero's Correspondence: A Literary Study.'' Oxonii: Oxford University Press, 1998. ISBN 0-19-815066-0. * {{Cite journal |doi=10.2307/4350381 |last=March |first=Duane A. |authorlink= |coauthors= |year=1989 |month= |title=Cicero and the 'Gang of Five' |url=https://archive.org/details/sim_classical-world_march-april-1989_82_4/page/225 |journal=Classical World |volume=82 |issue= 4|pages=225–234}}. * May, James M., ed. ''Brill's Companion to Cicero: Oratory and Rhetoric.'' Lugduni Batavorum et Bostoniae: Brill, 2002. ISBN 9004121471. * {{Cite book |title=Cicerone. La parola e la politica |last=Narducci |first=Emanuele |authorlink= |coauthors= |year=2009 |publisher=Laterza |location= |isbn=8842076058 }}. * [[Plutarch]] Penguins Classics English translation by Rex Warner, ''Fall of the Roman Republic, Six Lives by Plutarch: Marius, Sulla, Crassus, Pompey, Caesar, Cicero'' (Penguin Books, 1958; with Introduction and notes by Robin Seager, 1972). * Rawson, Beryl: ''The Politics of Friendship: Pompey and Cicero'' (Sydney University Press, 1978). * [[Elizabeth Rawson|Rawson, Elizabeth]]: ** "Cicero the Historian and Cicero the Antiquarian", ''JRS'' 62 (1972), 33-45. ** ''Cicero: A Portrait'' (Allen Lane, Penguin Books Ltd., 1975) ISBN 0-7139-0864-5. Revised edition: Bristol Classical Press, 1983. ISBN 0-86292-051-5. American edition of revised edition: Cornell University Press, 1983. ISBN 0-8014-1628-0 (hardcover); ISBN 0-8014-9256-4 (paperback). * [[H.H. Scullard|Scullard, H. H.]] From the Gracchi to Nero, University Paperbacks, Great Britain, 1968. * Smith, R. E. ''Cicero the Statesman.'' Cambridge University Press, 1966. * Steel, Catherine, ed. ''Cambridge Companion to Cicero.'' Cantabridgiae: Cambridge University Press, 2013. ISBN 978-0521729802. * Stockton, David: ''Cicero: A Political Biography'' (Oxford University Press, 1971). * {{Cite document |last=Strachan-Davidson |first=James Leigh |title=Cicero and the Fall of the Roman Republic |publisher=Oxford University Press |location=Oxford |year=1936}}. * Stroup, Sarah Culpepper. ''Catullus, Cicero, and a society of patrons: the Generation of the Text.'' Cantabridgiae: Cambridge University Press, 2010. ISBN 9780521513906. * {{Cite document |last=Taylor |first=H. |title=Cicero: A sketch of his life and works |url=https://archive.org/details/cicerosketchofhi00taylrich |location=Chicago |publisher=A. C. McClurg & Co. |year=1918}}. * Tatum, W. J. [[1990]]. "Cicero and the Bona Dea Scandal." ''Classical Philology'' 85: 202-208. * Thorbecke, J. R. [[1818]].l ''[https://web.archive.org/web/20140810102554/http://home.kpn.nl/~dmjanssen1960/cicero_philo_l.html De Principio Philosophiae et Officiorum in Ciceronis Operibus Philosophicis.]'' * Thorbecke, J. R. [[1819]]. ''[https://web.archive.org/web/20140810112832/http://home.kpn.nl/~dmjanssen1960/cicero_rhetor_l.html Ex iis quae in libris Ciceronis de Oratore a Crasso, Antonio, Caesare, aliis, de Eloquentia disputantur, ipsius efficiatur Ciceronis de perfecto oratore sententia.]''. * Vasaly, Ann. ''Representations: Images of the World in Ciceronian Oratory.'' Berkeley: University of California Press, 1993. ISBN 0520077555. * {{Cite book |title=Cicero Imperator: Studies in Cicero's Correspondence 51-47 B.C. |url=https://archive.org/details/ciceroimperators0000wist |last=Wistrand |first=M. |authorlink= |coauthors= |year=1979 |publisher= |location=Göteborg}}. * {{Cite book |last=Yates |first=Frances A. |title=The Art of Memory |publisher=University of Chicago Press |location=Chicago |year=1974 |isbn=0226950018}}. {{NexInt}} * [[Asconius]] * [[Caerellia]] * [[Fibrenus]] == Nexus externi == {{vicicitatio|Marcus Tullius Cicero|Ciceronem}} {{vicifons|Marcus Tullius Cicero}} {{CommuniaCat|Cicero|Ciceronem}} {{Fontes biographici}} * [https://web.archive.org/web/20210308010602/http://www.thelatinlibrary.com/cic.html Opera] apud [[The Latin Library]] * "[https://web.archive.org/web/20051125123207/http://www.utexas.edu/depts/classics/documents/Cic.html Situs Ciceronis domesticus]" * [https://web.archive.org/web/20071029141407/http://www.slu.edu/colleges/AS/languages/classical/latin/tchmat/pedagogy/latinitas/plut/cic/cicvit1.html Plutarchi ''Vita Ciceronis'' interprete Theodoro Doehner] * Cicero in Catilinam in YouTube: [http://www.youtube.com/watch?v=vggmssbaGKc] {{Lifetime|106 a.C.n.|43 a.C.n.|Cicero, Marcus Tullius}} [[Categoria:Auctores Latini antiqui]] [[Categoria:Consules]] [[Categoria:Deistae]] [[Categoria:Epistolographi]] [[Categoria:Gens Tullia]] [[Categoria:Iuris consulti Romani antiqui]] [[Categoria:Necati]] [[Categoria:Oratores]] [[Categoria:Philosophi Italiae Romanae]] [[Categoria:Poetae Latini Romae antiquae]] [[Categoria:Praetores]] [[Categoria:Scriptores de arte rhetorica]] [[Categoria:Scriptores de divinatione]] [[Categoria:Scriptores Italiae antiquae]] [[Categoria:Senatores]] [[Categoria:Marcus Tullius Cicero|!]] [[Categoria:Catilinae coniuratio]] [[Categoria:Victimae Belli Civilis (44-30 a.C.n.)]] {{Myrias|Homines}} 9upukagusvu63ry980ww0591eit6f4y Tellus (planeta) 0 973 3995509 3911212 2026-10-18T18:00:08Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995509 wikitext text/x-wiki {{Latinitas|-1}} {{videdis|Terra}} {{Capsa tabellaria | titulus = Tellus, Terra ⊕ | : [[Fasciculus:The Blue Marble (remastered).jpg|300px]]<br />Tellus | ; Repertum | Reperta a: ― | Reperta anno: ''nota antiquis'' | ; Proprietates orbitales | Intervallum a [[sol]]e (ua): 1 [[unitas astronomica|ua]] | [[Axis semimaior]]: {{num|149597887}} [[chiliometrum|km]] | [[Perihelion]]: {{num|147098074}} km | [[Aphelion]]: {{num|152097701}} km | [[Eccentricitas]]: {{num|0.01671022}} | [[Periodus orbitalis]]: {{num|365.25696}} [[Dies|diebus]] | [[Inclinatio orbitalis]]: {{num|0.00005}}° (epochi 2000) | [[Satelles]]: 1 | Satellitis nomen: [[Luna]] | ; Proprietates physicae | Media [[diametrus]]: {{num|12745.591}} km | [[Area (geometria)|Area]]: {{num|510065284.702}} [[chiliometrum quadratum|km<sup>2</sup>]] | [[Massa]]: 5.9736 × 10<sup>24</sup> [[chiliogramma|kg]] | [[Densitas]]: 5.515 [[gramma|g]]/cm<sup>3</sup> | [[Gravitas]]: 9.81 [[Acceleratio|m/s<sup>2</sup>]] | [[Velocitas effugiendi]]: 11.186 km/s | [[Periodus rotationis]]: 23 h 56 min | [[Inclinatio axialis]]: 23.44° | [[Albedo]]: 0.367 | [[Temperatura]]: 200 [[Kelvin|K]] min, 288 [[Kelvin|K]] med, 330 [[Kelvin|K]] max | ; Proprietates [[atmosphaera|atmosphaericae]] | [[Pressio atmosphaerica]]: 101.325 [[Paschalis|kPa]] | [[Nitrogenium]]: 78.01% | [[Oxygenium]]: 20.95 % | [[Argon]]: 0.93 % | [[Carbonii dioxidum]]: 0.04% }} {{Res|Tellus}} ({{pns|ūris|f|Tellus}}), seu {{Res|Terra}}, est tertius [[planeta]] a [[Sol]]e [[stella]] sua, [[densitas|densissimus]] planeta, quintus a maximo ex octo [[Systema Solare|systematis Solaris]] planetis, et maximus ex quattuor Systematis Solaris [[planeta terrestris|planetis terrestribus]]. Quae aliquando appellatur [[Terra (regio)|mundus]], planeta [[caeruleus]],<ref name="blueplanet">{{cite journal|date=Februario [[2009]]|title=Exploring the Water Cycle of the ‘Blue Planet’: The Soil Moisture and Ocean Salinity (SMOS) mission|journal=ESA Bulletin|publisher=[[European Space Agency]]|issue=137|pages=6–15. |url=http://www.esa.int/esapub/bulletin/bulletin137/bul137b_drinkwater.pdf |first1=Mark |last1=Drinkwater |first2=Yann |last2=Kerr |first3=Jordi |last3=Font |first4=Michael |last4=Berger |quote=A view of Earth, the ‘Blue Planet.’ . . . . When astronauts first went into the space, they looked back at our Earth for the first time, and called our home the ‘Blue Planet’.}}</ref> Tellus/Terra Mater, et adeo in variis [[lingua|linguis]] ipso nomine [[lingua Latina|Latino]] ''[[wikt:Terra|Terra]]''. Signa Telluri [[Medium Aevum|Medio Aevo]] data sunt [[Fasciculus:Globus cruciger.svg|16px|♁]] et [[Fasciculus:Earth symbol.svg|16px|🜨]]. Domus [[millio]]num [[species (taxinomia)|specierum]] [[biologia|biologicarum]], [[homo|genere humano]] non excepto, Tellus nunc est solus [[universum|universi]] locus ubi [[vita]]m esse scimus. Planeta abhinc [[Aetas planetae Telluris|annorum 4.54 milia millionum]] formatus est, et in eius [[supreficies|superficie]] abhinc milia millionum annorum [[abiogenesis|apparuit vita]]. [[Biosphaera]] Telluris [[aër|atmosphaeram]] aliosque [[abioticus|abioticos]] planetae status magnopere mutavit, auctum [[organismus aerobius|organismorum aerobiorum]] et formationem [[tabulatum ozoniferum|tabulati ozoniferi]]<!--ozone layer--> sinens, quod, una cum [[Magneticus Telluris campus|magnetico Telluris campo]], noxiam [[radiatio solaris|Solis radiationem]] occludit, [[Vita extranea|vitam superterram]] exsistere sinens. [[Geophysica|Geophysicae Telluris proprietates]], et [[geologia|geologica]] planetae [[historia]] et [[orbis (astronomia)|orbis]], vitam [[anthropocaenum|hoc aevo]] persistere siverunt. Planeta vita mustenturus{{dubsig}} ire putatur 500 milliones annorum tantum. == Forma telluris == {{Ipse dixit|Quocirca si mundus globosus est ob eamque causam omnes eius partes undique aequabiles ipsae per se atque inter se continentur, contingere idem [[terra (solum)|terrae]] necesse est, ut omnibus eius partibus in medium vergentibus (id autem medium infimum in sphaera est) nihil interrumpat quo labefactari possit tanta contentio [[gravitas (physica)|gravitatis]] et [[massa|ponderum]]. Eademque ratione [[mare]], quum supra terram sit, [[Nucleus Telluris interior|medium tamen terrae locum]] expetens conglobatur undique aequabiliter neque redundat umquam neque effunditur. Huic autem continens [[atmosphaera|aër]] fertur ille quidem levitate sublimis, sed tamen in omnes partes se ipse fundit.|[[Marcus Tullius Cicero|Cicero]], {{Op|[[De natura deorum (Cicero)|De natura deorum]]}}, {{Vf|De natura deorum/Liber II|II. 116.}}}} Sicut omnes planetae, Tellus vi et [[gravitas (physica)|gravitate]] formam globi habet; cum autem circum axem suum rotetur, in polis aliquatenus plana est. Inde circumscriptio lineae [[aequinox|aequinoctialis]] {{num|40075.004}} [[chiliometrum|chiliometrorum]] longa 134.336 chiliometra longior est circumscriptione polari ({{num|39940.638}} km), quae sunt 0.34 centesimae. (Diametri ergo sunt {{num|12756.270}} km, sive {{num|12713.500}} km.) Telluris autem forma non exacte est [[ellipsoideum|ellipsoidica]]: ea, [[geoides]] nominata, nonnullis locis ±100 metra a forma ellipsoidae differt. Cum Tellus globus non sit, qui altissimus sit [[mons]] Telluris, dici non potest, nam [[altitudo|altitudinem]] maximam super [[maris aequor]] [[Mons Everest]] (in iugo montium [[Himalaia]]) tenet; maxime autem a medio Telluris distat apex [[mons ignifer|montis igniferi]] [[Chimborazus (mons ignifer)|Chimborazi]] (in [[Aequatoria]]),<ref>[http://www.npr.org/templates/story/story.php?storyId=9428163 "The 'Highest' Spot on Earth,"] apud www.npr.org.</ref> fundamentum et summum [[mons|montis]] [[Mauna Kea|Maunae Keae]] (in [[Havaii]]s) maxime distant. ==Quomodo Tellus structa sit== [[Fasciculus:Volcán Chimborazo, "El Taita Chimborazo".jpg|thumb|upright=0.7|left|Apex Montis [[Chimborazus (mons ignifer)|Chimborazi]] in [[Aequatoria]] est locus in [[superficies|superficie]] telluris, qui maxime a media parte distat.<ref>[http://www.npr.org/templates/story/story.php?storyId=9428163 "The 'Highest' Spot on Earth,"] apud www.npr.org.</ref>]] Tellus est maxima in numero planetarum [[saxum|saxis]] structorum nostri systematis solaris. Ceteri autem [[planeta]]e ita structi sunt minores, (velut [[Mercurius (planeta)|Mercurius]], [[Venus (planeta)|Venus]], [[Mars (planeta)|Mars]], vel [[Asteroides|Planetoides]]); planetae maiores (sicut [[Iuppiter (planeta)|Iuppiter]]) in primis e [[gas]] constant. Tellus orta est abhinc [[annus|annorum]] circa 4550 milliones, et veterrimi Telluris [[lapis|lapides]], [[zircon]], 4385 milliones annorum habent. Intra 100 milliones annorum tot [[meteorites|meteoritae]] in Tellurem cadebant elementaque radiantia tantum calorem efficiebant, ut Tellus recens maxima e parte liquesceret. (Fortasse etiam alter planeta [[Mars (planeta)|Martis]] magnitudine cum Tellure collidens hoc effecit simulque [[Luna]]m genuit.) In Tellure, [[liquidum|liquida]] [[elementum chemicum|elementa]] vi et gravitate dirempta sunt ut gravissima, praecipue [[ferrum]], medium locum tenerent, leviora autem, praecipue [[oxygenium]], [[silicium]], [[aluminium]], [[sphaera]]m extremam fingerent. Quibus ex elementis mineralia silicium continentia orta sunt, quae [[Cortex Telluris|corticem Telluris]] fingunt. Cum Tellus in primis e [[ferrum|ferro]], [[niccolum|niccolo]], [[silicium|silicio]], [[oxygenium|oxygenio]], [[aluminium|aluminio]] exstet, [[densitas]] Telluris est maior, nempe 5.515 g/cm³. Sicut plerique planetarum Telluris similium maiorumque satellitum Telluris ipsius [[superficies]] duas in partis seu [[hemisphaerium|hemisphaeria]] divisa est: hemisphaerium [[terra (humus)|terrarum]] atque hemisphaerium [[aqua]]rum. In hoc aevo, maria 70.7 centesimae superficiei tegunt. Terrae (29.3%) in primis septem [[continens|continentes]] faciunt: [[Asia]]m (maiorem) et [[Europa]]m (melius in unam coniungendas, scilicet in [[Eurasia]]m), [[Africa]]m, [[America Septentrionalis|Americam Septentrionalem]], [[America Meridionalis|Americam Meridionalem]], [[Antarctica]]m, [[Oceania|Australiam]]. Minores terrae positione non continentes, sed insulae vocantur. Maria sunt: [[tres]] [[ocesnua|oceani]] ([[Oceanus Pacificus|Pacificus]], [[Oceanus Atlanticus|Atlanticus]], [[Oceanus Indicus|Indicus]]), et complura [[mare|maria]] minora, sicut [[Mare Internum]] et [[Oceanus Arcticus]]. In [[fossa Mariannensis]] oceanus est altissimus, {{num|11034}} metrorum infra maris aequor. [[Mensura]]e [[terraemotus|seismicae]] Tellurem tribus e sphaeris constare patefecerunt: e Telluris nucleo, amictu, cortice. Hae sphaerae planis discontinuitatis seismicis in vices terminantur. Cortex parsque superior amictus [[lithosphaera]]m faciunt. Inter 50 ac 100 chiliometra crassa est divisaque in [[Lamina tectonica|laminas tectonicas]], et magnas et parvas. Laminae maiores plerumque [[continens|continentes]] aequiperant praeter laminam Pacificam. Hae laminae in saxis partim [[liquefactio|liquefactis]] amictus superioris, in [[asthenosphaera]] 100 ad 150 chiliometra crassa, moventur. Nuclei Telluris [[nucleus Telluris exterior|pars exterior]] liquida est calore plus quam 4000 [[Kelvin|K]], [[nucleus Telluris interior|pars interior]] vi et gravitate firma est. In media parte Telluris [[nucleus Telluris|nucleus]] situs esse videtur. ==Atmosphaera== [[Atmosphaera]] Telluris circiter 600 chiliometra [[altitudo|altitudinis]] est. [[Massa]] atmosphaerae 5.13×10<sup>18</sup> [[chiliogramma]]ta est, id est decima centesima millesima pars massae Telluris. Pressio [[aër]]is in aequoris altitudine 1013 hPa est, densitas aëris 1.293 kg/m<sup>3</sup>. In aequoris altitudine aër in primis e 78 centesimis [[Nitrogenium|nitrogenii]], 21 centesimis [[Oxygenium|oxygenii]], 1 centesimo [[Argon|argonis]] exstat. [[Vapor]] aquae (0%-5%) etiam in aëre est et tempestates efficit. Praeterea multa et alia gasa minima quidem parte aëri insunt, quae tamen [[caelum|caelo]] maioris momenti sint, e.g. [[carbonii dioxidum]] vel [[methanum]]. Cum atmosphaera Telluris [[Lux|lucis]] Solis partem [[caeruleus|caeruleam]] brevius undatam quinquiens magis dispergat quam partem [[ruber|rubram]] longius undatam, [[caelum]] nobis caeruleum videtur. Aequor autem marium atque oceanorum e [[spatio|spatio cosmico]] caeruleum videtur, cum aqua ipsa lucem rubram magis absorbat. Inde Tellus etiam ''planeta caeruleus'' vocatur. ==Temperatura== Status [[energia|energeticus]] Telluris maxima e parte de ''insolatione'' (de copia radiorum Solis) deque reflexione vel superficiei vel atmosphaerae, ergo de statu radiationis, dependit. Cetera enim tantum 0.02 centesimas efficiunt; etiam periodus [[Macula solaris|Solis macularum]] plus efficit. Fere 0.013 centesimae e radionucleoidibus in Tellure dissolventibus oriuntur, 0.007 centesimae homo efficit materiem fossilem urens vel nuclea atomorum findens, 0.002 centesimae ex attritu [[aestus marinus|aestuum]] fiunt. [[Albedo]] Telluris plus minusve 0.367 est, cuius maiorem partem [[nubes]] excitant. Inde [[temperatura]] universa est effectiva{{dubsig}} 246 [[Kelvin|K]] (id est, -27 [[Gradus Celsianus|graduum Celsianorum]]). Medius autem [[calor]] humi est 288 K (+15 graduum Celsianorum) [[Effectus tepidarius|effectus tepidarii]] causa, quod imprimis vapor aquae ac dioxidum carbonii efficiunt. Extremae temperaturae umquam in Tellure mensae sunt hae: -89.6 gradus Celsiani ([[21 Iulii]] [[1983]] in [[Vostok Statio|statione Vostok]] nominata in terra Antarctica) et +53 gradus Celsiani in [[Valles Mortis|Valle Mortis]] in [[Civitates Foederatae|Civitatibus Foederatis]]). Calore medio 15 graduum Celsianorum soni velocitas in aequoris altitudine est circiter 340 m/s. ==Unde aqua in Tellurem venerit== Unde aqua in Tellurem venerit, praecipue autem, cur plus aquae in Tellure sit quam in ceteris planetis Telluris similibus, adhuc non satis liquet. Pars aquae e magmate evaporavisse et inde e medio Telluris orta esse putatur. Quod tamen tantam copiam aquae explanare nequit. Aliae partes e [[Cometes|stellis crinitis]], ex [[OZK|obiectis ultra Neptunum revolventibus]], ex [[Asteroides|asteroidibus]] in Tellurem ceciderint. [[Isotopum|Isotoporum]] ratio [[Deuterium|deuterii]] pro [[Protium|protio]] (D/H ratio) in maribus mensa magis aequat ei in chondritis carbonicis inventae (quae reliquiae asteroidum in Tellurem casorum sciuntur), sed minus ei in stellis crinitis vel obiectis ultra Neptunum revolventibus exploratae. ==Motus cosmici== <!--=== Orbis ===--> {| align="center" cellspacing="0" cellpadding="2" |- | colspan="4" | <center>Rationes intervallorum planetarum interiorum.</center> |- | bgcolor="black" colspan="4" | [[Fasciculus:Erde Venus Merkur Sonne.png|center|600px|Rationes intervallorum Tellus/Luna, Venus, Mercurius, Sol. Solis magnitudo hic normam respicit.]] |- | style="width:26%;" | <small>'''Tellus'''/Luna</small> | style="width:32%;" | <small>Venus</small> | style="width:17%;" | <small>Mercurius</small> | style="width:25%;" align="right" | <small>Sol (normam respiciens)</small> |} Tellus, una cum systemate Solare, est in [[Via Lactea]] [[galaxia]] sita, se circa {{num|28000}} [[Spatium lucis annuae|annorum lucis]] a media galaxia movens. Ea nunc est circa viginta annos lucis supra [[planum aequatoriale]] in [[Bracchium Orionis|spirali Orionis bracchio]]. Medium spatium mediae Telluris ac medii Solis circiter {{num|149597870}} [[chiliometrum|km]] est. Quod spatium primo [[unitas astronomica|unitatem astronomicam]] (ua) definiebat, qua unitate astronomi in primis ad intervalla intra [[systema solare]] metienda utuntur. Locus orbitae Telluris, qui Soli proximus est, perihelium vocatur et 0.983 [[unitas astronomica|ua]] a Sole distat, locus remotissimus aphelium vocatus 1.017 ua distat. Orbita Telluris igitur [[ellipsis]] est excentritatis 0.0167. Spatium inter Solem et Tellurem autem non constat, sed altero quoque anno 10 [[centrimetrum|cm]] augetur. Revolutio Telluris circum Solem nunc 365 d 6 h 9 min 9.54 s durat, quae periodus ''[[annus]] sideralis'' vocatur. Orbita Telluris [[linea ecliptica]] appellatur, planities autem, in qua orbita iacet, planities ecliptica. == Luna == Circa Tellurem movetur [[Luna (satelles)|Luna]], cuius ratio massarum ac Telluris tanta est, ut Tellus et Luna nonnumquam systema binorum planetarum vocetur pro planeta ac satellite. Ratio massarum modo in systemate [[Pluto (planeta)|Plutonis]] et [[Charon (satelles)|Charontis]] maior est. [[Fasciculus:Earth-moon.jpg|thumbnail|'''Tellus''' de Luna visa]] Quod Luna tanta est, declinatio lineae eclipticae valde stabilis est, ut condiciones vitae in Tellure bene maneant. <br/> <br/> {| align="center" cellspacing="0" cellpadding="2" style="margin-left:1em;" |- | colspan="4" | <center>Rationes magnitudinum et spatii inter '''Tellurem''' Lunamque.</center> |- | bgcolor="white" colspan="4" | [[Fasciculus:Earth-Moon.jpg|600px|Rationes magnitudinum et spatii verae inter Tellurem et Lunam.]] |- | colspan="3" | <small>'''Tellus'''</small> | align="right" | <small>Luna</small> |} === Rotatio === Tellus in 23 [[Hora|horis]] 56 [[Minutus|minutis]] 4.09 [[Secundus|secundis]] circum [[axis (geometria)|axim]] suum rotatur, quod tempus ''[[dies]] sideralis'' vocatur. Cum autem Telluris orbita circulum non sit, locus Solis die subsequenti non idem est atque die proximo. Spatium temporis inter summos soles, id est inter meridies subsequentis inde paulum longius est die siderali: id spatium ''dies solaris'' dicitur qui positione 24 [[hora]]s continet. [[Fasciculus:Rotating earth (large).gif|thumbnail|'''Tellus''' ut rotans visa]] Cum axis rotationis Telluris (hoc in aevo) 23.44° a linea ecliptica declinet, utraque hemisphaera (septentrionalis ac meridionalis) diversis orbitae locis diverse illustratur, unde [[tempora anni]] caelum suum efficientia oriuntur. == Aestus == Luna in Tellure non solum in maribus, sed etiam in terris (circa semimetrum) et in Telluris amictu [[aestus marinus|aestus]] efficit, qui rotationem Telluris circum se ipsam paulatim frenant, ut dies circiter 20 [[microsecunda|µs]] per annum longiores fiant. Ex energia rotationis calor fit, impulsus rotationis a Tellure in Lunam transfertur, ut Lunae orbita altero quoque anno 4 centimetra a Tellure removeatur. Mensurae spatii inter Lunam et Tellurem [[instrumentum lasericum|instrumento laserico]] factae ex anno 1995 hoc effectum iam diu suspicatum demonstraverunt. Alia argumenta haec sunt: in [[Curalium|curalii]] [[fossile|fossilibus]] anuli crescendi inveniuntur, qui omni die unum vestigium relinquebant. Item annorum singulorum vestigia inveniuntur. Inde numerum dierum anni pristini linquunt et annus constans ex illo numero [[aevum geologicum|aevo geologico]] auctus esse habetur. Etiam [[Defectio solis|Solis defectiones]] litteris mandatae demonstrant diem longiorem factum esse, nam si dies aequus mansisset, defectiones aliis locis visae essent. Olim Tellus et Luna rotationem coniunctam habeant, Tellus quoque Lunae unam atque eandem partem praebeat, dies futurus quadraginta septem dies hodiernos contineat, nisi antea Sol se expandens hoc systema disturbet. == De vita deque caelo == === Origo vitae === Adhuc sola in Tellure vita probatur. Tamen vita iam paucis annis post frequentissimos asteroidum casus in Telluris primordiis coepisse videtur. In saxeis [[sedimentum|sedimentis]] adhuc ante 3850 milliones annorum genitis, quae in regione [[Isua]] (in [[Groenlandia]]) inventa sunt, rationes isotoporum [[Carbonium|carbonii]] (C-12 / C-13) a norma discrepant, forsan vitae causa. In saxis ante 3500 milliones annorum genitis [[Warrawoona]]e (in [[Australia]]) nonnulli viri docti [[cyanobacteria]] fossilia inventa esse existimant. Certa autem sunt [[bacteria]] [[fossile|fossilia]] e formatione [[Gunflint]] (in [[Ontarium|Ontario]] / [[Canada]]) ante 1900 milliones annorum genita. [[Evolutio]] et [[chemica]] et [[biologia|biologica]] cum [[historia]] caelorum arte coniuncta est, nam vita quidem de condicionibus datis dependit, sed ipsa Tellurem mutat. In primis [[photosynthesis]] [[planta|satorum]] atmosphaerae [[oxygenium]] dabat, ut nunc atmosphaera res oxydans<!--?--> sit. Etiam Telluris albedo satis terras tegentibus mutata est. Vetustiores sententias de Telluris vitaeque origine legere potes (e. g.): * in libro [[Genesis]] nominato (capitibus 1 et 2), et in [[Psalmus 104|psalmo 104]] (enumeratione Graeca 103), * in [[Publius Ovidius Naso|Ovidii]] ''[[Metamorphoses (Ovidius)|Metamorphoseon]]'' libro I (versis 5–88). === Zonae === Tellus hodie non in quinque, ut e.g. apud Ovidium legimus, sed in septem zonas dividitur: * in duas zonas frigidas sive polares (a polis ad circulos polares / 66.56° latitudinis) * in duas [[zona temperata|zonas temperatas]] (inter 66.56° et 40°) * in duas [[zona subtropica|zonas subtropicas]] (inter 40° et 23.44° i.e. [[Circulus Solis vertentis|circulos Solis vertentis]] (et [[Cancri tropicus|aestivum]] et [[Capricorni tropicus|brumalem]]) * in [[zona tropica|zonamque tropicam]] (inter circulos Solis vertentis). ==== Zonae polares ==== Zona polaris borealis [[arctis]] vocatur, maiore e parte [[Oceanus Arcticus|mare]] est. Zona polaris australis [[antarctis]] vocatur, maxima e parte continens Antarctica est. Propria harum zonarum sunt multa [[nix]] vel [[glacies]], frigus, sed etiam dies vel [[nox]] semestris. Videntur etiam [[Aurora borealis|aurorae boreales]]. ==== Zonae temperatae ==== Zonae temperatae a circulis polaribus ad 40° latitudinis patent. In zonis temperatis [[tempora anni]] ([[ver]], [[aestas]], [[autumnus]], [[hiemps]]) manifeste dignoscuntur, et spatium diei noctisque in cursu anni valde variatur. [[Arbor]]es imprimis sunt coniferae vel frondeae, quae frondem autumno amittunt. ==== Zonae subtropicae ==== Hae inter 40° latitudinis et circulum solstitialem ([[Cancer (sidus)|Cancri]]) vel circulum brumalem ([[Capricornus (sidus)|Capricorni]]) sitae sunt. Spatium diei noctisque paulum tantum variatur. Hae regiones dignoscuntur: aridae, hieme umidae, aestate umidae, semper umidae. In aliis regionibus, e.g. circum mare Internum, multa et varia genera satorum crescunt, in aliis parca, in [[deserta|desertis]] sicut [[Sahara]] nulla. ====Zona tropica==== Haec zona ab utraque parte circuli aequinoctialis ad circulos solstitialem et brumalem spectat. In [[zona tropica]], et dies et noctes semper duodecim horas manent. Sol autem partim per meridiem, partim medium per caelum, partim per septentrionalem cursum diei facit, unde verbum ''tropicae'' ortum est ([[Graece]]: ''τρόπος'' 'versio'). Dignoscuntur regiones tropicae semper umidae et aliquotiens umidae. Illis non sunt tempora anni; his autem tempus aridum et tempus [[pluvia|pluviosum]]. Proprii eis sunt campi ampli, ubi [[herba]]e [[gramen|graminaque]] varia crescunt. Qui campi in Africa [[savanna]], in [[America Meridionalis|America Meridionali]] ''[[pantanal]],'' vocantur. Illis regionibus semper umidis etiam propriae sunt [[silva]]e incaeduae, quae etiam [[Silva pluvialis tropica|silvae pluviales tropicae]] vocantur, quaeque generibus et [[arbor]]um et [[flos|florum]] et [[animal|bestiarum]] abundant. ===De temporibus anni=== Cum axis Telluris ad lineam eclipticam 23.44° inclinatus sit, tempora anni sunt varia, in primis in zonis temperatis. Haec enim inclinatio efficit, ut dies vere ac aestate longiores sint [[nox|noctibus]] et tum terrae mariaque plus radiorum solis accipiant. Dies praecipui sunt: [[21 Decembris]]: Solstitium (brumale). Sol in tropico Capricorni (brumali) iter per caeli verticem facit. In [[hemisphaera septentrionalis|hemisphaera septentrionali]], dies brevissimus adest et hiems incipit; in [[hemisphaera australis|hemisphaera australi]], dies longissimus est et aestas incipit. In polo arctico [[media nox]] adest; in polo australi [[meridies]]. [[20 Martii]]: Aequinoctium (vernale). Ubique terrarum dies et nox duodecim horas manent. In [[Septentriones|septentrionibus]] ver incipit; in [[meridies (pars caeli)|austro]] autumnus. Sol in linea aequinoctiali per caeli verticem iter diei facit. [[21 Iunii]]: Solstitium (aestivum). Sol in circulo [[Cancer (sidus)|Cancri]] (solstitiali aestivo) iter per caeli verticem facit, diem longissimum et aestatem incipiens in septentrionalibus, diem brevissimum et hiemem incipiens in australi. [[22 Septembris]]: Aequinoctium (autumnale). Sol in linea aequinoctiali iter per caeli verticem facit. In septentrionibus incipit autumnus, in austro ver. ===Quod homo efficit=== [[Homo|Homines]] priores erant pauci, et [[venatio et collectio|venationibus collectionibusque]] [[victus|vescebantur]]. [[Res novae neolithicae|Rebus novis neolithicis]] factis, [[agricultura]] et pecuaria coeperunt (in "[[luna dimidia frugifera]]" millennio undecimo, in [[Sina (regio)|Sina]] millennio octavo, et in terra nunc [[Mexicum|Mexicana]] [[millennium 6 a.C.n.|millennio sexto a.C.n.]]). Inde segetes [[planta]]eque sata naturalia depulerunt. [[Inductio industriarum|Inductione industriarum]] (a [[saeculum 19|saeculo undevicensimo]]) non solum regiones amplissimae mutatae sunt, sed etiam [[pollutio]] [[aqua]]rum, [[humor]]um, [[aer]]is crevit. [[Gas]]a sicut [[carbonii dioxidum]] Tellurem calefacere itaque [[caelum]] mundanum mutare videntur. Numerus autem hominum crescere nondum desiit. Anno [[1920]] 1800 millionesdubsig hominum Tellurem incolebant; anno [[2005]] 6400 milliones; anno [[2050]] plures quam 9000 milliones fore divinantur. Homo iam effecturus est, ut paene totidem genera bestiarum satorumque exstinguantur atque in fine [[aevum cretaceum|aevi cretacei]] exstincta sunt. {| align="center" |[[Fasciculus:Whole world - land and oceans_12000.jpg|thumb|upright=1.4|Tellus interdiu.]] |[[Fasciculus:Earthlights dmsp 1994–1995.jpg|thumb|upright=1.4|Tellus noctu.]] |} {{NexInt}} {{div col|3}} * [[Continens]] * [[Dies Telluris]] * [[Geographia]] * [[Geologia]] * [[Historia terrae]] * [[Hydrologia]] * [[Lacus]] * [[Mare]] * [[Mons#Mons Terrae|Montes Telluris]] * [[Mundus]] * [[Mythus Telluris planae]] * [[Oceanographia]] * [[Scientia telluris]] * [[Tonitruum]] {{div col end}} ==Notae== <references/> ==Bibliographia== [[Fasciculus:AS8-13-2329.jpg|thumb|Primum "ortus '''Telluris'''" - photographema ab astronautis ex [[astronavis|astronavi]] [[Apollo 8|Apolline 8]] factum]] *Allen, Clabon Walter, et Arthur N. Cox. [[2000]]. ''Allen's Astrophysical Quantities.'' Springer. ISBN 0387987460. * Butler, R. F. [[1992]]. '' Paleomagnetism: Magnetic Domains to Geologic Terranes.'' Blackwell Scientific Publications. ISBN 0-86542-070-X. * The Cambridge Atlas of Astronomy. [[1985]]. Cantabrigiae: Cambridge University Press & Newnes Books. * Campbell, W. H. [[2003]]. ''Introduction to Geomagnetic Fields.'' Novi Eboraci: Cambridge University Press. ISBN 0-521-82206-8. * Canup, R., et E. Asphaug. [[2001]]. "Origin of the Moon in a Giant Impact near the End of the Earth's Formation." ''Nature'' 412: 708–12. * Comins, Neil F. [[2001]]. ''Discovering the Essential Universe.'' Editio secunda. W. H. Freeman. ISBN 0-7167-5804-0. * Dalrymple, G .B. [[1991]]. ''The Age of the Earth.'' Stanford University Press. ISBN 0-8047-1569-6. * Dalrymple, G. B. [[2001]]. "The Age of the Earth in the Twentieth Century: A Problem (Mostly) Solved." In ''Geological Society Special Publications'' 190: 205–221. * Dole, S. H. [[1970]]. ''Habitable Planets for Man.'' Editio secunda. American Elsevier Publishing Co. ISBN 0-444-00092-5. * Doolittle, W. F. [[2000]]. "Uprooting the Tree of Life." ''Scientific American'' 282 (6): 90–95. **{{cite journal|date=Februarius [[2009]]|title=Exploring the Water Cycle of the ‘Blue Planet’: The Soil Moisture and Ocean Salinity (SMOS) mission|journal=ESA Bulletin|publisher=[[European Space Agency]]|issue=137|pages=6–15 |url=http://www.esa.int/esapub/bulletin/bulletin137/bul137b_drinkwater.pdf |first1=Mark |last1=Drinkwater |first2=Yann |last2=Kerr |first3=Jordi |last3=Font |first4=Michael |last4=Berger |quote=A view of Earth, the ‘Blue Planet’[. . . .] When astronauts first went into the space, they looked back at our Earth for the first time, and called our home the ‘Blue Planet’.}} * Duff, D. [[1993]]. ''Holmes' Principles of Physical Geology.'' Editio 4a. Chapman & Hall. ISBN 0-412-40320-X. * Dutch, S. I. [[2002]]. "Religion as Belief versus Religion as Fact." ''Journal of Geoscience Education'' 50 (2): 137–44. * Edis, T. [[2003]]. ''A World Designed by God: Science and Creationism in Contemporary Islam.'' Amherst: Prometheus. ISBN 1-59102-064-6. * Emilliani, Cesare. [[1992]]. ''Planet Earth: Cosmology, Geology, and the Evolution of Live and Environment.'' Cantabrigiae: Cambridge University Press. ISBN 0-521-40949-7. * Fowler, C. M. R. [[1990]]. ''The Solid Earth: An Introduction to Global Geophysics.'' Cantabrigiae: Cambridge University Press. ISBN 0-521-38590-3. * Gould, Stephen Jay. [[1994]]. "The Evolution of Life on Earth." ''Scientific American.'' * Harrison, R. M., et R. E. Hester. [[2002]]. ''Causes and Environmental Implications of Increased UV-B Radiation.'' Royal Society of Chemistry. ISBN 0-85404-265-2. * Hillebrand, H.. [[2004]]. "On the Generality of the Latitudinal Gradient." ''American Naturalist'' 163 (2): 192–211. * Kasting, J. F. [[1988]]. "Runaway and Moist Greenhouse Atmospheres and the Evolution of Earth and Venus." ''Icarus'' 74: 472–94. * Kelley, Kevin W., ed [[1989]]. ''Der Heimatplanet.'' Frankfurt am Main: Zweitausendeins. ISBN 3-86150-029-9. * Kirschvink, J. L. [[1992]]. "Late Proterozoic Low-Latitude Global Glaciation: The Snowball Earth." In ''The Proterozoic Biosphere: A Multidisciplinary Study,'' ed J. W. Schopf, C. Klein, et D. Des Maris, 51–52. Cambridge University Press. ISBN 0-521-36615-1. * Laskar, J., P. Robutel, F. Joutel, M. Gastineau, A. C. M. Correia, et B. Levrard, B.. [[2004]]. "A Long-Term Numerical Solution for the Insulation Quantities of the Earth." ''Astronomy and Astrophysics'' 428: 261–85. * Liu, S. C., et T. M. Donahue. [[1974]]. "The Aeronomy of Hydrogen in the Atmosphere of the Earth." ''Journal of Atmospheric Sciences'' 31 (4): 1118-36. * Liungman, C. G. [[2004]]. ''Symbols: Encyclopedia of Western Signs and Ideograms.'' Novi Eboraci: Ionfox AB. ISBN 91-972705-0-4. * Macdougall, J. D. [[2000]]. ''Eine kurze Geschichte der Erde.'' Econ Taschenbuchverlag. ISBN 3-612-26673-X. * Mill, H. R. [[1893]]. "The Permanence of Ocean Basins." ''The Geographical Journal'' 1 (3): 230–34. * Morbidelli, A., J. Chambers, J. I. Lunine, J. M. Petit, F. Robert, G. B. Valsecchi, et K. E. Cyr. [[2000]]. "Source Regions and Time Scales for the Delivery of Water to Earth." ''Meteoritics & Planetary Science'' 35 (6): 1309–20. * Moran, J. M. [[2005]]. ''Weather, in het World Book Online Reference Center.'' NASA/World Book. * Morgan, J. W., et E. Anders. [[1980]]. "Chemical Composition of Earth, Venus, and Mercury." ''Proceedings of the National Academy of Sciences'' 71 (12): 6973–77. * Mullen, L.. [[2002]]. "Salt of the Early Earth." ''NASA Astrobiology Magazine.'' * Murphy, J. B., et R. D. Nance. [[1965]]. "How Do Supercontinents Assemble?" ''American Scientist'' 92: 324–33. * Oldroyd, David. [[1998]]. ''Die Biographie der Erde.'' Zweitausendeins. ISBN 3-86150-285-2. * Patterson, C. [[1956]]. "Age of Meteorites and the Earth." ''Geochimica et Cosmochimica Acta'' 10: 230–37. * Pidwirny, M.. [[2006]]. [http://www.PhysicalGeography.net ''Fundamentals of Physical Geography.''] * Raup, D. M., et J. J. Sepkoski. [[1982]]. "Mass Extinctions in the Marine Fossil Record." ''Science'' 215 (4539): 1501–03. * Rona, P. A. [[2003]]. "Resources of the Sea Floor." ''Science'' 299 (5607): 673–74. * Ross, M. R. [[2005]]. "Who Believes What? Clearing up Confusion over Intelligent Design and Young-Earth Creationism." ''Journal Of Geoscience Education'' 53 (3): 319. * Sackmann, I.-J., A. I. Boothroyd, K. E. Kraemer. [[1993]]. "Our Sun: III: Present and Future." ''Astrophysical Journal'' 418: 457–48. * Schröder, K.-P., et R. C. Smith. [[2008]]. "Distant Future of the Sun and Earth Revisited." ''Monthly Notices of the Royal Astronomical Society.'' * Scott, M. [[2006]]. ''Earth's Big Heat Bucket.'' NASA Earth Observatory. * Shiklomanov, I. A., ed. [[1999]]. ''World Water Resources and Their Use Beginning of the 21st Century.'' Sancti Petersburgi: UNESCO & State Hydrological Institute. * Stanley, S. M. [[1999]]. ''Earth System History.'' Novi Eboraci: W. H. Freeman & Co. ISBN 0-7167-2882-6. * Tinetti, G., A. Vidal-Madjar, M.-C. Liang, J.-P. Beaulieu, Y. Yung, S. Carey, R. J. Barber, J. Tennyson, I. Ribas, N. Allard, G. E. Ballester, D. K. Sing, et F. Selsis. [[2007]]. "Water Vapour in the Atmosphere of a Transiting Extrasolar Planet." ''Nature'' 448: 169–171. * Ward, P. D., et D. Brownlee. [[2004]]. ''The Life and Death of Planet Earth: How the New Science of Astrobiology Charts the Ultimate Fate of Our World.'' H. Holt & Co. ISBN 0-8050-7512-7. * Ward, P. D., et D. Brownlee. [[2000]]. ''Rare Earth: Why Complex Life is Uncommon in the Universe.'' Novi Eboraci: Springer-Verlag. ISBN 0387987010. * Williams, D. M., et J. F. Kasting. [[1996]]. "Habitable Planets with High Obliquities." ''Lunar and Planetary Science'' 27: 1437–38. == Nexus externi == {{CommuniaCat|Earth|Tellurem}} {{Vicivia|Tellus}} * [http://www.astronomycast.com/stars/episode-51-earth/ "Astronomy Cast" (Audio—Cain/Gay),] apud www.astronomycast.com. * [http://solarsystem.nasa.gov/planets/profile.cfm?Object=Earth Descriptio Telluris] a [http://solarsystem.nasa.gov/ NASA's Solar System Exploration composita]. * [https://web.archive.org/web/20060903141820/http://www.geody.com/ Geody—Visita Terram,] apud www.geody.com. * [https://web.archive.org/web/20090122063915/http://www.nasa.gov/centers/goddard/earthandsun/earthshape.html Mutationes climatis faciunt ut forma Telluris mutetur (NASA),] apud www.nasa.gov. * [http://earthobservatory.nasa.gov/ Observatorium Telluris,] apud earthobservatory.nasa.gov. * [https://web.archive.org/web/20090430041323/http://eol.jsc.nasa.gov/Coll/weekly.htm Porta ad Photographiam Telluris ab Astronautis Factam,] apud eol.jsc.nasa.gov. * [http://geomag.usgs.gov/ Programma de Geomagnetismo USGS,] apud geomag.usgs.gov. {{systema solare nostrum}} [[Categoria:Geographia]] [[Categoria:Geologia]] [[Categoria:Terra|!]] {{1000 paginae}} {{FA stella}} {{Myrias|Physica}} c6yi25ql173h61g9ibzw1clc1s1fmwu Aballo 0 1856 3995548 3547411 2026-10-19T03:03:47Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995548 wikitext text/x-wiki {{videhom|Avalon}} {{Capsa urbis Vicidata}} '''Aballo'''<ref>"Aballo, Aballum, Avalo": {{Graesse}}</ref> ([[Francogallice]]: ''Avallon'') est commune [[Francia|Francicum]] 7252 incolarum (anno [[2009]]) [[Tabula administrativa Franciae|praefecturae]] [[Icauna (praefectura Franciae)|Icaunae]] in provincia orientali [[Burgundia (regio Franciae)|Burgundia]]. == Notae == <references/> {{NexInt}} * [[Index communium praefecturae Icaunae]] == Nexus externi == [[Fasciculus: Avallon-Tour de l'Horloge depuis la place de la Collégiale Saint-Lazare.jpg|thumb|Avallo: despectus in veterem urbiculam.]] {{Fontes geographici}} {{CommuniaCat|Avallon|Aballonis}} * [https://web.archive.org/web/20060830205820/http://www.ville-avallon.fr/ Aballonis pagina interretialis] {{urbs-stipula}} [[Categoria:Communia Praefecturae Icaunae]] [[Categoria:Loci habitati praefecturae Icaunae]] 9fsreia3zh56p5mgdgmc6d77b2bi8gh 1888 0 3599 3995545 3072699 2026-10-19T02:42:41Z Ziv 172423 ([[c:GR|GR]]) [[File:Vincent Willem van Gogh 076.jpg]] → [[File:Van Gogh - The Night Café (1888).jpg]] Crit 2: More precise 3995545 wikitext text/x-wiki {{Decennium|189|MDCCCLXXXVIII}} == Eventa == === Mense Martio === * [[9 Martii]] - [[Fridericus III (Imperator Germaniae)|Fridericus III]] imperator Germaniae factus est. === Mense Aprili === * [[13 Aprilis]] - [[Theodorus Rosetti]] novus primus minister [[Romania]]e nominatus est. Successor est [[Ioannes Constantinus Brătianu|Ioannis Constantini Brătianu]]. === Mense Maio === * [[15 Maii]] - Isabella, heres imperii [[Brasilia]]e [[Lex Aurea|Legem Auream]] proclamavit, qua omnes servi in eo imperio sine retributione liberandi sint. === Mense Iunio === * [[15 Iunii]] - [[Gulielmus II (Imperator Germaniae)|Gulielmus II]] post mortem patris (vide infra) imperator Germaniae factus est. === Mense Augusto === * [[18 Augusti]] - [[Statio principalis Francofurtensis]] [[ferrovia]]e inaugurata est. === Mense Septembri === *[[28 Septembris]] - In [[Brasilia]] [[Lex Aurea]] promulgata est, qua omnes servi liberati sunt. === Die ignoto === * Diarium Suecicum [[Skånska Dagbladet]] a Rudolpho Asp et Leonardo Ljunglund conditum est. * [[Monacum|Monaci]] diarium [[Socialis Democratica Factio Germaniae|Sociali Democratica Factione Germaniae]] [[Münchener Post]] primo editum est. == Nati == === Mense Ianuario === * [[8 Ianuarii|8]] - [[Richardus Courant]], [[mathematicus]] [[Germania|Germanicus]]; mortuus est anno [[1972]]. * [[11 Ianuarii|11]] - [[Henricus de Michael]], vir publicus [[Germania|Theodiscus]]; mortuus est anno [[1942]]. * [[28 Ianuarii|28]] - [[Ludovicus Mordell]], [[mathematicus]] [[Regnum Unitum|Britannicus]]; mortuus est anno [[1972]]. * [[29 Ianuarii|29]] - [[Men Rauch]], machinator, rerum politicarum peritus et [[poeta]] [[Helvetia|Helveticus]] [[lingua Rhaetica (Romanica)|Linguae Rhaeticae]]; mortuus est anno [[1958]]. * [[29 Ianuarii|29]] - [[Eduardus Lear]], poeta et pictor [[Anglia|Anglicus]], ad [[Villa Matuciana|Villam Matutiam]] mortuus est === Mense Februario === * [[18 Februarii]] - [[Iacobus Kaiser]], vir publicus [[Germania|Germanicus]] factionis primo [[Centrum|Centri]], deinde [[CDU]]; mortuus est anno [[1961]]. * [[27 Februarii]] - [[Carola Lehmann]], [[supranus]] [[opera]]tica [[Germania|Germanica]]; mortua est anno [[1976]]. === Mense Martio === * [[22 Martii]] - [[Emmanuel List]], theatri lyrici [[bassus]] [[Austria|cus]]-[[CFA|Americanus]]; mortuus est anno [[1967]]. === Mense Aprili === * [[18 Aprilis]] - [[Frida Leider]], theatri lyrici [[supranus]] [[Germania|Germanica]]; mortua est anno [[1975]]. * [[30 Aprilis]] - [[Antonius Sanctoelias]], architectus [[Italia|Italicus]]; mortuus est anno [[1916]]. === Mense Maio === * [[12 Maii]] **[[Egmont Colerus]], scriptor [[Austria]]cus; mortuus est anno [[1939]]. **[[Fridericus Schäffer]], rerum politicarum peritus [[Bavaria|Bavaricus]] factionis [[CSU]]; mortuus est anno [[1967]]. * [[25 Maii]] - [[Maximilianus Becker]], rerum politicarum peritus [[Germania|Theodiscus]] primo [[DVP]], deinde [[FDP]]; mortuus est anno [[1960]]. === Mense Iunio === * [[17 Iunii]] - [[Henricus Guliemus Guderian]], dux militum [[Germania|Germanicus]]; mortuus est anno [[1954]]. * [[30 Iunii]] - [[Rudolphus Amelunxen]], vir publicus [[Germania]]e et sodalis factionis [[Centrum|Centri]]; mortuus est anno [[1969]]. === Mense Iulio === * [[17 Iulii]] **[[Paulus Petrus Gojdič]], Epuriei [[archiepiscopus]] (Archidioecesis Presoviensis) [[Slovacia|Slovacus]]; mortuus est anno [[1960]]. **[[Ioannes Brockmann]], vir publicus [[Germania|Theodiscus]] factionis [[Centrum|Centri]]; mortuus est anno [[1975]]. === Mense Augusto === * [[3 Augusti]] - [[Augustus Kubizek]], amicus iuvenis [[Adolphus Hitler|Adolphi Hitler]], qzui multa - sed dubia - de amico tradidit; mortuus est anno [[1956]]. === Mense Septembri === * [[2 Septembris]] **[[Leo Wohleb]], vir publicus [[Badenia]]e et sodalis primo Factionis Christianae Socialis Popularis Badeniae (BCSV) , deinde [[CDU]]; mortuus est anno [[1955]]. **[[Fridericus Schorr]], [[Theatrum lyricum|theatri lyrici]] cantor accurate [[bassus]] [[Hungaria|Hungaricus]]; mortuus est anno [[1953]]. * [[15 Septembris]] - [[Fridericus Löwenthal]], vir publicus [[Germania|Theodiscus]] factionum [[SPD]], [[KPD]] ac [[SED]]; mortuus est anno [[1956]]. === Mense Octobri === * [[25 Octobris]] - [[Theodorus Herrle]], philologus classicus [[Germania|Theodiscus]]; mortuus est anno [[1975]]. * [[28 Octobris]] - [[Remigius Dumoncel]], iurisprudens et vir publicus [[Francia|Francicus]], qui inter [[secundum bellum mundanum]] occupatores [[Germania|Theodiscis]] resistebat; necatus est [[15 Martii]] [[1945]]. * [[29 Octobris]] - [[Haroldus Darke]], [[compositor]] [[Anglia|Anglicus]] et organista; mortuus anno [[1976]]. === Mense Novembri === * [[11 Novembris]] - [[Abul Kalam Azad]], vir publicus [[India]]e, mortuus est anno [[1958]]. * [[19 Novembris]] - [[Iosephus Radulphus Capablanca]], legatus [[Cuba]]e et illustris [[scacci|scaccorum]] lusor; mortuus est anno [[1942]]. === Mense Decembri === * [[18 Decembris]] - [[Gladys Cooper]], actrix [[Renum Unitum|Britannica]]; mortua est anno [[1971]]. == Mortui == === Mense Ianuario === * [[31 Ianuarii]] - [[Iohannes Bosco]], sanctus. === Mense Martio === * [[9 Martii]] - [[Gulielmus I (Imperator Germaniae)|Gulielmus I]], [[Imperium Germanicum|Germaniae imperator]] (natus [[1797]]). === Mense Iunio === * [[15 Iunii]] - [[Fridericus III (Imperator Germaniae)|Fridericus III]], [[Imperium Germanicum|Germaniae imperator]] (natus [[1831]]) === Mense Iulio === * [[4 Iulii]] - [[Theodorus Storm]], poeta Theodiscus (natus [[1817]]). === Mense Novembri === * [[10 Novembris]] - [[Georgius Bingham]], dux militum [[Regnum Unitum|Britannicus]];natus est anno [[1800]]. === Mense Decembri === * [[3 Decembris]] - [[Carolus Zeiss]], negotiator et inventor Theodiscus (natus [[1816]]) == Cultura == === Picturae === <gallery> Image:Van Gogh - The Night Café (1888).jpg | [[Cafeum nocturnum (van Gogh)|Cafeum nocturnum]] <br>([[Vincentius van Gogh]]) Image:Paul Gauguin 072.jpg | [[Cafeum nocturnum Arelatense (Gauguin)|Cafeum nocturnum Arelatense]] <br>([[Paulus Gauguin]]) Image:Cleopatra - John William Waterhouse.jpg |[[Cleopatra (Waterhouse)|Cleopatra]] <br>([[Iohannes Gulielmus Waterhouse]]) Image:The Roses of Heliogabalus.jpg | [[Heliogabali Rosae]] <br>([[Laurentius Alma-Tadema]]) Image:Pastime in Ancient Egypt Alma-Tadema 1864.jpg | [[Oblectamentum Aegypti antiquae]] <br>([[Laurentius Alma-Tadema]]) Image:Edmund Blair Leighton - Olivia.jpg | [[Olivia (Leighton)|Olivia]] <br>([[Edmundus Blair Leighton]]) </gallery> s10b53u4qw67pjgs262jjmwsd0n2ryj Ulma 0 5891 3995522 3925511 2026-10-18T19:41:10Z Pygmalion 95833 /* */ 3995522 wikitext text/x-wiki {{L-1}} {{Capsa urbis Vicidata}} [[Fasciculus:Ulm Rabengasse.jpg|thumb|upright=0.8|Vicus cum [[ecclesia cathedralis|ecclesia cathedrali]].]] [[Fasciculus:Ulm-Muenster-BlickZumChor-061104.jpg|thumb|upright=0.7|left|Interior Ecclesiae Cathedralis Ulmae pars.]] '''Ulma''' ([[Theodisce]] ''Ulm'') est [[urbs]] in orientali [[Virtembergia]]e [[regio]]ne sita, quae [[Bavaria]]m spectat. Celebris est [[ecclesia cathedralis]] propter [[turris|turrim]], qua altior nullius ecclesiae toto [[orbis terrarum|orbe terrarum]] erat (ab anno 1890 usque ad annum 2025, cum [[basilica Sanctae Familiae]] Barcinonensis eam superavit). "Alcimoënnis" nomen vetus [[Celti]]cum aut Ulmae aut oppidi ''Michelsberg'' (Mons Michaelis) in Bavaria habetur. == Historia == Die [[17 Decembris]] [[1944]], maxima Ulmae urbis pars impetu [[aeroplanum|aeroplanorum]] foederatorum [[bomba|bombis]] deleta est. == Geographia == Fluvii urbis sunt [[Danubius]], [[Ilara]], et [[Blavius]]. ==Incolae notabiles== *[[Albertus Einstein]] (1879–1955), [[physicus]] *[[Erhardus Eppler]] (1926–2019), [[vir publicus]] factionis [[SPD]]. *[[Ursula Karven]] (*1964), [[histrix]] ===Alii cives celebres=== *[[Robertus Scholl]], [[Ioannes Scholl|Ioannis]] et [[Sophia Magdalena Scholl|Sophiae Magdalenae Scholl]] pater, [[politicus]] et ab anno [[1945]] ad [[1948]] primus post [[secundum bellum mundanum]] Ulmae praefectus urbis. {{NexInt}} *[[Index Communium Badeniae-Virtembergiae]] ==Nexus externi== {{CommuniaCat|Ulm|Ulmam}} {{Fontes geographici}} [[Categoria:Urbes Badeniae et Virtembergiae]] btjkcou7y230qu4cls9wl4xujza5ufb Xenophon 0 9659 3995543 3879777 2026-10-19T02:01:11Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995543 wikitext text/x-wiki {{L1}} {{pro pagina discretiva vide|Xenophon (discretiva)}} [[Fasciculus:Bust of Xenophon.jpg|thumb|Xenophon.]] '''Xenophon''' ([[Lingua Graeca antiqua|Graece]]: {{polytonic|Ξενοφῶν}}) fuit [[scriptor]] [[Attica|Atticus]], filius Grylli cuiusdam, e [[Demus|demo]] [[Erchia]]. Etsi quo anno ille natus sit incertum est, consentiunt hodie tamen homines periti post [[430 a.C.n.]] et paulo ante [[425 a.C.n.]] natum esse.<ref>Sic A. Roquette, ''de vita Xenophontis'' p.15. Item E. Delebecque, op. laud. p.23 sqq. et Paulus Masqueray in introductione ad editionem [[Anabasis (Xenophon)|Anabasis]], Belles Lettres, 1930. Qui Diogenem Laertium secuti sunt non animadverterunt quam absurdum sit quadraginta annos natum Xenophontem primum cum Cyro militavisse, bello vero Peloponnesio nihil fecisse, cum patria periclitaretur. Praetera multi loci in ''Anabasi'' Xenophontem multo iuniorem ostendunt.</ref> scilicet non annis 444/440 a.C.n., ut olim e testimonio [[Diogenes Laertius|Diogenis Laertii]]<ref>Diogenes, qui fontes diversos compilabat, ἀκμἠν Xenophontis quarto anno XCIVae Olympiadis collocavit.</ref> scribebatur. [[Nobilis|Nobili genere]] ortus videtur, ut qui in [[equitatus|equitatu]] militabat atque [[sophista]]s docentes audierat, quod nisi ditissimae parti civium non licebat. Mox tamen [[discipulus]] [[Socrates|Socratis]] fuit, cui familiariter adhaesit. Civis Atheniensis natu quidem erat, sed [[Sparta]]m et instituta [[oligarchia]]e tam in vita sua quam in scriptis patriae et [[democratia]]e semper praetulit. == De vita == Xenophontis vita in partes tres dividi potest. Primum enim Athenis [[Socrates|Socrate]] familiariter usus, deinde in re militari versatus, denique, postquam [[Cyrus Minor|Cyrum]] adversus fratrem, regem [[Artaxerxes II (rex Persarum)|Artaxerxem]], bellum gerentem secutus est et,[[stipendiarius (miles)|stipendiario]] exercitu conservato, [[Agesilaus II (rex Spartae)|Agesilaum]], [[Reges Spartae|Spartanum regem]] et amicum suum, comitatus est, otio illo fructus est, quo libros suos conscripserit. === De Socrate magistro === Primam congressionem cum [[Socrates|Socrate]] a [[Diogenes Laertios|Diogene Laertio]] nobis relatam, quamvis fortasse fictitia fabula fuerit, operae pretium repetere : Xenophonti, pulcherrimo atque honesto<ref>καλὸς κἀγαΘός : ''kalos kagathos''</ref> adulescenti, in angusta via forte occurens Socrates impedisse baculo dicitur ne praeteriret atque ita rogasse : "Quae ad usum vitae necessaria sunt, ubinam emuntur ?". Respondisse Xenophontem ; iterum rogasse Socratem : "Ac viri boni ubinam fiunt ?" Haerente adulescentulo quid responderet, addidisse Socratem : "Sequere igitur et disce." Ita fidelissimus discipulus philosophi factus est. Quae cum ita essent, Xenophon quantis beneficiis ex amicitia Socratis affectus esset, cum grato animo confessus est, tum tribus operibus personam Socratem induxit, quae ex bello [[Asia]]tico cum revertisset confecta ''[[Memorabilia (Xenophon)|Memorabilia]]'' [[Oeconomicus (Xenophon)|''Oeconomicus'']] ''[[Convivium (Xenophon)|Convivium]]'' inscripsit. ''[[Apologia Socratis (Xenophon)|Apologiam]]'' quoque ei, ut Plato, conscripsit ad crimina quibus occubuerat purganda. Alia [[traditio]] circumferebatur quae Xenophontem cum [[Alcibiades|Alcibiade]] confundere videtur, de quo similia narrabantur ː certe cum nativitate circa [[430 a.C.n.]] hodie vulgo recepta non congruit. Narrabant enim proelio apud Delium commisso ([[424 a.C.n.]]) Socratem peditem vitam Xenophontis equo deiecti servasse<ref> [[Strabo]] IX.2.7. [[Diogenes Laertius]] II.23.</ref> dum eum humeris e proelio portat. Verisimile est<ref>Etsi enim de hac re in scriptis silet, apparet tamen e mirifice accurata narratione illorum eventorum, libro secundo ''[[Hellenica (Xenophon)|Hellenicorum]]. De quo vide E. Delebecque, ''op. laud''.</ref> Xenophontem in equitatu [[Triginta Tyranni|Triginta Tyrannorum]] contra [[Thrasybulus (Atheniensis)|Thrasybulum]] atque Piraeos anno [[403 a.C.n.]] pugnasse. Itaque postquam democratia restituta est, quamquam amnestia proclamata, peregrinari vehementer concupivit. Cum hospes et amicus [[Boeotia|Boeotius]], Proxenus nomine, eum apud [[Cyrus Minor|Cyrum]] in Asiam invitavit (et Cyrus et Boeotii socii [[Lysander|Lysandri]] atque [[Lacedaemon]]iorum adversus Athenienses fuerant!), instigante Socrate [[oraculum Delphicum]] consuluit quidem, sed deum non rogavit utrum proficiscendum esset necne, verum tantum quibus deis sacrificandum esset ut expeditio faustis sibi auspiciis adiretur<ref>''Anabasis'' III,1(4-9).</ref>. Ita Ahenis aberat cum magister Socrates morte damnabatur. === De expeditionibus Persicis === [[Fasciculus:Persian Empire, 490 BC.png|thumb|right|300px|Iter Decem Milium inter Sardes et [[Trapezus|Trapezuntem]].]] Virtus eius et prudentia rei militaris inluxit in memorabili quadam expeditione. Privatus<ref>[[Anabasis (Xenophon)|Anab.]] III,1,4 : οὔτε στρατηγὸς οὔτε λοχαγὸς οὔτε στρατιώτης ὤν </ref> enim comes Cyrum, qui bellum fratri suo [[Artaxerxes II|Artaxerxis]], [[Imperium Persarum|Persarum]] regi, indixerat, cum [[Decem milia|decem Graecorum mercennariotum milibus]] secutus est. Cyrus in pugna apud [[Cunaxa]]m occubuit, eiusque copiae diffugerunt, praeter Graeca auxilia, quae vim multitudinis hostium sustinuerunt. [[Tissaphernes]], legatus Artaxerxis, Graecis pollicitus pacem, duces eorum ad colloquium convocat, congregatos nefaria fraude occidit. At supererat Xenophon, qui commilitones suos salutem sperare iussit et reditum in patriam, si rem strenue gererent. Graecis, cum e [[Babylonia]]e finibus essent profecti, conficiendum erat immensum itineris spatium. Frigus, famem, sitim per loca invia et vastas solitudines haec decem hominum milia pertulerunt. Illis modo flumina superanda fuerunt, modo inaccessi montes; nunc per calentes arenas, nunc per montes nivibus oppletos illis transeundum fuit. Xenophon, laboribus et vigiliis invictus, commilitonum animos erigebat. Tandem, quinque mensibus exactis, Graeci [[Mare Nigrum]] e summo montis cacumine adspexerunt: hic finis fuit tot laborum. Res expeditionis illius, quam postremo duxerat, Xenophon ipse in libello notissimo absolvit. Postea [[Reges Spartae|regem Spartae]] [[Agesilaus II (rex Spartae)|Agesilaum]], quem multum amavit, ad libertatem civitatum Graecarum in litore [[Asia Minor|Asiatico]] sitarum tuendam adversus Persas ab [[ephori]]s missum in Asia comitatus est. Item cum a magistratibus Lacedaemoniis ad bellum cum [[Thebae (Boeotia)|Thebanis]] et [[Athenae|Atheniensibus]] in Graeciam revocatus est, rursus sequebatur Xenophon. Ita evenit ut [[Pugna Coronensis (394 a.C.n.)|pugnae Coronensi]] in exercitu Lacedaemoniorum adesset<ref>[[Plutarchus]], ''Ages.'' 18,2.</ref>. === Postquam in Graeciam rediit === Nec Athenas redire licuit : nam, ut qui in exercitu hostium Lacedaemoniorum cum Agesilao militaverat eo tempore quo Athenienses Longos Muros reparabant atque [[Bellum Corinthium]] incipiebat, exsilio a populo damnatus est. At ob merita [[Lacedaemon]]ii ''[[proxenia]]m'' ei conferentes, eum praestanti domo apud Scilluntem in [[Elis|Elide]] donaverunt ubi per circiter viginti annos amoeniter et otiosus vixit cum uxore Philesia quae duos filios, Gryllum et Diodorum ei genuit, a nonnullis "''Dioscuros''" cognominatos et a patre Spartam educandos missos<ref>[[Plutarchus|Plut]]., ''Ages.,'' 20,2.</ref>, etsi usque ad annum [[388 a.C.n.]] (?)<ref>Delebecque, ''op. laud.'' pp181-185.</ref> Agesilaum ad bellum aestate secutus esse videtur. In secessu autem venatione ita delectabatur ut mox pecunia ea quam apud neocorum [[Artemis|Artemidis]], Megabysum nomine<ref>Anabasis V,3,6.</ref>, [[Ephesus|Ephesi]] olim deposuerat atque tunc reciperaverat, pulcherrimum locum prope Scilluntem omni genere ferarum locupletissimum emerit atque templum inibi aramque Artemidi magno dispendio dedicarit<ref>Anabasis V,3,7-13. {{Strabo}} VIII.7.5.</ref>, cui primitias frugum quotannis consecrabat. Omnia ad imitationem celeberrimi templi Ephesii facta erant, sed minora et ex vilioribus materiis. Non tantum venationi sed etiam litteris et bonae administrationi ("oeconomiae"<ref>E quo experimento librum suum "''Oeconomicus''" inscriptum duxit.</ref>) praedii sui tunc operam dabat. Post [[Pugna Leuctrica|pugnam Leuctricam]] ([[371 a.C.n.]]), cum [[Peloponnesus]] ab hostibus Lacedaemoniorum vastaretur, [[Corinthus|Corinthum]] cum familia confugere coactus est, ubi reliquam vitam egit, ut videtur<ref>Sic Diogenes.</ref>. Extrema vita duo funera acerba sustinuit, amici [[Agesilaus II (rex Spartae)|Agesilai]] ([[360 a.C.n.]]) cui elogium conscripsit, et filii Grylli apud [[Mantinea]]m occisi ([[362 a.C.n.]]), dum fortiter adversus [[Thebae (Boeotia)|Thebanos]] in equitatu Atheniensi pugnat<ref>[[Pausanias]] ''[[Graeciae descriptio]]'' I.3.4, VIII.9.5 (stela [[Mantinea]]e erecta), VIII.9.10, VIII.11.6. Cf. François Ollier, "[https://www.persee.fr/doc/bude_1247-6862_1959_num_18_4_4180 La renommée posthume de Gryllos, fils de Xénophon]", ''Bulletin de l'Association Guillaume Budé'', 1959 ː 425-437. Pierre Pontier, "[https://www.persee.fr/doc/ktema_0221-5896_2016_num_41_1_1486 Isocrate et Xénophon, de l’éloge de Gryllos à l’éloge du roi : échos, concordances et discordances]", ''Ktèma'', 2016ː 43-58.</ref> (tum tandem Athenienses et Lacedaemonii socii erant). Quo tempore omni spe de futuro statu [[Sparta]]e atque Graeciae in totum destitutus, tristissimis versibus ''[[Hellenica (Xenophon)|Hellenica]]'' sua conclusit, successorem in historicum opus sibi quaerens. Saltem cum patria, vita exeunte postquam decretum exsilii abrogatum est, in gratiam redisse apparet ex ultimis operibus, ''[[De vectigalibus (Xenophon)|De Vectigalibus]]'' et ''[[Hipparchicus]],'' quibus populo Atheniensi consulere conatur. Itaque nonnulli historici dubitant an Athenas tunc redisset<ref>In primis E. Delebecque qui contendit Xenophontem, decreto exsilii circa [[367 a.C.n.]] abrogato, paulo post Athenas rediisse, nullo tamen testimonio antiquo fretus.</ref>. Paulo post [[360 a.C.n.]]<ref>Sic Diogenes Laertius</ref> vel potius circa [[355 a.C.n.]]<ref>Sic E. Delebecque et multi alii.</ref> sive Corinthi sive Athenis obiit. == Quid scripserit == [[Fasciculus:Xenophon, Oeconomicus (Latin).jpg|thumb|Xenophontis ''[[Oeconomicus (Xenophon)|Oeconomicus]]'' Latine versus in manuscripto saec. 15 papae [[Nicolaus V|Nicolao V]] donato.]] === De rebus === De multis rebus scripsit Xenophon quia et ipse multis in vita sua studuit ; de equitatu, de arte militari, de venatione, de administratione praedii rustici, de rebus gestis Graecorum sui temporis, de hominibus quos admiratus erat (Socrate et Agesilao in primis sed etiam Cyro et [[Lycurgus|Lycurgo]]), de civitatibus quae sibi optime regi videbantur ([[Sparta]] et [[Imperium Persarum|Imperium Persicum]]), de moralibus et virtutibus, de educatione... Saepe, quia diversa genera attigit, in umbra maiorum auctorum remansit qui unum genus tractaverant : in historia cum [[Thucydides|Thucydide]] comparari non potest, in [[philosophia]] [[Plato]]ne inferior videtur, in politicis [[Aristoteles|Aristotelem]] non aequat. Moralia eius humilia videntur si cum sublimitate Platonis vel Christianorum comparentur. Una ''[[Anabasis (Xenophon)|Anabasis]]'' eius in optimis litteris universarum gentium et omnium temporum aliquem locum meretur, qua res gestas quibus ipse interfuit narrat. Nihilominus, quia non ideas in caelo, sed res circa se positas curiose spectabat atque intelligens earum fuit, multa docemur eius lectione atque Graecos homines sui temporis bene nobis repraesentat. === De genere scribendi === Xenophontis genus scribendi [[Cicero]] hisce verbis<ref>de or. 2,58</ref> probat: "''leniore quodam sono est usus et qui illum impetum oratoris non habeat, vehemens fortasse minus''" - sc. quam Callisthenes, quocum comparatur - , "''sed aliquanto tamen est, ut mihi quidem videtur, dulcior''". Optima vero laudatio Xenophontis apud [[Quintilianus|Quintilianum]]<ref>''Inst. Or.'' X,1,82. Graece optime Xenophontis stilum describunt verba [[Photius|Photii]] ''(Bibliotheca'' 72.176) ''σαφής τε καὶ ἀφελὴς λίαν'' quibus [[Ctesias|Ctesian]] laudabat. [[Dionysius Halicarnasseus]] enim et Ctesian et Xenophontem iucunde potius quam pulchre (''ἡδέως οὐ καλῶς'') scribere existimabat (''De compositione verborum'' X.4-5).</ref> legitur cum laudat "''Xenophontis illam iucunditatem inadfectatam, sed quam nulla consequi adfectatio possit, ut ipsae sermonem finxisse Gratiae videantur''". Quamquam enim dialecto Attica non omnino pura utebatur (diu Athenis afuit et multum peregrinatus est), stilus eius subtilis et dilucidus est : itaque primus auctorum in scholis legi solet a pueris litteris Graecis hodie studere incipientibus (sc. [[Anabasis (Xenophon)|Anabasis]] eius). Idem in litteris Latinis de ''Commentariis'' [[Gaius Iulius Caesar|Caesaris]] dici potest, qui a Xenophonte non tantum usum tertiae personae in seipso designando sumpsit sed etiam tenuitatem et brevitatem dicendi. Xenophon sermonem [[Attica|Atticum]] [[Ionia|Ionicis]] verbis et idiomatibus mixtum scribebat, qui linguam Graecam communem posteriorem, κοινἡ dictam, velut praenuntiat. Ergo non fallant cognomina ''Musa Attica'' ([[Diogenes Laertius]]) vel ''apes Attica'' ([[Suidas]]) ei antiquitus tributa. === Index operum === Omnia scripta quae sub nomine Xenophontis antiquitus circumferebantur nobis servata sunt : apocryphis nonnullis, ut videtur, etiam additis (e.g. ''De Republica Atheniensium''). Chronologia operum nobis ignota est. * ''[[Agesilaus (Xenophon)|Agesilaus]]'': [[Wikisource:el:Αγησίλαος (Ξενοφώντος)| Textus apud Vicifontem Graecum]] * ''[[Anabasis (Xenophon)|Anabasis]]'' sive ''Expeditio Cyri'': [[Wikisource:el:Κύρου Ανάβασις| Textus apud Vicifontem Graecum]] * ''[[Apologia Socratis (Xenophon)|Apologia Socratis]]'': [https://el.wikisource.org/wiki/%CE%91%CF%80%CE%BF%CE%BB%CE%BF%CE%B3%CE%AF%CE%B1_%CE%A3%CF%89%CE%BA%CF%81%CE%AC%CF%84%CE%BF%CF%85%CF%82_(%CE%9E%CE%B5%CE%BD%CE%BF%CF%86%CF%8E%CE%BD) Textus apud Vicifontem Graecum] * ''[[Cynegeticus]]'': [https://el.wikisource.org/wiki/%CE%9A%CF%85%CE%BD%CE%B7%CE%B3%CE%B5%CF%84%CE%B9%CE%BA%CF%8C%CF%82 Textus apud Vicifontem Graecum] * ''[[Cyropaedia]]'': [https://el.wikisource.org/wiki/%CE%9A%CF%8D%CF%81%CE%BF%CF%85_%CE%A0%CE%B1%CE%B9%CE%B4%CE%B5%CE%AF%CE%B1 Textus apud Vicifontem Graecum] * ''[[De republica Lacedaemoniorum (Xenophon)|De republica Lacedaemoniorum]]'': [[Wikisource:el:Λακεδαιμονίων Πολιτεία| Textus apud Vicifontem Graecum]] * ''[[De re equestri (Xenophon)|De re equestri]]'': [[Wikisource:el:Περὶ Ἱππικῆς| Textus apud Vicifontem Graecum]] * ''[[De vectigalibus (Xenophon)|De vectigalibus]]'': [https://el.wikisource.org/wiki/%CE%A0%CF%8C%CF%81%CE%BF%CE%B9_%CE%AE_%CF%80%CE%B5%CF%81%CE%AF_%CF%80%CF%81%CE%BF%CF%83%CF%8C%CE%B4%CF%89%CE%BD Textus apud Vicifontem Graecum] * ''[[Hellenica (Xenophon)|Hellenica]]'': [https://el.wikisource.org/wiki/%CE%95%CE%BB%CE%BB%CE%B7%CE%BD%CE%B9%CE%BA%CE%AC_(%CE%9E%CE%B5%CE%BD%CE%BF%CF%86%CF%8E%CE%BD) Textus apud Vicifontem Graecum] * ''[[Hiero (Xenophon)|Hiero]]'' [https://el.wikisource.org/wiki/%CE%99%CE%AD%CF%81%CF%89%CE%BD Textus apud Vicifontem Graecum] * ''[[Hipparchicus]]'': [https://el.wikisource.org/wiki/%CE%99%CF%80%CF%80%CE%B1%CF%81%CF%87%CE%B9%CE%BA%CF%8C%CF%82 Textus apud Vicifontem Graecum] * ''[[Memorabilia (Xenophon)|Memorabilia]]'': [https://el.wikisource.org/wiki/%CE%91%CF%80%CE%BF%CE%BC%CE%BD%CE%B7%CE%BC%CE%BF%CE%BD%CE%B5%CF%8D%CE%BC%CE%B1%CF%84%CE%B1 Textus apud Vicifontem Graecum] * ''[[Oeconomicus (Xenophon)|Oeconomicus]]'' [https://el.wikisource.org/wiki/%CE%9F%CE%B9%CE%BA%CE%BF%CE%BD%CE%BF%CE%BC%CE%B9%CE%BA%CF%8C%CF%82 Textus apud Vicifontem Graecum] * ''[[Convivium (Xenophon)|Symposium]]'': [[Wikisource:el:Συμπόσιον (Ξενοφών)| Textus apud Vicifontem Graecum]] Maximus admirator atque imitator Xenophontis fuit [[Lucius Flavius Arrianus|Flavius Arrianus]] qui ipsos titulos Xenophonteos ad sua opera inscribenda saepe repetivit. == De moribus == [[Fasciculus:Socrates Louvre.jpg|thumb|upright=0.8|Socrates, magister Xenophontis.]] Ut qui discipulus Socratis fuerat, Xenophon sibi et ceteris hominibus καλοκἀγαθίαν (''kalokagathian'') proponit, id est virtutem et honestatem; in quo verbo pietatem in primis erga deos, patriam, amicos ponit sed etiam temperantiam, moderationem sui, frugalitatem, castitatem. . . . Fiduciam suam in bonitate naturae humanae ostendit in eo quod virtutem ut scientiam aliquam docendam esse putat atque si quis eae discendae studiose operam dederit virum bonum fieri<ref>R. Simeterre, ''La théorie socratique de la vertu-science selon les "Mémorables" de Xénophon'' (1938).</ref>. In libris suis quoque numquam verbis obscoenis vel vilibus utitur, semper vero honestis, praesertim cum de mulieribus et amore disserit. Unde a Diogene Laerio αἰδήμων (pudicus) dicitur. Nec animo tantum operam dabat sed ad corporis quoque curam et exercitationem omnes hortabatur. Nihilominus iustum et honestum habebat divitias e direptione hostium bonorum quaerere atque ipsos hostes in servitium redigere divendereque<ref>[[Memorabilia (Xenophon)|''Mem'']] II,2,2 et II,6,35 et IV,2,15.</ref>. Quae omnia et ipse semel atque iterum fecerat<ref>E.g. [[Anabasis (Xenophon)|Anab.]] VII,8,9sqq.</ref> vel Agesilaum facientem laudaverat<ref>[[Agesilaus (Xenophon)|Ages.]] I,17-18</ref>. Nec quicquam praeterea de condicione servorum lenienda in eius scriptis legimus : econtra in opusculo ''[[De vectigalibus (Xenophon)|De Vectigalibus]]'' Atheniensibus etiam suadet ut quam plurimos servos emant atque ad metalla mittant. Nihilominus ipse dominus clemens fuisse videtur<ref>[[Oeconomicus (Xenophon)|Oec.]] XII,6-10.</ref>. In totum bonum esse quod utile putabat : itaque nihil bonum per se ipsum semper et ubique dici potest sed tantum bonum ad aliquam rem. === Mens sana in corpore sano === Si viri boni officium est patriae et propinquis auxilio esse, nocere vero hostibus inimicisque, tum corpus robustum et patiens praestare debet<ref>[[Memorabilia (Xenophon)|Memorabilia]] II,1 et II,6,35. ''[[Cyropaedia]]'' I,6,18 et 41, necnon VIII,8,8.</ref>. Exempli gratia in ''[[Oeconomicus (Xenophon)|Oeconomico]]'' Ischomachus equitatum et exercitationem corporis, laudante Socrate<ref>XI,17.</ref>, cum administratione praedii sui coniungit atque uxori suae ut corpus exerceat suadet tamquam optimum verae pulchritudinis adiumentum<ref>X,9-12.</ref>. Item in ''[[De republica Lacedaemoniorum (Xenophon)|Republica Lacedaemoniorum]]''<ref>I,3-4.</ref> educationem virginum [[Sparta]]e laudat Xenophon, quod certaminibus athleticis operam dant atque vitam in aperto liberiorem quam in ceteris civitatibus agunt. Praecipua ratio cur artifices contemnat, agricolas contra extollat, est quod artifex per totum diem in officina sedens valetudinem et habitum corporis corrumpat<ref>''[[Oeconomicus (Xenophon)|Oec.]]'' IV,2-3 et V,5-6.</ref>. Ipse Socrates Xenophonteus ideo saltare discere cupit, ut bracchiorum simul et crurum lacertos sibi validiores faciat<ref>[[Convivium (Xenophon)|Conv.]] II,16-20. Vide etiam ''[[Memorabilia (Xenophon)|Mem]]'' III,12.</ref>. Item Xenophon, cum non militabat, equitatui et venationi semper operam dabat, ne corpus ignavia et otio molliretur<ref>[[Memorabilia (Xenophon)|''Mem.'']] I,2,19-23.</ref>. Non minus quidem ad rem facit corpus ab animo regi, id est temperanter cibo, potu et aliis voluptatibus uti (quae virtus Graece ''encrateia'' dicitur), atque si necesse sit et inediam et sitim et vigiliam diuturnam perpeti posse (quae virtus Graece ''karteria'' dicitur)<ref>''[[Memorabilia (Xenophon)|Mem.]]'' II,5 et 6,1.</ref>. Itaque ubique et semper contentionem animi laudat. === De pietate === Xenophon fuit homo pius paene usque ad superstitionem : nam signa divina in extis victimarum interpretari didicit<ref>''[[Anabasis (Xenophon)|Anab.]]'' V,6,29.</ref>, ne de vera voluntate deum decipi posset. Nihil nisi deis consultis agebat<ref>In quo Socratis sententiam sequebatur : ''Mem''. I,1,8-9 et IV,7,10 etc. Confer etiam ''[[Hipparchicus]]'' III,1 et IX,8-9.</ref> atque duces quos miratur, [[Cyrus Minor|Cyrum]]<ref>[[Cyropaedia|Cyrop.]] I,5,6 et 14 necnon I,6,2 et 46.</ref> et [[Agesilaus II (rex Spartae)|Agesilaum]]<ref>[[Hellenica (Xenophon)|Hell.]] III,4,15 etc.</ref>, eadem religione agentes nobis ostendit. In agricultura quoque nisi deis inceptis humanis faventibus irritam esse prudentiam agricolae docent et Ischomachus et Socrates<ref>''[[Oeconomicus (Xenophon)|Oec.]]'' V,9-VI,1 et XI,8.</ref> : itaque precibus ordiendum esse. Item in [[historia]] deos res humanas regere atque nonnumquam periuros homines ulcisci putat : exempli gratia poenas de Sparta sumpserunt quia Phoebidas [[Cadmea]], spretis iuratis foederibus, anno [[382 a.C.n.]] dolo potitus est<ref>''[[Hellenica (Xenophon)|Hell.]]'' V,4,1 et VI,4,3 : τὸ δαιμόνιον ἦγεν.</ref>. In [[Anabasis (Xenophon)|Anabasi]] sua signa divina eventu rerum semper confirmata atque probata ostendit : ita quondam sacrificia repetita sunt donec victimae deficerent, nec tamen signa fausta a deis impetrari potuerunt. Qui postea cum miltibus egressi sunt, monitu divino neglecto, cladem acceperunt<ref>[[Anabasis (Xenophon)|Anab.]] VI,4,16-22.</ref>. Item ultimis capitulis ''[[Hellenica (Xenophon)|Hellenicorum]]'' ostendit [[Epaminondas|Epaminondam]], [[Thebae (Boeotia)|Thebanum]] ducem, nihil quod quidem prudentia humana providere posset neglexisse<ref>VII,5,8 : ὂσα προνοίας ἔργα καί τόλμης ἐστίν, ούδὲν μοι δοκεῖ ἀνὴρ ἐλλιπεῖν.</ref>, nec tamen eventum felicem nactum quia deus aliter decreverat<ref>VII,5,26 : ὁ δὲ θεὸς οὒτω ἐποίησε...</ref>. Praeterea pluribus locis operum suorum omnia a providentia divina ad utilitatem hominis creata esse exponit : quocirca grati homines deos honorare debent. Qui honores ad consuetudinem moremque civitatis in qua vivimus<ref>''[[Memorabilia (Xenophon)|Memorabilia]]'' I,4 et IV,3 et IV,6,2-4. Etc.</ref> dirigendi sunt. Nihilominus nonnumquam velut dolo certare cum deo nobis videtur Xenophon : ita quia admodum proficisci volebat, [[Apollo|Apollinem]] consuluit, non proficisceretur necne, sed quibus deis placatis faustis auspiciis proficisceretur. Cum autem sperata signa in extis victimarum non inveniebat sacrificium iterare solebat, donec fausta omina adeptus esset. Quae omnia christiano homini mira videri possunt sed dei antiqui humaniores erant : precibus vel donis flecti solebant, nonnumquam etiam sententiam mutabant. === De amore et mulieribus === Xenophon adolescens amori "Graeco", id est iuvenum masculi generis inter sese, qui tum in usu erat, utrum deditus fuerit necne nescimus. Nam nihil de ea re scripsit. Quod vero in biographia [[Diogenes Laertius|Diogenis Laertii]] legimus e confusione ortum videtur : eas ipsas sententias enim Xenophonti attribuit quas ipse in ore Critobuli posuit<ref>[[Convivium (Xenophon)|Conv]] IV,12</ref>! Certe sive per auctoritatem [[Socrates|Socratis]]<ref> ''[[Convivium (Xenophon)|Conv]].'' IV,25-26 et VIII,19-27. ''Mem.'' I,2,29-30 et II,6.</ref> sive ipse pro se loquens plurifariam contendit in huiusgeneris amoribus castitatem servandam esse atque coitum corporum fugiendum. Quam castitatem apud Agesilaum<ref>''[[Agesilaus (Xenophon)|Ages.]]'' V,4.</ref> et [[Lacedaemon]]ios<ref>''[[De republica Lacedaemoniorum (Xenophon)|De Rep. Lac.]]'' II,12-14.</ref> (fortasse non recte) laudat. Itaque scortorum usum non recusat, cupidinum corporalium extinguendarum adulteriorumque vitandorum causa. Ipse quidem bonus maritus et pater fuisse videtur. Nec in eius scriptis mulieres male audiunt : persona heroica [[Abradatas et Pantheia|Pantheiae]] in [[Cyropaedia]] admirationem movet ob fidem et amorem erga maritum. In [[Oeconomicus (Xenophon)|Oeconomico]] uxor Ischomachi nihil quidem heroici habet, sed optimam indolem praestat atque gratissima lectori est. Velut socia mariti sui est. Ipsa [[Aspasia]]<ref>Idem dici de altera ''hetaira'' potest, Theodote nomine, de quo vide ''[[Memorabilia (Xenophon)|Mem]]'' III,11</ref>, quae magistra Socratis in eroticis per iocum dicitur, melius apud Xenophontem quam apud [[Plato]]nem audit. In totum Socratis opinionem adprobat, muliebrem naturam nulla re inferiorem virili esse, nisi vi et robore corporis<ref>''[[Convivium (Xenophon)|Conv.]]'' II,9 (textus ab editoribus correctus).</ref>. Certe nihil contumeliosius existimat viro, cui bellatori decet esse, quam mulierculam appellari vel videri<ref>''[[Hellenica (Xenophon)|Hell.]]'' III,4,19.</ref>, nec rerum publicarum vel ad viros pertinentium feminae participes ut sint suadet (contentus est vitam liberiorem virginum Spartanarum laudare) sed, pro tempore quidem quo vixit, mulieribus favens dici potest. == De politicis opinionibus == Xenophonti maximam partem vitae exsulanti nec rebus publicis praeesse licuit nec magistratus gerere : itaque quae sibi de rebus publicis videbantur per opera sua memoriae tradidit. === De educatione === De educatione Atheniensium liberorum saepe male opinatus est Xenophon, quod intra domos paedagogis tradebantur, qui servi erant atque ideo serviles animos habere eos putabat, vel etiam privatis magistris magna mercede conductis, plerumque [[Sophistae|sophistis]] quos saepe vituperavit<ref>''[[Cynegeticus|Cyn]]''. XIII.</ref> : quocirca et qui summos magistratus (e.g. strategiam) gerebant non omnia quae scire deberent edoctos esse demonstrat<ref> ''[[Memorabilia (Xenophon)|Mem.]]'' III,1</ref>. Contra laudat educationem puerorum [[Sparta]]e qui communiter vivebant atque publice ab optimis civibus, exemplis non libris, gubernabantur<ref>''[[De republica Lacedaemoniorum (Xenophon)|De Rep. Lac]]'' cap. II.</ref>. Simile educationis genus apud aulam regum Persarum in [[mythistoria]] sua ''[[Cyropaedia]]'' inscripta describit, ubi pueri iudicando iustitiam docentur<ref>I,2.</ref>. Omnino potius quam litterae aut musica in primis exercitatio corporis et ars militaris et bonus civis esse (i.e. per vices parere et imperare scire) et oeconomia docenda ei videntur<ref>De quo vide [[Cynegeticus|Cynegeticum]] cap. XII-XIII, ubi venatio sophistarum educationi opposita est.</ref>. Socrates et ipse non libris sed exemplo et contubernio discipulos ad virtutem gratuito perducebat<ref> ''[[Memorabilia (Xenophon)|Mem]]'' IV,2 ubi narratur quomodo Socrates Euthydemum, qui plurimos libros colligebat, ignorantiae convicerit atque discipulum suum fecerit.</ref> === De panhellenismo === Numquam Graecos eodem modo tractandos atque barbaros putavit Xenophon, nec si victi bello essent eos in servitutem redigi ut ceteros fas habebat<ref>[[Agesilaus (Xenophon)|Ages]]. VII,4-8.</ref>. Contra plurifariam in scriptis suis dolet quod Graeci intestinis bellis occupati non omnes vires suas adversus hostem communem Persicum adhibeant. Iam tempore [[Decem milia|Decem Milium]] expeditionis infirmitatem illius magni imperii perspexerat<ref>''[[Cyropaedia]]'' VIII,8,26.</ref> : non enim cum Graecis acie pugnare audebant. Iam tum novam civitatem Graecam in Asia condere velle potius quam in Graeciam redire accusatus, coram militibus sese purgare coactus est<ref>[[Anabasis (Xenophon)|Anabasis]] V,6,15-32 et 7,1-11.</ref>. Sic enim gloriam nominis Graeci aucturum speraverat. Postea quoque Spartanos atque eorum regem [[Agesilaus II (rex Spartae)|Agesilaum]] secutus, debellatis Persis regnum Graecum ab eis in Asia conditum iri, cuius particeps foret, cupiebat donec ab [[ephori]]s ad bellum adversus [[Athenae|Athenienses]] et [[Thebae (Boeotia)|Thebanos]] revocarentur. Quae praecipua fortasse ratio erat cur hegemoniam Spartae in Graecia semper optaverit, ut omnes Graeci simul adversus avitum hostem ducerentur nec frustra vires pugnando inter se consumerent<ref>[[Agesilaus (Xenophon)|Ages]]. VII,3-7. [[Hellenica (Xenophon)|Hell]]. I,6,7.</ref>. Quod nisi [[Alexander Magnus]] nemo efficere potuit... === De duce divinitus inspirato === In libris suis Xenophon duces eximiae sapientiae virtutisque attollere solet : ita [[Cyrus II (rex Persarum)|Cyrum]] [[Imperium Romanum|Imperium Persicum]] et [[Lycurgus|Lycurgum]] civitatem [[Sparta]]m omnibus optimis institutis instruxisse vult<ref>In [[Cyropaedia]] et [[De republica Lacedaemoniorum (Xenophon)|Republica Lacedaemoniorum]].</ref>, ut alter magnum imperium condiderit, alter Spartam diu invictam bello reddiderit. Quae opinio certe cum vera historia non congruit : multi enim auctores antiqui institutis Lacedaemoniorum originem Cretensem tribuerunt<ref>[[Dionysius Halicarnassensis|Dion. Hal]]. ''Ant. Rom''. II,23,3.</ref>, quos Xenophon omnino silentio praetermittit, historici autem moderni Lycurgum personam mythicam esse docent, ad Lacedaemoniorum sapientiam laudandam postea excogitatum. Item de magno Cyro illo tempore pauca nota erant : itaque quod sibi libebat narrare Xenophon potuit, mores [[Cyrus Minor|Cyri Minoris]], quem noverat, cum praeclaro antecessore nonnumquam confundens. In utroque legislatore simili modo et Persas et Lacedaemonios posteros incusat quod praecepta conditoris sui non servaverint atque degenerarint<ref>[[Cyropaedia|Cyrop]]. VIII,8. [[De republica Lacedaemoniorum (Xenophon)|Rep Lac]]. XIV (/XV in nonnullis editionibus recentioribus).</ref>. Ducem huiusmodi etiam in amico suo, [[Reges Spartae|rege]] [[Agesilaus II (rex Spartae)|Agesilao]], videre vult : si non omnia Agesilao feliciter evenerunt, culpa ad magistratus Spartae et [[Ephori|ephoros]] reicere licet quoniam reges Spartae eis oboedientes esse debent. Etiamsi aliter sentiamus, certe venia amicitiae dari potest. Nonne Socrates et ipse apud Xenophontem omnia melius quam ceteri scit ? Quia saepe doluit quod seditiosi Athenienses nec imperare nec parere magistratibus scirent, ordinem et disciplinam in primis laudat atque optimum ducem esse iudicat qui oboedientes subiectos facit, quae virtus nisi a deis tribui non potest<ref>[[Oeconomicus (Xenophon)|Oec]] XXI,11.</ref>. Nihilominus nonnulla praecepta tradidit : regem/ducem magnis beneficiis amicos suos ditare<ref>In [[Hiero (Xenophon)|Hierone]] XI,13 Simonides Hieroni dicit : ''θαρρῶν, ὦ Ἱέρων, πλούτιζε μὲν τοὺς φίλους: σαυτὸν γὰρ πλουτιεῖς:''. Cf [[Agesilaus (Xenophon)|Agesilaus]] I,17-19. [[Cyropaedia|Cyrop]]. VIII,2.</ref> atque ornare oportet, ut amicitia sua ab omnibus peteretur, praeterea eorum animos ad aemulationem praemiis excitare, ita ut omnes quam optimi atque utilissimi duci esse studerent<ref>[[Hiero (Xenophon)|Hiero]] IX. [[Cyropaedia|Cyrop]]. I,6,18 necnon II,1,22 et VIII,4,4. [[Hellenica (Xenophon)|Hell]]. III,4,16-17. [[Agesilaus (Xenophon)|Ages]]. I,25-27. [[De vectigalibus (Xenophon)|De Vect]]. III,3. ''[[Hipparchicus]]'' I,7 et 24-26.</ref>. Plura porro scire quam subiectos regem/ducem decet : nam sicut aeger sese volens medico curandus tradit, ita homines ei quem putant optime scire quid ipsis utile sit sponte oboedientes fiunt nec cogi eos necesse est<ref>[[Cyropaedia|Cyrop]]. I,19-24. ''[[Hipparchicus]]'' cap. VI. [[Memorabilia (Xenophon)|Mem]]. III,3,9.</ref>. In summa Xenophon [[monarchia]]e militari favisse videtur, dummodo rex vir sapiens atque ut ita dicam Socratis discipulus esset. Simile quiddam senserunt nonnulli philosophi octavi decimi saeculi ([[Voltaire]], [[Dionysius Diderotus|Diderot]]...). Ita in ''[[Hiero (Xenophon)|Hierone]]'' docet quomodo [[Tyrannis|tyrannus]] rex fiat, si non ad suam, sed populi sui ad utilitatem regnat. Hoc inter regem et tyrannum maxime interest, quod tyrannus sese supra leges positum arbitratur, rex vero legibus patriae obtemperat<ref>[[Agesilaus (Xenophon)|Ages]]. VII. [[Cyropaedia|Cyrop]]. VIII,1.</ref>. Xenophonti quidem legibus parere semper et ubique iustum est, quamvis non eaedem leges in omnibus civitatibus valeant. == Bibliographia == [[Fasciculus:Laertii Diogenis De Vitis Dogmatis et Apophthegmatis Eorum Qui in Philosophia Claruerunt.jpg|thumb|right|300px|Unica biographia Xenophontis ab aevo antiquo nobis tradita in opere Laertii Diogenis legitur. Fons tamen mediocris fidei habetur.]] === De manuscriptis === Manuscripti Xenophontei hodie servati recentiores sunt : antiquissimus eorum duodecimo, plerique vero quarto vel quinto decimo saeculo exarati sunt. Praeterea ne unus quidem ex eis omnia opera Xenophontis simul collecta continet, sed aliud opus ex aliis codicibus quaerendum est. Nihilominus philologi eos nonnumquam usque ad archetypum antiquum referunt, ut in ''Memorabilibus''<ref>Michele Bandini pp CCLXXIII-CCLXXV introductionis ad editionem suam (CUF,2000).</ref>. Multis locis tamen lectio genuina dubia est et editor arbitrio suo alteram eligere coactus est, quamquam in dubio remanet. Praeterea nonnulla brevia fragmenta [[Papyri Oxyrhynchi|papyrorum]] Aegyptiorum de statu textus ipsa [[Antiquitas|Antiquitatis]] aetate nos aliquatenus certiores faciunt<ref>A. Paap, ''The Xenophon Papyri. Anabasis, Cyropaedia, Cynegeticus, de Vectigalibus...'', Lugduni Batavorum, Brill, 1970.</ref>. === Praecipuae editiones === * 1516, Iuntina, [[Florentia]]e : [[editio princeps]] Graeca maiorum operum praeter ''[[Hellenica (Xenophon)|Hellenica]]'' quae iam apud [[Aldus Manutius|Aldum Manutium]] anno 1503 in lucem prodierant. Tria opuscula quae tunc adhuc deerant postea edita sunt: ''[[Apologia Socratis (Xenophon)|Apologia Socratis]]'' et ''[[Agesilaus (Xenophon)|Agesilaus]]'' [[Hagenoa]]e a [[Iohannes Reuchlin|Iohanne Reuchlin]] curata et ''[[De vectigalibus (Xenophon)|De Vectigalibus]]'' in nova editione operum omnium in Aldina officina (1525). * 1520, [[Ioannes Reuchlin]], [[Hagenoa]]e, editio princeps ''[[Agesilaus (Xenophon)|Agesilai]]''. * 1525, Aldina, Venetiis. Editio princeps opusculi ''[[De vectigalibus (Xenophon)|Poroi]]'' inscripti. * 1569 et 1572, [[Iohannes Leunclavius]], Basileae. Eiusdem versio Latina, [[Basilea]]e, 1569 et 1594 (post mortem). * 1581, [[Henricus Stephanus (mortuus 1598)|Henricus Stephanus]], [[Genava]]e. * 1808-1815, JB Gail, Parisiis. [Graecus, Latinus, Francicus]. * 1842-1853, Ludovicus Breitenbach, Gothae. === Fontes de vita === In primis ipsa opera Xenophontis utenda sunt ac deinde : * [[Diodorus Siculus]], libro quinto decimo [[Bibliotheca historica (Diodorus)|''Bibliothecae historicae'']] 76(4) et 89(3). * [[Diogenes Laertius]], libro secundo ''De Vitis Dogmatis et Apophthegmatis eorum qui in philosophia claruerunt'' capitulis 48-59. * [[Pausanias]] libro quinto ''[[Graeciae descriptio]]nis'' 6.5-6 * [[Plutarchus]], ''Vita Agesilai'' XVIII,2 et XX.2. ** ''Artaxerxes'' VIII. === Plura legere si cupis === * JK Anderson, ''Xenophon'', Bristol : Bristol Classical Press, 2001. * Vincentius Azoulay, ''[https://books.openedition.org/psorbonne/13179 Xénophon et les grâces du pouvoir, De la ''charis'' au charisme]'', Publications de la Sorbonne, Parisiis, 2004. [http://books.google.fr/books?id=1LuMr8U0NGMC&dq=wilhelm+xenophons+poroi&hl=fr&source=gbs_navlinks_s Googlebooks] ** "[https://journals.openedition.org/etudesanciennes/267 Xénophon et le modèle divin de l’autorité]", ''Cahiers des études anciennes'', 2008. *Michele Bandini, « [https://journals.openedition.org/ashp/5129#article-5129 Éditer Xénophon au XXIe siècle : acquisitions récentes et perspectives de la recherche] », ''Annuaire de l'École pratique des hautes études'' (EPHE), 2022: 70-98. * S.J. Cavallin, ''De Xenophonteo temporum et modorum usu in enuntiationibus orationis obliquae primariis ad tempora praeterita relatis'', Lund, F. Berling, 1879-1881 (duo volumina). * Alfredus Croiset, ''Xénophon : son caractère et son talent : étude morale et littéraire'', E. Thorin, 1873 [Dissertatio Academica Parisiensis]. [https://archive.org/details/xnophonsoncarac00croigoog Versio electronica] * Eduardus Delebecque, ''Essai sur la vie de Xénophon''. - Parisiis : Klincksieck, 1957 [http://www.persee.fr/web/revues/home/prescript/article/antiq_0770-2817_1958_num_27_1_3344_t1_0164_0000_2 Recensio critica] * John Dillery, ''Xenophon and the History of his Times''. Londinii: Routledge, 1995. ISBN 0-415-09139-X [https://web.archive.org/web/20170722062804/http://research.ncl.ac.uk/histos/documents/1997.RD03TuplinDilleryXenophon181187.pdf Recensio critica] * Ludovicus Andreas Dorion, ''L'autre Socrate : études sur les écrits socratiques de Xénophon'', Parisiis, les Belles Lettres, 2013. ISBN 978-2-251-42049-3 * Viviana Gray, ''Xenophon'', Oxford University Press, 2010. ISBN 978-0-19-921617-8 * Iohannes Luccioni, ''Les idées politiques et sociales de Xénophon'' Ophrys, 1947. [Dissertatio Academica] [http://www.persee.fr/web/revues/home/prescript/article/reg_0035-2039_1948_num_61_284_3122_t1_0318_0000_2 Recensio critica]. ** ''Xénophon et le socratisme''. - Parisiis : Presses universitaires de France, 1953. (Publications de la Faculté des Lettres d'Alger ; 25) [http://www.persee.fr/web/revues/home/prescript/article/phlou_0035-3841_1954_num_52_35_7910_t1_0469_0000_2 Recensio critica] * Philippus Nemo, ''Histoire des idées politiques dans l'Antiquité et au Moyen Âge''. Parisiis : Presses universitaires de France, 2007 pp236-258 (Xénophon). * Antonius Powell et Nicolas Richer (curatores), ''Xenophon and Sparta'', The Classical Press of Wales, 2020 [https://books.google.fr/books?id=X3jNDwAAQBAJ&pg=PR3&hl=fr&source=gbs_selected_pages&cad=2#v=onepage&q&f=false Nonnullae paginae apud Guglum librorum] * Adalbertus Roquette, ''de Xenophontis Vita'', [[Kaliningradum|Regimonti Borussorum]], 1894. [https://archive.org/stream/dexenophontisvi01roqugoog#page/n2/mode/2up Versio electronica] * « Xénophon », ''Cahiers des études anciennes'', XLV, 2008 [http://etudesanciennes.revues.org/189 Versio electronica] * ''Xenophon and his world'' : ''papers from a conference held in Liverpool in July 1999'', curante Christophoro Tuplin. [[Stutgardia]]e : F. Steiner, 2004. (Historia : Zeitschrift für alte Geschichte. Einzelschriften ; 172). ISBN 3-515-08392-8 * ''Xénophon et Socrate: actes du colloque d'Aix-en-Provence (6-9 novembre 2003).'' curantibus Narcy, Michaele et Alonso Tordesillas. Parisiis : J. Vrin, 2008. (Bibliothèque d'histoire de la philosophie. Nouvelle série) ISBN 978-2-7116-1987-0. * ''Xenophon : ethical principles and historical enquiry'', curantibus Fiona Hobden, Christophoro Tuplin. - Lugduni Batavorum : Brill, 2012. (Mnemosyne. Supplements : history and archaeology of classical Antiquity, 0169-8958 ; 348). ISBN 978-90-04-22437-7[http://books.google.fr/books/about/Xenophon_Ethical_Principles_and_Historic.html?id=lmipXXWdohoC&redir_esc=y Googlebooks] === De lingua et lexicis === * L. Gauthier, ''La langue de Xénophon'', Genevae, 1911 (dissertatio academica). [https://archive.org/stream/lalanguedexnop00gautuoft#page/n5/mode/2up Versio electronica] * F.W. Sturz, ''Lexicon Xenophonteum'', Lipsiae, 1801-1804 (4 vol., reimp. 1964). [https://archive.org/stream/lexiconxenophon00sturgoog#page/n8/mode/2up Versio electronica] * G. Sauppe, ''Lexilogus Xenophonteus'', Lipsiae, 1869 [https://archive.org/stream/lexilogusxenopho00saupuoft#page/n3/mode/2up Versio electronica] == Notae == <references /> {{FA stella}} {{Myrias|Homines}} [[Categoria:Xenophon|!]] [[Categoria:Nati saeculo 5 a.C.n.]] [[Categoria:Mortui saeculo 4 a.C.n.]] [[Categoria:Auctores Graeci antiqui]] [[Categoria:Autobiographi]] [[Categoria:Discipuli Socratis]] [[Categoria:Historici Graeci antiqui]] [[Categoria:Mercenarii]] [[Categoria:Milites Graeci antiqui]] [[Categoria:Scriptores Graeci antiqui]] b3l0x8un6umjzso9reik6qia7zvoiqb Triumviratus 0 10989 3995525 3992037 2026-10-18T20:31:06Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995525 wikitext text/x-wiki {{L1}} {{disambig2|Triumviratu rei publicae Romanae|Triumviratum Ottomanicum|Interregnum Ottomanicum}} '''Triumviratus''' est magistratus Romanus minor, quo collegium trium virorum officio alicui praeest (exempli gratia ''tresviri capitales'' aut ''tresviri monetales'' fuere). Magistratus extraordinarius quoque ad rem quandam efficiendam decreta potuit esse ut triumviri agris dividendis [[Lex Sempronia|lege Sempronia]] anno [[133 a.C.n.]] creati. Saepe triumviri ad [[Colonia Romana|colonias]] deducendas ita a populo designabantur. Inde hoc nomen etiam inditum foederi a tribus ducibus tempore rei publicae [[Roma]]nae exeuntis ante [[principatus Romanus|principatum]] ampliandae potentiae causa icto. Fuerunt duo triumviratus praeclarorum ducum Romanorum. == Primus triumviratus == [[Fasciculus:RSC 0017.jpg|thumb|Effigies [[Pompeius|Pompei Magni]] in [[denarius|denario]] a filio Sexto post mortem percusso circa annum 40 a.C.n.]] Societas [[Gaius Iulius Caesar|Gaii Iulii Caesaris]], [[Gnaeus Pompeius Magnus|Gnaei Pompeii Magni]], et [[Marcus Licinius Crassus (triumvir)|Marci Licinii Crassi]] anno [[60 a.C.n.]] inita," ne quid ageretur in republica quod displicuisset ulli e tribus" ([[Suetonius]]), "primum triumviratum" appellationem a modernis eruditis accepit, quamquam numquam a Romanis sic nominata : privata enim societas erat, matrimonio quoque firmata, cum [[Pompeius]] filiam [[Gaius Iulius Caesar|Caesaris]], [[Iulia (uxor Pompeii Magni)|Iuliam]], uxorem duxit. Nec ulla lex potestatem illorum "triumvirum" umquam sanxit. Nihilominus, spreto iure legum, per potentiam magistratus ac provincias inter sese et fautores suos diviserunt. Anno [[59 a.C.n.]] Caesar [[consul]] fuit atque collegam [[Marcus Calpurnius Bibulus|Bibulum]] in domo sua inclusit, ne sibi obstare posset ; ac continuo post consulatum [[proconsul]] [[Gallia]]rum et [[Illyricum|Illyrici]]. Pompeius provincias et regna sociorum in Oriente, ut voluit, ordinavit ac mox praefectus annonae frumentariae fuit cum maximo imperio in multis provinciis ([[57 a.C.n.]]). Crassus multas pecunias per societates publicanorum collegit populo favente. Anno [[55 a.C.n.]] Pompeius et Crassus secundum consulatum una gesserunt ac postea provincias in quinquennium adepti sunt, [[Hispania Tarraconensis|Hispanias]] Pompeius, [[Syria (provincia Romana)|Syriam]] Crassus. Item proconsulatus Caesaris in [[Gallia]] per quinquennium prorogatus est. [[Fasciculus:RSC 0022 - transparent background.png|thumb|Gaius Iulius Caesar in denario anno [[44 a.C.n.]] percusso.]] Tandem rota fortunae vertitur : anno [[54 a.C.n.]] [[Iulia (uxor Pompeii Magni)|Iulia]] sine herede mortua, anno [[53 a.C.n.]] Crassus cum filio a [[Parthi]]s victus et necatus est. Ab eo tempore nulla fides in societate iam fuit, praesertim postquam Pompeius anno [[52 a.C.n.]], provinciis Hispaniis retentis, Romae [[consul]] sine collega creatus est atque Corneliam uxorem duxit. Duo competitores reliqui, dum principem locum sibi soli rapere volunt, res Romanas ad [[Bellum civile alterum|bellum civile]] praecipitaverunt. == Alter triumviratus == [[Fasciculus:Antony with Octavian aureus.jpg|thumb|left|Effigies [[Marcus Antonius|Marci Antoni]] et [[Gaius Iulius Caesar Octavianus Augustus|Caesaris Octaviani]] in [[aureus|aureo]] nummo cum titulo: IIIVIR RPC, id est ''triumvir reipublicae constituendae.'' [[41 a.C.n.]] ]] [[Fasciculus:RSC 0002a.jpg|thumb|Effigies [[Marcus Aemilius Lepidus (triumvir)|Aemili Lepidi]] et [[Gaius Iulius Caesar Octavianus Augustus|Caesaris Octaviani]] in [[Denarius|denario]] anno [[42 a.C.n.]] percusso cum titulo III.VIR.R.P.C.]] Societas inter [[Augustus (imperator)|Gaium Iulium Caesarem Octavianum]], [[Marcus Antonius|Marcum Antonium]], et [[Marcus Aemilius Lepidus (triumvir)|Marcum Aemilium Lepidum]] anno [[43 a.C.n.]] exeunte inita adversus Caesaris interfectores necnon libertatis veterisque reipublicae fautores, sicut [[Gaius Cassius Longinus|Cassium]], [[Marcus Iunius Brutus|Brutum]], et [[Sextus Pompeius|Sextum Pompeium]], nomen secundi triumviratus accepit. Die [[13 Novembris]] ex lege Titia ''triumviri reipublicae constituendae'' in quinquennium creati sunt, qui summum imperium haberent : leges mutare vel abrogare sine populo et sine senatu, quoscumque vellent magistratus creare, quibus libebat provincias et exercitus tradere, cives damnare provocatione ad populum sublata eis licebat. Itaque triumviratus nomen transeuntis formae reipublicae quoque fuit: nam triumviri, eversa bellis civilibus republica vetere, novae fundamenta constituere debebant. Triumviri ita orbem Romanum anno [[43 a.C.n.]] inter sese diviserunt, ut Marcus Antonius [[Gallia comata|Galliam comatam]], [[Gaius Iulius Caesar Octavianus Augustus|Octavianus]] Africam, Siciliam, Sardiniam, [[Marcus Aemilius Lepidus (triumvir)|Lepidus]] [[Gallia Narbonensis|Galliam Narbonensem]] Hispaniasque regeret. Revera tamen provincias istas per legatos administrabant : nam Octavianus et Marcus Antonius legiones suas in Graeciam traduxerunt ut bellum cum Bruto Cassioque gererent, Lepidus vero Romae remansit et rebus Urbanis interea praefuit. Deinde, iam victis Bruto Cassioque atque provinciis eorum reciperatis, e [[Pax Brundisina|Pacis Brundisinae]] condicionibus altera divisio fuit<ref>[[Appianus Alexandrinus|Appianus]] BC V,274</ref> ut [[Marcus Antonius]] [[provincia]]s Orientis ([[Macedonia (provincia Romana)|Graeciam]], [[Asia (provincia Romana)|Asiam]], [[Syria (provincia Romana)|Syriam]]), [[Gaius Iulius Caesar Octavianus Augustus|Octavianus]] Siciliam et Africam, [[Gaius Iulius Caesar Octavianus Augustus|Octavianus]] [[Gallia]]m et [[Hispania]]s teneret, ita ut sola [[Africa]] Lepido reliqua esset<ref>[[Appianus Alexandrinus|Appianus]], ''Bell. civ''. V, 47</ref>. [[Proscriptiones (43 a.C.n.)|Proscriptionibus]] saevissimis ab illis triumviris habitis<ref>[[Appianus Alexandrinus|Appianus]], ''Bell. civ''. IV, 16-224. Quod si commentarium ad Appiani textum quaeras, suadeo legas F. Hinard, ''Les proscriptions de la Rome républicaine''. Romae, 1985 </ref>, non minus quam 130 senatores (inter quos [[Marcus Tullius Cicero]], ille orator) et multi alii cives necati sunt. Postquam Sextus Pompeius anno [[36 a.C.n.]] tandem victus est, Marcus [[Marcus Aemilius Lepidus (triumvir)|Aemilius Lepidus]] ab [[Gaius Iulius Caesar Octavianus Augustus|Octaviano]] imperio spoliatus est. Deinde de summo imperio Octavianus et Antonius novo bello civili [[Actium|Actiaca navali pugna]] decertaverunt. Solus remansit [[Gaius Iulius Caesar Octavianus Augustus|Octavianus]], qui Augustus senatus consulto factus est: ita triumviratus transitio inter rempublicam [[consul]]um et principatum [[Imperatores Romani|Imperatorum]] fuit. == Notae == <references /> == Fontes == * [[Appianus Alexandrinus|Appianus]], libro secundo ''Bellorum civilium'' 9 et 17 et libro quarto 4-13, 26-27 et libro quinto passim. * [[Cassius Dio]], libro XLVI ''[[Historia Romana (Dio)|Historiae Romanae]]'', cap. 55 necnon libro XXXVII cap. 54-58 (primus triumviratus).. * [[Florus]], libro secundo ''Epitomae rerum Romanarum'', capitibus 13 et 16. * [[Lucanus]] libro primo ''Pharsaliae'' 84 sqq. *[[Plutarchus]], ''[[Vita Pompei (Plutarchus)|Pompeius]]'' 47 et 51. **''Crassus'' 14-15. **''Cato minor'' 41 **''[[Vita Iulii Caesaris (Plutarchus)|Caesar]]'' 13-14, 21. **''[[Vita Ciceronis (Plutarchus)|Cicero]]'' 46. **''[[Vita Marci Antonii (Plutarchus)|Antonius]]'' 19-21 * [[Suetonius]], [[De vita Caesarum]], in ''Vita Divi Iuli'', capitulo 19 et in ''Vita Divi Augusti'', capitulo 12. * [[Titus Livius]], ''Periochae'' 103 et 119-120. * [[Velleius Paterculus]], libro secundo ''Historiae Romanae,'' capitibus 44, 65–85. ==Bibliographia== *Andreau, Jean. [[1999]]. ''Banking and Business in the Roman World.'' Cantabrigiae: Cambridge University Press. *Lintott, Andrew. [[1999]]. ''The Constitution of the Roman Republic.'' Oxoniae: Oxford University Press. *Lintott, Andrew. [[1999]]. ''Violence in Republican Rome.'' Ed. 2a. Oxoniae: Oxford University Press. * Mangiameli, Rita. [[2012]]. ''Tra duces e milites. Forme di comunicazione politica al tramonto della repubblica''. (Polymnia. Collana di Scienze dell’antichità. Studi di Storia romana). Edizioni Università di Trieste. [https://web.archive.org/web/20180410092153/https://research.ncl.ac.uk/histos/documents/2014RR15SommerMangiameli.pdf Recensio critica] *Robinson, O. F. [[1994]]. ''Ancient Rome: City Planning and Administration.'' Routledge. *Stambaugh, John E. [[1988]]. ''The Ancient Roman City.'' Baltimorae: Johns Hopkins University Press. *Vishnia, Rachel Feig. [[1996]]. ''State, Society, and Popular Leaders in Mid-Republican Rome, 241-167 B.C.'' Routledge. {{Roma antiqua}} {{Myrias|Societas}} [[Categoria:Roma antiqua]] [[Categoria:Gnaeus Pompeius Magnus]] [[Categoria:Gaius Iulius Caesar]] [[Categoria:Augustus]] [[Categoria:Marcus Antonius]] [[Categoria:Bellum Civile (44-30 a.C.n.)]] niq6jllr2xuykoqbim86exxpb3rrmtc Sulphur 0 12860 3995500 3960652 2026-10-18T16:47:06Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995500 wikitext text/x-wiki {{Elementa caput | numerus atomicus=16 | symbolus = S | nomen=sulphur | sinister=[[phosphorus]] | dexter=[[chlorum]] | super=[[oxygenium|O]] | sub=[[selenium|Se]] | color1=#a0ffa0 | color2=black }} {{Elementa turmaperiodusglaeba | turma=16 | periodus=3 | glaeba=p }} {{Elementa color img | S,16.jpg | flavus}} {{Elementa pondusatomicum | 32,065(5) }} {{Elementa epershell | 2, 8, 6}} {{Elementa propphysicae | color1=#a0ffa0 | color2=black }} {{Elementa status | [[Solidus]]}} {{Elementa densitas gpcm3nrt | 2,07 }} {{Elementa densitasliq gpcm3mp | 1,819 }} {{Elementa Punctum Liq | k = 388,36 | c = 115,21 | f = 239,38}} {{Elementa Punctum Fer | k = 717,8 | c = 444,6 | f = 832,3}} {{Elementa Punctum Cri | k = 1314 | mpa = 20,7}} {{Elementa calorlatensfusionis | 1,727}} {{Elementa capacitascaloris | 22,75}} {{Elementa pressus vaporis | 375 | 408 | 449 | 508 | 591 | 717 | nota=}} {{Elementa propatomicae | color1=#a0ffa0 | color2=black }} {{Elementa structuracrystallina | Orthorhombica }} {{Elementa Oxidation States | 4,6,-2 }} {{Elementa radiuscovalentiae | 105±3 }} {{Elementa radiusvanderwaals | 180 }} {{Elementa varietas | color1=#a0ffa0 | color2=black }} {{Elementa conductuscaloris | 0,205 }} |} {{res|Sulphur}}<ref>“Sulphur – elementum chemicum” {{Google Books|hoNuNxUGhpwC|vide p. 39}}</ref><ref>“''Schwefel'': sulphur … sulfur [voc.lat.vet]” apud ''[https://web.archive.org/web/20160803151537/http://pummi.com/latinum_hodiernum/lexicon_latinum_hodiernum_06_rst.pdf Lexicon Latinum hodiernum]''</ref> seu {{res|sulphurium}}<ref>“Sulphurium”: Peter van der Krogt, “[http://www.vanderkrogt.net/elements/list_element.php?language=la&sort=A Elementa chemica]” apud situm ''Elementymology & Elements Multidict.''</ref> vel antiquitus '''sulpur'''<ref>[[Cato Censor|Cato]], ''[[De agri cultura|de Agricultura]]'' 39 et 95. [[Lucretius]], ''[[De rerum natura (Lucretius)|de rerum natura]]'' VI.221, 747, 806. [[Vergilius]], ''[[Georgica]]'' III.449. [[Titus Livius]], ''[[Ab urbe condita libri|Ab Urbe condita]]'' XXXIX.13.12.</ref> est [[elementum chemicum]], non-metallum abundans et [[valentia (chemia)|multivalens]], cuius signum '''S''' et [[numerus atomicus]] est 16. [[Atomus|Atomi]] sulphuris sub condicionibus solitis moleculas cyclicas octatomicas [[Formula chemica|formulae]] S<sub>8</sub> formant quae in aqua non solvuntur. Sulphur elementarium est in [[status normalis|temperatura cubiculari]] [[solidum]] [[flavus|flavum]] [[crystallum|crystallinumque]]. [[Duritas Mohs]] sulphuris est 2,0. Ei est configuratio electronica 3s<sup>2</sup>3p<sup>4</sup>. Usque ad sex [[Vinculum chemicum|vincula]] cum aliis atomis iungere potest. Sulphur elementarium atque [[metallum|minerales]] sulfidi sulfatique in [[natura]] inveniuntur. Crystalla sulphuris a collectoribus quaeruntur propter figuras polyedricas clare [[color]]atas. Apud antiquos sulphur ad domos aliaque loca [[fumigatio|fumiganda]] et suffiminibus [[ritus|rite]] purganda adhibebatur, quod nobis testantur isti duo [[Publius Ovidius Naso|Ovidii]] versus [[Parilia|Parilium]] ritus describentes: : ''caerulei fiant '''vivo<ref>Plures manuscripti 'puro' pro 'vivo' legunt.</ref> de sulpure''' fumi,'' : ''tactaque fumanti '''sulpure''' balet ovis''<ref>''[[Fasti (Ovidius)|Fasti]]'' VI.739-740. Cf {{Pnh}} XXXV.177: ''habet et in religionibus locum ad expiandas suffitu domos''.</ref>. Cum [[fulmen|fulmine]] etiam [[tonitrus|tonitru]]que coniungebatur<ref>{{Pnh}} XXXV.17: ''fulmina, fulgura quoque sulpuris odorem habent, ac lux ipsa eorum sulpurea est''.</ref>. In [[liber Genesis|libro Genesis]] Dominus super [[Sodoma (urbs)|Sodomam]] et [[Gomorra]]m sulphur et ignem pluit.<ref>Blue Letter Bible, [https://www.blueletterbible.org/Bible.cfm?b=Gen&c=19&t=VUL#s=19024 Genesis 19:24] (Editio Vulgata).</ref> Postea in [[pulvis pyrius|pulverem pyrium]] adhibitum est. Anno [[1777]] [[Antonius Lavoisierius]] confirmavit sulphur esse elementum, non rem compositam. == De scriptura == [[Saeculum 1 a.C.n.|Saeculo primo a.C.n.]] coepta est mutatio, qua consonantes mutae /p, t, k/ post liquidas et nasales aspirabantur, sicut ''triumpus'' > ''triumphus'', ''Cartago'' > ''Carthago'', ''pulcer'' > ''pulcher'', ''sepulcrum'' > ''sepulchrum'', ''lacrima'' > ''lachrima''. Quae mutatio phonologica et sociolinguistica non tamen subito ad omnia verba pertinuit, ut ex [[Cicero]]ne (''[[Orator (Cicero)|Or.]]'' 160) cognovimus. Qui enim ''pulchrum'' se praeferre ''pulcro'' dixit, sed ''sepulchrum'' et ''lachrimam'' reiecit. Etiam ''sulpur > sulphur'' pro testimonio huius mutationis dici potest. Editores philologi formis q.s. '''sulpur''' et '''sulphur''' favere videntur. '''Sulfur''' autem posterioris Latinitatis est, quae pronuntiatio formam ''sulphur'' poscit iam vulgarem factam. == In biologia == Atomi sulphuris in duobus aminoacidis inveniuntur: [[cysteinum]] et [[methioninum]]. Magni momenti sunt in structura tertiaria quaternariaque [[Proteina|proteinarum]] stabilienda<ref>[https://www.mabiologie.com/2025/08/ponts-disulfure-et-stabilite-des.html Ponts disulfure et stabilité des protéines] apud mabiologie.com.</ref>. Nam ''pontes bisulfidos''<ref>[https://fr-academic.com/dic.nsf/frwiki/1356795 academic.com]: definitio.</ref> inter segmenta proteinae iungunt (atomi sulphuris ad catenas inter se nectendas semper tendunt) quae sunt [[Vinculum chemicum|vincula covalentia]]<ref>Universitas Andecavensis: ''[https://biochimej.univ-angers.fr/Page2/COURS/7RelStructFonction/3Structure/1StructPrimQuat/6PontDisulfure/1PontDisulfure.htm Cystéine et pont disulfure - Prédiction des cystéines impliquées dans un pont disulfure]''.</ref>. Ita partes moleculae in structura primaria distantes firmiter inter se ligant atque proteinam ad munus suum implendum efficacem reddunt. Cysteinum in [[Ceratinum|ceratino]] maxime abundat. [[Bacteria |Bacteria]] purpurea<ref>[https://web.archive.org/web/20251209011049/https://www.aquaportail.com/dictionnaire/definition/2140/bacterie-pourpre-sulfureuse Aquaportail].</ref> et viridia “sulphurosa” dicta in locis sine [[Oxygenium|oxygenio]] habitant et [[Photosynthesis|photosynthesim]] efficiunt quae non oxygenium reicit sed sulphuris grana. Etenim ad [[glucosum]] creandum non aqua sed [[Hydrogenii sulphidum|hydrogenii sulphido]] ({{chem|H|2|S}}) utuntur secundum reactionem infrascriptam: :''n'' {{chem|CO|2}} + 2''n'' {{chem|H|2|S}} + [[Photon|photones]] → {{chem|C|''n''|H|''2n''|O|''n''}} + ''n'' {{chem|H|2|O}} + 2''n'' S {{chem|H|2|S}} igitur partes aliquas egisse in vita tellurica nascenda<ref>Dominicus Padovani, [https://hal.science/hal-04337040v1 {{chem|H|2|S}} De l'origine de la vie à aujourd'hui], HAL, 2023.</ref> videtur in [[Fons thermalis|fontibus thermalibus]] imo oceano scaturientibus. == In industria humana == Homines hodie sulphure inprimis utuntur ad magnas copias [[Acidum sulphuricum|acidi sulphurici]] H<sub>2</sub>SO<sub>4</sub> fabricandas. In [[cummis|gummis]] industria quoque vulgo adhibetur<ref>''[https://rubberandseal.com/fr/vulcanisation-du-caoutchouc/ Qu'est-ce que la vulcanisation du caoutchouc ?]''</ref>. Et in [[Vitis vinifera|vitis]] cultura adversus [[Fungi|fungos]] adhuc adhibetur<ref>[https://www.jardin-online.fr/comment-traiter-la-vigne-au-soufre/ Comment traiter la vigne au soufre ?]</ref> quod iam suadebat [[Cato maior]] in suo tractatu de agricultura<ref>''[[De agri cultura|De Agricultura]]'' 95.</ref>. Iam aetate Romana sulpureae fodinae erant in locis [[Vulcanismus|volcanismo]] insignitis ut in Sicilia circa [[Agrigentum]] aut in insulis [[Aeoliae insulae|Aeoliis]] et [[Melos|Melo]] et in regione [[Neapolis|Neapolitana]]<ref>{{Pnh}} XXXV.174-5.</ref>: nam eius commercium florebat<ref>Luca Zambito (2014, 2018, 2021).</ref>. Ob inflammabilitatem ad ignem faciendum sulphure utimur ut in [[Sulphuratum|sulphuratis]] dictis virgis. Quod iam antiqui animadverterant<ref>Titus Livius XXXIX.13.12. {{Pnh}} XXXVI.138 necnon XXXV.177: ''neque alia res facilius accenditur, quo apparet ignium vim magnam ei inesse''.</ref> Medici Romani antiqui [[Balneum|balnea]] in [[Aqua medicata|aquis sulphuratis]]<ref>{{Pnh}} XXXI.4-5 et 59-60. Beneficia sulphuris in salutem humanam enumerat libro XXXV 175-7. Cf [[Dioscorides]] V.124.</ref> suadebant quod etiamnunc fit<ref>[https://www.guide-piscine.fr/eau-thermale/les-eaux-sulfureuses-4138_A Les eaux sulfureuses]</ref>. Sulphur in [[dermatologia]] utile est<ref>[https://www.zicail.com/fr/le-soufre-dans-les-soins-de-la-peau/ Le soufre et les soins de la peau]. Cf {{Pnh}} XXXV.177: ''[[Vitiligo|vitiligines]] vivum [sulpur] nitro mixtum atque ex [[Acetum|aceto]] tritum et inlitum tollit, item lendes, et in [[Palpebra|palpebris]] aceto sandaracato admixtum''.</ref>. == In mineralibus naturalibus == [[Fasciculus:Nearly exhausted sulphur vat from which railroad cars are loaded, Freeport Sulphur Co., Hoskins Mound, Texas, 1a35438v.jpg|thumb|Fodina sulphuris (1943).]] {{Ipse dixit|Deinde [[flamma]]e flammārumque praenūntius odor sulpuris aliōs in fugam vertunt, excitant [[Gaius Plinius Secundus|illum]].|[[Gaius Plinius Caecilius Secundus|Plinius Minor]], {{Op|[[Epistulae (Plinius)|Ep.]]}}, {{Vf|Epistularum Libri Decem (Gaius Plinius Caecilius Secundus)/Liber VI|16 C. PLINIUS TACITO SUO S.|VI, 16, 18}} (ubi eruptionem [[Vesuvius|Vesuvii montis]] [[Cornelius Tacitus|Tacito]] describit)}} Sulphur in multis [[minerale|mineralibus]] invenitur. Frequentissima sulphida sunt [[Galena (minerale)|galena]] ([[Plumbum|Pb]]S), [[Minium|minium]] vel [[cinnabar|cinnabare]] ([[Hydrargyrum|Hg]]S), [[Pyrites|pyrites]] ([[Ferrum|Fe]]S<sub>2</sub>), [[Zincum|zinci]] sulphidum (“sphalerites”, ZnS). In [[Petroleum|petroleo]] quoque reperitur, unde extrahitur secundum rationem ''Claus''<ref>''[https://www.malvernpanalytical.com/fr/products/industry-standards/astm-d4294 ASTM D4294 – Soufre dans les produits pétroliers]''</ref>. In [[Mons ignifer|montibus igniferis]] vapores sulphuris lucem caeruleam emittunt quia temperaturis calidissimis (supra 700 [[Gradus Celsianus|gradus Celsianos]]) pars molecularum S<sub>8</sub> in S<sub>2</sub> dividuntur. == De compositis hydrogenatis == Hydrogeni sulphidum vel sulphur hydrogenatum (H<sub>2</sub>S) est gas toxicum sine colore sed taetro odore quem saepe cum [[ovum|ovo]] putrefacto comparant: etenim ovorum proteinae sulphuris atomos continent. Mox tamen [[Nervus olfactorius|nervum olfactorium]] inhibet atque eius odor non iam percipitur! Hydrogenii sulphidum [[Oxygenatio|oxygenationem]] mammalium impedit atque [[Cyanosis|cyanosem]] efficit<ref>CAMFIL: ''[https://www.camfil.com/fr-fr/infos/qualite-de-l-air/sulfure-dhydrogene Sulfure d’hydrogène (H₂S) : dangers, détection et prévention]''</ref>. Praeterea metalla corrodit et inflammabilis displosivusque est. Cum in aquam solvitur H<sub>2</sub>S fit acidum sulphydricum, acidum debile, secundum reactionem infrascriptam: :H<sub>2</sub>S ⇌ HS<sup>−</sup> + H<sup>+</sup> Sunt etiam moleculae 'polysulphana' dictae quae hanc structuram praebent: HS-S<sub>n</sub>-SH ubi n pro numero inter 0 et 6 stat. == De oxidis == [[Fasciculus:Sulfur-burning-at-night.png|thumb|Sulphur cum comburitur caeruleam lucem emittit.]] E sulphuris oxidis maximi momenti sunt dioxidum et trioxidum. Dioxidum sulphuris SO<sub>2</sub>, gas sine odore sed suffocans et toxicum et fumigationibus idoneum, oritur cum sulphur in aere comburitur quod naturaliter fit ignibus e montibus igniferis erumpentibus aut [[Vegetatio|virentibus]] corruptis. Praeterea sulphidum hydrogenii H<sub>2</sub>S in atmosphaera in dioxidum sulphuris oxidatur secundum reactionem infrascriptam: : 2 H<sub>2</sub>S(g) + 3 O<sub>2</sub>(g) → 2 SO<sub>2</sub>(g) + 2 H<sub>2</sub>O(g) Multam copiam superaddit industria humana praecipue e petroleo et [[carbo|carbone]] combustis sed legislatio vicesimi primi saeculi emanationes huius generis minuendas esse iubet. In aquam mersum sulphuris dioxidum [[Acidum sulphurosum|acidum sulphurosum]] H<sub>2</sub>SO<sub>3</sub> gignit : SO<sub>2</sub>(g) + H<sub>2</sub>O(l) → H<sub>2</sub>SO<sub>3</sub>(aq) Dioxidum sulphuris quia pressione aucta liquidum cito fit ad refrigerandum<ref>[https://www.thermal-engineering.org/fr/dioxyde-de-soufre-agent-de-refroidissement-et-applications-industrielles/ Thermal engineering]</ref> vulgo adhibetur. Conservator certorum alimentorum quoque est (additamentum E220<ref>[https://www.doctissimo.fr/nutrition/alimentation-et-sante/bien-manger-pour-etre-en-bonne-sante/additifs-alimentaires/e220-tout-savoir-sur-le-dioxyde-de-soufre-377060.htm Doctissimo.fr].</ref>) et substantia albicans (iam a fullonibus Romanis antiquis in vestibus adhibebatur<ref>{{Pnh}} XXXV.198.</ref>) et bacteria delens. Dioxidum praesente oxygenio lente in trioxidum mutatur: : 2 SO<sub>2</sub>(g) + O<sub>2</sub>(g) → 2 SO<sub>3</sub>(g) Adceleratur industrialiter haec reactio per [[Catalysis|catalysim]]. Nam trioxidum in aquam mersum [[acidum sulphuricum]] gignit, quod ex omnibus [[Compositum chemicum|compositis]] [[Chemia inorganica|inorganicis]] in industria chemica copiosissime producitur (inter alia in [[Laetamen|laetaminibus]] adhibetur). Secundum reactionem infrascriptam: : SO<sub>3</sub>(g) + H<sub>2</sub>O(l) → H<sub>2</sub>SO<sub>4</sub>(aq) Acidum sulphuricum est liquidum unctum, mordax, sine colore. Tres virtutes chemicas praebet: est acidum validum, magna oxidationis potestate ac denique moleculas aquae sibi adripit atque ceteris corporibus adimit. Exempli gratia si hoc acidum carbohydratis (glucoso, [[Saccharosum|saccharoso]]...) infundas puncto temporis nihil nisi spuma [[fuscus|fusca]] [[Carbonium|carbonii]] superest. Cum aqua acidum sulphuricum [[Vinculum chemicum|vincula hydrogenica]] coniungit atque mixtura vehementer effervescit. ==Notae== <references/> == Plura legere si cupis == [[Fasciculus:Aragonite-Sulfur-lw114a.jpg|thumb|Sulphuris crystallum (pars aurea)]] *C. Cézard, M. Mathieu-Nolf. “[https://www.sciencedirect.com/science/article/abs/pii/S1762585805000111 Dérivés organiques soufrés]”, ''EMC - Toxicologie-Pathologie'', 2005: 151-162 *Luca Zambito, "[https://books.openedition.org/efr/8032 Lo zolfo in Sicilia in età romana. Dalle miniere ai mercati]" in ''Le marché des matières premières dans l’Antiquité et au Moyen Âge'', Publications de l’École française de Rome, 2021: 231-254 ** ''La produzione di zolfo in Sicilia in età romana'', Edizioni dell’Orso, Alessandria, 2018 cf "[https://www.academia.edu/14108817/21_La_produzione_dello_zolfo_in_Sicilia_in_et%C3%A0_romana_Primi_dati_da_una_ricerca Primi dati di una ricerca]", ''Journal of Ancient Topography'', 2014: 137-156 == Nexus externi == *[[Vicimedia Communia|Vicimedia communia]] plura habent quae ad [https://commons.wikimedia.org/wiki/Category:Sulfur sulphur] spectant * [http://www.periodicvideos.com/videos/016.htm Hoc elementum] apud ''Patreon: periodic videos'' * [https://www.chimienaturelle.fr/tout-savoir-histoire-usages-du-soufre/ Historia sulpuris ab hominibus adhibiti] apud chimienaturelle.fr. {{NexInt}} *[[Pollutio]] *[[Sulphuratum]] *''[[Xanthophyllum sulphureum]]'' {{Elementa chemica}} [[Categoria:Elementa chemica]] [[Categoria:Non metalla]] {{Myrias|Physica}} b0phi02ifmh3ppkhv899p9wm7sgz8aa Strabo 0 25953 3995504 3784875 2026-10-18T16:51:07Z Andrew Dalby 1084 /* Nexus externi */ 3995504 wikitext text/x-wiki [[Fasciculus:Strabon Rerum geographicarum 1620.jpg|thumb|Strabonis ''[[Geographica (Strabo)|Geographica]]'': recensionis [[Isaacus Casaubonus|Casauboni]] editio [[1620]] [[Lutetia]]na]] {{L-1}} '''Strabo''' (-nis), [[Lingua Graeca|Graece]] {{Polytonic|Στράβων}} (natus [[Amasea]]e in [[Cappadocia]], hodie [[Turcia]], anno circiter [[64 a.C.n.]]; mortuus post [[23]] p.C.n., ut videtur), fuit [[rerum gestarum scriptor]] et [[geographia|geographus]] [[Graecia|Graecus]], qui amplissimam summam [[geographia|geographicam]] [[tellus|orbem terrarum]] tum notum complectentem posteritati reliquit, contra praeter nonnulla fragmenta opus historicum omnino periit. == Vita == Pauca accepimus de vita Strabonis quia aequales eius opera neglexisse videntur vel saltem nullus auctor ante [[Dionysius Periegetes|Dionysium Periegetem]] secundo saeculo ineunte ac postea [[Athenaeus (Naucratites)|Athenaeum]]<ref>''[[Deipnosophistae]]'' XIV.201.</ref> circa 200 ''Geographica'' memoravit, etsi postea [[Imperium Romanum Orientale|Byzantina aetate]] maximus geographorum antiquorum a [[Photius I (patriarcha Constantinopolitanus)|Photio]] et [[Eustathius Thessalonicensis|Eustathio]] habebatur. Itaque ex ipsius scriptis vita hominis quaerenda est. === De maioribus et patria === [[Fasciculus:Statue of Strabo in Amasia.jpg|thumb|Strabonis statua in patria erecta.]] Strabo [[Amasea|Amaseae]] nobilibus [[Pontus (regnum)|Ponticis]] gentibus natus est. Maiores suos qui ministri et amici regum [[Mithridates V Evergeta|Mithridatis V Evergetae]] et [[Mithridates VI (rex Ponti)|Mithridatis VI Eupatoris]] fuerant ipse in scriptis memorabat. Ex eis fuerunt qui regem suum proderent et ad Romanos transfugerent, alii qui fidem servarent, alii qui in [[Creta (regio Graeciae)|Creta]] exsulare mallent ne poenas darent ː in summa varia fortuna iactati, tum summis honoribus elati tum destituti<ref>''[[Geographica (Strabo)|Geographica]]'' X.4.10 et XII.3.33</ref>, certe postquam Romani Ponto potiti sunt omne momentum in rebus publicis [[Asia Minor|Asiae Minoris]] amiserunt, eo magis quod [[Pompeius]] beneficia a [[Lucullus|Lucullo]] transfugis collata irrita fecit inter quos Strabonis avus numerabatur<ref>XII.3.33</ref>. Ruinam et vastitatem patriae suae post [[Bella Mithridatica|Mithridatica bella]] geographus libro duodecimo describebat ac simul eius pristinam magnificentiam memorabat, cum sedes regia Pontici regni adhuc florebat<ref>XII.3.39.</ref> === Quo anno natus sit === Hodie Strabo circa 64/[[63 a.C.n.]] natus esse vulgo putatur postquam eruditi moderni locos in ''Geographicis'' scrutati sunt in quibus eventum aliter notum sive "memoria nostra"<ref>Graece καθ' ἡμᾶς aut εφ' ἡμῶν</ref> sive "paulo ante memoriam nostram"<ref>Graece μικρὸν πρὸ ἡμῶν.</ref> accidisse dicebatur, has locutiones interpretantes tamquam 'post me natum' et 'paulo ante me natum'<ref>B. Niese, Beiträge zur Biographie Strabos', ''Hermes'' 1878(13) ː 33-45</ref>. Nec ullo alio testimonio confirmatur aut infirmatur haec coniectura nec omnes eruditi consentiunt. === De magistris et philosophica persuasione === Optima educatione Graeca edoctus, encyclopaedica et philosophica, Strabo nonnulla magistrorum suorum nomina tradidit. Adhuc adulescentulus [[Nysa ad Maeandrum|Nysam]] in [[Caria|Cariam]] ad [[Maeander|Maeandrum flumen]] contendit grammaticum simulque [[Rhetor|rhetorem]] Aristodemum docentem ut audiret<ref>XIV.1.48</ref>, qui praeceptor filiorum [[Pompeius|Pompeii]] Romae fuerat et in Asiam postea redierat. Tyrannionis deinde discipulus (circa 44 a.C.n. ?) fuit<ref>XII.3.16 et XIII.1.54</ref> , grammatici [[Peripatetici]] qui a [[Cicero|Cicerone]]<ref>''[[Epistulae ad Atticum|Ad Att]]''. II.6.1 Eius frater Quintus illum praeceptorem filio elegerat unde in domum ipsius Ciceronis transiit (''[[Epistulae ad Quintum fratrem|Ad Quintum fratrem]]'' II.4.2).</ref> rerum geographicarum peritissimus iudicabatur idemque [[Amisus (provincia)|Amiso]] in Ponto oriundus Strabonis popularis quodam modo dici poterat. Romae, ut videtur, illum audivit siquidem Lucullus ex oriente rediens Tyrannionem secum duxit. Ille igitur Strabonem videtur adduxisse ut studiis huiusmodi operam daret. Romae quoque fuit discipulus alterius philosophi peripatetici, Xenarchi Seleuciensis<ref>XIV.5.4 et XVI.2.24</ref>. At quotienscumque "nostri" in ''Geographicis'' quidam dicuntur de [[Stoici|stoicis]] agitur quorum placitis adsentiebatur<ref>II.3.8 etc.</ref> Strabo ut plane apparet cum de providentia disputat<ref>Exempli gratia XVII.1.36</ref>. Adsiduum praeterea [[Posidonius Apameus|Posidonii]] lectorem fuisse quem saepe sequebatur atque magnificis verbis laudabat<ref>XVI.2.10</ref> e multis locis suorum librorum constat. Ipsum Posidonium adhuc vivum sese vidisse, non obstante magno aetatum intervallo, adfirmabat Strabo siquidem Athenaei testimonio locum septimi libri hodie deperditum adlegantis credimus. Certe geographum philosophum esse debere aestimabat iam ineunte opere<ref>I.1.1 et I.1.22-23.</ref> et doctos homines Graecos admirabatur ː nam poetas et philosophos et artifices illustres in quacumque urbe natos enumerare solebat. Quocirga geographia Straboniana "culturalis" quaedam geographia a nonnullis modernis recte dici potuit. === De peregrinationibus === [[Fasciculus:C+B-Geography-Map1-StrabosMap.PNG|thumb|Orbis terrarum e Strabone descriptus ː Africa australis et partes septentrionales et orientales Eurasiae adhuc ignotae erant.]] Quamquam ''Geographica'' maxima ex parte in compilatione priorum auctorum consistebat nihilominus Strabo sese iactabat quod unus geographorum peregrinatus esset 'ab Armenia usque ad Tyrrheniam<ref>Hoc est Etruriam.</ref> et a Ponto Euxino usque ad fines Aethiopiae<ref>Quae hodie regio [[Nubia]] est.</ref>'<ref>II.5.11</ref>. Certe patriam et alias regiones Asiae Minoris insularumque circumiacentium bene norat ː exempli gratia cultum [[Ma (dea)|deae Ma]] in [[Cappadocia]] et in Ponto ex viso describebat<ref>XII.2.3 et XII.8.9.</ref>. Fortasse et in Cretam navigavit ad cognatum adhuc ibi habitantem visitandum<ref>X.4.10</ref>. Item [[Alexandria|Alexandriae]] diu moratus est<ref>I.3.17 et II.3.5 ː ''ἡμεῖς ἐπιδημοῦντες τῇ Ἀλεξανδρείᾳ πολὺν χρόνον''.</ref> ubi libris maximae bibliothecae fruebatur atque inde anno 25/[[24 a.C.n.]] cum [[Praefectus Aegypti|praefecto]] [[Aelius Gallus|Aelio Gallo]] usque ad primam cataractam et urbem [[Syene|Syenen]] [[Nilus|Nilo]] descendit. Quocirca septimo decimo libro in capitibus ad Aegyptum pertinentibus saepe quae ipse viderat referebat. Romam quoque venit iam anno [[44 a.C.n.]] aut paulo antea quoniam Servilium Isauricum se vidisse adfirmabat<ref>XII.6.2</ref>, qui mense Maio eodem anno aetate provectus obiit, nec alibi quam Romae eum vidisse potuit. Nec semel Romam navigavit sed quotiens in Urbem venerit aut quibus annis aut quamdiu ibi manserit nescimus. Simul nonnullas regiones urbesque Italiae in itinere vidit atque [[Neapolis|Neapolim]], urbem Graecam, in primis adamasse confitebatur<ref>V.4.7.</ref> ː an ibi aliquamdiu moratus sit incertum est. Inter Asiam aut Aegyptum et Italiam navigans in portibus et stationibus Graeciae quoque constitit, ut anno [[30 a.C.n.]] in parva insula [[Gyaros|Gyaro]]<ref>X.5.3</ref> ː nam cum aliquo piscatore sermonem sese habuisse narrabat quem incolae huius insulae legatum ad Augustum miserant tributi remissionis ob paupertatem impetrandae causa. [[Corinthus|Corinthum]] deinde adpulerunt ubi Augustus tunc morabatur. Contra Gallia et Hispania Straboni terrae incognitae erant de quibus ex prioribus libris scribebat. Denique quo loco ''Geographica'' composuerit aut vitam finierit ignoramus ː nam diversissimae coniecturae ab eruditis propositae sunt. Fortasse Amaseam rediit quae causa fuisse potest cur ''Geographica'' tam diu latuerint ? Nec unde vitam quaesierit compertum habemus, utrum magisterium aliquod exercuerit an rem familiarem habuerit sufficientem ad otiosam vitam agendam, studiis vacantem. === Quo anno mortuus sit === Multa leguntur quae ad principatum [[Tiberius (imperator)|Tiberii]] ineuntem pertinent, e quibus recentissimum eventum erat mors regis [[Iuba II (rex Mauretaniae)|Iubae II]]<ref>XVII.3.7 et XVII.3.9 et XVII.3.25.</ref> quam eruditi ad annum [[23]] vulgo referunt (non omnes de ea re consentiunt), unde colligitur Strabonem plures quam quinque et octoginta annos natum post 23 mortuum esse nisi quidem additamenta texto Strabone iam mortuo inserta sunt. De loco mortis nihil comperti accepimus. == Opera == Duo opera colossea (κολοσσουργίαι<ref>I.1.23</ref>) composuit Strabo, unum ad nos pervenit, paene integrum ː *'''Ύπομνήματα ἱστορικὰ''' ː ''Commentatarii historici'' in quadraginta septem libros digesti, quorum quattuor primi velut ''Prolegomena'' praemittebantur, reliquos quadraginta tres [[Historiae (Polybius)|''Historiis'' Polybianis]] subiungere in animo habebat<ref>XI.9.3</ref>, exordium ab anno [[146 a.C.n.]] capiens atque rem ad suam aetatem ducens. Bella Mithridatica et Parthica inter alia igitur narrabat. Illis libris [[Flavius Iosephus]] ad ''[[Antiquitates Iudaicae|Antiquitates Iudaicas]]'' suas uti potuit<ref>Strabonem nominabat libro tertio decimo 10.182 et 11.198 et 12.208. Libro quarto decimo 3.12 et 4.26 et 6.51 et 7.58-61 et 8.78-80. E quibus locis apparet Timagenem et [[Gaius Asinius Pollio (consul 40 a.C.n.)|Asinium Pollionem]] inter alios secutum esse Strabonem.</ref>, hodie vero deperditi sunt. Nec quamdiu nec quibus annis illi historiae operam dederit comperimus ː certe iam publicata erat cum ''Geographica'' scribebat. * '''[[Geographica (Strabo)|Γεωγραφικά]]''' ː ''Geographica'' in septemdecim libros digesta. Nec quando nec ubi composita aut publicata sint compertum habemus (sine dubio tamen in secunda vitae parte). Quin etiam sunt eruditi qui putant illos libros nondum ab auctore perpolitos mortuo iam Strabone ab aliis publicatos esse<ref>W. Aly, ''op. laud.'' et F. Sbordone, "L'imperio di Tiberio e la redazione definitiva della geografia di Strabone", ''Annuario celebrativo del Linceo'', 1958 ː 51-59. Alia opinio apud E. Pais, "Intorno al tempo ed al luogo in cui Strabo compone la geografia storica", ''Italia antiqua'', 1922 ː 267-316 qui primam aliquam editionem circa 7 a.C.n. coniciebat postea ab anno 18 rursus elaboratam. Alii aliter senserunt quia nihil compertum est. </ref>. ''Geographica'' paene integra ad nos pervenerunt praeter ultima libri septimi capitula. In duobus primis libris de geographia mathematica et [[Geographia physica|physica]] ac velut de cosmographia agitur dum [[Eratosthenes Cyrenaeus|Eratoshenem]] sequitur Strabo atque de argumentis eius contradictorum<ref>Praecipuus [[Hipparchus (discretiva)|Hipparchus]] erat.</ref> disputat (ac simul scientiam [[Homerus|Homericam]] stoicorum more defendit ǃ). Quindecim reliquis de chorographia agitur (ut tunc appellabatur), id est de uniuscuiusque regionis descriptione. Circuitum circa Mare Nostrum et montem Taurum peragebat ab Hispania usque ad Indos ac rursus ab Indis usque ad Mauros. Tum geographiam humaniorem atque ut ita dicam historicam explicabat dum non tantum montes et fluvios et lacus et urbes dimensis eorum intervallis sed etiam eventa historica, varias hominum artes et divitias et mores, viros illustres, fabulas mythologicas, animalia rara aut memotatu digna<ref>Ipse [[Rhinoceros|rhinocerotem]] aliquem observavit atque ita descriptionem apud Artemidorum inventam refellere potuit ː XVI.3.15.</ref> et plantas alibi ignotas etc. enumerat. Minime similes igitur sunt illae duae partes ac parum inter se connexae quia non ex eisdem fontibus haustae. Praeterea controversiis inter grammaticos ad geographica nomina Homerica pertinentibus profusissime indulgebat et orbem Graecum (id est ipsa Graecia et insulae vicinae, Asia Minor, [[Magna Graecia]] et regiones ubi successores [[Alexander Magnus|Alexandri Magni]] regnaverant) multo accuratius et longius quam ceteras orbis partes sibi minus notas describebat quia vix fontibus aliis quam Graecis utebatur. == Notae == <references/> == Plura legere si cupis == * Wolfgang Aly, ''Strabon von Amaseia. Untersuchungen über Text, Aufbau und Quellen der Geographika'', Bonnae, 1957. [https://www.persee.fr/doc/antiq_0770-2817_1958_num_27_1_3344_t1_0174_0000_1 Recensio critica] * Germaine Aujac, introductio ad editionem Strabonis operum apud [[Collection des Universités de France]], Parisiis, 1969 ** ''Strabon et la science de son temps : les sciences du monde'', Parisiis, 1966 [https://www.persee.fr/doc/rea_0035-2004_1970_num_72_1_3868_t1_0171_0000_2 Recensio critica] ** "Strabon et son temps", in ''Geographie'' (curante W. Hübner), Stuttgarti, Franz Steiner, 2000 ː 103-139 * Daniela Dueck, ''Strabo of Amasia: A Greek Man of Letters in Augustan Rome'', Routledge, 2000 [https://www.persee.fr/doc/antiq_0770-2817_2004_num_73_1_2554_t1_0350_0000_2 Recensio ctritica] [https://books.google.fr/books?id=qUOFAgAAQBAJ&pg=PA211&lpg=PA211&dq=strabo+contributi+personalita&source=bl&ots=E2gQi0Lwda&sig=ACfU3U2S57F3e2yovWfe9zCahEBVqMgGBg&hl=fr&sa=X&ved=2ahUKEwit4o-xnNrkAhWsDWMBHeAVAMk4ChDoATAAegQIBBAB#v=onepage&q=strabo%20contributi%20personalita&f=false Apud Guglum librorum] * Iosephus Hasenmuller, ''[https://archive.org/details/destrabonisgeogr00hase/page/n5 De Strabonis geographi vita]'', Bonnae, 1863 * Jérôme Laurent , "Strabon et la philosophie stoïcienne", ''Archives de Philosophie'' 2008/1 ː 111-127 * ''Strabone : contributi allo studio della personalità e dell'opera'', Perugia, 1984-1986. Duo volumina, primum a Francesco Prontera curatum, secundum a Gianfranco Maddoli. * ''Strabone e l'Asia Minore'', curantibus Anna Maria Biraschi et Giovanni Salmeri, [[Perusia|Perusiae]], Università degli studi di Perugia, 2000. [http://bmcr.brynmawr.edu/2001/2001-12-15.html Recensio critica] * [[Ronaldus Syme]], ''Anatolica : studies in Strabo'', [[Oxonia|Oxonii]] : Clarendon press, 1995. Post mortem auctoris ab Antonio Birley editus. [http://bmcr.brynmawr.edu/1995/95.11.17.html Recensio critica] * Patrick Thollard, ''Barbarie et civilisation chez Strabon'' : ''étude critique des livres III et IV de la " Géographie "''. Parisiis, les Belles Lettres, 1987 [https://www.persee.fr/doc/antiq_0770-2817_1989_num_58_1_2274_t1_0292_0000_2 Recensio critica] {{NexInt}} *[[Ctesibius]] [[Alexandria|Alexandrinus]] * [[Hestiaea Alexandrina]] * [[4876 Strabo]] == Nexus externi == * ''[http://books.google.com/books?id=RgVBAAAAcAAJ&dq=Strabonis&lr=&pg=PA1#v=onepage&q=&f=false Geographica]'' {{Ling|Graece|Latine}} * ''[https://www.strabo.ca/ Strabo the Geographer]'' ** [https://www.strabo.ca/editions.html De editionibus] [[Categoria:Nati saeculo 1 a.C.n.]] [[Categoria:Mortui saeculo 1]] [[Categoria:Auctores Graeci antiqui]] [[Categoria:Geographi Graeci antiqui]] [[Categoria:Scriptores Anatoliae Graecoromanae]] [[Categoria:Geographi Graeciae]] hebd4nditr8n3k3gzilvetcdywn2ahu Asturiae 0 27797 3995564 3992724 2026-10-19T08:10:28Z InternetArchiveBot 139091 Rescuing 6 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995564 wikitext text/x-wiki {{L-1}} {{Capsa civitatis Vicidata}} '''[[Asturiae]]''' ([[Asturice]] ''Asturies''; [[Hispanice]] et [[Euvenavice]] ''Asturias'') sunt [[communitas autonoma]] et [[provincia]] [[Hispania|Hispana]], cuius [[caput (urbs)|caput]] est [[Ovetum]]. Incolarum 1&nbsp;061&nbsp;756, ambitum 10&nbsp;602 [[chiliometrum quadratum|chiliometrorum quadratorum]] habet. [[Regio]] ob [[pomacium]] nota est. ==Etymologia== [[Fasciculus:Esla55.JPG|thumb|upright=0.8|Flumen [[Astura]], in praesenti [[Aisela]], cuius ex antiquo nomine derivatum est [[toponymum]] "Asturiae".]] [[Vocabulum]] ''Asturiae'' [[nomen proprium|nomen]] accipit ex antiquis incolis, [[Astures|Asturibus]], primis [[flumen|fluminis]] [[Astura]]e riparum incolis usque ad [[Roma antiqua|Romanam]] dicionem. Nomen ''Astures'' non solum [[Media planities Hispanica|Mediam Planitiem]] habitantes sive Cismontanos sed etiam septemtriones sive transmontanos comprehendebat. Nomen ''[[Astura]]'', quae ante [[Roma antiqua|Romanorum]] invasionem ''Estura'' sive ''Estula'' fuerat, e [[Linguae Celticae|Celtica]] radice ''stour'' '[[flumen]]' ortum est. Quod [[toponymum]] in [[Britannia Minor]]e apparet, ubi [[Plinius maior|Plinius]] de flumine Sture loquitur; hodie sunt tria flumina "Stur" ([[Anglice]] ''Stour'') in [[Cantium|Cantio]], [[Suffolcia]], [[Dorcestria]]. In [[Albis]] exitu est aliud flumen [[Sturia]] ([[Theodisce]] ''Stör''). Etiam in [[Pedemontium|Pedemontio]] sita erat [[Celtae|Celtica]] tribus [[Esturi|Esturorum]] et flumen [[Sturia Demontis|Sturia]] ([[Italice]] ''Stura''). Eadem radix adhuc hodie [[Linguae Goedelicae|Goedelice]] et [[Lingua Britonica|Britonice]] in vocabulis ''ster'' et ''stour'' 'flumen' significantibus perdurat. == Historia == === A primis incolis usque ad regnum Asturum natum === [[Fasciculus:Bellum-Asturicum-Cantabricum.png|thumb|upright=0.8|left|[[Roma antiqua|Romanae]] operationes militares per [[Bellum Asturicum Cantabricum]] gestae.]] [[Fasciculus:Conventus Asturum.jpg|thumb|upright=0.8|left|[[Conventus Asturum]].]] [[Fasciculus:Congas de Onis.JPG|thumb|upright=0.8|left|[[Pons]] [[Roma antiqua|Romanus]] [[Canicae Onnenses|Canicarum Onnensium]]<ref>[http://www.uni-mannheim.de/mateo/camenaref/hofmann/hof4/s0903c.html Lexicon Universale Hofmann]</ref><ref>[https://web.archive.org/web/20160305011413/http://mas.lne.es/toponimia/index.php?palabra=On%EDs&buscar=Buscar Toponymia Asturiana]</ref> ([[Hispanice]]; ''Cangas de Onís,'' [[Euvenavice]]; ''Cangas d'Onís'' et [[Asturice]]; ''Cangues'').]] Primi incolae e genere [[Homo neanderthalensis|Neanderthalensium]] fuerunt. Eorum reliquia invenire possumus in antra quorum nobilissimum est [[El Sidrón]]. Primi [[Homo sapiens|homines sapientes sapientes]] speluncas ad oras habitabant, marisque [[Cochlea (animal)|cochleis]] vivebant. Ad [[concha]]s e saxis evellendas silicibus habile caelatis utebantur, quod modum petrarum caelandarum ars Asturiensis nominatur. Ex his hominibus multae et pulchrae [[animal]]ium [[pictura]]e in cavernis inventae sunt, quorum notissima est [[spelunca Celestini Bustillo]], ad [[Ripa Saliae|Ripam Saliae]] sita. Cum [[Neolithicum]] in Asturias veniret, incolae regionis interiores Asturias habitare coeperunt. Etiam nunc tumulos mortuorum miserabiliter spoliatos passim mirari possumus. Hae gentes, quae ab anno 3000 ad annum 2000 a.C.n. fere in vita erant, nobis parum cognitae sunt nisi a compagibus [[saxum|saxorum]] [[dolmen|dolmina]] appellatis, quod genus [[sepultura|sepeliendi]] tota [[Europa]] videri potest. [[Aetas Metallorum|Aetate Metallorum]], gentes quae primae [[Astures]] appellata sunt ex [[Troia]] venisse dicebantur. Vero autem nominis origo ex flumine [[Astura]], hodie [[Aisela]], derivari videtur. Illo enim tempore limites Asturiarum ex [[Mare Cantabricum|Mari Cantabrico]] ad fluvium [[Durius|Durium]] patebant. Praesens Principatus Asturiarum a Romanis Asturia Transmontana nominatus est ut ab Asturia Cismontana ,quae nunc [[Legio (provincia)|Legio]]nem et [[Ocellum Duri (provincia)|Ocellum Duri]] provincias includit, discerneret. Illo tempore in oppidis castris nominatis Astures vivebant. [[Astures]] libertatem servaverunt usque ad fines [[saeculum 1 a.C.n.|saeculi primi a.C.n.]]. Eo enim saeculo Asturia subacta est a [[Roma antiqua|Romanis]]. Casus belli fuit quod Astures adversus vicinas gentes iam olim pacatas pugnarent agrosque earum vastarent, re quidem vera quod Asturiarum copiae a Romanis vehementer exoptabantur, maxime aurum. Fama est ut ipse [[Augustus]] imperator adversus Astures Cantabrosque bellum fecit. Victi denique sunt in monte Medullio, ubi plerique se ipsos inteficere quam in servitutem se dicare maluerunt. Cum in Asturia non multum Romanorum Instituta ac mores difussa essent, tamen ex eo tempore non pauca vestigia mirari possumus: [[via]]s, [[therma]]s, [[villa]]s, [[inscriptio]]nes, et cetera. Cum [[Imperium Romanum]] a Barbaris dirueretur, [[Visigothi]] [[Suevi]]que in Asturias intraverunt. Ex praesentibus studiis de Barbaris in regione videtur ut eius auctoritas pauca aut minima fuit, nam regio pauper erat et minime ad humanitatem exculta. Anno [[722]], [[Mauri]], qui pleramque [[Hispania]]m bello subigerant, Asturiis potiri temptaverunt. Victi tamen sunt in Covae Dominae proelio, ex quo novissimum [[Regnum Asturorum]] natum est. === Regnum Asturorum === [[Fasciculus:Location of the Kingdom of Asturias.PNG|thumb|upright=0.8|Maxima [[Regnum Asturorum|Regni Asturorum]] extensio.]] [[Fasciculus:Don Pelayo.jpg|thumb|upright=0.8|[[Pelagius (dux Asturum)|Pelagius]], victor in [[Cova Dominica]] et primus [[Reges Asturorum|rex Asturorum]].]] [[Fasciculus:Alfonso III of Asturias pf.jpg|thumb|upright=0.6|[[Alphonsus III (rex Asturorum)|Alphonsus III Magnus]].]] Post [[Visigothi|Visigothorum]] cladem adversus [[Mauri|Mauros]] qui [[Fretum Gaditanum|Gaditanum fretum]] hostiliter transiverant, multi victi ad [[Mons Cantabricus|montes Cantabricos]] fugerunt. Ibi cum Asturum gentibus mixti parvos exercitus qui assidue Mauros vexarent paraverunt. Hac re Mauri exercitum ad Asturiam Transmontanam mittere decreverunt et tum denique victi sunt ab exercitu [[Pelagius (dux Asturum)|Pelagii]], ducis Gothi, in [[Cova Dominica]] ([[Asturice]]; ''Cuadonga'' et [[Hispanice]] ac [[Euvenavice]]; ''Covadonga''). Hoc vero proelium forsitan certamen tumultuarium fuerit, sed animos Visigothis Asturibusque ad novum regnum roborandum dedit. Ex eo tempore parvum [[Religio Christiana|Christianum]] regnum conditum est quod defensionem adversus Mauros apud montes Cantabricos constitueret. Primus rex Asturum [[Pelagius (dux Asturum)|Pelagius]] (718–737) fuit. Huic [[Fafila (dux Asturum)|Fafila]] (737-739) eius filius, qui postea ab urso necatus est, successit. Post Fafilae mortem [[Alphonsus I (rex Asturorum)|Alphonsus I]] (739–757), dux Cantabriae, ad regnum pervenit. Is rex bellicosus fuit et ,eo regnante, fines Regni propagari inceperunt. Propter tanta proelia magnae solitudines inter Asturum Regnum et Mauros creatae sunt, quae [[Terra nullius|Terrae Nullius]] nomine cognitae sunt. Huic [[Froila I (rex Asturorum)|Froila]] (757 -768) eius filius successit. Is quoque bellicosus fuit et continuas oppugnationes a Mauris, ab [[Abderramanus I|Abderramano I]] imperatis, sustinuit. Fama est ut [[Ovetum]] urbem condidit –nunc tamen ea urbs ex recentibus inventionibus originem [[Roma antiqua|Romanum]] habere videtur-. Mos erat apud reges ut etiam inter familiares pugnarent ad imperium obtinendum. [[Froila I (rex Asturorum)|Froila]] ipse suum fratrem [[Vimaranus|Vimaranum]] ob regni exoptandi accussationem propria manu occidisse videtur. Post [[Froila I (rex Asturorum)|Froilam]] a [[Nobilitas|nobilibus]] quoque interfectum, reges inertes nominati, quia paene bellum non ullum gesserunt, regnaverunt. Hi fuerunt [[Aurelius (rex Asturorum)|Aurelius]] (768 – 764), [[Silo (rex Asturorum)|Silo]] (774–783), [[Mauregatus (rex Asturorum)|Mauregatus]] (783 – 789) atque [[Veremundus I (rex Asturorum)|Veremundus Diaconus]] (789–791). [[Veremundus I (rex Asturorum)|Veremundus Diaconus]] successit [[Alphonsus II (rex Asturiarum)|Alphonsus II Castus]], omnium regum Asturum fortissimus, qui multa proelia adversus Mauros gessit, etiam [[Olissipo]]nem oppugnans. Eo regnante, [[sepulcrum]] [[Compostella]]e inventum est quod [[Iacobus Maior (apostolus)|Sancti Iacobi apostoli]] reliquias continere dicebatur. Alphonsus iussit ut templum supra tumulum exstrueretur et locus a peregrinis ex tota [[Europa]] qui reliquias viderent frequentatus est usque ad praesens. Huic successit [[Ranimirus I (rex Asturorum)|Ranimirus I]] (842–852), qui [[Gallaecia]]m regebat. Cum tamen in [[Bardulia]] uxorem duceret, nobilis Nepotiani nomine adversum Ranimirum seditionem ad regnum obtinendum movit. Hac re cognita, Ranimirus [[Ovetum]] profectus est et Nepotianum caecatum in monasterio totam vitam inclusit. Eo tempore [[Normanni]] ex Regni oris fugati sunt post crudelia proelia et direptiones. Ranimiro successit [[Ordonnus I (rex Asturorum)|Ordonnus I]] (850–866) qui limites regni protulit atque [[Legio (urbs)|Legionem]] ac [[Asturica Augusta|Asturicam]] rursus incolis frequentavit. Adversus Mauros qui Regni amplificationem multum timebant pugnavit et etiam adversus Normannos. Huic successit [[Alphonsus III (rex Asturorum)|Alphonsus III Magnus]] (866–910) qui multum limites Regni amplificavit urbes condens tota Legione Castellaque, et etiam trans [[Durius|Durium]]. Sic [[Bracara]]m, [[Portus Cale|Portum Cale]] et [[Conimbriga]]m rursus incolis frequentavit et ex nihilo [[Ocellum Duri]], [[Taurus (Ocellum Duri|Taurum]] et [[Septimanca]]m condidit ut limites a Maurorum impetibus tegeret. Ximenam, regio genere virginem ab Rege [[Navarra]]e genitam, in matrimonium duxit. Sex filios habuit. Cum Alphonsus e vita excederet, inter tres filios Regnum dividit. Ex quo tempore caput Regni ex [[Ovetum|Oveto]] ad [[Legio (urbs)|Legionem]] translata est. Reges Asturici multa et pulchra opera non tantum religiosa sed etiam publica fecerunt. [[Ars|Artium]] [[Ars Asturiarum|Asturicarum]] haec aetas notissima fuit, in qua monumenta [[Ars Praeromanica|praeromanica]], nunc pro [[UNESCO Mundi Hereditas|Patrimonio ex Humanitate]] habita, exstructa sunt. Artifices quoque Asturici pulcherrima ex auro gemmisque opera fecerunt, quarum caput [[Crux Angelorum]] est, quae etiam nunc [[vexillum]] Asturiarum ornat. === Aevum Medium === Post [[caput (urbs)|caput]] regni ad [[Legio (urbs)|Legionem]] translatum, ulli nobiles secessiones concitaverunt ut Asturiae ab [[Regnum Legionense|Regno Legionis]] dissociarentur. Notissima [[seditio]] fuit ea quam [[comes]] Gundisalvus adversus Alphonsum VII dominamque [[Urraca]]m, quae Asturias in nomine Regis administrabat, movit. In anno 1338 [[Ioannes I (rex Castellae et Legionis)|Ioannes I]] et [[Iohannes Gandavensis]] pacem fecerunt matrimonium inter filios suos Henricum et Catharinam componentes. Ex eo tempore Regni heredes [[Principes Asturiarum]] nominantur. [[Medium Aevum|Medio Aevo]] Institutiones Asturiis praecipuae ortae sunt, sic [[popula]]e, [[villa]]e [[concilium|concilia]]que. Societas in tres ordines dividebatur: oratores, bellatores laboratoresque. Asturiani [[secale|secali]], [[far]]re, [[castanea|castaneis]], [[ovis|ovibus]], [[capra|capris]], [[sus|suibus]] et ceteris vivebant. === Nova et contemporanea aetates === [[Fasciculus:Francisco de Goya y Lucientes - Gaspar Melchor de Jovellanos.jpg|thumb|upright=0.8|[[Caspar Melchior de Jovellanos]], Asturianus [[Aevum Illuminationis|illustratus]].]] [[Fasciculus:Javierfernandezfernandez.jpg|thumb|upright=0.8|[[Xaverius Fernández Fernández]] [[Foederatio Socialistica Asturiana|Foederationis Socialisticae Asturianae]] ([[Hispanice]], [[Euvenavice]] et [[Asturice]]; ''Federación Socialista Asturiana'').]] [[Saeculum 18|Saeculo XVIII]] ad famem minuendam maxima levamina Indici tritici tuberculorumque ex [[America]] invectiones fuerunt, quae in praecipuos ex Asturiis cultus una cum fabis se converterunt. Ad fines huius saeculi [[Aevum Illuminationis|Illuminatio]] regionem advenit. Notissimus illustratus [[Caspar Melchior de Jovellanos]] fuit qui Asturicam [[oeconomia]]m stimulare temptavit. Mutatio Artium Operosarum ad Asturias propter [[ferrum|ferri]] [[carbo]]nisque abundantiam venit. Hoc factum praecipuissimum in Historia fuit quia societatem ita mutavit ut etiam novus proletariorum ordo ortus est. Hic ordo postea per fabrum collegia tantam potentiam habuit ut etiam nunc eorum potentia manifesta est. Anno [[1808]] Asturiae prima regio ex tota [[Hispania]] fuit quae bellum in [[Francia|Francogallos]] indixit. Multae et nobilissimae cohortes ad aciem missae sunt ubi magna virtute adversum [[exercitus]] occupantes pugnaverunt quoad ab Hispania depulsi sunt. [[Saeculum 19|Hoc saeculo]] incolae Asturiarum pugnas inter liberales et regiarum partium sectatores passi sunt. Omnium liberalium ducum clarissimus fuit [[Rafael del Riego|Raphaël del Riego]], qui pro libertate tamen moriens regi ad [[Constitutio]]nem iurandum obligavit. [[Saeculum 19|Toto saeculo]] industriae in regione media crescebant praecipue carbonis putei et ferri armorumque fabricae. [[Saeculum 20|Saeculo XX]] discordiae inter fossores fabrosque et eorum dominos tantae erant ut paene quotidie pugnae seditionesque erant. [[October|Octobri]] mense anno [[1934]] fossores ex [[Nelsus|Nelsi]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Nalón'') [[Capitalis (flumen)|Capitalis]]que ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Caudal'') vallibus et fabri ex magnis urbibus adversus centrale imperium armati se sublevaverunt. Cum victi ab exercitu essent, Asturiani proletarii maximas coercitiones in corporibus suis passi sunt. In [[Bellum Civile Hispanicum|Bello Civili Hispanico]] regio gubernationi centrali fidelis mansit praeter [[Ovetum]] et partes Occidentis. Cum exercitus Nationales nominati belli frontes fregerunt, multi milites adhuc Rei Publicae fideles in montes ad vitam servandam fugerunt ubi ducelli Franci copiis restiterunt usque ad annum [[1952]] in quo postremi occulti dispersique bellatores interfecti sunt. Agitationes tamen operariorum numquam in regione cesserunt. In anno [[1963]] maxima secessio in vallibus centralibus orta est cuius explicationes toto orbe divulgatae sunt. Mortuo [[Franciscus Franco|Francisco Franco]], Asturiae [[Communitas Autonoma|Communitatem Autonomam]] constituerunt intra decentralizatam territorialem structuram [[Constitutio]]ne anni [[1978]] statutam. [[Raphaël Ludovicus Fernández Álvarez]], qui antehac ut [[Praeses]] Consilii Regionalis e [[1978]] meruit, factus est primus [[Praeses]] Principatus Asturiarum post [[autonomia]]e adoptionem. Asturiana Gubernatio Regionalis comprehensivas competentias in praecipuos campos tales [[sanitas|sanitatem]], [[educatio]]nem et protectionem [[natura]]e tenet. [[Maius|Maio]] [[2011]], Praeses Gubernationis Asturiarum [[Franciscus Álvarez Cascos]] [[Forum Asturiae|Fori Asturiarum]] ([[Hispanice]] et [[Euvenavice]] ''Foro Asturias'' ; [[Asturice]] ''Foru Asturies'') erat, cui successit [[Xaverius Fernández Fernández]] [[Foederatio Socialistica Asturiana|Foederationis Socialisticae Asturianae]] ([[Hispanice]], [[Euvenavice]], [[Asturice]] ''Federación Socialista Asturiana''). ==Geographia et clima== [[Fasciculus:Satellite image of Asturies in January 2003.jpg|thumb|upright=0.8|Asturiae e [[spatium|spatio]] [[Ianuarius|Ianuario]] [[2003]].]] [[Fasciculus:Urriellu.JPG|thumb|upright=0.8|[[Mons Auseba]] ([[Hispanice]] ''Picos de Europa'', [[Asturice]] et [[Euvenavice]] ''Picos d'Europa'') cum inconfundibili [[Horreolum|Horreolo]] ([[Hispanice]] ''Naranjo de Bulnes'', [[Asturice]] ''Picu Urriellu'' et [[Euvenavice]] ''Pico Urriellu'').]] Asturiae apud [[Septemtrio]]nale [[Hispania]]e [[litus]] invenitur, inter [[Gallaecia (Communitas autonoma)|Gallaeciam]] [[Occidens|Occidente]], [[Cantabria]]m [[Oriens|Oriente]], [[Castella et Legio|Castellam et Legionem]] [[Meridies|Meridie]] et [[Mare Cantabricum]] Septemtrione. [[Mons Cantabricus]] [[natura]]lem limitem inter Asturias et [[Legio (provincia)|provinciam Legionem]] Meridie constituit. Orientali in [[cordillera]], [[Consaeptum Nationale Montis Ausebae|Consaeptum Nationale]] [[Mons Auseba|Montis Auseba]] ([[Hispanice]] ''Picos de Europa'', [[Asturice]] et [[Euvenavice]] ''Picos d'Europa'') altissima et spectacularissima Asturiarum cacumina continet, cum maxima altitudine cacuminis [[Turris Cirretensis]] ([[Hispanice]] ''Torre de Cerredo'', [[Asturice]] ''Torrecerréu,'' et [[Euvenavice]] ''Torrecerredo''), 2648 [[metrum|metra]] alti. Etiam inveniuntur [[Consaeptum Naturale Redes]] ([[Hispanice]], [[Asturice]], et [[Euvenavice]] ''Parque Natural de Redes''), saxorum [[Calx (minerale)|calcis]], Centroriente; [[Consaeptum Naturale Albinae-Mensa]] ([[Hispanice]] et [[Euvenavice]] ''Parque Natural de Las Ubiñas-La Mesa'', [[Asturice]] ''Parque Natural de Les Ubiñes-La Mesa''), [[Ovetum|Oveti]] Meridie; et [[Consaeptum Naturale Summetum]]<ref>[https://web.archive.org/web/20190918041459/https://mas.lne.es/toponimia/index.php?leer=318&palabra=Somiedo Toponymia Asturiana].</ref> ([[Hispanice]] et [[Euvenavice]] ''Parque Natural de Somiedo'', [[Asturice]] ''Parque Natural de Somiedu'') Oriente. [[Mons Cantabricus|Montes Cantabrici]] numerosas opportunitates ascendendi, [[Nartatio|nartandi]] et explorandi offerunt et patent e [[Gallaecia (Communitas autonoma)|Gallaecia]] Occidente in [[Cantabria]]m Oriente. Apud Asturianum litus inveniuntur [[acta]]e [[Acta Silentii|Silentii]] ([[Hispanice]] ''Playa del Silencio'' et [[Euvenavice]] ''Praia do Silencio'', [[Asturice]] ''El Gavieru''), vicus [[Coticularium]]<ref>[http://mas.lne.es/toponimia/index.php?leer=398&palabra=Cudillero Toponymia Asturiana]</ref> ([[Hispanice]] et [[Euvenavice]] ''Cudillero'', [[Asturice]] ''Cuideiru'') et [[acta]]e circum [[Planae|Planas]]<ref>[https://web.archive.org/web/20160305011252/http://mas.lne.es/toponimia/index.php?leer=852&palabra=Llanes Toponymia Asturiana]</ref> ([[Hispanice]], [[Euvenavice]] et [[Asturice]] ''Llanes''), sicut [[Barrum (acta)|Barrum]] ([[Hispanice]], [[Euvenavice]] et [[Asturice]] ''Barro'') atque [[Torimbia]] ([[Hispanice]], [[Euvenavice]] et [[Asturice]] ''Torimbia''). Asturianum [[clima]] variatius est quam id Meridionalium [[Hispania|nationis]] regionum. [[Aestas|Aestates]] generaliter umidae calidaeque cum [[praecipitatio]]num aliquo sunt. [[Hiems|Hiemes]] leviter frigidae sunt, praesertim in [[mons|montibus]], [[nix|nive]] a [[November|Novembri]] ad [[Maius|Maium]] tectis. Et [[pluvia]] et [[sol]] regulares Asturianarum hiemum characteres sunt. Annuae [[praecipitatio]]nes 900 mm sunt, et augentur quanto remotior regio, cum maximo 1 800 mm in [[Mons Auseba|Monte Auseba]] ([[Hispanice]] ''Picos de Europa'', [[Asturice]] et [[Euvenavice]] ''Picos d'Europa''). Propter Asturiarum [[umor]]em et [[vegetatio]]nem, [[Principatus]] [[Hispania]] [[Viridis]] nuncupatur. ===Ambitus naturalis=== [[Fasciculus:Panorámica del alto de L'Angliru.jpg|thumb|upright=1.5|Cacuminis [[Anguilarium|Anguilarii]] prospectus.]] [[Fasciculus:Vista de muniellos.jpg|thumb|upright=1.6|[[Reservatum Naturale Integrale Munnellorum|Reservati Naturalis Integralis Munnellorum]] conspectus.]] [[Fasciculus:Bosque de Muniellos 04.jpg|thumb|[[Reservatum Naturale Integrale Munnellorum|Reservati Naturalis Integralis Munnellorum]] silva.]] Asturiae et [[mons|montana]] et [[litus|litoralis]] [[communitas autonoma|communitas]] est, numerosas ac notas [[natura]]les [[inclavatura]]s habens, quarum aliquae procteguntur sicut [[Consaeptum Nationale|Consaepta Nationalia]], [[Consaeptum Naturale|Naturalia]] ac [[Reservatum Biosphaerae|Reservata]] [[Biosphaera]]e, inter quae excellunt: * [[Cacumen]] [[Anguilarium]]<ref>[http://mas.lne.es/toponimia/index.php?palabra=Angliru&buscar=Buscar Toponymia Asturiana]</ref> ([[Hispanice]] ''El Angliru'', [[Asturice]] et [[Euvenavice]] ''L'Angliru'') * [[Horreolum|Horreolo]] ([[Hispanice]] ''Naranjo de Bulnes'', [[Asturice]] ''Picu Urriellu'' et [[Euvenavice]] ''Pico Urriellu'') * [[Mons Auseba]] ([[Hispanice]] ''Picos de Europa'', [[Asturice]] et [[Euvenavice]] ''Picos d'Europa'') * [[Reservatum Biosphaerae|Reservata Biosphaerae]] ** [[Consaeptum Naturale Redes]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]] ''Parque Natural de Redes'') ** [[Consaeptum Naturale Summetum]]<ref>[https://web.archive.org/web/20190918041459/https://mas.lne.es/toponimia/index.php?leer=318&palabra=Somiedo Toponymia Asturiana]</ref> ([[Hispanice]] et [[Euvenavice]] ''Parque Natural de Somiedo'' ; [[Asturice]] ''Parque Natural de Somiedu'') ** [[Reservatum Naturale Integrale Munnellorum]]<ref>[http://mas.lne.es/toponimia/index.php?leer=187&palabra=llv Toponymia Asturiana]</ref> ([[Hispanice]] et [[Euvenavice]] ''Reserva Natural Integral de Muniellos'' ; [[Asturice]] ''Reserva Natural Integral de Munieḷḷos''). ===Vegetatio Asturiarum=== [[Vegetatio]] Asturianis in montibus variat quia secundum [[altitudo|altitudinem]] mutatur. Inferioribus partibus sunt [[quercus ilex|ilices]] et [[pinus|pini]] siccis zonis, dum [[Quercus robur|robura]] et [[fagus|fagi]] umidis zonis. In monte sunt caesariatae caducifoliae [[silva]]e, et superius, [[pinophyta|pinophytorum]] silvae. Super 2000 [[metrum|metrorum]], solum sunt [[pratum|prata]]. In parte [[Mare Cantabricum|Mari Cantabrico]] attacta [[vegetatio]] multum abundat, et gratia [[pluvia]]rum valde variat. Consistit in caducifoliis [[arbor]]ibus, talibus [[Quercus robur|roburibus]], [[Castanea sativa|castaneis]], et [[fagus sylvatica|fagis]], atque in [[pratum|pratis]] naturalibus. ==Civilitas et gubernatio== [[Fasciculus:Fachada Xunta Xeneral d'Asturies.JPG|right|thumb|upright=0.8|[[Iuncta Generalis Principatus Asturiarum|Iunctae Generalis]] [[aedificium|aedes]] [[Ovetum|Oveti]].]] [[civilitas|Politica]] Principatus Asturiarum organizatio structuraque [[Statutum Autonomiae|Statuto Autonomiae]], e [[30 Ianuarii]] [[1982]] vigente, regitur. Secundum Statutum, institutiva Principatus Asturiarum organa sunt tria: [[Iuncta Generalis Principatus Asturiarum|Iuncta Generalis]] ([[Hispanice]]; ''Junta General,'' [[Asturice]]; ''Xunta Xeneral,'' et [[Euvenavice]]: ''Xunta Xeral''), [[Consilium Gubernationis Principatus Asturiarum|Consilium Gubernationis]] ([[Hispanice]]; ''Consejo de Gobierno,'' [[Asturice]]; ''Conseyu de Gobiernu,'' et [[Euvenavice]]: ''Consello de Goberno'') et [[Praeses Asturiarum|Praeses]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]: ''Presidente''). Modus [[gubernatio]]nis Pricipatus [[parlamentum|parlamentarius]] est: Iuncta Generalis [[potestas legisfera]] est, quae, populum Asturianum repraesentans, Praesidem Principatus Asturiarum eligit. Praeses Principatus Asturiarum etiam Consilii Gubernationis, [[potestas exsecutiva|potestatis exsecutivae]] dux, est et Iuncta Generali coram politice respondet, quae per [[motio censurae|motionem censurae]] aut per [[quaestio fiduciae|quaestionem fiduciae]] eum e muneribus dimittere potest. [[Potestas legisfera]] ad Iunctam Generalem, ab Asturiani populi repraesentantibus integratam, correspondet. Inter cuius munera dispensationem oeconomicam probare et Consilium Gubernationis ordinare dirigereque sunt. Iuncta integratur a 45 [[deputatus|deputatis]], quattuor annorum perihodo per [[suffragium universale]] intra [[repraesentatio proportionalis|repraesentationis proportionalis]] systema electis, in quo deputatorum assignatio in [[Methodus D'Hondtiana|Methodo D'Hondtiana]] fundatur. Ad Iunctam Generalem [[comitia|comitiorum]] resultationes fuere: {| |- ! colspan="10" width="60%" bgcolor="#C0C0C0" align="center" | Comitia autonomica Asturiana |- bgcolor="#D8D8D8" ! [[Factio politica|Factio]] ! align="right" | 1983 ! align="right" | 1987 ! align="right" | 1991 ! align="right" | 1995 ! align="right" | 1999 ! align="right" | 2003 ! align="right" | 2007 ! align="right" | 2011 ! align="right" | 2012 |- | bgcolor="#FF4500" | '''[[Partes Socialisticae Operariae Hispanicae]]''' | bgcolor="#FF6347" align="right" | 26 | bgcolor="#FF6347" align="right" | 20 | bgcolor="#FF6347" align="right" | 21 | bgcolor="#FF6347" align="right" | 17 | bgcolor="#FF6347" align="right" | 24 | bgcolor="#FF6347" align="right" | 22 | bgcolor="#FF6347" align="right" | 21 | bgcolor="#FF6347" align="right" | 15 | bgcolor="#FF6347" align="right" | 17 |- | bgcolor="#17375E" | '''[[Forum Asturiae]]''' | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#37577E" align="right" | 16 | bgcolor="#37577E" align="right" | 12 |- | bgcolor="#1E90FF" | '''[[Foedus Populare Hispanicum|Foedus Populare]]/[[Factio Popularis Hispanica|Factio Popularis]]''' | bgcolor="#87CEFA" align="right" | 14 | bgcolor="#87CEFA" align="right" | 13 | bgcolor="#87CEFA" align="right" | 15 | bgcolor="#87CEFA" align="right" | 21 | bgcolor="#87CEFA" align="right" | 15 | bgcolor="#87CEFA" align="right" | 19 | bgcolor="#87CEFA" align="right" | 20 | bgcolor="#87CEFA" align="right" | 10 | bgcolor="#87CEFA" align="right" | 10 |- | bgcolor="#32CD32" | '''[[Laeva Iuncta (Hispania)|Laeva Iuncta]]'''* | bgcolor="#7CFC00" align="right" | 5<sup>a</sup> | bgcolor="#7CFC00" align="right" | 4 | bgcolor="#7CFC00" align="right" | 6 | bgcolor="#7CFC00" align="right" | 6 | bgcolor="#7CFC00" align="right" | 3 | bgcolor="#7CFC00" align="right" | 4<sup>b</sup> | bgcolor="#7CFC00" align="right" | 4<sup>c</sup> | bgcolor="#7CFC00" align="right" | 4<sup>e</sup> | bgcolor="#7CFC00" align="right" | 5 |- | bgcolor="#FF00FF" | '''[[Unio, Progressus et Democratia]]''' | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FF00FF" align="right" | 1 |- | bgcolor="#FFA500" | '''[[Centrum Democraticum et Sociale]]''' | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#ffC000" align="right" | 8 | bgcolor="#ffC000" align="right" | 2 | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#ffffff" align="right" | | bgcolor="#ffffff" align="right" | | bgcolor="#ffffff" align="right" | | bgcolor="#ffffff" align="right" | | bgcolor="#ffffff" align="right" | |- | bgcolor="#EEEE42" | '''[[Factio Asturianistica]]''' | bgcolor="#FFFFff" align="right" | | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#FFFF42" align="right" | 1<sup>d</sup> | bgcolor="#FFFF42" align="right" | 1 | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#FFFFFF" align="right" | 0 | bgcolor="#FFFFFF" align="right" | |- | bgcolor="#00DDDD" | '''[[Unio Renovatoria Asturiana]]''' | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#00FFFF" align="right" | 3 | bgcolor="#00FFFF" align="right" | 0 | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | | bgcolor="#FFFFFF" align="right" | |- bgcolor="#EEEEEE" | '''''Totum''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' | align="right" | '''''45''''' |} Fontes: [https://web.archive.org/web/20090827060030/http://www.mir.es/ Ministerium Rerum Internarum Hispanicum] et [http://www.facc.info Foederatio Asturiana Conciliorum] ::a) Correspondet ad [[Factio Communistica Asturiarum|Factionem Communisticarum Asturiarum]], ::b) Laeva Iuncta in coalitione cum [[Summa pro Asturiis]] se praesentavit. ::c) Laeva Iuncta in coalitione cum [[Summa pro Asturiis]] et [[Virides Asturiarum|Viridibus Asturiarum]] se praesentavit. ::e) Laeva Iuncta in coalitione cum [[Virides Asturiarum|Viridibus Asturiarum]] se praesentavit. ::d) Se praesentavit in coalitione cum [[Unitas Nationalistica Asturiana (1988)|Unitate Nationalistica Asturiana]] in [[Coalitio Asturiana]]. ==Heraldica et vexillologia== [[Fasciculus:Flag of Asturias.svg|thumb|upright=0.5|[[Vexillum Principatus Asturiarum]].]] [[Insigne]] Asturiarum [[Lex|Lege]] 2/[[1984]], diei [[27 Aprilis]], ([[BOPA]] nº 103, diei [[4 Maii]], regitur et eius [[color]]es [[Decretum|Decreto]] 118/1984 diei [[31 Octobris]] (BOPA nº 276, diei [[29 Novembris]]). [[Vexillum]] Asturiarum Lege 4/[[1990]], diei [[19 Decembris]] (BOPA nº 6, diei [[9 Ianuarii]] [[1991]]) regitur. ==Ordinatio territorialis== {{Vide-etiam|Concilia Principatus Asturiarum}} {{Vide-etiam|Commarcae Principatus Asturiarum}} [[Fasciculus:Escudo de Asturias.svg|left|thumb|upright=0.4|[[Insigne Principatus Asturiarum]].]] Administrative, Principatus Asturiarum divisus est in 78 [[Concilia Principatus Asturiarum|concilia]], ad [[municipium|municipia]] aequivalentia. Minor entitas concilio est [[parochia (divisio administrativa)|parochia]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''parroquia''), quae necessario cum [[parochia|parochia ecclesiastica]] coincidere non debet. Intra quadam parochiam possunt esse [[vicus|vici]] et [[oppidulum|oppidula]]. [[Statutum Autonomiae]] etiam loquitur de possibilitate ut ordinetur territorium in [[Commarcae Principatus Asturiarum|commarcas]]. Quamquam legaliter vixdum evolutae sunt, sunt aliquae [[commarca]]les administrationes ab variis [[municipium|municipiis]] sive [[concilium|conciliis]] statutae et ad praebendas municipalis competentiae diaconias et ordinandam, ad destinandam et ad promovendam peregre commarcam. Haec sunt: [[Flavionavia (commarca)|commarca Flavionavia]], [[concilium|concilia]] [[Flavionavia]]m<ref>[http://www.columbia.edu/acis/ets/Graesse/orblatf.html Orbis Latinus Graesse]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Avilés''), [[Illae|Illas]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Illas''), [[Curvaria (Asturiae)|Curvariam]]<ref>[https://web.archive.org/web/20160305135828/http://mas.lne.es/toponimia/index.php?leer=840&palabra=Corvera Toponymia Asturiana]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Illas'') ac [[Castellum Gauzon]]<ref>[http://es.wikipedia.org/wiki/Castrill%C3%B3n#Edad_media_y_moderna Vicipaedia Hispanica]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Castrillón'') comprehendens, et [[Commarca Nelsi]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Comarca del Nalón''), [[Langiciati|Langiciatos]]<ref>[http://es.wikipedia.org/wiki/Langreo#Historia Vicipaedia Hispanica]</ref> ([[Hispanice]], [[Euvenavice]]; ''Langreo'' et [[Asturice]]; ''Llangréu''), [[Sanctus Martinus Regis Aurelii|Sanctum Martinum Regis Aurelii]] ([[Hispanice]]; ''San Martín del Rey Aurelio'', [[Euvenavice]] et [[Asturice]]; ''Sanmartín del Rei Aurelio''), [[Flaviana (Asturiae)|Flavianam]]<ref>[http://es.wikipedia.org/wiki/Laviana_%28Asturias%29#Edad_Media_y_Moderna Vicipaedia Hispanica]</ref> ([[Hispanice]], [[Euvenavice]]; ''Laviana'' et [[Asturice]]; ''Llaviana''), [[Casum]]<ref>[https://web.archive.org/web/20160305135932/http://mas.lne.es/toponimia/index.php?leer=838&palabra=Casu Toponymia Asturiana]</ref> ([[Hispanice]], [[Euvenavice]]; ''Caso'' et [[Asturice]]; ''Casu'') ac [[Superscopulum]] ([[Hispanice]], [[Euvenavice]]; ''Sobrescobio'' et [[Asturice]]; ''Sobrescobiu'') comprehens. [[Fasciculus:Mapa comarcal d'Astúries.svg|thumb|350px|Areas sanitariae Principatus Asturiarum.]] Iuridice in Asturiis inveniuntur tres circumscriptiones comitiales, inter quas maxima est secundum [[numerus incolarum|numerum incolarum]] centralis. Ex iudiciali aspectu Asturiae divisae sunt in [[districtus iudiciarius|districtus iudiciarios]] ([[Hispanice]]; ''partidos judiciales'' [[Euvenavice]]; ''partidos xudiciais'' et [[Asturice]]; ''partíos xudiciales'') duodeviginti, cum singulis primae instantiae [[tribunal]]ibus in singulis eorum [[caput (urbs)|capitibus]]. E [[salus|sanitario]] aspectu Asturiae areas sanitarias octo, districtus sanitarios duos, zonas basicas salutis sex et sexaginta atque zonas speciales salutis quindecim habet, secundum data Instituti Informationis Sanitariae anno [[2002]]. ==Demographia== Anno [[2008]], Asturiae [[index fertilitatis|indicem fertilitatis]] 1,07, intra [[Unio Europaea|Unionem Europaeam]] infimum, habebat. Asturiae etiam est una minime religiosarum zonarum in [[Europa]]. Circiter 45% Asturianorum nullum deum aut nullam vim vitalem credunt. {|align="center" border="1" bordercolor="#333333" cellspacing="0" cellpadding="1.5px" |-----align="center" bgcolor="#66dd66" style="font-size:10px" |1800||1900||1920||1950||1960||1970||1981||1991||1996||2000||2001||2002||2003||2004||2005||2006||2011 |-----align="center" style="font-size:9px" |350&nbsp;000||627&nbsp;069||743&nbsp;726||888&nbsp;149||989&nbsp;344||1&nbsp;045&nbsp;635||1&nbsp;127&nbsp;007||1&nbsp;098&nbsp;725||1&nbsp;087&nbsp;885||1&nbsp;076&nbsp;567||1&nbsp;075&nbsp;329||1&nbsp;073&nbsp;971||1&nbsp;075&nbsp;381||1&nbsp;073&nbsp;761||1&nbsp;076&nbsp;635||1&nbsp;076&nbsp;896||1&nbsp;054&nbsp;549 |} === Lingua === Quamquam [[lingua Hispanica]] unica [[lingua publica]] in Principatu est, [[lingua Asturiana]], nihilominus, [[lingua vernacularis]] in Principatu, quae, etiamsi nullo statu officiali gaudet, revera agnoscitur protegiturque a Principatu Asturiarum secundum [[Statutum Autonomiae]] et [[lex|leges]] evolutas est. [[Fasciculus:Asturian linguistic areas.PNG|thumb|upright=1.5|Linguistica Asturiarum tabula ([[Anglice]] signata).]] [[Lingua Asturiana]] e [[Linguae Romanicae|lingua Romanica]] quae e [[lingua Latina]] nata est orta est, quae erat in usu [[Medium Aevum|Mediaevalibus]] in [[regnum|regnis]] [[Regnum Asturorum|Asturorum]] et [[Regnum Legionense|Legionensi]]. Antiquissimus cognitus huius linguae textus ''[[Nodicia de Kesos]],'' ab anno [[959]], est, dum normativum documentum [[Asturice]] scriptum antiquissimum servatum anni [[1085]] [[Forum Flavionaviae]] ([[Asturice]] ''Fueru d'Avilés'') est. E [[Transitio Democratica Hispanica|Transitione Democratica Hispanica]], linguae Asturianae [[lingua officialis|officialitas]] est una inter dissimilium motuum socialium vindicationes. Anno [[1981]] creata est [[Academia Linguae Asturianae]] ([[Asturice]] ''Academia de la Llingua Asturiana''), Principatus Asturiarum institutum cuius propositum est linguae Asturianae studium, promotio defensioque. Numerosae societates pugnant pro tutela absoluta linguae asturianae, e.g: [[Contio pro Defensione Linguae Asturianae]] ([[Asturice]] ''Xunta pola defensa de la llingua asturiana''), [[Concilium Apertum pro Tutela]] ([[Asturice]] ''Conceyu Abiertu pola oficialidá'') aut [[Unitas Nationalistica Asturiana|Unitas]] ([[Asturice]] ''Unidá''). E [[2005]] officializata{{dubsig}} sunt nonnulla locorum [[toponymum|toponyma]]. In praesenti sunt pauca [[concilium|concilia]] sine officializata{{dubsig}} vernacula toponymia. [[Lingua Asturiana]] 17,7 centesimae Asturianorum [[sermo patrius]], dum 20,1 centesimae Asturianorum etiam est iuxta cum [[lingua Hispanica]]. Praeterea, est voluntaria studii materia alumnis [[Ludus litterarius|primariae]] et optativa alumnis [[educatio secundaria|secundariae]] toto in Principatu Asturiarum. Etiam paulum in [[Media communicationis socialis|mediis communicationis]] est per [[septimanale|septimanalia]] quae utuntur lingua Asturiana [[lingua franca|lingua vehiculari]]. Ultimis annis, [[litterae]] [[lingua Asturiana|Asturianae]] magna evolutione gavisae sunt e motu [[Surdimentu]] nuncupato. Praeter [[lingua Asturiana|linguam Asturianam]], inter flumina [[Euve]]<ref>[http://www.celtiberia.net/verrespuesta.asp?idp=8763 Celtiberia]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Eo'') et [[Navia (flumen)|Naviam]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Navia''), Asturiani [[Euvenavice]] loquuntur. [[Philologia|Philologice]], [[lingua Euvenavica]] intra [[Linguae Gallaico-Lusitanae|linguas Gallaico-Lusitanas]] includitur, ut demonstrant antiqui textus hac lingua servati, ostendentes aliquas notas quae eam [[lingua Asturiana|linguae Asturianae Occidentali]] appropinquant. Sicut [[lingua Asturiana|linguae Asturianae]] casus, [[lingua Euvenavica]] nullo iuridico [[lingua officialis|linguae officialis]] statu gaudet. ==Oeconomia== [[Fasciculus:Asturian sheep.jpg|thumb|upright=1|Asturianae [[ovis|oves]] in [[Mons Auseba|Monte Auseba]] pascuntur.]] Principatus Asturiarum [[oeconomia]] [[campus primarius|campum primarium]] regredientem 6 centesimas [[Facultas laborandi|facultatis laborandi]] occupantem cum [[ctenotrophia]] [[Bos taurus|vaccina]], [[agricultura]] ([[maizum|maizi]], [[patata]]rum, [[Malum|mālorum]]), et [[piscatio]]ne habet. Adhuc sunt significativae{{dubsig}} [[carbonifodina]]e quamquam non gaudent antiquo pondere. [[Campus secundarius]] 30 centesimis [[Facultas laborandi|facultatis laborandi]] utitur, intra quem ponderis sunt [[siderurgia]], [[alimentum|alimenta]], [[navale|navalia]], [[arma]], [[industria]] [[chemia|chemica]], et apparatus [[vectura]]e. In [[campus tertiarius|campo tertiario]] sunt 65 centesimae [[Facultas laborandi|facultatis laborandi]] et auget,<!--?--> quod est symptomaticum{{dubsig}} ob incolarum densationem{{dubsig}} in [[urbs|mediis urbibus]], et est ponderis quod [[periegesis]] acquisivit in [[regio]]ne recentioribus annis. Etiamsi [[delocalizatio industrialis]] [[communitas autonoma|communitatem]] prioribus [[decennium|decenniis]] percussit,<!--? d.i. has beaten the community?--> [[reditus per capita]] super [[Hispania|regnum]] medium crevit quoad consecutus est 19&thinsp;868 [[euro|€]] anno [[2006]] (89,7% [[PDG]] [[per capita]] [[Hispania|regni]]). [[Concilium|Concilia]] Principatus Asturiarum partem facientia [[debitum]] publicum globale 451&thinsp;071&thinsp;000 [[millio]]num [[euro]]num habent. ==Infrastructura== ===Media communicationis=== [[Fasciculus:FotoInstalacionesRTPA_ WIKI.jpg|thumb|upright=0.8|Aedificia RTPA.]] Haec sunt praecipuorum [[Media communicationis socialis|mediorum communicationis]] aliquae in Asturiis. ====Radiophonia==== In privata [[radiophonia]]; * [[40 Principales Asturias]] - 97.5 MHz - [[Ovetum|Oveti]] * [[40 Principales Eo]] - 106.4 MHz - [[Attalamundus|Attalamundi]] * [[40 Principales Gijón]] - 88.3 MHz - [[Veca]]e * [[Dial Asturias]] - 91.1 MHz - [[Ovetum|Oveti]] * [[Dial Eo-Navia]] - 98.3 MHz - [[Bovale|Bovali]] * [[M80 Radio Asturias]] - 94.7 MHz - [[Gradus (Asturiae)|Gradu]] * [[Máxima FM Asturias]] - 88.9 MHz - [[Ovetum|Oveti]] * [[Radio Asturias FM]] - 100.9 MHz - [[Langiciati]]s * [[Radio Asturias OM]] - 1 026 KHz - [[Ovetum|Oveti]] * [[Radio Nalón]] - 87.6 MHz - [[Flaviana (Asturiae)|Flavianae]] * [[SER Gijón]] - 96.5 MHz - [[Gegio|Gegioni]] ====Televisio==== [[Fasciculus:TeleAsturias.jpg|thumb|upright=0.8|[[Machina cinematographica|Artifex cinematographicus]] tramitis [[TeleAsturias]] in conventu diurnariorum.]] =====Televisio publica===== Est centrum regionale [[Ovetum|Oveti]] societatis [[Televisión Española]] quod turrim telecommunicatoriam in [[Gamoniteiru]] ([[Hispanice]] et [[Euvenavice]]; ''Gamoniteiro'' et [[Asturice]]; ''Gamoniteiru'') et varias turres reemissorias toto in Principatu habet. Hinc producitur et retransmittitur regionalis programmatio. Anno [[2006]] inceptae sunt emissiones [[televisio]]nis publicae autonomicae ex Ente Publico Communicationis Principatus Asturiarum dependentes. Novus trames televisificus [[Televisión del Principado de Asturias]] [[Hispanice]] et [[Televisión del Principáu d'Asturies]] [[Asturice]], sive TPA nuncupatur quae iuxta cum [[Radio del Principado de Asturias]] [[Hispanice]] sive [[Radio del Principáu d'Asturies]] [[Asturice]] sive RPA [[Radiotelevisión del Principado de Asturias]] [[Hispanice]] sive [[Radiotelevisión del Principáu d'Asturies]] sive RTPA format. =====Televisio privata===== [[Fasciculus:Teleaviles.jpg|thumb|[[TeleAvilés]] sedes.]] E [[decennium 200|decennio 200]] producta est improvisa prosperitas in hoc [[media communicationis socialis|medio communicationis]], ubi apparuit novorum tramitum multitudo [[communitas autonoma|autonomico]] et praesertim locali gradu in Asturiis: * '''[[Oviedo TV]]''': emittit [[Ovetum|Oveti]] e [[1994]]. * '''[[TLG]]''' (sive '''Televisión Local Gijón'''): emittit apud [[Gegio|Gegionem]] * '''[[Canal 10 TV]]''': trames ad diarium ''[[El Comercio]]'' pertinet et emittit quoque [[Gegio|Gegioni]] * '''[[TeleAvilés]]''': emittit [[Flavionavia]]e * '''[[Cuencas Mineras TV]]''': sinibus fossoriis anno [[1998]] emittere coepit * '''[[Nuestra Televisión]]''': [[Commarca Sicerae|Commarcae Sicerae]] televisio Est praeterea trames privatus ex [[Ovetum|Oveto]] totis Asturiis emittens, [[TeleAsturias]] ====Interrete==== [[Interrete]] est novissimum inter [[media communicationis socialis]]. In Asturiis, praeter [[Hispania|nationales]] societates [[interrete|interretiales]] diaconias per rete [[Telefónica]] offerentes, est societas omnino Asturiana, [[Telecable]], [[interrete]], [[televisio caplaris|televisionem caplarem]] et [[telephonum|telephonia]] praebens. =====Diaria interretialia===== Per [[interrete|hoc medio]] possibile est Asturianis [[diarium|diariis]] digitabilibus accedere inter quae sunt: * '''''[[AsturiasDeporte.com]]''''': diarium [[disportus|disportivum]] digitale Principatus Asturiarum. * '''''[[Asturias Opinión]]''''': diarium digitale nuntiorum et opinionum * '''''[[Asturies.com]]''''': diarium digitale [[Asturice]] * '''''[[Asturlink.com]]''''': diarium digitale, portale et quaesitrum Asturianum * '''''[[Asturnews.com]]''''': diarium culturale digitale [[Asturice]] * '''''[[Colunga Digital]]''''': diarium digitale [[Colunga]]e et Orientis Asturiarum * '''''[[InfoAsturies]]''''': diarium digitale informationis alternativae [[Asturice]] * '''''[[Narcea Digital]]''''': diarium digitale Austroccidentis Asturiani * '''''[[Lne.es]]''''': editio digitalis diarii ''[[La Nueva España]]'' * '''''[[El Comercio Digital]]''''': editio digitalis diarii ''[[El Comercio]]'' * '''''[[Teleasturias]]''''': diarium digitale maximi ponderis nuntios Asturiarum colligens * '''''[[El Cien.es]]''''': editio digitalis diarii Asturiani ''[[El Cien]]'' * '''''[[El Nalón]]''''': diarium digitale Asturianum nuntiarum et schedarum interrogatoriarum =====Tramites radiophonici interretiales===== Sunt variae [[radiophonia|stationes radiophonicae]] solum per [[Interrete]] emittentes et Astuani ambitus quae excellunt: * '''[[Asturies.com Radio]]''': emittit 24 horas musicam in Asturiis factam et [[Asturice]] * '''[[Radio Avilés Comarca]]''': emittit [[Flavionavia (commarca)|Commarcae Flavionaviae]] ===Vectura=== [[Fasciculus:Viaplatasvg.svg|right|thumb|upright=0.8|Antiqua [[Via Delapidata]] ([[Hispanice]]; ''Vía de la Plata'') et praesens [[autovia]] [[A-66]].]] Asturiae ab [[Iberia|Paeninsula]] valde separatae [[mons|montanam]] propter [[prominentia]]m quam habent sunt. E [[Roma antiqua|Romanis]] temporibus, regio cum [[Media planities Hispanica|Media Planitie]] per [[Via Delapidata|Viam Delapidatam]] ([[Hispanice]] ''Vía de la Plata'') communicata est, quae [[Mons Cantabricus|Montem Cantabricum]] transit et usque ad [[Hispalis|Hispalem]] venit, in praesenti [[autovia]] [[A-66]]. Respectu [[ferrivia]]e, cum eius evolutione [[saeculum 19|saeculo undevicensimo]], communicatae sunt cum [[Iberia|paeninsula reliqua]], praesertim cum [[Legio (Hispania)|Legione]] et [[Santander]]e. In regione situs est portuum unus maximi ponderis apud [[Mare Cantabricum|Cantabricum]], [[Portus Gigiae|Muscellum]]<ref>[http://mas.lne.es/toponimia/index.php?palabra=Musel&buscar=Buscar Toponymia Asturiana].</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]] ''El Musel''), quod diarios cursus commerciales cum [[Francia]] et [[Britanniarum Regnum|Britanniarum Regno]] habet. ====Vectura aërea==== [[Fasciculus:Facturación aeropuerto Asturias.jpg|thumb|300px|[[Aëroportus Asturiarum]] interiora.]] [[Fasciculus:Régional Embraer 190 F-HBLA OVD-LEAS.jpg|300px|thumb|Societatis [[Régional]] [[Embraer 190]] ab [[Aëroportus Asturiarum|Aëroportu Asturiarum]] avolat.]] Asturiis servit [[Aëroportus Asturiarum]] ([[Hispanice]]; ''Aeropuerto de Asturias,'' [[Asturice]]; ''Aeropuertu d'Asturies'' et [[Euvenavice]]; ''Aeroporto d'Asturias''), 40 [[chiliometrum|chiliometra]] ab [[Ovetum|Oveto]], prope Boreoccidentale litus et [[industria]]lem urbem [[Flavionavia]]m. * Societates aeronauticae peregrinae: ** [[Air France]] ** [[Britanniarum Regnum|Britannica]] societas [[EasyJet]] diarios volatus in Asturias [[Martius|Martio]] [[2005]] incepit. Moderatur ex [[Aëroportus Stanstedensis Londinensis|Aëroportu Stanstedensi Londinensi]] ([[Anglice]]; ''London Stansted Airport''), quo societas aëronautica praecipuo centro utitur. [[Hiems|Hieme]], societas EasyJet plerumque volatuum frequentiam ad quattuor volatus per [[hebdomas|hebdomadem]] reducit. * Variae [[Hispania|nationales]] societates aëronauticae etiam Asturias [[Matritum|Matrito]], [[Barcino]]ni, [[Bruxellae|Bruxellis]], [[Lutetia]]e et [[Hispalis|Hispali]] inter alias conectunt, quae sunt: ** [[Iberia]] ** [[Vueling]] Asturiae Orientales etiam faciliter accessibilis est ex [[Aëroportus Santanderiensis|Aëroportu Santanderiensi]] ([[Hispanice]]; ''Aeropuerto de Santander''). Recentes meliorationes in [[autovia]]rio rete introductae in [[Santander]] volare et postea in Asturias autocinetum gubernare sinunt, quae attingi tempore minore quam una hora potest. [[Hibernia|Hibernica]] societas aëronautica [[Ryanair]] volatus in [[Aëroportus Santanderiensis|Aëroportum Santanderiensem]] ex [[Aëroportus Francofurtensis Hagenensis|Aëroportu Francofurtensi Hagenensi]] ([[Theodisce]]; ''Flughafen Frankfurt-Hahn''), [[Liverpolium|Liverpolio]], [[Eblana]], [[Aëroportus Stanstedensis Londinensis|Aëroportu Stanstedensi Londinensi]] ([[Anglice]]; ''London Stansted Airport'') et [[Aëroportus Romae Ciampinensis|Aëroportu Romae Ciampinensi]] ([[Italice]]; ''Aeroporto di Roma-Ciampino'') moderatur. ====Vectura maritima==== [[Portus Gegionis|Muscellum]]<ref>[http://mas.lne.es/toponimia/index.php?palabra=Musel&buscar=Buscar Toponymia Asturiana]</ref> ([[Hispanice]], [[Asturice]], [[Euvenavice]] ''El Musel'') sive [[Portus Gegionis]] cuiuslibet magnitudinis [[navis circumvectans|naves circumvectantes]] accipere potest. Societates [[P&O]], [[Swan Hellenic]] aut [[Hapag Lloyd]] quotannis Portum [[Gegio|Gegionis]] inter suas optiones apud Litus [[Oceanus Atlanticus|Atlanticum]] [[Europa]]eum eligunt. Secutae areae navibus circumvectantibus in promptu sunt: [[Fasciculus:Puerto de Gijón 2.jpg|thumb|400px|[[Portus Gegionis]] sive Muscellum.]] * Crepido Moliner: 313 [[metrum|metra]] appulsus 14 metra profundi, * Septimum Allineamentum: 326 [[metrum|metra]] appulsus 12 metra profundi, * Espigón II. Allineamentum Meridionale: 360 [[metrum|metra]] appulsus 14 metra profundi. Haec loca magnum inspecti accessus gradum sinunt, cum praesidio praestato et navibus et viatoribus. Media urbs solum quattuor [[chiliometrum|chiliometra]] distat et auctoritas portuaria praebet dedicatum periegeticum conexum qui sinit viatores uti occasione [[cultura]]lium, [[gastronomia|gastronomicarum]] et [[commercium|commercialium]] opportunitatum quae in [[Gegio|Gegione]] offerenda sunt. ====Ferrivia==== [[Fasciculus:FEVE Train in Pravia.JPG|thumb|upright=0.8|Societatis [[FEVE]] [[tramen]] lineae C4 [[Pravia]]e.]] [[Hispania|Hispanica]] nationalis societas [[ferrivia]]ria [[RENFE]] etiam Asturiis servit; [[Hamaxostichus|hamaxostichi]] regulariter e et in Hispanica intestina proficiscuntur. Praecipua statio in regionale [[caput (urbs)|capite]] [[Ovetum|Oveto]] est et praecipua litoralis urbs est Gegio. Praeterea, societas [[FEVE]] Medias Asturias Orientalibus et Occidentalibus coniungit. Novus [[Cuniculus (aedificium)|cuniculus]] per [[Mons Cantabricus|Montem Cantabricum]], [[Varians Paliarum]] ([[Hispanice]], ''Variante de Pajares;'' [[Asturice]] et [[Euvenavice]], ''Variante de Payares''), in praesenti adhuc aedificatur, quae itineris tempus e [[Matritum|Matrito]] in Asturias ex quinque horis solum in tres reducet, dum fit ferrivia ut adveniant [[tramen|tramina]] [[AVE]] proximo in futuro. ====Laophoria==== Est etiam comprehensiva diaconia [[laophorium|laophorica]] a societate [[ALSA]] gesta. Quae [[Flavionavia]]m, [[Gegio|Gegionem]], [[Ovetum]] et [[Meres]] [[Matritum|Matrito]] atque aliis praecipuis urbibus aliquotiens quotidie coniungit. Haec societas diaconias in [[Barcino]]nem, [[Salmantica (Hispania)|Salmanticam]], [[Legio (Hispania)|Legionem]], [[Valdoletum]], [[Brigantium Flavium]], [[Bilbaum]], [[Hispalis|Hispalem]], [[Fanum Sancti Sebastiani (Hispania)|Sanctum Sebastianum]], [[Lutetia]]m, [[Bruxellae|Bruxellas]] et [[Nicaea (Francia)|Nicaeam]] inter alias praebet. ====Viae autocineticae==== [[Fasciculus:AS-I.svg|thumb|100px|[[Autovia Fossoria|Autoviae Fossoriae]] ([[Hispanice]] ac [[Asturice]]; ''Autovía Minera'' et [[Euvenavice]]; ''Autovía Mineira'') denominatio.]] Respectu [[via]]rum [[autocinetum|autocineticarum]] sunt tres axes traditionales communicationis in Asturiis quos antiquae viae nationales supponebant; axis litoralis, [[N-632]] e [[Luarca]]<ref>[http://mas.lne.es/toponimia/index.php?palabra=Luarca&buscar=Buscar Toponymia Asturiana]</ref> ([[Hispanice]] et [[Euvenavice]]; ''Luarca'' et [[Asturice]]; ''Ḷḷuarca'') in [[Ripa Saliae|Ripam Saliae]]; [[N-634]] per [[Libunca]]m, [[Spina (Asturiae)|Spīnam]]<ref>[http://mas.lne.es/toponimia/index.php?leer=739&palabra=Espina Toponymia Asturiana]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''La Espina''), [[Ripa Saliae|Ripam Saliae]] ac [[Uncaria (Cantabria)|Uncariam]] ([[Hispanice]]; ''Unquera'') et axis per [[Gegio|Gegionem]], [[Ovetum]] ac [[Media planities Hispanica|Mediam Planitiem]], [[N-630]]. Hi axes mutati sunt [[decennium 200|decennii 200]] et [[saeculum 21|saeculo XXI]] [[decennium 201|primi decennii]] operibus sic ut omnes viae nationalis tractus e [[autovia Hispanica]] ([[Hispanice]]; ''autovía'') in [[autovia]]m ([[Hispanice]]; ''autopista'') transeunt et eis additus est novus axis [[Autovia Fossoria|Autoviam Fossoriam]] ([[Hispanice]] ac [[Asturice]]; ''Autovía Minera'' et [[Euvenavice]]; ''Autovía Mineira'') constituens. Ecce [[autovia]]e et [[autovia Hispanica|autoviae Hispanicae]] Asturiarum: {|class="wikitable" style="margin:0 auto" |+'''Autoviae Asturiarum''' |-align="center" |'''Denominatio'''||'''Nomen'''||'''Titularitas''' |-align="center" |[[A-63]] |align="left"|Autovia inter Ovetum et Spinam||publica |-align="center" |[[A-64]] |align="left"|Autovia inter Ovetum et Vecam||publica |-align="center" |[[A-66]] |align="left"|Autovia Delapidata||publica |-align="center" |[[A-8]] |align="left"|Autovia Cantabrica||publica |-align="center" |[[AS-I]] |align="left"|[[Autovia Fossoria]]||[[communitas autonoma|autonomica]] |-align="center" |[[AS-II]] |align="left"|[[Autovia Industrialis]]||[[communitas autonoma|autonomica]] |} ==Cultura== ===Ars=== [[Fasciculus:Santa maria del naranco-001.jpg|thumb|[[Sancta Maria in Naurancio]] est exemplum [[Ars Asturiarum|Artis Praeromanicae Asturianae]].]] Asturiae locuples legatum [[ars|artificiosum]] possident e quo excellit [[architectura]] autochthonica [[Ars Praeromanica|Praeromanica]] sive [[Ars Asturiarum|Ars Asturiana]] cum monumentis inter quae eminent [[Sancta Maria in Naurancio]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Santa María del Naranco'') et [[Sanctus Michael de Lillo]] ([[Hispanice]] ac [[Euvenavice]]; ''San Miguel de Lillo'' et [[Asturice]]; ''Samiguel de Lliño'') [[Ovetum|Oveti]]. Quae ambae iuxta cum [[Fons Incalata|Fonte Incalata]]<ref>[http://es.wikipedia.org/wiki/Fuente_de_Foncalada Vicipaedia Hispanica]</ref> ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Foncalada''), secundum [[UNESCO]], [[UNESCO Mundi Hereditas|Hereditatis Mundanae]] partem faciunt. [[Ars Romanica]] multo praesens est quia tota regio [[Peregrinatio ad Compostellam|viis Iacobeis]] transiebatur, ubi excellunt [[monasterium]] [[Monasterium Sancti Petri Villae Novae|Sancti Petri Villae Novae]] ([[Hispanice]]; ''Monasterio de San Pedro de Villanueva,''' [[Asturice]]; ''Monesteriu de San Pedro de Villanueva'' et [[Euvenavice]]; ''Mosteiro de San Pedro de Vilanova''), prope [[Canicae Onnenses|Canĭcas Onneses]] et [[Monasterium Sanctae Mariae Iunci|Sanctae Mariae Iunci]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Santa María del Junco''), [[Ripae Saliae|Ripa Saliae]]. [[Ars Gothica]] non abundat, quamquam sunt bona huius generis specimina sicut [[Cathedralis Sancti Salvatoris Ovetensis|Cathedralis Sancti Salvador]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Catedral de San Salvador'') [[Ovetum|Oveti]]. ===Architectura saeculi XXI=== [[Fasciculus:CentroNiemeyer72.jpg|thumb|200px|[[Centrum Culturale Internationale Anscharius Niemeyer]].]] Aliquae [[stylus internationalis|architecturae internationalis]] exempla sunt: * [[Laboralis, Urbs Culturae]] ([[Hispanice]], ''Laboral, Ciudad de la Cultura;'' [[Asturice]], ''Llaboral, Ciudá de la Cultura;'' [[Euvenavice]], ''Laboral, Cidade da Cultura'') [[Gegio|Gegioni]], * [[Palatium Congressuum Ovetense|Palatium Congressuum]] ([[Hispanice]], [[Asturice]] et [[Euvenavice]]; ''Palacio de Congresos''), ab [[Iacobus Calatrava|Iacobo Calatrava]] designatum, [[Ovetum|Oveti]], * [[Centrum Culturale Internationale Anscharius Niemeyer]] ([[Hispanice]] ac [[Euvenavice]]; ''Centro Cultural Internacional Oscar Niemeyer'' et [[Asturice]]; ''Centru Cultural Internacional Oscar Niemeyer''), [[Flavionavia]]e. ===Pictura=== [[Fasciculus:Tendido de sombra.jpg|250px|thumb|[[Darius de Regoyos|Darii de Regoyos]] pictura "Gradus Umbrae" ([[Hispanice]]; ''Tendido de Sombra'').]] Optimus modus habendi accurati conspectus de Asturianae [[pictura]]e historia est [[Museum Bellarum Artium Asturiarum]] ([[Hispanice]]; ''Museo de Bellas Artes de Asturias,'' [[Asturice]]; ''Muséu de Belles Artes d'Asturies'' et [[Euvenavice]]; ''Museo de Belas Artes d'Asturias'') visitare, ubi sunt praecipui [[saeculum 20|saeculi XX]] Asturiani [[pictor]]es, qui sunt: * [[Ioannes Carreño de Miranda]] ([[1614]]–[[1685]]) * [[Darius de Regoyos]] ([[1857]]–[[1913]]) * [[Ludovicus Bayón]] ([[1894]]–[[1945]]), unus inter praeclarissimos [[Flavionavia|Flavionavienses]] [[saeculum 20|saeculi XX]] pictores del siglo XX iuxta cum fratres Espolita * [[Marianus Moré]] ([[1899]]–[[1974]]) * [[Evaristus Valle]] ([[1878]]–[[1951]]) * [[Nicanor Piñole]] ([[1878]]–[[1978]]) * [[Aurelius Suárez]] ([[1910]]–[[2003]]), pictor [[Superrealismus|Superrealista]] * [[Pelagius Ortega]] ([[1954]]) * [[Innocentius Urbina Villanueva]] ([[1926]]) qui, quamquam sua opera citato in museo non sunt, est unus notissimorum secundi [[saeculum 20|saeculi XX]] dimidii Asturianorum topiariorum * [[Ludovicus Fernández López]] ([[1900]]-[[1973]]) ===Photographia=== [[Fasciculus:Museo del Pueblo de Asturias - Gijón.JPG|thumb|300px|[[Museum Populi Asturiarum]] [[Gegio|Gegionis]].]] Praecipua inter [[museum|musea]] cum Asturianis antiquis [[saeculum 19|saeculorum XIX]] et [[saeculum 20|XX]] [[photographia|photographematibus]] est [[Museum Populi Asturiarum]] ([[Hispanice]]; ''Museo del Pueblo de Asturias,'' [[Asturice]]; ''Muséu del Pueblu d'Asturies'' et [[Euvenavice]]; ''Museo del Pobo Asturiano''). Ecce clarissimi [[saeculum 19|saeculorum XIX]] et [[saeculum 20|XX]] photographi in Asturiis: * [[Felicianus Pardo Campos]] ([[1876]] – circa [[1930]]) * [[Iosephus Fernández Cuétara]] ([[1878]]–[[1928]]) * [[Raimundus del Fresno]] ([[1834]]–[[1899]]) et e [[1889]] Raimundus del Fresno et filii * [[Fernandus del Fresno]] ([[1848]]–[[1929]]) * [[Florentinus Fernández Iglesias]] sive "Frank" ([[1887]]–[[1970]]) * [[Raimundus García Duarte]] ([[1862]]–[[1937]]) * [[Ioannes David]], [[Francia|Francogallicus]] photographus activus in Asturiis inter [[1881]] et [[1905]] * [[Marcelianus Cuesta]] ([[1840]]–[[1903]]) * [[Ludovicus Muñiz Miranda]] ([[1850]]–[[1927]]) * [[Modestus Montoto]] ([[1875]]–[[1950]]) * [[Balthasar Cué]] Ecce praeclarissimi [[saeculum 20|saeculi XX]] photographi: * [[Xaverius Bauluz]] ([[1960]]) ([[Praemium Pulitzer]] anno [[1995]]). * [[Iosephus Ferrero]] ([[1959]]) ===Litterae=== [[Fasciculus:La-Regenta-y-Catedral.jpg|thumb|[[Regenta]] ([[Hispanice]]; ''La Regenta''), [[litterae|litteraria]] [[Leopoldus Alas Clarín|Leopoldi Alas Clarín]] persona, et [[Cathedralis Sancti Salvatoris Ovetensis|Cathedralis Ovetensis]].]] Inter Asturianos [[litterae|sciptores]] notandi sunt: * [[Antonius de Marirreguera]] ([[saeculum 17|Saeculi XVII]]) * [[Caspar Melchior de Jovellanos]] ([[1744]]–[[1811]]) * [[Gumersindus Laverde Ruiz]] ([[1835]]–[[1890]]) * [[Raimundus de Campoamor]] ([[1817]]–[[1901]]) * [[Leopoldus Alas Clarín]] ([[1851]]–[[1901]]) * [[Armandus Palacio Valdés]] ([[1853]]–[[1938]]) * [[Iosephus de Pría]] ([[1864]]–[[1926]]) * [[Raimundus Pérez de Ayala]] ([[1880]]–[[1962]]) * [[Alphonsus Camín]] ([[1890]]–[[1982]]) * [[Alexander Casona]] ([[1903]]–[[1965]]) * [[Carolus Bousoño]] ([[1923]]) * [[Angelus González]] ([[1925]]–[[2008]]) * [[Corinna Tellado]] ([[1927]]–[[2009]]) * [[Gundisalvus Suárez]] ([[1934]]) * [[Marianus Antolín Rato]] ([[1943]]) * [[Ismaël González Arias]] ([[1958]]) * [[RaphaËl Reig]] ([[1963]]) * [[Bertha Piñán]] ([[1963]]) * [[Aurelius González Ovies]] ([[1964]]) * [[Ioannes Bello]] ([[1965]]) * [[Georgius Moreno]] ([[1973]]) ===Musica=== [[Fasciculus:Gaiterosenoviedo.JPG|thumb|220px|Ascaulae [[Ovetum|Oveti]] [[nuptiae|nuptias]] animantes.]] [[Musica]] et [[saltatio]] variatae sunt. [[Instrumentum musicum]] plurime proprium [[gaita Asturiana]], [[gaita]] tribus fistulis nota, est. Quae in usu est numerosis in popularibus saltationibus et quam [[tympanum]] iuxta cum [[Clarinetum|clarineto]] aut aliis instrumentis comitari possunt. Repraesentativissimum [[traditio]]nale Principatus carmen est [[tonada Asturiana]]. Principatus [[Hymnus nationalis|hymnus]] est "[[Asturiae, patria cara]]" ([[Hispanice]] ac [[Euvenavice]]; ''Asturias, patria querida'' et [[Asturice]]; ''Asturies, patria querida''). ===Mythologia=== [[Fasciculus:Lamia Waterhouse.jpg|thumb|200px|<center>[[Xana]]</center> <center>("[[Lamia]]", ab [[Iohannes Gulielmus Waterhouse|Iohanne Gulielmo Waterhouse]], anno [[1909]])</center>]] In Asturiis creatae sunt [[mythologia|mythologicae]] personae usque ad praesens persistentes. Ecce notissimae: * [[Xana]]e ([[Asturice]]; ''les Xanes,'' [[Hispanice]]; ''las Xanas'' ac [[Euvenavice]]; ''as Xanas'') Sunt pulcherrimae flavis capillis [[nympha]]e prope [[flumen|flumina]] viventes. Albi [[Linum|lini]] tunicas induunt et suae vocis gratia captivant. Libidinosae sunt et attrahunt viros ad suffocandos eos aqua. * [[Trasgus]] ([[Asturice]]; ''El Trasgu'' et [[Hispanice]] ac [[Euvenavice]]; ''El Trasgo'') Est parvula clauda persona pileum induens. Crebro domos intrat. Ut hic non redeat, satis est ab eo postulare ut faciat aliquid quod non possit. Ob [[verecundia]]m, nunquam redibit. * [[Nubarius]] ([[Asturice]] et [[Hispanice]]; ''El Nuberu'' ac [[Euvenavice]]; ''El Nubeiro'') [[Nubes]] et [[Tempestas (meteorologia)|tempestates]] regit. Aequivalet in [[mythologia]] Asturiana [[Graeci|Graeco]] [[Zeus|Dii]] et [[Roma antiqua|Romano]] [[Iuppiter|Iovi]]. Canos capellos et longam barbam habet, [[cappa]]m, [[canus|canum]] [[petasus|petasum]] induens et [[baculus|baculum]] manu habens. * [[Coluber]] ([[Asturice]], [[Hispanice]] et [[Euvenavice]]; ''El Cuélebre'') Est magnus alatus [[serpentes|serpens]] in intimo [[spelunca]]rum loco vivens ubi [[thesaurus|thesauros]] custodit. * [[Aialga]]e ([[Asturice]]; ''Les Ayalgues,'' [[Hispanice]]; ''Las Ayalgas'' et [[Euvenavice]]; ''As Ayalgas'') Sunt pulchrae, sed minus [[Xana|Xanis]]. Quarum pulchritudo nihil diabolici habet. Pertinent ad [[femina]]rum fascinatarum circulum quae mysteriosis in palatiis thesaurorum a [[Coluber|Colubre]] custoditorum plenis vivere coguntur. * [[Lavandaria]]e ([[Asturice]]; ''Les Llavanderes,'' [[Hispanice]]; ''Las Llavanderes'' et [[Euvenavice]]; ''As Lavandeiras'') Earum corpus achariston est. Veteres sunt macro cum [[thorax|thorace]] se abundantis canis capillis opponente. Elusivum aspectum et monotonam ac deridentem vocem habent. Prope flumina vivunt. * [[Agmen Sanctum]] ([[Asturice]]; ''La Güestia,'' [[Hispanice]]: ''La Santa Compaña'' et [[Euvenavice]]; ''A Santa Compaña'') Sunt [[spectrum|spectra]] valde crebra queribunde [[missa]]s aut [[peccatum|peccatorum]] satisfactiones etc... postulantes. Suae familiae membra terrent. * [[Busgosus]] ([[Asturice]]; ''El Busgosu,'' et [[Hispanice]] ac [[Euvenavice]]; ''El Busgoso'') Creberrimus est in silvis [[Siarius|Siarium]] circumdantibus. Iuvant zonarum [[lignator]]es aut [[animalia]]. Est pacificum ens. Pingitur [[capra]]e pedibus et inconcinno [[caput|capite]] quod coronant duo [[cornu]]a. ===Theatrum=== [[Fasciculus:Tatro Jovellanos Gijón.jpg|thumb|left|200px|[[Theatrum Jovellanos]] [[Gegio|Gegionis]].]] Inter praecipua Asturiana [[theatrum|theatra]] sunt: * [[Theatrum Armandus Palacio Valdés]] ([[Asturice]]; ''Teatru Armando Palacio Valdés'' et [[Hispanice]] ac [[Euvenavice]]; ''Teatro Armando Palacio Valdés''), [[Flavionavia]]e; * [[Theatrum Campoamor]] ([[Asturice]]; ''Teatru Campoamor'' et [[Hispanice]] ac [[Euvenavice]]; ''Teatro Campoamor''), [[Ovetum|Oveti]]; * [[Theatrum Philharmonica]] ([[Asturice]]; ''Teatru Filarmónica'' et [[Hispanice]] ac [[Euvenavice]]; ''Teatro Filarmónica''), [[Ovetum|Oveti]]; * [[Theatrum Jovellanos]] ([[Asturice]]; ''Teatru Xovellanos,'' [[Hispanice]]; ''Teatro Jovellanos'' et [[Euvenavice]]; ''Teatro Xovellanos''), [[Gegio|Gegioni]]. ===Gastronomia=== [[Fasciculus:Fabada.jpg|thumb|[[Fabale Asturicum]] iam in [[olla]] parata, ubi [[companicus|companĭcus]], scilicet [[salsicium capsicatum|salsicia capsicata]], [[Botellus sanguineus|botella sanguinea]] et [[laridum]], videri potest.]] [[Fasciculus:Afuega'l pitu.jpg|thumb|upright=0.6|left|[[Caseus]] [[Afuega'l pitu|afuegalpītu]].]] [[Fasciculus:Escanciar.jpg|thumb|upright=0.6|left|Asturianus [[pomacium]] in [[chigre]] sive Asturiana bibaria pomacium fundens.]] [[Fasciculus:Carbayones-2009.jpg|thumb|upright=0.8|[[Carbayo]]nes [[Ovetum|Oveti]].]] Asturiana [[coquina]] elementa habet quae eam erga [[Normannia|Normannicam]] et [[Britannia Minor|Armoricanam]] ordinant. Notissimum ferculum est [[fabale Asturicum]], [[elixatura]] e [[phaseolus vulgaris|phaseolis]] facta, iuxta cum [[Salsicium capsicatum|salsicio capsicato]] ([[Asturice]]; ''chorizo'', [[Hispanice]]; ''chorizo'' et [[Euvenavice]]; ''chourizo''), [[Botellus sanguineus|botello sanguineo]], [[lacca]] ([[Asturice]], [[Hispanice]] et [[Euvenavice]]; ''lacón''), et [[laridum|larido]]. Quae coniucta seorsum apponuntur et [[companicus|companĭcus]] ([[Asturice]]; ''compangu'' et [[Hispanice]] ac [[Euvenavice]]; ''compango'') nuncupantur. Praeterea [[Mare Cantabricum|Cantabrici]] recentium [[pisces|piscium]] ac [[Conchylium|conchyliorum]] varietas et [[vitulina]]e ac [[bubulus|bubulinae]] [[caro|carnis]] qualitas excellunt. Sunt amplius centum dissimilium excellentium fabrilium [[caseus|caseorum]] varietatum, e quibus [[Cabrales (caseus)|cabrales]] notissimus est, quamquam populariores in Asturiis sunt inter alios [[gamonéu|gamŏneu]] et [[Afuega'l pitu|afuegalpītu]] cum [[Appellatio Originis Protecta|Appellatione Originis Protecta]]. Si [[tragemata]] praeoptantur, traditionalissimum est [[oryza cum lacte]] ([[Asturice]]; ''arroz con lleche'' et [[Hispanice]]; ''arroz con leche'' ac [[Euvenavice]]; ''arroz con lleite'') et [[casadiella]]e ([[Asturice]], [[Hispanice]] et [[Euvenavice]]; ''casadielles''), aut frictae aut in [[furnus|furno]] assae, quae sunt genus [[crispa]]rum fartarum e mixtura [[Nux|nucum]], sicut [[Iuglans|iunglandum]], [[amygdalus|amygdalorum]] et [[Nux avellana|avellanarum]], quae antehac contritae, [[saccharum|saccharo]] mixtae et [[anisatum|anisato]] rigata sunt; etiam inveniuntur [[scriblita]] [[charlotta Gegionis]] ([[Asturice]] ac [[Euvenavice]], ''charlota de Xixón''; [[Hispanice]]; ''charlota de Gijón''), [[carbayo]]nes ([[Asturice]] ac [[Hispanice]]; ''carbayones'' et [[Euvenavice]]; ''carbayóis'') ac [[moscovita (dulce)|moscovitae]] ([[Asturice]]; ''moscovites'' et [[Hispanice]] ac [[Euvenavice]]; ''moscovitas'') [[Ovetum|Oveti]] et notissimus [[tuccetum caeli]] ([[Asturice]]; ''tocín de cielu,'' [[Hispanice]]; ''tocino de cielo'' et [[Euvenavice]]; ''touciño de cêlo'') [[Gradus (Asturiae)|Gradus]], inter alia tragemata. [[Carnelevarium|Carnelevarii]] tempore, paratur [[foliolum (dulce)|foliolum]] ([[Asturice]]; ''frixuelu,'' [[Hispanice]]; ''frisuelo'' et [[Euvenavice]]; ''frixuelo''), tragema factum e [[farina]], [[lac]]te et [[saccharum|saccharo]], frictum pauca [[oleum|olei]] quantitate et super quod aspergitur [[saccharum]]. Etiam typica est [[impanata]] Asturiana ([[Asturice]], [[Hispanice]] et [[Euvenavice]]; ''empanada asturiana''). Praecipua Asturiana [[potio]] [[pomacium]] seu sicera est, cuius elaborationis processus et consumendi modus omnino in sociali Asturiana vita integrati sunt. Cum suis paucis [[alcohol]]is gradibus, inter quattuor et sex, sicera [[peregrinatio]]nes congressionesque animavit animatque et adhuc in [[chigre|chigribus]] ([[Asturice]], [[Hispanice]] et [[Euvenavice]]; ''chigres'') ac [[espicha|espichis]] ([[Asturice]]; ''espiches'' et [[Hispanice]] ac [[Euvenavice]]; ''espichas'') irrecusabile typicae Asturiarum potionis munus suscipit. Ultimis annis, notabili cum acceptatione, novae expressionis sicerae et exspectata [[Appellatio Originis Protecta|Appellatio Originis]] apparuere. Non obliviscenda est sicera dulcis sine alcohole, exquisita potio. Minus integratum sed haud minoris ponderis, Occidente etiam typicum est [[vinum]] ista in zona productum, sicut vinum [[Canicae Narceae|Canĭcarum Narcēae]], quamquam Asturiae nullam [[appellatio Originis Protecta|appellationem originis]] de vinis habent. ===Res athleticae=== [[Fasciculus:Bandera sporting.jpg|thumb|275px|Turmae [[Real Sporting de Gijón]] [[vexillum]], quod in sua sede sociali, [[Schola Pedilusoria Mareoënsis|Schola Mareoënsi]], semper levatum invenitur.]] [[Fasciculus:Fernando Alonso Bahrain.jpg|125px|thumb|[[Ovetum|Ovetensis]] gubernator [[Fernandus Alonso]], bis campio mundi in [[Formula 1]] annis [[2005]] et [[2006]].]] [[Fasciculus:Bolos asturianos.JPG|thumb|200px|[[coniludium Celticum|Coniludium Celticum sive Tineii]] in campo [[Bargĭna Monasterii|Bargĭnae Monasterii]] ([[Asturice]]; ''Bárcena del Monesteriu,'' [[Euvenavice]]; ''Bárcena del Mosteiro'' et [[Hispanice]]; ''Bárcena del Monasterio'').]] [[Fasciculus:Pajares4.jpg|thumb|250px|Statio hiemalis [[Vallis Grandis et Paliares]] ([[Asturice]] ac [[Euvenavice]]; ''Valgrande-Payares'' et [[Hispanice]]; ''Valgrande-Pajares'').]] In [[pediludium|pediludio]], praecipuae Principatus turmae sunt: [[Gegio|Gegionensis]] [[Real Sporting de Gijón]], quae quadraginta tempora in [[Prima Divisio Hispaniae|Prima Divisione]] ([[Hispanice]]; ''Primera División'') fuit et sex [[Europa]]eas participationes, unum Ligae subcampionatum et duo [[Scyphum Regis|Scypha Regis]] habet et in praesenti in [[Secunda Divisio Hispaniae|Secunda Divisione]] ([[Hispanice]]; ''Segunda División'') militat; et [[Ovetum|Ovetensis]] [[Real Oviedo]] quae per 38 tempora in [[Prima Divisio Hispaniae|Prima Divisione]] militavit et unam Europaeam participationem, tres tertios locos in [[Prima Divisio Hispaniae|Prima Divisione]] habet et praeterea est unica Asturiana turma titulum officialem, [[Scyphum Ligae|Scyphum Secundae Divisionis]] anni [[1985]], assecuta et nunc in [[Secunda Divisio B Hispaniae|Secunda B]] ([[Hispanice]]; ''Segunda B'') militat. Aliae quattuor turmae in [[Secunda Divisio Hispaniae|Secunda Divisione]] lusere: [[Flavionavia|Flavionaviensis]] [[Real Avilés Club de Fútbol]] (per 14 tempora), [[Langiciati]]ana [[Unión Popular de Langreo]] (per 8 tempora), [[Meres|Merensis]] [[Caudal Deportivo]] (per 7 tempora) et [[Flavionavia|Flavionaviensis]] [[Club Deportivo Ensidesa]] (per unum tempus). Principatus a [[Turma Pedilusoria Nationalis Asturiana|Selectione Pedilusoria Asturiana]] ([[Asturice]]; ''Seleición Asturiana de Fútbol,'' [[Hispanice]]; ''Selección de Fútbol de Asturias'' et [[Euvenavice]]; ''Selección de Fútbol d'Asturias'') repraesentatur. In [[Canistriludium|canistriludio]], praecipua turma in praesenti [[Ovetum|Ovetensis]] [[Oviedo Club Baloncesto]] est. Antea eminuit [[Gijón Baloncesto]], turma quae fuit per quattuor tempora in maxima categoria, [[Liga ACB]]. In [[Manufollium|manufollio]], Asturiae sunt cunabulum magnarum lusorum inter quos fratres [[Albertus Entrerríos]] ac [[Radulphus Entrerríos]] aut [[Flavionavia|Flavionaviensis]] [[Ruben Garabaya]], omnes ei absolute internationales. Ecce praesentes Asturianae turmae maximis in suorum respectivorum [[disportus|disportuum]] categoriis certantes: * [[Gegio|Gegionensis]] [[Gijón Hockey Club]] in feminea [[alsulegia pedirotaria]], * [[Gegio|Gegionensis]] [[Gijón Mariners]] in [[Harpastum Americanum|harpastum Americano]], * [[Gegio|Gegionensis]] [[Club Natación Santa Olaya]] in masculina femineaque [[natatio]]ne, * [[Gegio|Gegionensis]] [[El Llano Béisbol Club]] in [[Basipila|basīpĭla]], * [[Gegio|Gegionensis]] [[Club Unihockey Gijón]] in [[unialsulegia]]. * [[Gegio|Gegionensis]] [[Astur Patín]] in [[patinatio rotalis velocitatis|patinatione rotali velocitatis]]. Individualiter excellunt in Asturiis [[Ovetum|Ovetensis]] gubernator [[Fernandus Alonso]], bis campio mundi in [[Formula Unus|Formula Uno]] annis [[2005]] et [[2006]]. Etiam in [[Cursus autocinetorum|cursu autocinetorum]] memorandi sunt gubernatores tales [[Albertus Hevia]], Hispanicus [[certamen autocinetorum|certaminum autocinetorum]] asphalticorum campio annis [[2004]] ac [[2010]] et subcampio annis [[2005]] ac [[2007]]; [[Iosephus Antonius López Fombona]] aut [[Daniel Alonso]]. Etiam eminet [[birotatio|birotarius]] [[Samuel Sánchez]], [[clipeus aureus]] [[Olympia (certamina)|Olympicus]] in [[2008 Olympia Aestiva|Olympiis Aestivis]] [[Pechinum|Pechini]] anni [[2008]] in [[birotatio viaria|birotatione viaria]], et [[Iosephus Ludovicus Rubiera]]. [[Disportus|Disportivus]] eventus popularissimus et in Asturiis et reliqua in [[Hispania]] est [[Descensio Internationalis Saliae]] ([[Asturice]]; ''Descensu Internacional del Seya'' et [[Hispanice]] et [[Euvenavice]]; ''Descenso Internacional del Sella''), [[Piraguismus|piraguismi]] probatio cum variarum nationum participibus et quotannis in finali [[flumen|fluminis]] [[Salia]]e tractu, inter [[Rotundae|Rotundas]]<ref>[http://mas.lne.es/toponimia/index.php?leer=864&palabra=Arriondas Toponymia Asturiana]</ref> ([[Asturice]]; ''Les Arriondes'' et [[Hispanice]] ac [[Euvenavice]]; ''Arriondas'') et [[Ripa Saliae|Ripam Saliae]], primo [[Dies Saturni|die Saturni]] e [[decennium 194|decennio 194]] habita. Hoc cum eventu initium habet [[Hebdomas Internationalis Piraguismi Asturiarum]] ([[Asturice]]; ''Selmana Internacional de Piragüismu n'Asturies,'' [[Hispanice]] ac [[Euvenavice]]; ''Semana Internacional del Piragüismo en Asturias''), quae desinit cum [[Descensio Internationalis Carum|Descensione Internationali Carum]] ([[Asturice]]; ''Descensu Internacional del Cares'' et [[Hispanice]] et [[Euvenavice]]; ''Descenso Internacional del Cares''). In Asturiis sunt quoque autchthonici [[disportus]] magna amatorum quantitate. Inter quos maximi ponderis sunt [[coniludium Asturicum]] ([[Asturice]] ac [[Hispanice]]; ''bolos asturianos'' et [[Euvenavice]]; ''birlos asturianos'') de quo coluntur varia genera; [[cuatreada]], [[batiente]], [[palma (coniludium)|palma sive birle]] et [[coniludium Celticum|Celticum sive Tineii]] etc... Praeterea, memorandi sunt [[disportus]] hiemales et montani. Asturiae stationem hiemalem et montanam [[Vallis Grandis et Paliares|Vallem Grandem et Paliares]] ([[Asturice]] ac [[Euvenavice]]; ''Valgrande-Payares'' et [[Hispanice]]; ''Valgrande-Pajares'') habent, quae est una e primis [[statio nartatoria|stationibus]] [[nartatio|nartatoriis]] [[Hispania|Hispanicis]], anno [[1954]] inaugurata, et quae 21,5 [[chiliometrum|chiliometra]] [[iter narticum|itinerum narticorum]] possidet plus septem chiliometra [[cursus campester nartatorius|cursus campestris nartatorii]]. Praeterea [[Martius|Martio]] [[2007]] inaugurata est statio hiemalis [[Fontes Hiemis]] ([[Asturice]]; ''Fontes d'Inviernu,'' [[Euvenavice]]; ''Fontes d'Inverno'' et [[Hispanice]]; ''Fuentes de Invierno'') cum quindecim [[iter narticum|itineribus narticis]] 8 764 [[metrum|metra]] longa. ===Sollemnia=== [[Fasciculus:Desfile del día de América en Asturias America's Day parade in Asturias.jpg|thumb|250px|Carruca [[Peruvia]]e [[Dies Americae in Asturiis|Die Americae in Asturiis]] anno [[2008]].]] [[Fasciculus:Virgen de Covadonga2.jpg|thumb|[[Virgo Covae Dominicae|Virginis Covae Dominicae]] ([[Asturice]]; ''Virxe de Cuadonga,'' [[Hispanice]]; ''Virgen de Covadonga'' et [[Euvenavice]]; ''Virxe de Covadonga'') in suo [[spelunca|specu]].]] Sunt numerosae [[peregrinationes]] ([[Hispanice]]; ''romerías'' et [[Euvenavice]]; ''romaría'' sive ''romaxe''), [[Asturice]] ''fiestes de prau'' sive ''folixes'' nuncupatae quia, ob magnam [[viculus|viculorum]] quantitatem iuxta cum [[natura]]e characteribus, pleraeque peregrinationes in [[pratum|pratis]] fiebant, et, quamquam earum numerus deminuit et earum loca bituminata sunt, adhuc sunt ratio ut eae visitentur. Memorandus est [[Descensio Internationalis Saliae]] ([[Asturice]]; ''Descensu Internacional del Seya'' et [[Hispanice]] et [[Euvenavice]]; ''Descenso Internacional del Sella''), primo [[dies Saturni|die Saturni]] [[Augustus|Augusti]] post [[2 Augusti|diem secundum eiusdem mensis]] inter [[Rotundae|Rotundas]]<ref>[http://mas.lne.es/toponimia/index.php?leer=864&palabra=Arriondas Toponymia Asturiana]</ref> ([[Asturice]]; ''Les Arriondes'' et [[Hispanice]] ac [[Euvenavice]]; ''Arriondas'') et [[Ripa Saliae|Ripam Saliae]] celebrata cum cursu 20 [[chiliometrum|chiliometra]] longo, festum utilitatis periegeticae internationalis ([[Hispanice]]; ''interés turístico internacional'') declaratum. Declarata sunt utilitatis nationalis [[Nava (Asturiae)|Navense]] [[Festum Sicerae]] seu pomacii ([[Asturice]] ac [[Hispanice]]; ''Festival de la Sidra'' et [[Euvenavice]]; ''Festival da Sidra''), [[Dies Asturiarum in Gegione]] ([[Asturice]]; ''Día d'Asturies en Xixón,'' [[Hispanice]]; ''Día de Asturias en Gijón'' et [[Euvenavice]]; ''Día d'Asturias en Xixón''), [[Navia (Asturiae)|Naviensis]] [[Descensio Natatilis Riae Naviae]] ([[Asturice]]; ''Descensu a nadu de la ría del Navia'', [[Hispanice]]; ''Descenso a nado de la ría del Navia'' et [[Euvenavice]]; ''Descenso a nao da ría del Navia''), [[Luarca|Luarcense]] [[Festum Nostrae Dominae a Rosario]] ([[Asturice]]; ''Fiesta de Nuestra Señora del Rosariu'', [[Hispanice]]; ''Fiesta de Nuestra Señora del Rosario'' et [[Euvenavice]]; ''Festa da Nosa Señora del Rosario''), [[Planae|Planense]] [[Festum Virginis Ducis]] ([[Asturice]]; ''Fiesta de la Virxe de la Guía,'' [[Hispanice]]; ''Fiesta de la Virgen de la Guía'' et [[Euvenavice]]; ''Festa da Virxe da Guía'') et [[Ovetum|Ovetensis]] [[Dies Americae in Asturiis]] ([[Asturice]]; ''Día d'América en Asturies,'' [[Hispanice]]; ''Día de América en Asturias'' et [[Euvenavice]]; ''Día d'América en Asturias''). Institutionaliter, [[communitas autonoma|Communitatis Autonomae]] festum officiale die [[8 Septembris]], etiam festum [[Virgo Covae Dominicae|Virginis Covae Dominicae]] ([[Asturice]]; ''Virxe de Cuadonga,'' [[Hispanice]]; ''Virgen de Covadonga'' et [[Euvenavice]]; ''Virxe de Covadonga'') celebratur. [[8 Septembris|Haec dies]] [[Dies Asturiarum]] ([[Asturice]]; ''Día d'Asturies,'' [[Hispanice]]; ''Día de Asturias'' et [[Euvenavice]]; ''Día d'Asturias'') anno [[1984]] proclamata est et habet diei festi regionalis characterem, quamobrem est dies haud profestus. Cuius celebratio quotannis dissimili in loco a [[Consilium Gubernationis Principatus Asturiarum|Consilio Gubernationis Principatus Asturiarum]] determinato fit. ==Notae== <references /> {{NexInt}} * [[Commarcae Principatus Asturiarum]] * [[Concilia Principatus Asturiarum]] * [[Geographia Hispaniae]] * [[Regnum Asturorum]] ==Nexus externi== {{CommuniaCat|Asturias|Asturias}} * [https://web.archive.org/web/20201211010827/http://www.asturias.es/ Gubernatio Principatus Asturiarum] * [https://web.archive.org/web/20080708181125/http://infoasturias.com/ Portale officiale turismi Asturiarum] * [https://web.archive.org/web/20130603015138/http://www.educastur.es/ Pagina officialis Consilii Educationis] * [http://www.webcamsdeasturias.com Rete paginarum interretialium de Principatu Asturiarum] * [http://www.youtube.com/watch?v=JSE6JyKDeWM Pellicula de Hymno Officiali Principatus Asturiarum] {{provinciae Hispanae}} {{FA stella}} [[Categoria:Communitates Autonomae Hispaniae]] [[Categoria:Provinciae Hispaniae]] j86i6l4xypuvab1wolofxdhrx6ox48b Acidum 0 36159 3995552 3844015 2026-10-19T03:34:57Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995552 wikitext text/x-wiki [[Fasciculus:Aminoacid general structure.png|thumb|Structura [[acidum aminicum|acidi aminici]]. [[Proteinum]] ex acidis aminicis fit.]] '''Acidum'''<ref>[[Vitruvius]], ''[[De architectura (Vitruvius)|De architectura]]'' [https://latin.packhum.org/loc/1056/1/117/2178-2184,2880-2886@1#117 8.3.18]: "quare autem discutiantur ex acidis eae res, sic possumus animadvertere."</ref> in [[chemia]], ubi plerumque definitioni Brønsted-Lowry obtemperatur, est quidque [[compositum chemicum|compositum]] quod libere [[ion]]ta [[Hydrogenium|H]]<sup>+</sup> ([[proton]]a) in [[aqua]]m emittit. Opponitur acido [[basis (chemia)|basis]], quae H<sup>+</sup> ex aqua extrahit vel aequivalenter OH<sup>-</sup> in aquam dissolvitur. [[Potentia Hydrogenii|pH]] acidi est infra septem. Acida notissima sunt: {{div col|2}} * [[Acidum acetylsalicylicum|C<sub>9</sub>H<sub>8</sub>O<sub>4</sub>]] * [[Acidum hydrochloricum|HCl]] * [[Acidum carbonicum|H<sub>2</sub>CO<sub>3</sub>]] * [[Acidum nitricum|HNO<sub>3</sub>]] * [[Acidum sulphuricum|H<sub>2</sub>SO<sub>4</sub>]] * [[Acidum phosphoricum|H<sub>3</sub>PO<sub>4</sub>]] * [[Acidum desoxyribonucleicum]] (vel DNA, ADN) * [[Acidum ribonucleicum]] * [[Acidum nucleicum]] * [[Acidum aminicum|Acida aminica]] {{div col end}} == Bibliographia == * Ebbing, D. D., et S. D. Gammon. [[2005]]. ''General chemistry.'' Ed. octava. Bostoniae, Massachusettae: Houghton Mifflin. ISBN 0-618-51177-6. * Pavia, D. L., G. M. Lampman, et G. S. Kriz. [[2004]]. ''Organic chemistry volume 1: Organic chemistry 351.'' Mason Ohii: Cenage Learning. <!--ISBN 978-0-7593-4272-4. Error in ISBN?--> * Zumdahl. ''Chemistry.'' Ed. 4a. == Notae == <references /> {{NexInt}} {{div col|2}} ;Chemia *[[Acidum binarium]] *[[Aqua regia]] *[[Basis (chemia)|Basis]] *[[Sal acidus]] *[[Sal basicus]] *[[Titratio]] *[[Vitriol]]<!-- Acid-base extraction Acid value Hard and soft acids and bases (HSAB theory)--> ;Circumiectus *[[Acidificatio oceanorum]] *[[Quantitas constans dissociationis acidi]] *[[Pluvia acida]] *[[Solum sulphatis acidae]] {{div col end}} ==Nexus externi== {{CommuniaCat|Acid|acidum}} * [https://web.archive.org/web/20161227185722/http://scienceaid.co.uk/chemistry/physical/acidbases.html Acida et Bases,] scienceaid.co.uk (Science Aid)<!--info for high-school students--> * [https://web.archive.org/web/20190126143238/http://www2.iq.usp.br/docente/gutz/Curtipot_.html Diagrammata aequilibriorum inter acida et bases,] www2.iq.usp.br (Curtipot, [[freeware]]) * [https://web.archive.org/web/20011218075412/http://www.csudh.edu/oliver/chemdata/data-ka.htm Index virium acidorum et basium communium,] www.csudh.edu * [http://isites.harvard.edu/fs/docs/icb.topic776365.files/lecture%2017.pdf Notiones aciditatis,]{{Nexus deficitur|date=October 2022 |bot=InternetArchiveBot |fix-attempted=yes }} isites.harvard.edu (Chemistry 106) * [https://web.archive.org/web/20070208205931/http://canadaconnects.ca/chemistry/10081/ Summarium proprietatum acidorum,] canadaconnects.ca<!--for beginning chemistry students--> * [http://www.unece.org/env/lrtap/ "The UN ECE Convention on Long-Range Transboundary Air Pollution,"] www.unece.org [[Categoria:Acida| ]] [[Categoria:Chemia acidorum et basium]] [[Categoria:Chemica]] {{1000 paginae}} {{Myrias|Physica}} 378mr6qoazdipydyxoegwrwxnudzjqg Helvetii 0 43533 3995520 3747155 2026-10-18T19:35:47Z Marcus Terentius Bibliophilus 2059 /* Fontes */ 3995520 wikitext text/x-wiki [[Fasciculus:Map Gallia Tribes Towns.png|thumb|Tabula [[Gallia]]e (anno [[58 a.C.n.]])]] [[Fasciculus:Divico und Caesar.jpg|thumb|Divico dux Helvetiorum et [[Gaius Iulius Caesar]] apud [[Genava]]m.]] '''Helvetii''' fuerunt antiqua [[gens]] [[Celtae|Celtica]], quae [[regio]]nes hodiernae [[Helvetia]]e incolebat. == Historia == Helvetii, regionem apud [[Abrinca (flumen)|Aruram]] relinquentes, ad [[occidens|occidentem]] in [[Gallia]]m anno [[58 a.C.n.]] ire conabantur, [[Orgetorix|Orgetorige]] duce. [[Exercitus]] autem [[Roma]]nus apud urbem [[Genava]]m et prope [[oppidum]] [[Bibracte]]m eos delevit. Hoc [[proelium]] fuit initium [[Bellum Gallicum|Belli Gallici]] [[Gaius Iulius Caesar|Iulii Caesaris]].<ref>Caes., B.G. 1.5.</ref> Urbs [[Aventicum]] fuit [[caput (urbs)|caput]] civitatis Helvetiorum.<ref>[[Cornelius Tacitus]], [[Historiae (Tacitus)|Historiae]], liber primus, p. 68.</ref> == Fontes == *[[Caesar]], libro primo ''[[De bello Gallico|de Bello Gallico]]'' *[[Cicero]], ''[[Epistulae ad Atticum]]'' I.19.2. *[[Strabo]] libro quarto ''Rerum geographicarum'' 3.5 {{NexInt}} * [[Brenodor]] * [[Fanum Regionis Arurae]] * [[Fanum Regionis Lindensis]] * [[Mons Visteliacum]] * [[Turicum (urbs)|Turicum]] == Notae == <references /> ==Nexus externi== *[http://www.interfaze.ch/Kelten-Schweiz.html Celtae in Helvetia] {{Civitates trium Galliarum}} [[Categoria:Helvetii|!]] [[Categoria:Historia Helvetiae]] 46lqu0f57kv61pgau6djji9ztjivxnn 3995521 3995520 2026-10-18T19:36:28Z Marcus Terentius Bibliophilus 2059 /* Fontes */ 3995521 wikitext text/x-wiki [[Fasciculus:Map Gallia Tribes Towns.png|thumb|Tabula [[Gallia]]e (anno [[58 a.C.n.]])]] [[Fasciculus:Divico und Caesar.jpg|thumb|Divico dux Helvetiorum et [[Gaius Iulius Caesar]] apud [[Genava]]m.]] '''Helvetii''' fuerunt antiqua [[gens]] [[Celtae|Celtica]], quae [[regio]]nes hodiernae [[Helvetia]]e incolebat. == Historia == Helvetii, regionem apud [[Abrinca (flumen)|Aruram]] relinquentes, ad [[occidens|occidentem]] in [[Gallia]]m anno [[58 a.C.n.]] ire conabantur, [[Orgetorix|Orgetorige]] duce. [[Exercitus]] autem [[Roma]]nus apud urbem [[Genava]]m et prope [[oppidum]] [[Bibracte]]m eos delevit. Hoc [[proelium]] fuit initium [[Bellum Gallicum|Belli Gallici]] [[Gaius Iulius Caesar|Iulii Caesaris]].<ref>Caes., B.G. 1.5.</ref> Urbs [[Aventicum]] fuit [[caput (urbs)|caput]] civitatis Helvetiorum.<ref>[[Cornelius Tacitus]], [[Historiae (Tacitus)|Historiae]], liber primus, p. 68.</ref> == Fontes == *[[Caesar]], libro primo ''[[De bello Gallico|de Bello Gallico]]'' *[[Cicero]], ''[[Epistulae ad Atticum]]'' I.19.2. *[[Strabo]] libro quarto ''[[Geographica (Strabo)|Rerum geographicarum]]'' 3.5 {{NexInt}} * [[Brenodor]] * [[Fanum Regionis Arurae]] * [[Fanum Regionis Lindensis]] * [[Mons Visteliacum]] * [[Turicum (urbs)|Turicum]] == Notae == <references /> ==Nexus externi== *[http://www.interfaze.ch/Kelten-Schweiz.html Celtae in Helvetia] {{Civitates trium Galliarum}} [[Categoria:Helvetii|!]] [[Categoria:Historia Helvetiae]] s0z16x4dlsjc2ir7censqwz0kqxu3a3 Varanus lacus 0 46301 3995533 3607525 2026-10-18T22:43:22Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995533 wikitext text/x-wiki {{pro pagina discretiva vide|Varanus (discretiva)}} {{Lacus |Nomen = Varanus / Urianus lacus |Nomen_vulgarium = '''Lago di Varano''' |Imago = [[Fasciculus:Lago varano view.jpg|300px|Despectus ad lacum]] |Inscriptio_imaginis = ''Despectus ad lacum'' |Nomina_latina = [[#Hydronyma lacūs|Vide sectionem]] |Nomina_vulgaria = Lago di Varano |Origo = litoranea |Area = 60.5 |Profunditas maxima = 5 |Profunditas mediocris = 3 |Altitudo = 1 |Insulae = 0 |Imissaria = |Emissaria = 2 |Altera = |Terrae = [[Fasciculus:Flag of Italy.svg|20px|Italia]] [[Italia]] |Regiones = [[Fasciculus:Coat of Arms of Apulia.svg|15px|Apulia]] [[Apulia]] |Provinciae = [[Provincia Fodiana|Fodiana]] |Municipia = 3 |Urbs princeps = [[Canianum]] |Coordinata = 41° 52′ 45″ N <br>15° 44′ 46″ E |postscripta = [[:Categoria:Lacus Italiae|Lacus Italiae]] |tabula = [[Fasciculus:Tavoliere sat.jpg|300px| ]] }} '''Varanus lacus'''<ref>{{Hofmannus}}</ref><ref>{{Graesse}}</ref> seu '''Urianus lacus'''<ref>[https://books.google.vg/books?id=m-7SvF0lZbIC&pg=PA355&lpg=PA355&dq=lacus+Urianus+Varano&source=bl&ots=kRS3yfN7By&sig=ACfU3U3hWiSasH4NnS5nz3jlMYlFLMsBAQ&hl=it&sa=X&ved=2ahUKEwitwsrn_-zpAhWMyqQKHY-UAzgQ6AEwAHoECAkQAQ#v=onepage&q=lacus%20Urianus%20Varano&f=false Descrizione topografica fisica, economica politica de reali domini al di qua del faro nel regno delle due sicilie, Volume 1 - Giuseppe Del Re, Tipografia dentro la Pieta de Turchini, 1830].</ref> (alia nomina: [[#Toponyma fluminis|Vide sectionem]]) ([[Lingua Italiana|Italiane]] ''[[:it:Lago di Varano|Lago di Varano]]''), est [[lacus]] [[Italia|Italicus]], in [[Apulia]] [[Regio Italiae|regione]] ac [[Provinciae Italiae|Provincia]] [[Provincia Fodiana|Fodiana]] situs. ==Hydronyma lacūs== Hydronyma lacūs sunt: ''Varanus lacus,''<ref>{{Hofmannus}}</ref><ref>{{Graesse}}</ref>, ''Urianus lacus''<ref>[https://books.google.vg/books?id=m-7SvF0lZbIC&pg=PA355&lpg=PA355&dq=lacus+Urianus+Varano&source=bl&ots=kRS3yfN7By&sig=ACfU3U3hWiSasH4NnS5nz3jlMYlFLMsBAQ&hl=it&sa=X&ved=2ahUKEwitwsrn_-zpAhWMyqQKHY-UAzgQ6AEwAHoECAkQAQ#v=onepage&q=lacus%20Urianus%20Varano&f=false Descrizione topografica fisica, economica politica de reali domini al di qua del faro nel regno delle due sicilie, Volume 1 - Giuseppe Del Re, Tipografia dentro la Pieta de Turchini, 1830 - 568 pagine]</ref> ''Bauranum lacus,'' vel ''Baranum lacus,''<ref>[https://web.archive.org/web/20120503112840/http://www.campinguria.it/mare_lago.htm "Paesaggio: Il tuo spazio tra mare e lago,] www.campinguria.it (URIA camping & village) {{ling|Italice}}.</ref>, ''Gerne''<ref>{{Hofmannus}}</ref> olim ''Sinus Urianus'' sive ''Sinus Hyrianus'' et ''Sinus Varanus''. ==Historia== Secundum [[Plinius maior|Plinium]], suo tempore huius lacus locus ''Sinus Urianus'' sive ''Sinus Hyrianus'' (ex [[Uria]], sive urbe [[Hyrium|Hyrio]]) appellabatur, quia sine terrae linea id claudente lacus non erat. Secundum [[Quintus Horatius Flaccus|Horatium]], lacus ''Sinus Varanus'' appellabatur. ==Municipia== *[[Canianum]] {{NexInt}} * [[Canianum]] * [[Daunia]] * [[Fovea (urbs)|Fovea]] * [[Garganus]] * [[Pantanus lacus]] * [[Tabula Apula]] ==Notae== <references/> ==Nexus externus== {{CommuniaCat|Lago di Varano|Varanum}} [[Fasciculus:Lake - Lago di Varano.jpg|thumb|Despectus in Bauranum.]] [[Categoria:Garganus]] [[Categoria:Lacus Apuliae]] [[Categoria:Provincia Fodiana]] k3zp7d444zsf9mryra9aadb0hxw0m1m Taoismus 0 46614 3995508 3862932 2026-10-18T17:43:41Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995508 wikitext text/x-wiki [[Fasciculus:Dai Temple (1489).JPG|thumb|Templum Dai apud [[Mons Tai|Montem Tai]], unum ex sanctissimis [[mons|montibus]] in Sinis.]] '''Taoismus''' ([[Mandarinice]] 道教 vel 道家&thinsp;; [[pinyin]] ''dàojiào'' vel ''dàojiā'') est una ex nonnullarum cognatarum [[philosophia]]e [[religio]]nisque [[memoria]]rum vel notionum [[Sinae (regio)|Sinensium]] quae vivere congruenter cum [[Tao]] (道) vehementer dicunt, fonte et necessario omnium exstantium, quae [[Asia Orientalis|Asiam Orientalem]] plus quam duo milia [[annus|annorum]] movent et inter [[natio]]nes manaverunt (Miller 2003:ix). [[Fasciculus:LaoGod.jpg|alt=|thumb|150px|left|[[Laozi]] ut doctor Taoistus pictus.]] Signum Sinense 道 ''Tao'' (vel secundum alteram [[romanizatio]]nem ''Dao'') usitate significare habetur 'via' vel 'iter' vel 'principium', sed hic usus in philosophia et [[religio]]ne Sinensibus abstrusiores significationes ex "[[realitas|realitate]]" et "[[natura]]" habet, quae res ''Tao'' etiam significare potest. [[Fasciculus:Incense taiwan temple fu dog.jpg|thumb|200px|Templum Taoisticum in [[Taivania]].]] [[Fasciculus:Statue of a taoist deity, Taiwan.jpg|thumb|150px|Statua deitatis Taoiste Taivaniae.]] [[Fasciculus:Taopriest.jpg|thumb|upright|alt=|200px|Presbyter Taoistus [[Macaum|Macai]], Februario 2006.]] [[Fasciculus:Temple of Chukou 05.jpg|thumb|Interior templi Taoisti [[Taivania]]e pars.]] [[Fasciculus:Caloocan Taoist Templejf.jpg|thumb|200px|Templum Taoistum [[centum]] annos natum, lapis<!--landmark--> a communitate Sinico in [[Statio 5th Avenue LRT|Statione 5th Avenue LRT]],{{dubsig}} [[Caloocan]], [[Manila]]e, [[Philippinae|Philippinarum]] aedificatum.]] [[Fasciculus:Tien hau charm.jpg|alt=|thumb|upright|Fascinum Taoistum ex Templo [[Matsu (dea)|Tien Hau]] Sancti Francisci.]] [[Fasciculus:Baiyun.jpg|thumb|200px|Monasterium Nubis Albae [[Pechinum|Pechini]]]] [[Fasciculus:Dragon on Mengjia Longshan Temple.jpg|thumb|Draco Sinicus in [[Templum Mengjia Longshan|Templo Mengjia Longshan]] [[Taipeium|Taipeii]].]] [[Fasciculus:Huxisanxiaotu.jpg|alt=|thumb|''[[Confucianismus]], Taoismus, et [[Buddhismus]] sunt unum,'' tabula modo ''litang'' [[saeculum 12|saeculo duodecimo]] picta, [[tres]] homines qui in ripis [[fluvius|fluvii]] ridunt ostendit; [[Domus Song]].]] Taoisticae proprietas et [[ethica|ethice]] [[Tres Gazae|Tres Gazas]] (saepe Tres Taoismi Gemmas appellatas) vehementius dicunt: [[misericordia]]m, [[moderatio]]nem, [[modestia]]m. In [[cogitatio]]ne Taoistica, quies (''wu wei''), actio spontanea, [[humanismus]], et inanitas vim habent; multum enim valet nexus inter homines et [[natura]]m, qui, regulis normisque minutis, hominibus succurrit ut ei [[mundus|mundum]] melius cognitum habeant. Plurimi Taoistae Sinenses qui [[nihil]] in [[vita]]e [[societas humana|societate]] immutari volunt sunt [[polytheismus|polytheistici]]. [[Spiritus]] [[natura]]e et maiorum plerumque adsunt in Taoismo ad commune [[iudicium]] accommodato. Taoismus ordinatus suos [[ritus]] distinguit a quotidianis ritibus, quos nonnulli Taoistae professionales (''Daoshi'') corruptos habent. [[Laocius]] et [[Chuangcius]] philosophii Taoismii sunt. {{NexInt}} * [[Centum Scholae Cogitationis]] * [[Confucianismus]] * [[Imperator Lapidis Nephritici]] * [[Philosophia Sinica]] * [[Qi]] * ''[[Tao Te Ching]]'' * [[Tres Puri]] == Bibliographia == * Anatole, Alex. [[2005]]. ''The Truth of Tao.'' Center of Traditional Taoist Studies. ISBN 0-9742529-0-5. * Barrett, Rick. [[2006]]. ''Taijiquan: Through the Western Gate.'' Blue Snake Books. ISBN 1-58394-139-8. * Cane, Eulalio Paul. [[2002]]. ''Harmony: Radical Taoism Gently Applied.'' Trafford Publishing. ISBN 1-4122-4778-0. * Carr, David T., et Canhui Zhang. [[2004]]. ''Space, Time, and Culture.'' Springer. ISBN 1-4020-2823-7. * Chang, Stephen T. [[1985]]. ''The Great Tao.'' Tao Longevity LLC. ISBN 0-942196-01-5. * Dean, Kenneth. [[1993]]. ''Taoist Ritual and Popular Cults of Southeast China.'' Princeton: Princeton University Press. * [[Mircea Eliade|Eliade, Mircea]]. [[1984]]. ''A History of Religious Ideas.'' Vol. 2. In Anglicum versus a Willard R. Trask. [[Sicagum|Sicagi]]: University of Chicago Press. * Fasching, Darrell J., et Dell de Chant. [[2001]]. ''Comparative Religious Ethics: a narrative approach'' Blackwell Publishing. ISBN 0-631-20125-4. * Graham, A. C. [[1993]]. ''Disputers of the Tao: Philosophical Argument in Ancient China.'' Open Court. ISBN 0-8126-9087-7. * Graham, A. C., translator [[2001]]. ''Chuang-tzu: The Inner Chapters.'' Indianapolis: Hackett Publishing Company. ISBN 0-87220-581-9. * Jones, Richard H. [[2004]]. ''Mysticism and Morality: a new look at old questions.'' Lexington Books. ISBN 0-7391-0784-4. * Jordan, David K. [[1972]]. ''Gods, Ghosts, and Ancestors: The Folk Religion of a Taiwanese Village.'' Berkeleiae: University of California Press. * Kaltenmark, Max. [[1965]]. ''Lao Tzu and Taoism.'' Stanfordiae: Stanford University Press. * Keller, Catherine. [[2003]]. ''The Face of the Deep: A Theology of Becoming.'' Novi Eboraci: Routledge. ISBN 0-415-25648-8. * Kim, Ha Poong. [[2003]]. ''Reading Lao Tzu: A Companion to the Tao Te Ching With a New Translation.'' Xlibris Corporation. ISBN 1-4010-8316-1. * Kirkland, Russel. [[2004]]. ''Taoism: The Enduring Tradition.'' Novi Eboraci: Routledge. ISBN 0-415-26322-0. * Knauer, Elfried R. [[2006]]. The Queen Mother of the West: A Study of the Influence of Western Prototypes on the Iconography of the Taoist Deity. In ''Contact and Exchange in the Ancient World,'' ed. Victor H. Mair, 62-115. Honolulu: University of Hawai'i Press. ISBN 978-0-8248-2884-4; ISBN 0-8248-2884-4. * Kohn, Livia. [[1993]]. ''The Taoist Experience: An Anthology.'' Albany: SUNY Press. * Kohn, Livia, ed. [[2000]]. ''Daoism Handbook.'' Leiden: Brill. * Kohn, Livia. [[2004]]. ''The Daoist Monastic Manual: A Translation of the ''Fengdao Kejie''.'' Novi Eboraci: Oxford University Press. * Kohn, Livia, et Michael LaFargue, eds. [[1998]]. ''Lao-Tzu and the Tao-Te-Ching.'' SUNY Press. ISBN 0-7914-3599-7. * Kraemer, Kenneth. [[1986]]. ''World Scriptures: An Introduction to Comparative Religions.'' Paulist Press. ISBN 0-8091-2781-4. * LaFargue, Michael. [[1994]]. ''Tao and Method: A Reasoned Approach to the Tao Te Ching.'' SUNY Press. ISBN 0-7914-1601-1. * Lau, D. C. [[1963]]. ''Lao Tzu: Tao Te Ching.'' Londinii: Penguin Classics. ISBN 0-14-044131-X. * Little, Stephen, Shawn Eichman, et al. [[2000]]. ''Taoism and the Arts of China.'' Sicagi: Art Institute of Chicago. ISBN 0-520-22784-0. * Liu Zhongyu (conversus Lü Pengzhi). [https://web.archive.org/web/20070929102702/http://www.eng.taoism.org.hk/religious-activities%26rituals/daoist-folk-customs/pg4-8-1.asp "Daoist Folk Customs: Burning Incense and Worshiping Spirits."] Taoist Culture and Information Centre, apud www.eng.taoism.org.hk. * [[Victor H. Mair|Mair, Victor H.]] [[2001]]. ''The Columbia History of Chinese Literature.'' Novi Eboraci: Columbia University Press. ISBN 0-231-10984-9. * Martin, William. [[2005]]. ''A Path And A Practice: Using Lao Tzu's Tao Te Ching as a Guide to an Awakened Spiritual Life.'' Marlowe & Company. ISBN 1-56924-390-5. * Martinson, Paul Varo. [[1987]]. ''A theology of world religions: Interpreting God, self, and world in Semitic, Indian, and Chinese thought.'' Augsburg Publishing House. ISBN 0-8066-2253-9. * Maspero, Henri. [[1981]]. ''Taoism and Chinese Religion.'' Amherst: University of Massachusetts Press. ISBN 0-87023-308-4. * Miller, James. [[2003]]. ''Daoism: A Short Introduction.'' Oxford: Oneworld Publications. ISBN 1-85168-315-1. * Ni, Hua-Ching. [[1998]]. ''Tao: The Subtle Universal Law and the Integral Way of Life.'' SevenStar Communications. ISBN 0-937064-65-3. * Robinet. Isabelle. [[1993]]. ''Taoist Meditation: The Mao-shan Tradition of Great Purity.'' Albany: SUNY Press. ([[Francogallice]], 1989). * Robinet, Isabelle. [[1992]]. ''Taoism: Growth of a Religion'' Stanford: Stanford University Press ([[Francogallice]], 1992). ISBN 0-8047-2839-9. * Saso, Michael R. [[1990]]. ''Taoism and the Rite of Cosmic Renewal.'' 2nd ed. Washington State University Press. ISBN 978-0-87422-054-4. * Segal, Robert Alan. [[2006]]. ''The Blackwell Companion to the Study of Religion.'' Blackwell Publishing. ISBN 0-631-23216-8. * Schipper, Kristopher. [[1993]]. ''The Taoist Body.'' Berkeley: University of California Press. ([[Francogallice]], 1982). * Schipper, Kristopher, et Franciscus Verellen. [[2004]]. ''The Taoist Canon: A Historical Companion to the Daozang.'' [[Sicagum|Sicagi]]: University of Chicago. * Sharot, Stephen. [[2001]]. ''A Comparative Sociology of World Religions: virtuosos, priests, and popular religion.'' Novi Eboraci: NYU Press. ISBN 0-8147-9805-5. * Silvers, Brock. [[2005]]. ''The Taoist Manual.'' Honolulu: Sacred Mountain Press). * Sivin, Nathan. [[1968]]. ''Chinese Alchemy: Preliminary Studies.'' Cantabrigiae Massachusettae: Harvard University Press. * Slingerland, Edward Gilman. [[2003]]. ''Effortless Action: Wu-Wei as Conceptual Metaphor and Spiritual Ideal in Early China.'' Oxoniae: Oxford University Press. ISBN 0-19-513899-6. * Sommer, Deborah. [[1995]]. ''Chinese Religion: An Anthology of Sources.'' Oxoniae: Oxford University Press. ISBN 0-19-508895-6. * Van Voorst, Robert E. [[2005]]. ''Anthology of World Scriptures.'' Thomson Wadsworth. ISBN 0-534-52099-5. * [[Arturus Waley|Waley, Arthur]]. [[1958]]. ''The Way and Its Power: A Study of the Tao Te Ching and Its Place in Chinese Thought.'' Grove Press. ISBN 0-8021-5085-3. * Welch, H., et A. Seidel. [[1979]]. ''Facets of Taoism.'' Yale University Press. == Nexus externi == {{CommuniaCat|Taoism}} {{Pars vicificanda}} ;Instituta nationalia * [http://www.taoist.org.cn/ Chinese Taoist Association,] apud www.taoist.org.cn * [http://www.hktaoist.org.hk/ Hongkonger Taoist Association,] apud www.hktaoist.org.hk * [https://web.archive.org/web/20080410230935/http://www.hktaoist.org/ United Hongkonger Taoist Association,] apud www.hktaoist.org * [http://www.taoismo.org.br/stb/modules/news/ Brazilian Taoist Association,] apud www.taoismo.org.br * [https://web.archive.org/web/20080219081657/http://www.qingjing.org/ European Taoist Union,] apud www.qingjing.org ** [https://web.archive.org/web/20100410145924/http://www.taoists.co.uk/ British Taoist Association,] apud www.taoists.co.uk ** [https://web.archive.org/web/20110118031353/http://www.aftao.org/ French Taoist Association,] apud www.aftao.org ** [https://web.archive.org/web/20080509023545/http://www.qingjing.net/Spain/ Spanish/Catalan Taoist Association,] apud www.qingjing.net * [http://www.reformtaoism.org/ Reform Taoist Congregation,] apud www.reformtaoism.org ;Sedes et societates pro studio * [http://www.tao.org/ Center of Traditional Taoist Studies,] apud www.tao.org * [http://www.daoistcenter.org/ Center for Taoist Studies,] apud www.daoistcenter.org * [https://web.archive.org/web/20080503005208/http://www.taoiststudiesinstitute.org/index.html Taoist Studies Institute,] apud www.taoiststudiesinstitute.org * [https://web.archive.org/web/20080502145240/http://www.taoistcenter.net/ Taoist Center in Vermont,] apud www.taoistcenter.net * [http://www.daoiststudies.org/ Taoist Studies,] apud www.daoiststudies.org ;Nexus varii * [https://web.archive.org/web/20060829154119/http://religiousmovements.lib.virginia.edu/nrms/taoism.html Taoismus], apud religiousmovements.lob.birginia.edu (Universitas Virginiae) * [https://web.archive.org/web/20080316015829/http://divinetao.com/index.html Tao Divinum,] apud divinetao.com * [https://web.archive.org/web/20090215153618/http://home.comcast.net/~taoistresource/doe_idx.htm "Tao Store Index,"] apud home.comcast.net ("Online Taoist Scriptures") * [http://www.eng.taoism.org.hk/ "Taoist Culture and Information Center,"] apud www.eng.taoism.org.hk * [https://web.archive.org/web/20070110221332/http://www.wudangtao.net/home.html "Wudang Tao: Enter the Mountain,"] apud www.wudangtao.net {{1000 paginae}} {{Myrias|Philosophia}} [[Categoria:Philosophia religionis]] [[Categoria:Polytheismus]] [[Categoria:Taoismus| ]] 9fe9hi7kmuw8zmrvcqx3soi7wmgqy03 Turbo (caelum) 0 46675 3995529 3865958 2026-10-18T20:50:58Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995529 wikitext text/x-wiki [[Fasciculus:A tornado near Anadarko, Oklahoma, on May 3, 1999.jpg|thumb|Turbo prope [[Anadarko (Oklahoma)|Anadarko]] [[Oclahoma]]e. Turbo proprius est tubus tenuis qui de [[nubes|nube]] descendit et [[solum]] tangit.<!-- The lower part of this tornado is surrounded by a [[transparency (optics)|translucent]] dust cloud, kicked up by the tornado's strong winds at the surface. Note that the actual wind of the tornado has a much wider radius than the funnel-->]] '''Turbo''',<ref>[[Cicero]], ''[[De natura deorum (Cicero)|De natura deorum]]'' 3.20.51, ''[[Ad familiares (Cicero)|Ad familiares]]'' 12.25.1, etc.</ref> plenius '''turbo ventorum''',<ref>[[Ammianus Marcellinus]], ''[[Res gestae (Ammianus)|Res gestae]]'' 24.1.11.</ref> est rotans [[aer]]is columna, [[homo|hominibus]] [[animalia|animalibusque]] saepe [[periculum|periculosa]], quae [[nubes cumulonimbus|nubem cumulonimbam]], vel raro infimam [[nubes cumula|nubem cumulam]], et terrae [[superficies|superficiem]] aliquando simul tangens violenter volvitur. Turbines multas formas [[magnitudo|magnitudinesque]] ostendunt, sed plerumque formam [[nubes infundibulosa|infundibuli condensationis]] quod videri potest habent, cuius finis angustus solum tangit, saepe a nube [[quisquiliae|quisquiliarum]] [[pulvis|pulverisque]] cinctus. Plurimi turbines celeritates [[ventus|venti]] minus quam 110 km/h habent, sunt circa 250 pedes sectione transversa, et solum nonnulla [[chiliometrum|chiliometra]] progrediuntur antequam emoriuntur; extremissimi celeritates venti attingere possunt plus quam 480 km/h, plus quam duo milia passuum sectione transversa patere, et terram tangere plus quam 100&nbsp;km.<ref name="fastest wind">{{cite web|url=http://cswr.org/dow/DOW.htm|title=Doppler On Wheels|accessdate=2009-12-13|author=Wurman, Joshua|publisher=Center for Severe Weather Research|year=2008-08-29}}.</ref><ref name="widest tornado">{{cite web|url=http://www.crh.noaa.gov/oax/archive/hallam/hallam.php|title=Hallam Nebraska Tornado|accessdate=2006-09-08|work=[[National Weather Service]]| publisher=[[National Oceanic and Atmospheric Administration]]|date=2005-10-02|accessdate=2009-11-15}}.</ref><ref name="SPC FAQ">{{cite web|url=http://www.spc.ncep.noaa.gov/faq/tornado/|title=The Online Tornado FAQ|accessdate=2006-09-08|author=Roger Edwards|date=2006-04-04|work=[[National Weather Service]]|publisher=[[National Oceanic and Atmospheric Administration]]|}}.</ref> == Notae == <references/> {{NexInt}} * [[Caelum]] * [[Cumulonimbus]] * [[Ruina naturae]] {{Pars vicificanda}} == Nexus externi == ;Generalis * [http://www.spc.noaa.gov/climo/torn/monthlytornstats.html ''Storm Prediction Center Monthly and Annual Summaries'' apud www.spc.noaa.gov] * [https://web.archive.org/web/20060423085729/http://www.srh.weather.gov/srh/jetstream/mesoscale/tornado.htm] * [http://www.tornadoarchive.com] * [http://www.tornadohistoryproject.com ''Tornado History Project - Tornado Map Database'' apud www.tornadohistoryproject.com] * [https://web.archive.org/web/20080415212853/http://climate.engin.umich.edu/TornadoPATHS/ ''Fly Tornado Paths Using Google Earth'' apud climate.engin.umich.edu] * [https://web.archive.org/web/20110505093502/http://www4.ncdc.noaa.gov/cgi-win/wwcgi.dll?wwEvent~Storms] ;Studium * [http://celebrating200years.noaa.gov/breakthroughs/tornadowarnings/welcome.html Tornado Detection and Warnings] ([[National Severe Storms Laboratory|NSSL]]) * [https://web.archive.org/web/20080610073330/http://www.hprcc.unl.edu/nebraska/U_S_SEVERE.html U.S. Severe Weather and Meteorology and Climatology] * [https://web.archive.org/web/20210505213816/http://www.ejssm.org/ Electronic Journal of Severe Storms Meteorology] * [https://web.archive.org/web/20071123233007/http://magma.nationalgeographic.com/ngm/0404/feature1/index.html Chasing Tornadoes] (''[[National Geographic Magazine]]'') ;Salus * [https://web.archive.org/web/20061115225603/http://www.nssl.noaa.gov/NWSTornado/ ''Tornadoes....Nature's Most Violent Storms'' apud www.nssl.noaa.gov] * [http://tornadoproject.com/safety/safety.htm] * [http://www.spc.noaa.gov/faq/tornado/school.html] * [http://www.srh.noaa.gov/oun/papers/overpass.html]) * [https://web.archive.org/web/20071102214703/http://www.disasterprep101.com/tornadoes.htm ''Tornado Preparedness'' apud www.disasterprep101.com] * [https://web.archive.org/web/20080329165502/http://www.edu4hazards.org/tornado.html ''Education for Geo-Hazards - Tornado! Education for Disaster Risk Reduction'' apud www.edu4hazards.org] * [https://web.archive.org/web/20080403004203/http://www.ametsoc.org/policy/tornadopolicy2000.html] [[Categoria:Meteorologia]] {{1000 paginae}} {{Myrias|Physica}} psb7gzq2bmyf4xabmqg1ly6hkthmu2a Ariovistus 0 51980 3995518 3905016 2026-10-18T19:28:34Z Marcus Terentius Bibliophilus 2059 3995518 wikitext text/x-wiki {{capsa hominis Vicidata}} '''Ariovistus''' [[saeculum 1 a.C.n.|primo saeculo a.C.n.]] fuit dux [[Suebi|Sueborum]] aliorumque [[Germani|Germanorum]], qui, [[Arverni|Arvernos]] [[Sequani|Sequanosque]] adiuvantes, [[bellum]] in [[Gallia]] gesserunt: [[Aedui]]s, aemulis eorum, victis<ref>[[Cicero]], ''[[Epistulae ad Atticum|Ad Atticum]]'' I.19.2.</ref>, ingens eorum multitudo in finibus Gallicis consedit. Ab ipso [[Gaius Iulius Caesar|Caesare]] anno [[59 a.C.n.]], cum [[consul]] erat, rex amicus et socius populi Romani appellatus est.<ref>[[Dio Cassius]] 38.34. [[Plutarchus]], ''Caesar'', 19. Cf [[Gaius Iulius Caesar|Caesar]], ''BG'' I.40.</ref> Nihilominus anno proximo, [[58 a.C.n.]], Ariovistum et Suebos adortus in [[Proelium apud Vosegum|proelio apud Vosegum]] Caesar eos vicit et trans [[Rhenus|Rhenum]] expulit. == Vita == Ariovistus et eventus quorum particeps fuit nobis noti sunt e ''[[Commentarii de Bello Gallico|Commentariis de Bello Gallico]].''<ref>[[Gaius Iulius Caesar]], ''[[Commentarii de Bello Gallico]],'' 1.31–53.</ref> Caesar, qui et ipse his eventibus interfuit, praecipuus fons noster est, quamquam, quia ''Commentariorum'' libris conscribendis causam suam apud vulgus Romanum agebat, [[Historicus|historici]]s posterioribus, in primis [[Gaius Asinius Pollio (consul 40 a.C.n.)|Asinio Pollioni]] et [[Dio Cassius|Dioni Cassio]], eius testimonium suspectum visum est.<ref>[[Dio Cassius]], ''[[Historia Romana (Dio)|Historia Romana]]'', [http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Cassius_Dio/38*.html#34 38.34-50]; vide etiam [[Plutarchus|Plutarchi]], ''[[Vita Caesaris]],'' [http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Plutarch/Lives/Caesar*.html#19 19]).</ref> Ariovistus, etsi [[Suebi|Suebus]], [[lingua Gallica]] volubiliter usus est.<ref>Caesar, ''Commentarii de Bello Gallico,'' 1.47.</ref> Ei erant duae uxores,<ref>Caesar, ''Commentarii de Bello Gallico,'' 1.53.</ref> quorum unam domo tulerat, alteram, [[Noricum|Norici]] Regis sororem, matrimonio reipublicae adeptus est. Is ab Caesare ''rex Germanorum'' appellatus est,<ref>Caesar, ''Commentarii de Bello Gallico,'' 1.31.</ref> sed nescimus an omnes Germanos rexerit.<ref>Similiter, [[Suetonius]] ([http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Suetonius/12Caesars/Caligula*.html#44.2 ''Caligula,'' 44.2–47]) [[Cunobelinus|Cunobelinum]] appellavit ''regem Britannorum,'' quamquam varia in [[Britannia]] regna ab Romanis nota sunt.</ref> Vere, [[Germania]] divisa est in nonnullas nationes, quarum multae ab regibus temperatae sunt.<ref>[[Tacitus]], ''[[Germania (liber)|Germania]].''</ref> Ariovisti imperium solum Germanos qui se in Gallia conlocaverant probabiliter admovit.<!--He was recognized as a king by the [[Roman Senate]], but how closely the Roman title matched Ariovistus' social status among the Germans remains unknown; similarly, what the senate meant by ''rex'' is uncertain.--> Vocabulum ''rex'' multas significationes habet et per historiam [[Roma]]e habebat. Tacitus dixit<ref>Tacitus, ''Germania'' [[s:De origine et situ Germanorum (Germania)#VII|7]]</ref> Germanos distinguere reges, natu electos, et duces, facultate militari electos, et eorum reges non habere potestatem absolutam. == Notae == <references/> == Nexus externi == * [http://dissertations.ub.rug.nl/FILES/faculties/arts/1997/j.h.looijenga/thesis.pdf Runes around the North Sea] * [https://web.archive.org/web/20100105182333/http://www.indoeuropean.nl/index2.html Indoeuropean Etymological Dictionary] [[Categoria:Nati saeculo 2 a.C.n.]] [[Categoria:Mortui 54 a.C.n.]] [[Categoria:Gaius Iulius Caesar]] [[Categoria:Germani antiqui]] [[Categoria:Bellum Gallicum]] [[Categoria:Participes bellorum Romano-Germanicorum]] 163duygfj147oky0q5l5uexysn5fo6q Tacuinum sanitatis 0 58321 3995506 3985472 2026-10-18T17:24:02Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995506 wikitext text/x-wiki {{L1}}{{Titulus italicus}} [[Fasciculus:Laurentiana Plut.18 sin.7 fol.1 right margin.png|thumb|Lectrix ''Tacuini sanitatis'': marginale primi folii exemplaris Florentini saec. XIV ([[Bibliotheca Laurentiana]] Plut.18 sin.7)]] '''''Tacuinum''''' (vel '''''Taccuinum''''') '''''sanitatis''''' (a nomine [[Lingua Arabica|Arabico]] تقويم الصحة ''taqwīm aṣ‑ṣiḥḥa'', i.e. 'tabularium sanitatis') est titulum Latinum operis medici Arabici 12<sup>o</sup> saeculo ab [[Elbochasim]] [[Bagdatum|Bagdatensi]] compositi. Qui liber 13<sup>o</sup> saeculo [[Panormus|Panormi]] aut [[Neapolis|Neapoli]] [[Manfredus (rex Siciliae)|Manfredo Siciliae rege]] (1258–1266) suadente Latine versus postea 14<sup>o</sup> et 15<sup>o</sup> saeculo textu magnopere redacto illuminationibus auctus magna fruebatur fama. == Manuscripta adhuc exstantia, in interrete accessibilia == [[Fasciculus:1-albero, Taccuino Sanitatis, Casanatense 4182..jpg|thumb|Illuminatio e ''Tacuino sanitatis'' Casanatensi.]] ; Tabulata * ''Tacuinum sanitatis'' Florentinum, saec. XIV, [[Bibliotheca Laurentiana]] ([[Florentia]]e), MS. Plut. 18 sin. 7 [https://web.archive.org/web/20211024054630/http://mss.bmlonline.it/catalogo.aspx?Level=m&Shelfmark=Plut.18+sin.7 Textus] [https://web.archive.org/web/20190612230248/http://www.bml.firenze.sbn.it/Diaita/schede/scheda32.htm Catalogus] * ''Tacuinum sanitatis'' Granatense, ca. 1400-1450, Bibliotheca Universitatis Granatensis ([[Granata]]e), MS. C-67 [http://digibug.ugr.es/handle/10481/6525 Exemplar PDF] [https://granatensis.ugr.es/discovery/fulldisplay?docid=alma991013992848704990&context=L&vid=34CBUA_UGR:VU1&search_scope=MyInstitution&tab=Granada&lang=es Catalogus] ; Illuminata * ''Tacuinum sanitatis'' Parisiense, saec. XIII exeunte, Bibliotheca Nationalis Francica ([[Lutetia]]e), MS. lat. 6977 [https://gallica.bnf.fr/ark:/12148/btv1b8452202k Textus] [https://archivesetmanuscrits.bnf.fr/ark:/12148/cc90780x Catalogus]<ref>[https://gallica.bnf.fr/ark:/12148/btv1b10000505s/f952.image De historia huius libri]</ref> * ''Tacuinum sanitatis'' Leodicense, ca. 1380, Bibliotheca Universitatis Leodicensis ([[Leodicum|Leodici]]), MS. 1041 [https://donum.uliege.be/handle/2268.1/1525 Imagines paucae] * ''Tacuinum sanitatis'' Vindobonense, Lombardia ca. 1385-1390, [[Bibliotheca Nationalis Austriaca]] ([[Vindobona]]e), MS. series nova 2644 [http://data.onb.ac.at/rep/10020524 Textus] [http://manuscripta.at/m1/lit_manu.php?ms=AT8500-SN2644 Bibliographia] * ''Theatrum'' vel ''Tacuinum sanitatis'' Casanatense, Lombardia ca. 1390, Bibliotheca Casanatensis ([[Roma]]e), MS. 4182 [http://www.wdl.org/en/item/11560 Textus]{{Nexus deficit|date=May 2026 |bot=InternetArchiveBot |fix-attempted=yes }} * ''Tacuinum sanitatis'' Parisiense alterum, Lombardia ca. 1395-1400, Bibliotheca Nationalis Francica ([[Lutetia]]e), MS. nouv. acqu. Lat. 1673 [https://gallica.bnf.fr/ark:/12148/btv1b105380445 Textus] [https://archivesetmanuscrits.bnf.fr/ark:/12148/cc69994c Catalogus] * ''Tacuinum sanitatis'' Rothomagense, ca. 1450, Bibliotheca Municipalis Rothomagensis ([[Rothomagus|Rothomagi]]), MS. Leber 1088, MS. 3054 [https://gallica.bnf.fr/ark:/12148/btv1b10102185j.r Textus] * ''Tacuinum sanitatis'' Parisiense tertium, ca. 1450, Bibliotheca Nationalis Francica ([[Lutetia]]e), MS. lat. 9333 [https://gallica.bnf.fr/ark:/12148/btv1b105072169.r Textus] [https://archivesetmanuscrits.bnf.fr/ark:/12148/cc773750 Catalogus] * ''Tacuinum sanitatis'' Vindobonense alterum, ca. 1450/1475, Bibliotheca Nationalis Austriaca ([[Vindobona]]e), MS. 5264 [http://data.onb.ac.at/rep/10019A33 Textus] * ''Tacuinum sanitatis'' Vindobonense tertium, ca. 1490, Bibliotheca Nationalis Austriaca ([[Vindobona]]e), MS. 2396 [http://data.onb.ac.at/rep/10035A1B Textus] [http://misc.onb.ac.at/cgi-bin/simader/literatur.cgi Catalogus] == Editiones == * 1531 : ''Tacuini sanitatis Elluchasem Elimithar; Albengnefit De virtutibus medicinarum et ciborum; Iac. Alkindus De rerum gradibus''. Argentorati: apud Ioannem Schottum {{Google Books|ggFcAAAAcAAJ}} [http://mdz-nbn-resolving.de/urn:nbn:de:bvb:12-bsb10197837-7 Editio 1533] apud Monacenses * 1991 : Carmélia Opsomer, ed., ''L'art de vivre en santé. Images et recettes du Moyen Âge. Le « Tacuinum Sanitatis » (manuscrit 1041) de la bibliothèque de 'université de Liège''. Lutetiae: Perron [https://www.persee.fr/doc/medi_0751-2708_1993_num_12_25_1290_t1_0134_0000_2 recensio huius operis] == Notae == <references/> == Bibliographia == * Cathleen Hoeniger, "The Illuminated ''Tacuinum sanitatis'' Manuscripts from Northern Italy ca. 1380-1400: sources, patrons, and the creation of a new pictorial genre" in Jean Ann Givens, Karen Reeds, Alain Touwaide, edd., ''Visualizing Medieval Medicine and Natural History, 1200-1550'' (2006) {{Google Books|HK799l9nR4UC|p. 51 sqq.}} * Carmélia Opsomer, "[https://web.archive.org/web/20240620184350/https://cdn.uclouvain.be/public/Exports%20reddot/farm/documents/JPB2002_57_3.pdf La Pharmacopée médiévale: images et manuscrits]" in ''Journal de pharmacie de Belgique'' vol. 52 (2002) * Harry S. Paris, Marie-Christine Daunay, Jules Janick, "[https://web.archive.org/web/20191127052241/http://europepmc.org/backend/ptpmcrender.fcgi?accid=PMC2685323&blobtype=pdf The Cucurbitaceae and Solanaceae illustrated in medieval manuscripts known as the Tacuinum Sanitatis]" in ''Annals of Botany'' vol. 103 (2009) pp. 1187–1205 [https://www.academia.edu/21876550/The_Cucurbitaceae_and_Solanaceae_illustrated_in_medieval_manuscripts_known_as_the_Tacuinum_Sanitatis alibi] == Nexus externi == * [http://www.godecookery.com/tacuin/tacuin.htm Introductio et collectio illuminationum apud ‘Gode Cookery’] * [https://web.archive.org/web/20170927140021/http://www.joh.cam.ac.uk/library/special_collections/early_books/pix/taqwim.htm De editione impressa anni 1531 in Bibliotheca Collegii Sancti Iohannis Cantabrigiae] {{commonscat|Tacuinum sanitatis}} [[Categoria:Libri medici]] [[Categoria:Libri botanici]] [[Categoria:Litterae Latinae mediaevales]] [[Categoria:Litterae Arabicae]] [[Categoria:Litterae Latine versae]] [[Categoria:Verba Arabica mutuata]] nvlqfg44qny1nlwt8c7spl6yg6132j2 Augustus Pavie 0 68362 3995570 3993492 2026-10-19T08:32:49Z InternetArchiveBot 139091 Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.6 3995570 wikitext text/x-wiki {{Capsa urbis Vicidatorum}} [[Fasciculus:Auguste Pavie01.jpg|thumb|Imago Augusti Pavie e libro ''Mission Pavie en Indochine'' extracta.]] '''Augustus Pavie''' (''Auguste Pavie'' natus apud [[Dinannum]] die [[31 Maii]] [[1847]]; mortuus in [[Thourie]] praefecturae [[Illa et Vicinonia|Illae et Vicinoniae]] die [[7 Maii]] [[1925]]) fuit [[explorator]] [[Laotia]]e et [[flumen|fluminis]] [[Mecongum|Mecongi]], legatus [[Francia|Francicus]], stator [[Indosina Francica|Indosinae Francicae]], et ethnographus. <!-- Il fit ses études à [[Guingamp]] où un [[lycée]] porte son nom. À l'origine explorateur des rives du fleuve [[Mékong]], il fut le premier [[consulat (diplomatie)|vice-consul]] de France à [[Luang Prabang]] (1886), puis en 1892, résident de France à [[Bangkok]]. Il s'illustra en négociant avec le [[Siam]] et en obtenant notamment la reconnaissance du protectorat français sur le haut Laos, en 1893. À la fin du {{XIXe siècle}}, il fixa avec la [[Civilisation chinoise|Chine]] les frontières du [[Laos]]. --> == Opera == * ''[[Mission Pavie]]: Indochine: 1879-1895''. 11 voll. Lutetiae: Ernest Leroux, 1898-1919. ** ''[http://digital.library.cornell.edu/cgi/t/text/text-idx?c=sea;idno=sea129 Journal de marche (1888-1889) Evenements du Siam (1891-1893)] {{Nexus deficit|date=October 2026 |bot=InternetArchiveBot |fix-attempted=yes }}'' ex eadem serie extracta. * ''A la conquête des coeurs: le pays des millions d'éléphants''. Lutetiae: Presses Universitaires de France, 1942. * ''Contes populaires du Cambodge, du Laos et du Siam''. Lutetiae: Ernest Leroux, 1903. == Nexus externi == {{CommuniaCat|Auguste Pavie}} {{Fontes biographici}} {{Lifetime|1847|1925|Pavie, Augustus}} [[Categoria:Auctores Francogallici]] [[Categoria:Eruditi Franciae]] [[Categoria:Ethnographi]] [[Categoria:Exploratores Francici]] [[Categoria:Legati Franciae]] [[Categoria:Scriptores itinerum]] [[Categoria:Magistratus Indosinae Francici]] [[Categoria:Exploratores Asiae]] 59jrkhn7yfunj0jns82od0epff0qaea Apocynum 0 80833 3995561 3560635 2026-10-19T06:41:41Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995561 wikitext text/x-wiki {{Titulus italicus}} {{taxobox |name = ''Apocynum'' |image = Apocynum androsaemifolium USDA.jpg |image_caption = ''Apocynum cannabinum'' |regnum = [[Plantae]] |unranked_divisio = [[Angiospermae]] |unranked_classis = [[Eudicotyledones]] |unranked_ordo = [[Asteridae]] |ordo = [[Gentianales]] |familia = [[Apocynaceae]] |genus = '''''Apocynum''''' |genus_authority = [[Carolus Linnaeus|L.]] |subdivision_ranks = Species |subdivision = Vide commentarium. |}} '''''Apocynum''''' est [[genus (taxinomia)|genus]] [[Angiospermae|plantarum florentium]] circa septem [[species]] habens in [[familia (taxinomia)|familia]] [[Apocynaceae|Apocynacearum]], quod in plurimo [[zona temperata|temperatae]] [[Hemisphaera Septentrionalis|Hemisphaerae Septentrionalis]] habitat, [[Europa]] occidentali excepto. Species ''Apocyni'' pro [[cibus|cibo]] adhibentur a [[larva|larvis]] nonnullarum specierum [[Lepidoptera|Lepidopterorum]], praecipue ''[[Amphipyra tragopoginis]].'' == Species == * ''[[Apocynum androsaemifolium]]'' * ''[[Apocynum cannabinum]]'' ([[America Septentrionalis]]) * ''[[Apocynum hendersonii]]'' ([[Asia]] Septentrionalis) * ''[[Apocynum medium]]'' * ''[[Apocynum pictum]]'' ([[Asia Orientalis]]) * ''[[Apocynum sibiricum]]'' ([[Asia]] Septentrionalis) * ''[[Apocynum venetum]]'' ([[Europa]] Orientalis, Asia) == Utilitates == [[Planta]]e generis ''Apocyni'' [[cymarinum]] continent, venenum cardiogenicum, quod in [[homo|hominibus]] [[arrhythmia]]m [[cor]]dis efficit, cum in [[medicina]] hodierna sit apparatus pharmaceuticalis,{{dubsig}} qui ad [[tumor]]es curandos praescribitur. Tenax fibrosusque omnium ''Apocyni'' specierum [[cortex]] interior Indis [[California|Californiensibus]] fuit materies ad [[vestis|vestes]], restes, [[rete (restis)|retia]] piscatoria, chartasque pretiosas faciendas. In [[Sinae (regio)|Sinis]], infusio ''[[Apocynum venetum|Apocyni veneti]]'' ([[Sinice]]: 羅布麻) est [[thea herbalis]]. == Bibliographia == * [https://web.archive.org/web/20150402190257/http://ucjeps.berkeley.edu/cgi-bin/get_JM_treatment.pl?Apocynum Curatio ex Manuale Jepson.] * [http://herbarium.uvsc.edu/Virtual/search.asp?s=genus&p=1&n=1171&t=Apocynum Apocynum: UVSC Herbarium. ] * Tilford, Gregory L. ''Edible and Medicinal plants of the West.'' ISBN 0-87842-359-1. == Nexus externus == * [http://wildwoodsurvival.com/survival/cordage/dogbane/index.html Nonnullae ''Apocynorum'' Photographiae] [[Categoria:Apocynaceae]] [[Categoria:Plantae medicinales]] [[Categoria:Plantae venenosae]] [[Categoria:Taxa Linnaei]] [[Categoria:Taxa 1753]] [[Categoria:Genera plantarum]] l09bjxd4ym1pipy6rgxvo85rkj6jkgz Lingua Coreana 0 83147 3995496 3949694 2026-10-18T14:59:09Z CommonsDelinker 1422 [[c:COM:CDC|automaton]]: Substituens [[File:朝鮮語辭典_1920.jpg]] pro File:The_oldest_Korean_dictionary.jpg. CommonsDelinker hanc rationem dedit: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR3|Criterion 3]] (obvious error) · This is not the oldest Korean dictiona 3995496 wikitext text/x-wiki [[Fasciculus:Seoul-Korean-Hangul-Insadong-Papers.jpg|thumb|[[Manuscriptum|Manuscripta]] Coreana, in [[systema scribendi|systematibus]] [[Hangul]] et [[Hania]] scripta.]] '''Lingua Coreana''' (Coreane {{ruby|韓國語|한국어}} ''Hangug'eo'' et {{ruby|朝鮮|조선}}말 ''Chosŏnmal'') est [[lingua]] in usu quotidiano inter homines in [[Corea]], in parte orientali [[Sinae (regio)|Sinarum]], in [[Iaponia]], et in [[Media Asia]] [[habitatio|habitantes]]. In qua cum [[scriptura]] systema [[Abecedarium Coreanum|Hangeul]] appellatur et sericorum [[littera]]s comprehendit quas ''hanja'' appellatur. Origo incerta est, sed [[Linguae Altaicae|familiam Altaicam]] subsummatam esse a peritis aestimatur cum [[lingua Iaponica]]e. [[Verbum (grammatica generalis)|Verborum]] ordo plerumque est Subiectus-Obiectus-Verbum (SOV), sed sicut [[Lingua Latina]] aliquantum liber est. ==Historia== [[Fasciculus:朝鮮語辭典 1920.jpg|thumb|upright=1.2|left|Antiquissimum Coreani sermonis [[dictionarium]] (1920)]] Lingua Coreana hodierna suum ducit initium a lingua Coreana media, quae autem ex lingua Coreana antiqua ducta est. Lingua Protocoreana fertur alicubi in terra [[Manchuria]]e se evoluisse. Coreanorum maiores, prout putat Whitman (1985), iam in septentrionali Coreae parte adfuerunt, dominatum super regionem paeninsulae Coreanae circa annum [[300 a.C.n.]] extenderunt; huc accedit, quod cum agricultoribus una vivebant [[cultura Iaponica|culturae Iaponicae]] Mumunensis eosdem pariter assimilantes. Inter se ambo populi affecerant, deinde effectus quidam fundatorius internam utriusque linguarum familiae varietatem imminuebat. Regna [[Asia Orientalis|Asiae Orientalis]] saeculis praetereuntibus artissime coniungebantur. Urgente [[cibus|cibi]], [[technologia]]e, [[cultura]]lisque incrementi necessitate, Sinae, Corea necnon Iaponia negotia exsequebantur [[merx|mercatoria]] ac [[academia|academica]]. Plurimis abhinc saeculis Sinarum influxum pro maximo momento habuerunt; quandoquidem Sinae culturam excultiorem, prout duxerunt, condiderant, linguae alterorum, quos commemoravimus, graviter a prioris lingua, nempe Sinensi, affectae sunt, quae essentiam excultioris cultus ac humanitatis absorberent. Simul cultura Coreana comparate excultior apparuit cultura Iaponum. In dubium revocari nequit hic nexus, qui inter linguam Coreanam et Sinensem permanebat. Adhucusque adsunt vocabula Sino-Coreana, ut dicuntur, quae in Sinensium lingua radicescunt. Paginae interretiales haec in verba praebent introductionem influxus Sinensis; caeteroquin vulgo percipitur pronuntiatus verborum ex Sinis mutuatorum discrepuisse a hodierna Mandarinae linguae pronuntiatione. Quum lingua Mandarina in numerum earum linguarum referatur, quae recentissime creata est, neque eandem fuisse linguam ac linguam quam Sinenses saeculis ante adhibuerunt dici potest, mutuata haec verba enim necessario in Coreanorum lingua pronuntiatu differunt a hodierna ipsorum Sinensium lingua. Priusquam [[Sejong|Seiong Magnus]], quartus [[regnum Chosonense|domus Chosonensis]] [[rex]], creavisset scriptum Coreanum, hangeul nominatum, quondam ipsi primores classica Sinensium lingua in posterum scribebant, ii autem qui plebi adnumerabantur, litterarum inscientia laboraverunt. [[Diglossia]] facta est, in qua Sinensis necnon Coreana lingua inter sese discordarunt. In difficultatem magnam incurrebant qui Sinensium characteres in [[sonus|sonos]] Coreanae linguae adaptare temptaverint, cum ambo systemata phonetica graviter inter se differrent. [[Doctrina Buddhistica]] Sinensium lingua conscripta Coreani Iaponiae induxerunt. Academici Coreani participes erant doctrinam Buddhismi populo Iaponico instituendi. Characteres Sinenses aetate Trium Regnorum in Coream una cum Buddhismi doctrina [[saeculum 1 a.C.n.|saeculo primo a.C.n.]] pervenerunt. Linguae ipsorum proprietati accomodabant eos, qui nomine Hanja innotescebant, primaria scriptura mansit Coreane scribendi mille saecula cum aliis scriptis phoneticis, quae serius inventae sunt velut Idu, Gugyeol sive Hyangchal. Praesertim inter eruditiores societatis Coreanae primores vigebat qui Sinensium characteribus legerent scriberentque. Praeterea plurimi regnicolae erant [[scriptura|litterarum]] ignari. Ineunte [[saeculum 15|saeculo quinto decimo]], [[Sejong|Seiong]] ipse abecedarium excolebat, rationem quandam scribendi quae Hangul appellabatur. Sinensium scriptum ad Coreane scribendum minime idoneum putabat, propter quod illius usus admodum restricta manebat. Huius scripti Coreani, Hangeul nuncupati rationem ipse ad complendos Sinensium characteres necnon omnino subeundos designavit. Ut in documento Hunminjeongeum introduxit, ''eonmun'' (scriptura colloquendi) nuncupabatur atque rapide per regnum pervulgatum est, ut litterarum scientiam diffunderent. Hoc scripto vulgo utebantur classes [[societas humana|societatis]], quod vero a primoribus neglegebatur et despiciebatur. Quae cum ita sint, omnia documenta publica Sinensium characteribus conscribebantur. Quumque plurimi incolarum hoc non intellexissent, reges Coreani e [[saeculum 16|saeculo sexto decimo]] interdum divulgabant notas prorsus Coreano abecedario conscriptas, additis classibus eruditione carentibus, sive [[agricola|agricolis]] sive [[servus|servis]]. Primores, qui classi Yangban adnumerabantur, cum servis suis [[saeculum 17|saeculo septimo decimo]] vertente litteris hangulicis permutaverunt; quo facto praesumi potest ad illud tempus significans litterarum cognitio. His diebus commoditatis causa hania adhibere desierunt, quamvis adhucusque maioris momenti sit in studiis [[historia|historicis]] et [[linguistica|glottologicis]]. Neque Australis neque Borealis Corea discendo Sinensium characteres opponit, etiamsi publice eos amplius non utantur, quorum usus in australi republica ad praecipuas retinuerunt circumstantias, prout ambiguitatum evitandarum gratia, in [[ephemeris|ephemeridibus]] necnon documentis academicis. A tempore belli Coreani, ambobus rebus publicis invicem separatis, differentia inter partem borealem et australem increvit in lingua normativa, additis variationibus pronuntiatu et [[vocabularium|vocabulario]], attamen hae differentiae minores in qualibet inveniuntur [[dialectus|dialectu]], quae etiamnunc mutuo comprehensibiles sunt. ==Nomina== Nomina Coreana, quae scilicet ad linguae appellationem spectant, eo innituntur, quo pacto ipsam terram, Coream appellaverint in ambobus civitatibus. Nomen Latinum ’Corea’ derivatur ex vocabulo Goryeo, quod primus fertur domus palam fuisse in nationibus occidentalibus. Populus Coreanus sibi nomen indiderat Koryo-saram vel Koryo-in (homines Coreani) in prioribus Unionis Sovieticae civitatibus linguamque Koryomal appellant. In Corea Australi, lingua Coreana multis nominibus appellabatur velut hanguk-eo (lingua Coreana), hanguk-mal (’sermo Coreanus’) et uri-mal (lingua nostra). Quod ad primam vocabuli partem, hanguk-eo necnon hanguk-mal pertinet, ex nomine Imperii Coreani sumpta est (대한제국; 大韓帝國; Daehan Jeguk). Ex vocabulo Samhan pars vocabuli ’Han’ in Hanguk et Daehan Jeguk derivatur, quae Tribus Coreae Regnis relata est, cum ’-mal’ et ’-eo’ sermonem linguamque separatim significant. Suam linguam Coreani simpliciter guk-eo vocitant, ’linguam nationis’ ostendentem. Hoc nomen iisdem innititur characteribus Sinensibus, ’nationem’ ’linguamque’ significantes, quae et in Taiwania et in Iaponia adhibentur quorum nationales expriment linguas. In Corea Boreali Sinisque, lingua frequentissime Joseon-mal, officialiusve, Joseon-o vocitatum est. Quae ex appellatione Coreae (Joseon) desumebatur, quam ex domu regia Joseon retinuerant antequam Imperium Coreanum proclamatum esset, quod autem mox ab Imperio Iaponico annexum est. ==Classificatio== Coreanorum linguam plerique glottologi arbitrantur linguam a vicinis suis disiunctam esse, etiamsi familiae Altaicae, hypotheseos nuper plerumque recusatae, ab illam proponentibus includatur. Linguae Khitanicae insunt vocabula Coreanorum sermoni haud dissimilia, quae in aliis linguis Mongolicis et Tungusicis minime reperiuntur, unde influxus linguae Corenae in linguam Khitanicam sequeretur.<ref>{{Cite journal |last=Vovin |first=Alexander |date=June 2017 |title=Koreanic loanwords in Khitan and their importance in the decipherment of the latter|journal=Acta Orientalia Academiae Scientiarum Hungaricae |volume=70 |issue=2 |pages=207–215 |doi=10.1556/062.2017.70.2.4 |url=http://real.mtak.hu/56022/1/062.2017.70.2.4.pdf }}</ref> Opinioni, quae ipsam linguam Iaponico sermoni censeat esse affinem, nonnulli diu favebant propter vocabulorum necnon grammaticarum peculiaritatum imbricationem, quam elaboravere isti, qui linguas huius regionis indagabant velut Samuel E. Martin vel Roy Andrew Miller. Sergius Starostin 25% repperit possibilium cognatorum in Indice Shwadeshico 100 vocabula continenti. In re versabantur glottologi nonnulli, Vovin incluso, argumentantes utriusque sermonis similitudines minime posse referri ad geneticam affinitatem, sed ad mutuationem maioris momenti, ad effectum talium linguarum coniunctionis, quam Theodisce Sprachbund vocitant. Aliud theorema minus notum, quod inter Dravidianas Indiae linguas et ipsam Coreanam linguam nexum quendam sumit. Proprietates utrique sermoni communes in verborum ordine SOV se indicant; in ambobus linguis, nomina et adjectiva eandem syntaxin sequuntur, particulae nominibus postponuntur, voculae semper antecedunt modificationi subeuntia. Quamquam similitudines huius generis et casu constare potuerunt. == Australis et borealis lingua Coreana == Huius linguae sunt duo genera: alia [[Respublica Coreana|Reipublicae Australis Coreanae]], alia [[Respublica Popularis Democratica Coreana|Reipublica Borealis Coreanae]]. Differentia inter eas non magna est. Populi binarum Corearum ambo genera bene intellegunt. ==Vocales et consonantes== {| |- | {| class="wikitable" |- !Monophthongi |{{lang|ko|ㅏ}}&nbsp;&nbsp;&nbsp;{{IPA|/a/|ㅏ|NOTE}}<br/>{{lang|ko|ㅓ}}&nbsp;&nbsp;&nbsp;{{IPA|/ʌ/}}<br/>{{lang|ko|ㅗ}}&nbsp;&nbsp;&nbsp;{{IPA|/o/}}<br/>{{lang|ko|ㅜ}}&nbsp;&nbsp;&nbsp;{{IPA|/u/}}<br/>{{lang|ko|ㅡ}}&nbsp;&nbsp;&nbsp;{{IPA|/ɯ/}}<br/>{{lang|ko|ㅣ}}&nbsp;&nbsp;&nbsp;{{IPA|/i/}}<br/>{{IPA|/e/}} {{lang|ko|ㅔ}}, &nbsp;{{IPA|/ɛ/}} {{lang|ko|ㅐ}},&nbsp;{{IPA|/ø/}} {{lang|ko|ㅚ}}, &nbsp;{{IPA|/y/}} {{lang|ko|ㅟ}} |- !Vocales quas intermediarios praecedunt<br />vel diphthongi |{{lang|ko|ㅑ}}&nbsp;&nbsp;&nbsp;{{IPA|/ja/}}<br/>{{lang|ko|ㅕ}}&nbsp;&nbsp;&nbsp;{{IPA|/jə/}}<br/>{{lang|ko|ㅛ}}&nbsp;&nbsp;&nbsp;{{IPA|/jo/}}<br/>{{lang|ko|ㅠ}}&nbsp;&nbsp;&nbsp;{{IPA|/ju/}}<br/>{{IPA|/je/}} {{lang|ko|ㅖ}}, &nbsp;{{IPA|/jɛ/}} {{lang|ko|ㅒ}}, &nbsp;{{IPA|/wi/}} {{lang|ko|ㅟ}}, &nbsp;{{IPA|/we/}} {{lang|ko|ㅞ}}, &nbsp;{{IPA|/wɛ/}} {{lang|ko|ㅙ}}, &nbsp;{{IPA|/wa/}} {{lang|ko|ㅘ}}, &nbsp;{{IPA|/ɰi/}} {{lang|ko|ㅢ}}, &nbsp;{{IPA|/wə/}} {{lang|ko|ㅝ}} |} | style="vertical-align:bottom;"| [[File:Korean vowels.svg|thumb|Vocales linguae Coreanae fundamentales (<span style="color:red">rubrum:</span> diphthongi regulares)]] |} {| class="wikitable" <!-- Heading row --> ! colspan="2"| ![[Bilabialia]] ![[Alveolaria]] ![[Postalveolaria]] ![[Velaria]] ![[Glottalia]] |- <!-- Stops--> ! rowspan="3"|Plosiva et<br />Affricata ! simplicia | {{lang|ko-Hang|ㅂ}} {{IPA|p}} | {{lang|ko-Hang|ㄷ}} {{IPA|t}} | {{lang|ko-Hang|ㅈ}} {{IPA|ʨ}} | {{lang|ko-Hang|ㄱ}} {{IPA|k}} | |- ! tensa | {{lang|ko-Hang|ㅃ}} {{IPA|p͈}} | {{lang|ko-Hang|ㄸ}} {{IPA|t͈}} | {{lang|ko-Hang|ㅉ}} {{IPA|ʨ͈}} | {{lang|ko-Hang|ㄲ}} {{IPA|k͈}} | |- ! aspirata | {{lang|ko-Hang|ㅍ}} {{IPA|pʰ}} | {{lang|ko-Hang|ㅌ}} {{IPA|tʰ}} | {{lang|ko-Hang|ㅊ}} {{IPA|ʨʰ}} | {{lang|ko-Hang|ㅋ}} {{IPA|kʰ}} | |- ! rowspan="2"|Fricativa ! simplicia | | {{lang|ko-Hang|ㅅ}} {{IPA|s}} | | | {{lang|ko-Hang|ㅎ}} {{IPA|h}} |- ! tensa | | {{lang|ko-Hang|ㅆ}} {{IPA|s͈}} | | | |- ! colspan="2"|Nasalia | {{lang|ko-Hang|ㅁ}} {{IPA|m}} | {{lang|ko-Hang|ㄴ}} {{IPA|n}} | | {{lang|ko-Hang|ㅇ}} {{IPA|ŋ}} | |- ! colspan="2"|Liquida | | {{lang|ko-Hang|ㄹ}} {{IPA|ɾ}} | | | |- ! colspan="2"|Approximantia lateralia | | {{lang|ko-Hang|ㄹ}} {{IPA|l}} | | | |} Ad consonantes exemplis illustrandos: {| class="wikitable" ! Phonema !! Exemplum !! Translatio Latina |- | {{lang|ko-Hang|발}} {{IPA|b}} || {{IPA|[pal]}} || „pes“ |- | {{lang|ko-Hang|빨래}} {{IPA|p͈}} || {{IPA|[p͈alrae]}} || „lavandus“ |- | {{lang|ko-Hang|팔}} {{IPA|pʰ}} || {{IPA|[pʰal]}} || "bracchium" |- | {{lang|ko-Hang|말}} {{IPA|m}} || {{IPA|[mal]}} || „equus“ |- | {{lang|ko-Hang|달}} {{IPA|d}} || {{IPA|[tal]}} || „luna“ / „mensis“ |- | {{lang|ko-Hang|딸}} {{IPA|t͈}} || {{IPA|[t͈al]}} || „filia“ |- | {{lang|ko-Hang|타다}} {{IPA|tʰ}} || {{IPA|[tʰada]}} || ascendere / peregrinari / proficisci |- | {{lang|ko-Hang|날}} {{IPA|n}} || {{IPA|[nal]}} || „dies“ |- | {{lang|ko-Hang|잘}} {{IPA|ʨ}} || {{IPA|[ʨal]}} || „bonus“ |- | {{lang|ko-Hang|짠}} {{IPA|ʨ͈}} || {{IPA|[ʨ͈an]}} || „saltus“ |- | {{lang|ko-Hang|차다}} {{IPA|ʨʰ}} || {{IPA|[ʨʰada]}} || „calcitrare“ |- | {{lang|ko-Hang|가다}} {{IPA|k}} || {{IPA|[kada]}} || „ire“, "vadere" |- | {{lang|ko-Hang|깔다}} {{IPA|k͈}} || {{IPA|[k͈alda]}} || „referre“ |- | {{lang|ko-Hang|칼}} {{IPA|kʰ}} || {{IPA|[kʰal]}} || „culter“ |- | {{lang|ko-Hang|방}} {{IPA|ŋ}} || {{IPA|[paŋ]}} || „camera“ |- | {{lang|ko-Hang|살}} {{IPA|s}} || {{IPA|[sal]}} || „caro“ |- | {{lang|ko-Hang|쌀}} {{IPA|s͈}} || {{IPA|[s͈al]}} || „oryza“ |- | {{lang|ko-Hang|바람}} {{IPA|ɾ}} || {{IPA|[paɾam]}} || „ventus“ |- | {{lang|ko-Hang|발}} {{IPA|l}} || {{IPA|[pal]}} || „pes“ |- | {{lang|ko-Hang|하다}} {{IPA|h}} || {{IPA|[hada]}} || „facere“ |} ==Grammatica== [[Fasciculus:WIKITONGUES- Hanbid speaking Korean.webm|thumb|Homo indo-coraeus{{dubsig}} Coreanus{{dubsig}} loquens, memoriae{{dubsig}} in [[SEAMi]],{{dubsig}} [[Corea Meridiana]].{{dubsig}}]] Lingua Coreana typologice est agglutinativa. Quae lingua, ut usu recepta est, novem orationis partes habere ducitur. Attributa summatim vocabula modificata praecedunt, necnon attributa verbalia subsequenter adduntur. Forma fundamentalis sententiae Coreanae est SOV, nulla pars nonnisi verbum requiritur tamquam sententiae elementum immobile, ordoque verborum tam flexibile est, sicut in aliis plerumque linguis agglutinantibus. {| |'''Quaestio''': | colspan="4" |"Tune in forum iisti?" (pronomen "tu" est in conversatione implicitum) |- | ||&nbsp;&nbsp;&nbsp;&nbsp;||{{lang|ko|가게에}}|| &nbsp;&nbsp; ||{{lang|ko|가셨어요?}} |- | || ||gage-e|| ||''ga-syeo-sseo-yo'' |- | || ||store + [suffixum loci ({{lang|ko|에}})]|| ||[go (radix verbi) ({{lang|ko|가}})] + [<nowiki/>honorificum ({{lang|ko|시}})] + coniugatio ({{lang|ko|어}})] + [praeteritum ({{lang|ko|ㅆ}})] + [conjunctivus ({{lang|ko|어}})] + [suffixum urbanitatis ({{lang|ko|요}})] |} {| |'''Responsum''': | colspan="2" |"Ita vero." |- | ||&nbsp;&nbsp;&nbsp;&nbsp;||{{lang|ko|예.}} (or {{lang|ko|네.}}) |- | || ||''ye.'' (vel ''ne'') |- | || ||''Ita est.'' |} Nexus inter locutorem et scriptorem eorumque subiectum et auditores est proprietas maximi momenti in lingua Coreana. Quae conexio inter locutorem et scriptorem et subiectum referens manifesta est per ''honorifica'', ut dicuntur, quum inter locutorem/scriptorem et auditores in ''loquelae gradu'' (sppech level) reflectitur. ===Honorifica=== Cum de superiori cuiusdam statu sociali agitur, ille, qui cuiquam scribit loquiturve, rite praecipuis utitur nominibus verborumve terminationibus, quibus superioritas subiecti indicetur. Statu aliquis aliquem superat, si idem est consanguineus major natu, peregrinus eiusdem maiorisve aetatis, conductor operarum, magister, emptor, sive huiusmodi. Statu aequales aut inferiores sunt ii, qui peregrini iuniores, studentes, operarii et ceteri huiusmodi sunt. His temporibus, praecipuae exstant terminationes, quae adhibentur in sententiis declarativis, interrogativis sive imperatives; tam honorificis quam usualibus. Honorifica in Corea antiqua rigide hierarchica fuerunt. Systema ordinum statuumque socialium acrius quam nostrorum temporum usu stratificabatur. Interna systematis honorifici structura in societate traditionali florebat. Hodiernae Coreae honorifica nuperrime adhibentur, siquis quodam anima remoto congreditur. ===Genus=== Generatim lingua Coreana ullo genere grammatico caret. Aliquae ex nonnullis exceptionibus pronomen (numeri singularis, personae tertiae) duas habet formas diversas: 그 ''geu'' (masculinum) and 그녀 ''geunyeo'' (femininum). Priusquam inveniebatur 그녀 eo fine ut 'ea' in Coreanum sermonem redderetur, 그 solum ad significandam tertiam personam aderat, genus perinde grammaticum deerat. Ut planius omnino implicationes intricatas generis intra linguam ipsam intelligamus, aspici possunt tria linguae generisque proplasmata quae adhuc usque proponebantur: proplasma lacunae, dominantiae, ac differentiae culturalis. Secundum primum proplasma, loquelam masculinam normativam esse arbitrantur, quampiamque formam hac ab norma discrepantem exiguam. Secundum proplasma dominantiae feminam ducit esse potestatis expertem propter societatem patriarchalem. Proponitur in proplasmate differentiae culturalis id, quod differentia institutionis inter virum et mulierem differentias in eorum formis explicatur. Maioris ponderis est haec proplasmata aspicere ad meliorem harum condicionum cognitionem, quae, quemadmodum sermoni uterentur, conformaverunt. Quae igitur lingua unica habebatur, quia impariter ac linguae Romanicae necnon Germanicae, genus grammaticum abest. Differentiae inter genera observantur per formalitatem, sonoritatis flexionem, optionem verborum et quae sequuntur.<ref>Cho, Young A. ''Gender Differences in Korean Speech.'' ''Korean Language in Culture and Society,'' ed. Ho-min Sohn (Honolulu: University of Hawaii Press, 2006), 189.</ref> Inter duos Coreanos status assymmetri eiusdem societas ad differentias praedicandas inclinat concordiae gratia. Coreani ipsi anteponunt usum terminorum propinquitatis libentius quam ceteros terminos.<ref>Kim, Minju. "Cross Adoption of language between different genders: The case of the Korean kinship terms hyeng and enni." ''Proceedings of the Fifth Berkeley Women and Language Conference. Berkeley: Berkeley Women and Language Group, 1999.''</ref> In societate antiqua, mulieres iniquo loco cogebantur. Structura socialis, ut usu receptum erat, habuit systema familiarem patriarche rectam, ubi majoris ponderis erat retinere lineas familiares. Haec structura mulierum partes a virorum partibus separavit.<ref>Palley, Marian Lief, "Women’s Status in South Korea: Tradition and Change," ''Asian Survey'' 30, no. 12 (December 1990): 1136–53.</ref> {{NexInt}} *[[Abecedarium Coreanum]] *[[Linguae Coreanicae]] *[[Sejong Magnus]] ==NotaE== <references/> Bibliographia== *Whitman, John B. [[1985]]. "The Phonological Basis for the Comparison of Japanese and Korean." Dissertatio Ph.D., Universitas Harvardiana. *Yeon, Jaehoon, et Lucien Brown. [[2011]]. ''Korean: A Comprehensive Grammar.'' Londinii: Routledge. ==Nexus externi== {{CommuniaCat|Korean language|linguam Coreanam}} {{interWiki|code=ko}} [[Categoria:Lingua Coreana|!]] {{Myrias|Anthropologia}} n60an63foprory2h58qfjrb8wsx74h7 3995534 3995496 2026-10-18T23:15:24Z IacobusAmor 1163 ~ (10K) 3995534 wikitext text/x-wiki [[Fasciculus:Seoul-Korean-Hangul-Insadong-Papers.jpg|thumb|[[Manuscriptum|Manuscripta]] Coreana, in [[systema scribendi|systematibus]] [[Hangul]] et [[Hania]] scripta.]] '''Lingua Coreana''' (Coreane {{ruby|韓國語|한국어}} ''Hangug'eo'' et {{ruby|朝鮮|조선}}말 ''Chosŏnmal'') est [[lingua]] in usu quotidiano inter homines in [[Corea]], in orientali [[Sinae (regio)|Sinarum]] parte, in [[Iaponia]], et in [[Media Asia]] [[habitatio|habitantes]]. In qua cum [[scriptura]] systema [[Abecedarium Coreanum|Hangeul]] appellatur et sericorum [[littera]]s comprehendit quas ''hanja'' appellatur. Origo incerta est, sed [[Linguae Altaicae|familiam Altaicam]] subsummatam esse a peritis aestimatur cum [[lingua Iaponica]]e. [[Verbum (grammatica generalis)|Verborum]] ordo plerumque est Subiectus-Obiectus-Verbum (SOV), sed sicut [[Lingua Latina]] aliquantum liber est. ==Historia== [[Fasciculus:朝鮮語辭典 1920.jpg|thumb|upright=1|left|Antiquissimum Coreani sermonis [[dictionarium]] (1920)]] Lingua Coreana hodierna suum ducit initium a lingua Coreana media, quae autem ex lingua Coreana antiqua ducta est. Lingua Protocoreana fertur alicubi in terra [[Manchuria]]e se evoluisse. Coreanorum maiores, prout putat Whitman (1985), iam in septentrionali Coreae parte adfuerunt, dominatum super regionem paeninsulae Coreanae circa annum [[300 a.C.n.]] extenderunt; huc accedit, quod cum agricultoribus una vivebant [[cultura Iaponica|culturae Iaponicae]] Mumunensis eosdem pariter assimilantes. Inter se ambo populi affecerant, deinde effectus quidam fundatorius internam utriusque linguarum familiae varietatem imminuebat. Regna [[Asia Orientalis|Asiae Orientalis]] saeculis praetereuntibus artissime coniungebantur. Urgente [[cibus|cibi]], [[technologia]]e, [[cultura]]lisque incrementi necessitate, Sinae, Corea necnon Iaponia negotia exsequebantur [[merx|mercatoria]] ac [[academia|academica]]. Plurimis abhinc saeculis Sinarum influxum pro maximo momento habuerunt; quandoquidem Sinae culturam excultiorem, prout duxerunt, condiderant, linguae alterorum, quos commemoravimus, graviter a prioris lingua, nempe Sinensi, affectae sunt, quae essentiam excultioris cultus ac humanitatis absorberent. Simul cultura Coreana comparate excultior apparuit cultura Iaponum. In dubium revocari nequit hic nexus, qui inter linguam Coreanam et Sinensem permanebat. Adhucusque adsunt vocabula Sino-Coreana, ut dicuntur, quae in Sinensium lingua radicescunt. Paginae interretiales haec in verba praebent introductionem influxus Sinensis; caeteroquin vulgo percipitur pronuntiatus verborum ex Sinis mutuatorum discrepuisse a hodierna Mandarinae linguae pronuntiatione. Quum lingua Mandarina in numerum earum linguarum referatur, quae recentissime creata est, neque eandem fuisse linguam ac linguam quam Sinenses saeculis ante adhibuerunt dici potest, mutuata haec verba enim necessario in Coreanorum lingua pronuntiatu differunt a hodierna ipsorum Sinensium lingua. Priusquam [[Sejong|Seiong Magnus]], quartus [[regnum Chosonense|domus Chosonensis]] [[rex]], creavisset scriptum Coreanum, hangeul nominatum, quondam ipsi primores classica Sinensium lingua in posterum scribebant, ii autem qui plebi adnumerabantur, litterarum inscientia laboraverunt. [[Diglossia]] facta est, in qua Sinensis necnon Coreana lingua inter sese discordarunt. In difficultatem magnam incurrebant qui Sinensium characteres in [[sonus|sonos]] Coreanae linguae adaptare temptaverint, cum ambo systemata phonetica graviter inter se differrent. [[Doctrina Buddhistica]] Sinensium lingua conscripta Coreani Iaponiae induxerunt. Academici Coreani participes erant doctrinam Buddhismi populo Iaponico instituendi. Characteres Sinenses aetate Trium Regnorum in Coream una cum Buddhismi doctrina [[saeculum 1 a.C.n.|saeculo primo a.C.n.]] pervenerunt. Linguae ipsorum proprietati accomodabant eos, qui nomine Hanja innotescebant, primaria scriptura mansit Coreane scribendi mille saecula cum aliis scriptis phoneticis, quae serius inventae sunt velut Idu, Gugyeol sive Hyangchal. Praesertim inter eruditiores societatis Coreanae primores vigebat qui Sinensium characteribus legerent scriberentque. Praeterea plurimi regnicolae erant [[scriptura|litterarum]] ignari. Ineunte [[saeculum 15|saeculo quinto decimo]], [[Sejong|Seiong]] ipse abecedarium excolebat, rationem quandam scribendi quae Hangul appellabatur. Sinensium scriptum ad Coreane scribendum minime idoneum putabat, propter quod illius usus admodum restricta manebat. Huius scripti Coreani, Hangeul nuncupati rationem ipse ad complendos Sinensium characteres necnon omnino subeundos designavit. Ut in documento Hunminjeongeum introduxit, ''eonmun'' (scriptura colloquendi) nuncupabatur atque rapide per regnum pervulgatum est, ut litterarum scientiam diffunderent. Hoc scripto vulgo utebantur classes [[societas humana|societatis]], quod vero a primoribus neglegebatur et despiciebatur. Quae cum ita sint, omnia documenta publica Sinensium characteribus conscribebantur. Quumque plurimi incolarum hoc non intellexissent, reges Coreani e [[saeculum 16|saeculo sexto decimo]] interdum divulgabant notas prorsus Coreano abecedario conscriptas, additis classibus eruditione carentibus, sive [[agricola|agricolis]] sive [[servus|servis]]. Primores, qui classi Yangban adnumerabantur, cum servis suis [[saeculum 17|saeculo septimo decimo]] vertente litteris hangulicis permutaverunt; quo facto praesumi potest ad illud tempus significans litterarum cognitio. His diebus commoditatis causa hania adhibere desierunt, quamvis adhucusque maioris momenti sit in studiis [[historia|historicis]] et [[linguistica|glottologicis]]. Neque Australis neque Borealis Corea discendo Sinensium characteres opponit, etiamsi publice eos amplius non utantur, quorum usus in australi republica ad praecipuas retinuerunt circumstantias, prout ambiguitatum evitandarum gratia, in [[ephemeris|ephemeridibus]] necnon documentis academicis. A tempore belli Coreani, ambobus rebus publicis invicem separatis, differentia inter partem borealem et australem increvit in lingua normativa, additis variationibus pronuntiatu et [[vocabularium|vocabulario]], attamen hae differentiae minores in qualibet inveniuntur [[dialectus|dialectu]], quae etiamnunc mutuo comprehensibiles sunt. ==Nomina== Nomina Coreana, quae scilicet ad linguae appellationem spectant, eo innituntur, quo pacto ipsam terram, Coream appellaverint in ambobus civitatibus. Nomen Latinum ’Corea’ derivatur ex vocabulo Goryeo, quod primus fertur domus palam fuisse in nationibus occidentalibus. Populus Coreanus sibi nomen indiderat Koryo-saram vel Koryo-in (homines Coreani) in prioribus Unionis Sovieticae civitatibus linguamque Koryomal appellant. In Corea Australi, lingua Coreana multis nominibus appellabatur velut hanguk-eo (lingua Coreana), hanguk-mal (’sermo Coreanus’) et uri-mal (lingua nostra). Quod ad primam vocabuli partem, hanguk-eo necnon hanguk-mal pertinet, ex nomine Imperii Coreani sumpta est (대한제국; 大韓帝國; Daehan Jeguk). Ex vocabulo Samhan pars vocabuli ’Han’ in Hanguk et Daehan Jeguk derivatur, quae Tribus Coreae Regnis relata est, cum ’-mal’ et ’-eo’ sermonem linguamque separatim significant. Suam linguam Coreani simpliciter guk-eo vocitant, ’linguam nationis’ ostendentem. Hoc nomen iisdem innititur characteribus Sinensibus, ’nationem’ ’linguamque’ significantes, quae et in Taiwania et in Iaponia adhibentur quorum nationales expriment linguas. In Corea Boreali Sinisque, lingua frequentissime Joseon-mal, officialiusve, Joseon-o vocitatum est. Quae ex appellatione Coreae (Joseon) desumebatur, quam ex domu regia Joseon retinuerant antequam Imperium Coreanum proclamatum esset, quod autem mox ab Imperio Iaponico annexum est. ==Classificatio== Coreanorum linguam plerique glottologi arbitrantur linguam a vicinis suis disiunctam esse, etiamsi familiae Altaicae, hypotheseos nuper plerumque recusatae, ab illam proponentibus includatur. Linguae Khitanicae insunt vocabula Coreanorum sermoni haud dissimilia, quae in aliis linguis Mongolicis et Tungusicis minime reperiuntur, unde influxus linguae Corenae in linguam Khitanicam sequeretur.<ref>{{Cite journal |last=Vovin |first=Alexander |date=June 2017 |title=Koreanic loanwords in Khitan and their importance in the decipherment of the latter|journal=Acta Orientalia Academiae Scientiarum Hungaricae |volume=70 |issue=2 |pages=207–215 |doi=10.1556/062.2017.70.2.4 |url=http://real.mtak.hu/56022/1/062.2017.70.2.4.pdf }}</ref> Opinioni, quae ipsam linguam Iaponico sermoni censeat esse affinem, nonnulli diu favebant propter vocabulorum necnon grammaticarum peculiaritatum imbricationem, quam elaboravere isti, qui linguas huius regionis indagabant velut Samuel E. Martin vel Roy Andrew Miller. Sergius Starostin 25% repperit possibilium cognatorum in Indice Shwadeshico 100 vocabula continenti. In re versabantur glottologi nonnulli, Vovin incluso, argumentantes utriusque sermonis similitudines minime posse referri ad geneticam affinitatem, sed ad mutuationem maioris momenti, ad effectum talium linguarum coniunctionis, quam Theodisce Sprachbund vocitant. Aliud theorema minus notum, quod inter Dravidianas Indiae linguas et ipsam Coreanam linguam nexum quendam sumit. Proprietates utrique sermoni communes in verborum ordine SOV se indicant; in ambobus linguis, nomina et adjectiva eandem syntaxin sequuntur, particulae nominibus postponuntur, voculae semper antecedunt modificationi subeuntia. Quamquam similitudines huius generis et casu constare potuerunt. == Australis et borealis lingua Coreana == Huius linguae sunt duo genera: alia [[Respublica Coreana|Reipublicae Australis Coreanae]], alia [[Respublica Popularis Democratica Coreana|Reipublica Borealis Coreanae]]. Differentia inter eas non magna est. Populi binarum Corearum ambo genera bene intellegunt. ==Vocales et consonantes== {| |- | {| class="wikitable" |- !Monophthongi |{{lang|ko|ㅏ}}&nbsp;&nbsp;&nbsp;{{IPA|/a/|ㅏ|NOTE}}<br/>{{lang|ko|ㅓ}}&nbsp;&nbsp;&nbsp;{{IPA|/ʌ/}}<br/>{{lang|ko|ㅗ}}&nbsp;&nbsp;&nbsp;{{IPA|/o/}}<br/>{{lang|ko|ㅜ}}&nbsp;&nbsp;&nbsp;{{IPA|/u/}}<br/>{{lang|ko|ㅡ}}&nbsp;&nbsp;&nbsp;{{IPA|/ɯ/}}<br/>{{lang|ko|ㅣ}}&nbsp;&nbsp;&nbsp;{{IPA|/i/}}<br/>{{IPA|/e/}} {{lang|ko|ㅔ}}, &nbsp;{{IPA|/ɛ/}} {{lang|ko|ㅐ}},&nbsp;{{IPA|/ø/}} {{lang|ko|ㅚ}}, &nbsp;{{IPA|/y/}} {{lang|ko|ㅟ}} |- !Vocales quas intermediarios praecedunt<br />vel diphthongi |{{lang|ko|ㅑ}}&nbsp;&nbsp;&nbsp;{{IPA|/ja/}}<br/>{{lang|ko|ㅕ}}&nbsp;&nbsp;&nbsp;{{IPA|/jə/}}<br/>{{lang|ko|ㅛ}}&nbsp;&nbsp;&nbsp;{{IPA|/jo/}}<br/>{{lang|ko|ㅠ}}&nbsp;&nbsp;&nbsp;{{IPA|/ju/}}<br/>{{IPA|/je/}} {{lang|ko|ㅖ}}, &nbsp;{{IPA|/jɛ/}} {{lang|ko|ㅒ}}, &nbsp;{{IPA|/wi/}} {{lang|ko|ㅟ}}, &nbsp;{{IPA|/we/}} {{lang|ko|ㅞ}}, &nbsp;{{IPA|/wɛ/}} {{lang|ko|ㅙ}}, &nbsp;{{IPA|/wa/}} {{lang|ko|ㅘ}}, &nbsp;{{IPA|/ɰi/}} {{lang|ko|ㅢ}}, &nbsp;{{IPA|/wə/}} {{lang|ko|ㅝ}} |} | style="vertical-align:bottom;"| [[File:Korean vowels.svg|thumb|Vocales linguae Coreanae fundamentales (<span style="color:red">rubrum:</span> diphthongi regulares)]] |} {| class="wikitable" <!-- Heading row --> ! colspan="2"| ![[Bilabialia]] ![[Alveolaria]] ![[Postalveolaria]] ![[Velaria]] ![[Glottalia]] |- <!-- Stops--> ! rowspan="3"|Plosiva et<br />Affricata ! simplicia | {{lang|ko-Hang|ㅂ}} {{IPA|p}} | {{lang|ko-Hang|ㄷ}} {{IPA|t}} | {{lang|ko-Hang|ㅈ}} {{IPA|ʨ}} | {{lang|ko-Hang|ㄱ}} {{IPA|k}} | |- ! tensa | {{lang|ko-Hang|ㅃ}} {{IPA|p͈}} | {{lang|ko-Hang|ㄸ}} {{IPA|t͈}} | {{lang|ko-Hang|ㅉ}} {{IPA|ʨ͈}} | {{lang|ko-Hang|ㄲ}} {{IPA|k͈}} | |- ! aspirata | {{lang|ko-Hang|ㅍ}} {{IPA|pʰ}} | {{lang|ko-Hang|ㅌ}} {{IPA|tʰ}} | {{lang|ko-Hang|ㅊ}} {{IPA|ʨʰ}} | {{lang|ko-Hang|ㅋ}} {{IPA|kʰ}} | |- ! rowspan="2"|Fricativa ! simplicia | | {{lang|ko-Hang|ㅅ}} {{IPA|s}} | | | {{lang|ko-Hang|ㅎ}} {{IPA|h}} |- ! tensa | | {{lang|ko-Hang|ㅆ}} {{IPA|s͈}} | | | |- ! colspan="2"|Nasalia | {{lang|ko-Hang|ㅁ}} {{IPA|m}} | {{lang|ko-Hang|ㄴ}} {{IPA|n}} | | {{lang|ko-Hang|ㅇ}} {{IPA|ŋ}} | |- ! colspan="2"|Liquida | | {{lang|ko-Hang|ㄹ}} {{IPA|ɾ}} | | | |- ! colspan="2"|Approximantia lateralia | | {{lang|ko-Hang|ㄹ}} {{IPA|l}} | | | |} Ad consonantes exemplis illustrandos: {| class="wikitable" ! Phonema !! Exemplum !! Translatio Latina |- | {{lang|ko-Hang|발}} {{IPA|b}} || {{IPA|[pal]}} || „pes“ |- | {{lang|ko-Hang|빨래}} {{IPA|p͈}} || {{IPA|[p͈alrae]}} || „lavandus“ |- | {{lang|ko-Hang|팔}} {{IPA|pʰ}} || {{IPA|[pʰal]}} || "bracchium" |- | {{lang|ko-Hang|말}} {{IPA|m}} || {{IPA|[mal]}} || „equus“ |- | {{lang|ko-Hang|달}} {{IPA|d}} || {{IPA|[tal]}} || „luna“ / „mensis“ |- | {{lang|ko-Hang|딸}} {{IPA|t͈}} || {{IPA|[t͈al]}} || „filia“ |- | {{lang|ko-Hang|타다}} {{IPA|tʰ}} || {{IPA|[tʰada]}} || ascendere / peregrinari / proficisci |- | {{lang|ko-Hang|날}} {{IPA|n}} || {{IPA|[nal]}} || „dies“ |- | {{lang|ko-Hang|잘}} {{IPA|ʨ}} || {{IPA|[ʨal]}} || „bonus“ |- | {{lang|ko-Hang|짠}} {{IPA|ʨ͈}} || {{IPA|[ʨ͈an]}} || „saltus“ |- | {{lang|ko-Hang|차다}} {{IPA|ʨʰ}} || {{IPA|[ʨʰada]}} || „calcitrare“ |- | {{lang|ko-Hang|가다}} {{IPA|k}} || {{IPA|[kada]}} || „ire“, "vadere" |- | {{lang|ko-Hang|깔다}} {{IPA|k͈}} || {{IPA|[k͈alda]}} || „referre“ |- | {{lang|ko-Hang|칼}} {{IPA|kʰ}} || {{IPA|[kʰal]}} || „culter“ |- | {{lang|ko-Hang|방}} {{IPA|ŋ}} || {{IPA|[paŋ]}} || „camera“ |- | {{lang|ko-Hang|살}} {{IPA|s}} || {{IPA|[sal]}} || „caro“ |- | {{lang|ko-Hang|쌀}} {{IPA|s͈}} || {{IPA|[s͈al]}} || „oryza“ |- | {{lang|ko-Hang|바람}} {{IPA|ɾ}} || {{IPA|[paɾam]}} || „ventus“ |- | {{lang|ko-Hang|발}} {{IPA|l}} || {{IPA|[pal]}} || „pes“ |- | {{lang|ko-Hang|하다}} {{IPA|h}} || {{IPA|[hada]}} || „facere“ |} ==Grammatica== [[Fasciculus:WIKITONGUES- Hanbid speaking Korean.webm|thumb|Homo indo-coraeus{{dubsig}} Coreanus{{dubsig}} loquens, memoriae{{dubsig}} in [[SEAMi]],{{dubsig}} [[Corea Meridiana]].{{dubsig}}]] Lingua Coreana typologice est agglutinativa. Quae lingua, ut usu recepta est, novem orationis partes habere ducitur. Attributa summatim vocabula modificata praecedunt, necnon attributa verbalia subsequenter adduntur. Forma fundamentalis sententiae Coreanae est SOV, nulla pars nonnisi verbum requiritur tamquam sententiae elementum immobile, ordoque verborum tam flexibile est, sicut in aliis plerumque linguis agglutinantibus. {| |'''Quaestio''': | colspan="4" |"Tune in forum iisti?" (pronomen "tu" est in conversatione implicitum) |- | ||&nbsp;&nbsp;&nbsp;&nbsp;||{{lang|ko|가게에}}|| &nbsp;&nbsp; ||{{lang|ko|가셨어요?}} |- | || ||gage-e|| ||''ga-syeo-sseo-yo'' |- | || ||store + [suffixum loci ({{lang|ko|에}})]|| ||[go (radix verbi) ({{lang|ko|가}})] + [<nowiki/>honorificum ({{lang|ko|시}})] + coniugatio ({{lang|ko|어}})] + [praeteritum ({{lang|ko|ㅆ}})] + [conjunctivus ({{lang|ko|어}})] + [suffixum urbanitatis ({{lang|ko|요}})] |} {| |'''Responsum''': | colspan="2" |"Ita vero." |- | ||&nbsp;&nbsp;&nbsp;&nbsp;||{{lang|ko|예.}} (or {{lang|ko|네.}}) |- | || ||''ye.'' (vel ''ne'') |- | || ||''Ita est.'' |} Nexus inter locutorem et scriptorem eorumque subiectum et auditores est proprietas maximi momenti in lingua Coreana. Quae conexio inter locutorem et scriptorem et subiectum referens manifesta est per ''honorifica'', ut dicuntur, quum inter locutorem/scriptorem et auditores in ''loquelae gradu'' (sppech level) reflectitur. ===Honorifica=== Cum de superiori cuiusdam statu sociali agitur, ille, qui cuiquam scribit loquiturve, rite praecipuis utitur nominibus verborumve terminationibus, quibus superioritas subiecti indicetur. Statu aliquis aliquem superat, si idem est consanguineus major natu, peregrinus eiusdem maiorisve aetatis, conductor operarum, magister, emptor, sive huiusmodi. Statu aequales aut inferiores sunt ii, qui peregrini iuniores, studentes, operarii et ceteri huiusmodi sunt. His temporibus, praecipuae exstant terminationes, quae adhibentur in sententiis declarativis, interrogativis sive imperatives; tam honorificis quam usualibus. Honorifica in Corea antiqua rigide hierarchica fuerunt. Systema ordinum statuumque socialium acrius quam nostrorum temporum usu stratificabatur. Interna systematis honorifici structura in societate traditionali florebat. Hodiernae Coreae honorifica nuperrime adhibentur, siquis quodam anima remoto congreditur. ===Genus=== Generatim lingua Coreana ullo genere grammatico caret. Aliquae ex nonnullis exceptionibus pronomen (numeri singularis, personae tertiae) duas habet formas diversas: 그 ''geu'' (masculinum) and 그녀 ''geunyeo'' (femininum). Priusquam inveniebatur 그녀 eo fine ut 'ea' in Coreanum sermonem redderetur, 그 solum ad significandam tertiam personam aderat, genus perinde grammaticum deerat. Ut planius omnino implicationes intricatas generis intra linguam ipsam intelligamus, aspici possunt tria linguae generisque proplasmata quae adhuc usque proponebantur: proplasma lacunae, dominantiae, ac differentiae culturalis. Secundum primum proplasma, loquelam masculinam normativam esse arbitrantur, quampiamque formam hac ab norma discrepantem exiguam. Secundum proplasma dominantiae feminam ducit esse potestatis expertem propter societatem patriarchalem. Proponitur in proplasmate differentiae culturalis id, quod differentia institutionis inter virum et mulierem differentias in eorum formis explicatur. Maioris ponderis est haec proplasmata aspicere ad meliorem harum condicionum cognitionem, quae, quemadmodum sermoni uterentur, conformaverunt. Quae igitur lingua unica habebatur, quia impariter ac linguae Romanicae necnon Germanicae, genus grammaticum abest. Differentiae inter genera observantur per formalitatem, sonoritatis flexionem, optionem verborum et quae sequuntur.<ref>Cho, Young A. ''Gender Differences in Korean Speech.'' ''Korean Language in Culture and Society,'' ed. Ho-min Sohn (Honolulu: University of Hawaii Press, 2006), 189.</ref> Inter duos Coreanos status assymmetri eiusdem societas ad differentias praedicandas inclinat concordiae gratia. Coreani ipsi anteponunt usum terminorum propinquitatis libentius quam ceteros terminos.<ref>Kim, Minju. "Cross Adoption of language between different genders: The case of the Korean kinship terms hyeng and enni." ''Proceedings of the Fifth Berkeley Women and Language Conference. Berkeley: Berkeley Women and Language Group, 1999.''</ref> In societate antiqua, mulieres iniquo loco cogebantur. Structura socialis, ut usu receptum erat, habuit systema familiarem patriarche rectam, ubi majoris ponderis erat retinere lineas familiares. Haec structura mulierum partes a virorum partibus separavit.<ref>Palley, Marian Lief, "Women’s Status in South Korea: Tradition and Change," ''Asian Survey'' 30, no. 12 (December 1990): 1136–53.</ref> {{NexInt}} *[[Abecedarium Coreanum]] *[[Linguae Coreanicae]] *[[Sejong Magnus]] ==NotaE== <references/> Bibliographia== *Whitman, John B. [[1985]]. "The Phonological Basis for the Comparison of Japanese and Korean." Dissertatio Ph.D., Universitas Harvardiana. *Yeon, Jaehoon, et Lucien Brown. [[2011]]. ''Korean: A Comprehensive Grammar.'' Londinii: Routledge. ==Nexus externi== {{CommuniaCat|Korean language|linguam Coreanam}} {{interWiki|code=ko}} [[Categoria:Lingua Coreana|!]] {{Myrias|Anthropologia}} h04mtf3i5grzih6l58yfskvkmkcgp6x Marcus Valerius Messalla Corvinus (consul 31 a.C.n.) 0 87098 3995497 3929760 2026-10-18T15:48:56Z Marcus Terentius Bibliophilus 2059 /* De familia */ 3995497 wikitext text/x-wiki [[Fasciculus:Triumph of Marcus Valerius Corvinus.PNG|right|thumb|300px|[[Triumphus Messallae Corvini]] in fronte palatii Krasinski [[Varsovia]]e sculptus]] '''Marcus Valerius Messalla Corvinus''' (natus [[64 a.C.n.]], mortuus anno [[8]], ut [[Ronaldus Syme|Ronaldo Syme]] videbatur, vel [[12]]/[[13]] ut aliis<ref>Roland Jeffreys, "[https://www.jstor.org/stable/638811 The Date of Messalla's Death]", ''The Classical Quarterly'', 1985: 140-148.</ref>) fuit vir tam militarium quam [[civilitas|civilium]] rerum peritus, orator et [[scriptor]] [[Roma antiqua|Romanus]]. Anno [[31 a.C.n.]] [[Octavianus|Octaviano]] collega [[consul]]atum ordinarium gessit, anno [[27 a.C.n.]] [[Triumphus|triumphavit]] de [[Aquitania|Aquitanis]]. Non tantum opera omni genere ipse scripsit, sed etiam patrocinio suo, cum multos alios poetas, tum praecipue [[Tibullus|Albium Tibullum]], [[Ovidius|Ovidium]] et poetriam [[Sulpicia]]m, filiam sororis Valeriae fovit. Quibus poetis nonnumquam "circulus Messalae" nomen inditum est<ref>Ceri Davies, "[https://www.jstor.org/stable/642876 Poetry in the 'Circle' of Messalla]", ''Greece & Rome'', 1973: 25-35</ref>. In [[Tibullus|Corpore Tibulliano]] exstat ''Panegyricus Messalae'', non ab ipso Tibullo, sed ab ignoto poeta compositum anno 31 a.C.n. ad consulatum celebrandum<ref> ''Corpus Tibullianum III 7. Panegyricus Messalae''; a cura di E. De Luca. Rubbettino Editore, 2009. [https://www.persee.fr/doc/rea_0035-2004_2011_num_113_2_6725_t1_0715_0000_3 Recensio critica]. Cf. A. Salvatore; "De ''Laudibus Pisonis'' cum ''Panegyrico Messallae'' atque Calpurni ''Bucolicis'' comparatis", ''Rivista di filologia classica'', 1950: 177-186.</ref>. == De familia == E nobilissima et antiquissima gente Valeria ortus, Valerius Messala erat filius [[Marcus Valerius Messalla Niger|Marci Valerii Messallae Nigri]],[[consul]]is anno [[61 a.C.n.]]. Duo filii ei nati sunt, non eadem uxore : [[Marcus Valerius Messalla Messallinus]]<ref>[[Tacitus]], ''Annales'', III,34.</ref>, consul [[3 a.C.n.]] et [[Marcus Aurelius Cotta Maximus Messallinus]]<ref>[[Velleius Paterculus]] II,112.</ref>. Soror eius nupsit filio iurisconsulti [[Servius Sulpicius Rufus|Servii Sulpicii]], cui filiam genuit [[Sulpicia]]m nomine, quae nonnulla carmina nobis reliquit, in Corpore Tibulliano servata<ref>[[Tibullus|Corpus Tibullianum]] III,14 et 16 (vel IV,8 et 10).</ref>. Semifrater uterinus quoque e matre Palla (vel Polla?) ei fuit cuius mores infames erant : [[Lucius Gellius Publicola (cos. 36 a.C.n.)|Lucius Gellius Publicola]]<ref>[[Dio Cassius]] 47.24.</ref> == De cursu honorum == * 43-[[42 a.C.n.]] Marcus Valerius Messalla a [[Triumviratus|triumviris]] proscriptus<ref>[[Dio Cassius]], ''[[Historia Romana (Dio)|Historia Romana]]'' 47.11 et 49.16. [[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,471.</ref> ad exercitum [[Gaius Cassius Longinus|Cassi]] et [[Marcus Iunius Brutus|Bruti]] imperatorum perfugit<ref>[[Dio Cassius]] 47.24.</ref> : nam familiaris Gai Cassi erat<ref>[[Plutarchus|Plut]]., ''Brutus'' 40.</ref> qui eum legioni fortissimae praefecit. Post vero cladem [[Philippi|Philippensem]] in insulam [[Thasos|Thasum]] cum reliquis copiis effugit quidem sed dux victarum partium fieri ac bellum ducere noluit : itaque in [[Marcus Antonius|Marci Antonii]] fidem sese recepit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,159-161.</ref> ː iam anno [[41 a.C.n.|41]] orationem apud eum habuit pro [[Herodes Magnus|Herode]] a proceribus [[Iudaei|Iudaeorum]] accusato quod regnum usurparet<ref>[[Flavius Iosephus]], ''[[Antiquitates Iudaicae|Ant. Iud]].'' XIV.325.</ref>. Nihilominus in posterioribus scriptis memoriam pristini ducis [[Gaius Cassius Longinus|Gai Cassii]] semper magna reverentia prosecutus est<ref>[[Plutarchus]], ''Brutus'', 40-42.</ref>. * 40-[[32 a.C.n.]] : primo legatus Marci Antonii bello adversus [[Sextus Pompeius|Sextum Pompeium]] interfuit. Mox ab Antonio ad [[Octavianus|Octavianum]] transfugit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>, cum bellum inter duos triumviros inevitabile visum est, atque etiam probrosa scripta in priorem imperatorem edidit<ref>H. Bardon I,289-290.</ref>. Iam anno 36 a.C.n. in bello Siculo adversus [[Sextus Pompeius|Sextum Pompeium]] Octaviani et [[Marcus Vipsanius Agrippa|Marci Agrippae]] legatus erat<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,423-425, 427, 434, 453.</ref> ; quin etiam illum ipsum Caesarem qui paucis ante annis eum [[Proscriptiones (43 a.C.n.)|proscripserat]], tum post [[Tauromenium|Tauromenitanam]] cladem solum sine custodibus fugientem servavit curavitque<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,466-472.</ref>. Ob quae merita triumvir gratiam agens eodem anno eum in [[Augur|augurum]] collegium adlexit<ref>[[Dio Cassius]] 49.16.</ref> Paulo post (ut in panegyrico legimus) expeditiones in [[Illyria]] et [[Pannonia]] duxit (35-34 a.C.n.)<ref>[[Appianus Alexandrinus|Appianus]], ''Illyr''. XVII. [[Dio Cassius]] 49.38. [[Strabo]], ''[[Geographica (Strabo)|Geogr]]''. IV.6.7</ref> * 31-[[30 a.C.n.]] Gratias agens [[Octavianus]] Messallam sibi collegam assumpsit in [[consul]]atu ordinario anni [[31 a.C.n.]] in Marci Antoni locum<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161. [[Cassius Dio]] XLVII,11.</ref>. Valerius Messalla [[Actium|pugnae Actiacae]] interfuit atque exercitum per provincias orientales usque in [[Aegyptus|Aegyptum]] duxit. Etiam [[Syria (provincia Romana)|provinciae Syriae]] 30/29 a.C.n. praepositus fuisse videtur<ref>[[Cassius Dio]] LI,7.</ref>. * 28-[[27 a.C.n.]] Messalla bellum gessit adversus Gallos quosdam rebellantes (in qua expeditione poeta [[Tibullus]] ei comes fuit) et anno 27 a.C.n. a.d. VII Kal Oct. (25 Septembris) de [[Aquitania|Aquitanis]] triumphavit<ref>[[Fasti triumphales Romanorum|''Acta triumphorum'']] ubi [[proconsul]] dicitur. [[CIL]] I, p.461.</ref><ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>. Ex manubiis refecit viam quae Roma [[Tusculum]] et [[Alba Longa|Albam]] ducebat<ref>[[Tibullus]] I,7,57sqq. Cf Robert J. Ball, "[https://www.jstor.org/stable/41533370 The Structure of Tibullus 1. 7]", ''Latomus'', 1975: 729-744.</ref>. : ''Gentis Aquitanae celeber Messalla triumphis'' :: ''et magna intonsis gloria avis''<ref>[[Tibullus]] II,1,33-34.</ref> * [[26 a.C.n.]] Augustus praefecturam urbanam creavit<ref>Vel, si mavis, quodam modo redivivam fecit : nam et antea fuerant nonnumquam praefecti urbi, consulibus et praetoribus absentibus.</ref>, ut esset qui urbanas res curaret sese absente (nam in Hispaniam profecturus erat). Valerius Messalla primus [[Praefectus urbi Romae|praefectus urbi]] factus est, sed post sex dies novum [[Magistratus|magistratum]] abdicavit, quia ei videbatur libertatem in republica opprimere. Contra enim civilem morem esse arbitrabatur, si praesentibus consulibus praefectus urbi delectus a solo Augusto summum imperium haberet. Sic amorem suum testari in veterem reipublicae formam volebat, quam Augustus et ipse restituisse simulabat. Quin etiam cum Octavianus Messalae post [[Actiaca Pugna|Actiacam victoriam]] gratias egisset quod tam fortiter constanterque sibi pugnasset, ut qui olim fautor Bruti Cassique fuerat, magna cum libertate respondisse dicitur se semper meliora iustioraque secutum esse, his verbis significans sicut Octaviani causam quam Antonii, ita Bruti Cassique causam iustiorem melioremque fuisse quam triumvirorum<ref>[[Plutarchus]], ''Brutus'' 53.</ref>. * [[11 a.C.n.]] Primus '''curator aquarum publicarum''' usque ad mortem factus est. Hic magistratus tum ab Augusto inventus est<ref>[[Frontinus]], ''De Aquis'' 99.</ref> : antea [[Marcus Vipsanius Agrippa|Marcus Agrippa]] hoc munus sine titulo per multos annos curaverat. * [[2 a.C.n.]] Valerius Messalla, velut princeps senatorum, Augustum in nomine populi Romani et [[Senatus Romanus|senatus]] publice exoravit, ut titulum '''patris patriae''' accipere vellet. Mortuo Messallae monumentum exstructum est tam magnificum, ut, post saeculum, [[Martialis|Martiali]] poetae non semel exemplo fuit aeternitatis frustra divitiis petitae : : "''Marmora Messallae findit caprificus..."''<ref>Epigrammata X,2(9). Ibid. etiam VIII,3(5).</ref> == De homine litterato == Valerius Messalla magnus [[orator]] fuit. Saepe una cum [[Gaius Asinius Pollio (consul 40 a.C.n.)|Asinio Pollione]] memorabatur et duo optimi oratores aetatis Augustanae, vel omnino duo optimi oratores Romani post [[Cicero]]nem a posteris habiti sunt. Ipsi iudicare non possumus, quia omnes orationes perierunt : certe scimus Messallam magistrum fuisse [[Tiberius (imperator)|Tiberii]] imperatoris. [[Tacitus]] in ''Dialogum de oratoribus'' personam induxit de eloquentia Messalae cum Ciceronis comparata his verbis loquentem : "''Cicerone mitior Corvinus et dulcior et in verbis magis elaboratus''". At [[Quintilianus]] "dignitatem" Messalae laudat hoc modo : "''At Messala nitidus et candidus et quodam modo praeferens in dicendo nobilitatem suam, viribus minor'' <ref>''Inst. or.'' X,1,113.</ref>(quam Asinius Pollio)". Senioribus enim annis ob infirmam valetudinem<ref>R. L. Jeffreys, "[https://www.jstor.org/stable/41538867 The "infirmitas" of Messalla Corvinus]", ''Latomus'', T. 46, 1987: 196-198.</ref> causas in iudiciis agere recusavit. [[Grammatica]]e quoque studiosissimus fuit et libros de litteris alphabeti composuit, teste [[Quintilianus|Quintiliano]] : "''Messala ... quosdam totos libellos non verbis modo singulis sed etiam litteris dedit''<ref>''Inst. or''. I,7,35.</ref>. Atque alibi refert nobis sententiam e libro de littera S. Commentarios historicos quoque, quibus militiam cum Gaio Cassio narrabat<ref>Graece ''Ύπονήματα''. Et [[Plutarchus]] et [[Appianus Alexandrinus|Appianus]] eos legerant.</ref> et carmina<ref>Graece ? De carminibus bucolicis et eroticis vide ''Catalepton'', Epigramma IX, 14-38.</ref> composuit. Carminibus vehementer delectabatur ac cohortem poetarum secum ducere solebat, qui patroni sui laudes canebant. Inter quos nobilissimus fuit [[Tibullus]]. Amicus etiam [[Horatius|Horatio]]<ref>''Carmina'' III,21. ''Sermones'' I,10,85.</ref> fuit et ingenium adulescentis [[Ovidius|Ovidii]]<ref>''Ex Ponto'' II,3,70-80.</ref> primus agnovit atque incitamentis stimulavit. Nullum exstat opus Messallae : constat enim libellum ''de Progenie Augusti'', qui sub eius nomine [[Renascentia litterarum|Renascentibus Temporibus]] typis impressum vulgo ferebatur, apocryphum medio aevo compositum esse. == De posteritate plus quam dubia == Genti ''Hunyadorum'', quae regnum [[Hungaria]]e quinto decimo saeculo obtinuit, et in primis regi [[Matthias Corvinus|Matthiae Corvino]], persuasum erat Marcum Valerium Messallam unum e longinquis maioribus suis fuisse. Nam corvum et in armis et in nummis praeferebat. Matthias Corvinus quidem sine herede anno [[1490]] mortuus est, sed adfinitate coniunctae familiae in [[Polonia]] fabulam de Valeriana origine sibi assumpserunt : hoc est cur hodieque videamus ''Triumphum Messallae'' in fronte palatii Krasinski [[Varsovia]]e sculptum. == Notae == <references /> == Fontes == * [[Appianus Alexandrinus|Appianus]], libro quarto ''Bellorum civilium'' IV, 159-161 et 575-576 necnon libro quinto 423-425, 427, 434, 453, 466-472. ** ''Illyrica'' XVII * [[Appendix Vergiliana]], ''Epigramma'' IX ''Ad M. Valerium Messallam Corvinum'' (poema olim [[Vergilius|Vergilio]] attributum). * [[Dio Cassius]] libro XXXXIX ''[[Historia Romana (Dio)|Historiae Romanae]]'' cap. 16 et 38 necnon libro L cap. 10 et libro LIII cap.27. * [[Tibullus|Corpus Tibullianum]], III,7 (vel IV,1 si quattuor libros efficere malis) : "Panegyricus Messalae". *[[Flavius Iosephus]], libro primo [[De bello Iudaico|de Bello Iudaico]] 243, 284 **̽libro quarto decimo ''[[Antiquitates Iudaicae|Antiquitatum Iudaicarum]]'' 325, 384 * [[Frontinus]], ''De Aquis'' capitulis 99-102. * [[Plutarchus]], ''Brutus'' 40-42, 45 et 53. * [[Quintilianus]], de ''Institutione oratoria'' * [[Seneca maior]], libro secundo ''Controversiarum'' IV,8 et alibi passim. * [[Suetonius]], [[De vita Caesarum]], ''Divus Augustus'' cap. 58 et 74, ''Tiberius'' cap.70. * [[Tacitus]], [[Annales (Tacitus)|Annales]] IV,34 et VI,11. ** [[Dialogus de oratoribus]] capitulis 17-18,20. * [[Tibullus]], libro primo ''Elegiarum'', VII (post triumphum). * [[Titus Livius]], ''Periochae'' 122. * [[Velleius Paterculus]], libro secundo ''Historiae Romanae'' capite 71. == Plura legere si cupis == * Henricus Bardon ''La littérature latine inconnue'' 1, ''L'époque républicaine''. 2, ''l'époque impériale'' - Paris : C. Klincksieck, 1952-1956 Duo volumina. * [[Hieronymus Carcopino]], "Notes biographiques sur M. Valerius Messala Corvinus (64 av. J-C. - 8 ap. J.-C.)", in '' Revue de philologie, de littérature et d'histoire anciennes'', 1946(XX) : 96-117. [https://journals.openedition.org/anabases/7154] * Marie-Claire Ferriès, ''[https://books.openedition.org/ausonius/4514 Les partisans d'Antoine : des orphelins de César aux complices de Cléopâtre]''. Burdigalae : Ausonius, 2007 : [https://books.openedition.org/ausonius/4586#anchor-toc-1-138 481-483] * François Hinard, ''Les proscriptions de la Rome républicaine''. Romae: École française de Rome, 1985, ISBN 2-7283-0094-1 (''Collection de l'École française de Rome'', 83) : 540-541 [http://www.persee.fr/web/ouvrages/home/prescript/monographie/efr_0000-0000_1985_ths_83_1 Hic legere potes] *W.R. Johnson, "[https://www.jstor.org/stable/26308540 Messalla's birthday: the politics of pastoral]", ''Arethusa'', 1950: 95-113 *Joanna Kenty, "[https://web.archive.org/web/20240820152015/https://www.academia.edu/31934714/Messalla_Corvinus_Augustan_Orator_Ciceronian_Statesman Messalla Corvinus: Augustan Orator, Ciceronian Statesman]", ''Rhetorica'', 2017: 445-474 *Cyrielle Landrea, "[https://journals.openedition.org/anabases/7147 Jérôme Carcopino et la mémoire perdue de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Anabases'', 2018: 177-184 **"[https://www.persee.fr/doc/dha_2108-1433_2021_sup_24_1_5210 Concilier l’idéal républicain et le Principat augustéen : la carrière singulière de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Dialogues d'histoire ancienne'', 2021: 141-163 *Patrick Tansey, "[https://www.jstor.org/stable/41545800 Messalla Corvinus and the "Bellum Siculum"]", ''Latomus'', 2007: 882-890 * A. Valvo, 'M. Valerio Messalla Corvino negli studi più recenti', ''ANRW'' 1983(30) : 1663-1680. *Otto Zwierlein, "[https://www.jstor.org/stable/4477180 Die Chronische Unpässlichkeit des Messalla Corvinus: Rudolfo Kassel septuagenario]", ''Hermes'', 1997: 85-91 {{Index consulum rei publicae| praedecessores= [[Gnaeus Domitius Ahenobarbus (consul 32 a.C.n.)|Gnaeus Domitius Ahenobarbus]] et [[Gaius Sosius]]| annus= 31 a.C.n.<br />cum<br />[[Octavianus Augustus|Imperatore Caesare divi f. III]]| successores= [[Octavianus Augustus|Imperator Caesar Augustus]] IV et [[Marcus Licinius Crassus (consul 30 a.C.n.)|Marcus Licinius Crassus]]}} == Nexus externi == *[http://didier.belair.online.fr/Biographies/Messalla-Marcus-Valerius-Corvinus.htm Biographia Francogallice composita] {{DEFAULTSORT:Valerius Messalla Corvinus, Marcus}} [[Categoria:Nati 64 a.C.n.]] [[Categoria:Mortui 8]] [[Categoria:Auctores Latini antiqui]] [[Categoria:Augures]] [[Categoria:Oratores]] [[Categoria:Augustus]] [[Categoria:Gens Valeria|Messalla Corvinus, Marcus]] [[Categoria:Participes Belli Civilis (44-30 a.C.n.)]] [[Categoria:Legati Syriae]] [[Categoria:Praefecti urbi Romae antiqui]] [[Categoria:Senatores]] [[Categoria:Tibullus]] 3dy0wzmagesm1c590hiemrsd25knpfl 3995502 3995497 2026-10-18T16:49:51Z Marcus Terentius Bibliophilus 2059 /* Plura legere si cupis */ 3995502 wikitext text/x-wiki [[Fasciculus:Triumph of Marcus Valerius Corvinus.PNG|right|thumb|300px|[[Triumphus Messallae Corvini]] in fronte palatii Krasinski [[Varsovia]]e sculptus]] '''Marcus Valerius Messalla Corvinus''' (natus [[64 a.C.n.]], mortuus anno [[8]], ut [[Ronaldus Syme|Ronaldo Syme]] videbatur, vel [[12]]/[[13]] ut aliis<ref>Roland Jeffreys, "[https://www.jstor.org/stable/638811 The Date of Messalla's Death]", ''The Classical Quarterly'', 1985: 140-148.</ref>) fuit vir tam militarium quam [[civilitas|civilium]] rerum peritus, orator et [[scriptor]] [[Roma antiqua|Romanus]]. Anno [[31 a.C.n.]] [[Octavianus|Octaviano]] collega [[consul]]atum ordinarium gessit, anno [[27 a.C.n.]] [[Triumphus|triumphavit]] de [[Aquitania|Aquitanis]]. Non tantum opera omni genere ipse scripsit, sed etiam patrocinio suo, cum multos alios poetas, tum praecipue [[Tibullus|Albium Tibullum]], [[Ovidius|Ovidium]] et poetriam [[Sulpicia]]m, filiam sororis Valeriae fovit. Quibus poetis nonnumquam "circulus Messalae" nomen inditum est<ref>Ceri Davies, "[https://www.jstor.org/stable/642876 Poetry in the 'Circle' of Messalla]", ''Greece & Rome'', 1973: 25-35</ref>. In [[Tibullus|Corpore Tibulliano]] exstat ''Panegyricus Messalae'', non ab ipso Tibullo, sed ab ignoto poeta compositum anno 31 a.C.n. ad consulatum celebrandum<ref> ''Corpus Tibullianum III 7. Panegyricus Messalae''; a cura di E. De Luca. Rubbettino Editore, 2009. [https://www.persee.fr/doc/rea_0035-2004_2011_num_113_2_6725_t1_0715_0000_3 Recensio critica]. Cf. A. Salvatore; "De ''Laudibus Pisonis'' cum ''Panegyrico Messallae'' atque Calpurni ''Bucolicis'' comparatis", ''Rivista di filologia classica'', 1950: 177-186.</ref>. == De familia == E nobilissima et antiquissima gente Valeria ortus, Valerius Messala erat filius [[Marcus Valerius Messalla Niger|Marci Valerii Messallae Nigri]],[[consul]]is anno [[61 a.C.n.]]. Duo filii ei nati sunt, non eadem uxore : [[Marcus Valerius Messalla Messallinus]]<ref>[[Tacitus]], ''Annales'', III,34.</ref>, consul [[3 a.C.n.]] et [[Marcus Aurelius Cotta Maximus Messallinus]]<ref>[[Velleius Paterculus]] II,112.</ref>. Soror eius nupsit filio iurisconsulti [[Servius Sulpicius Rufus|Servii Sulpicii]], cui filiam genuit [[Sulpicia]]m nomine, quae nonnulla carmina nobis reliquit, in Corpore Tibulliano servata<ref>[[Tibullus|Corpus Tibullianum]] III,14 et 16 (vel IV,8 et 10).</ref>. Semifrater uterinus quoque e matre Palla (vel Polla?) ei fuit cuius mores infames erant : [[Lucius Gellius Publicola (cos. 36 a.C.n.)|Lucius Gellius Publicola]]<ref>[[Dio Cassius]] 47.24.</ref> == De cursu honorum == * 43-[[42 a.C.n.]] Marcus Valerius Messalla a [[Triumviratus|triumviris]] proscriptus<ref>[[Dio Cassius]], ''[[Historia Romana (Dio)|Historia Romana]]'' 47.11 et 49.16. [[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,471.</ref> ad exercitum [[Gaius Cassius Longinus|Cassi]] et [[Marcus Iunius Brutus|Bruti]] imperatorum perfugit<ref>[[Dio Cassius]] 47.24.</ref> : nam familiaris Gai Cassi erat<ref>[[Plutarchus|Plut]]., ''Brutus'' 40.</ref> qui eum legioni fortissimae praefecit. Post vero cladem [[Philippi|Philippensem]] in insulam [[Thasos|Thasum]] cum reliquis copiis effugit quidem sed dux victarum partium fieri ac bellum ducere noluit : itaque in [[Marcus Antonius|Marci Antonii]] fidem sese recepit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,159-161.</ref> ː iam anno [[41 a.C.n.|41]] orationem apud eum habuit pro [[Herodes Magnus|Herode]] a proceribus [[Iudaei|Iudaeorum]] accusato quod regnum usurparet<ref>[[Flavius Iosephus]], ''[[Antiquitates Iudaicae|Ant. Iud]].'' XIV.325.</ref>. Nihilominus in posterioribus scriptis memoriam pristini ducis [[Gaius Cassius Longinus|Gai Cassii]] semper magna reverentia prosecutus est<ref>[[Plutarchus]], ''Brutus'', 40-42.</ref>. * 40-[[32 a.C.n.]] : primo legatus Marci Antonii bello adversus [[Sextus Pompeius|Sextum Pompeium]] interfuit. Mox ab Antonio ad [[Octavianus|Octavianum]] transfugit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>, cum bellum inter duos triumviros inevitabile visum est, atque etiam probrosa scripta in priorem imperatorem edidit<ref>H. Bardon I,289-290.</ref>. Iam anno 36 a.C.n. in bello Siculo adversus [[Sextus Pompeius|Sextum Pompeium]] Octaviani et [[Marcus Vipsanius Agrippa|Marci Agrippae]] legatus erat<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,423-425, 427, 434, 453.</ref> ; quin etiam illum ipsum Caesarem qui paucis ante annis eum [[Proscriptiones (43 a.C.n.)|proscripserat]], tum post [[Tauromenium|Tauromenitanam]] cladem solum sine custodibus fugientem servavit curavitque<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,466-472.</ref>. Ob quae merita triumvir gratiam agens eodem anno eum in [[Augur|augurum]] collegium adlexit<ref>[[Dio Cassius]] 49.16.</ref> Paulo post (ut in panegyrico legimus) expeditiones in [[Illyria]] et [[Pannonia]] duxit (35-34 a.C.n.)<ref>[[Appianus Alexandrinus|Appianus]], ''Illyr''. XVII. [[Dio Cassius]] 49.38. [[Strabo]], ''[[Geographica (Strabo)|Geogr]]''. IV.6.7</ref> * 31-[[30 a.C.n.]] Gratias agens [[Octavianus]] Messallam sibi collegam assumpsit in [[consul]]atu ordinario anni [[31 a.C.n.]] in Marci Antoni locum<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161. [[Cassius Dio]] XLVII,11.</ref>. Valerius Messalla [[Actium|pugnae Actiacae]] interfuit atque exercitum per provincias orientales usque in [[Aegyptus|Aegyptum]] duxit. Etiam [[Syria (provincia Romana)|provinciae Syriae]] 30/29 a.C.n. praepositus fuisse videtur<ref>[[Cassius Dio]] LI,7.</ref>. * 28-[[27 a.C.n.]] Messalla bellum gessit adversus Gallos quosdam rebellantes (in qua expeditione poeta [[Tibullus]] ei comes fuit) et anno 27 a.C.n. a.d. VII Kal Oct. (25 Septembris) de [[Aquitania|Aquitanis]] triumphavit<ref>[[Fasti triumphales Romanorum|''Acta triumphorum'']] ubi [[proconsul]] dicitur. [[CIL]] I, p.461.</ref><ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>. Ex manubiis refecit viam quae Roma [[Tusculum]] et [[Alba Longa|Albam]] ducebat<ref>[[Tibullus]] I,7,57sqq. Cf Robert J. Ball, "[https://www.jstor.org/stable/41533370 The Structure of Tibullus 1. 7]", ''Latomus'', 1975: 729-744.</ref>. : ''Gentis Aquitanae celeber Messalla triumphis'' :: ''et magna intonsis gloria avis''<ref>[[Tibullus]] II,1,33-34.</ref> * [[26 a.C.n.]] Augustus praefecturam urbanam creavit<ref>Vel, si mavis, quodam modo redivivam fecit : nam et antea fuerant nonnumquam praefecti urbi, consulibus et praetoribus absentibus.</ref>, ut esset qui urbanas res curaret sese absente (nam in Hispaniam profecturus erat). Valerius Messalla primus [[Praefectus urbi Romae|praefectus urbi]] factus est, sed post sex dies novum [[Magistratus|magistratum]] abdicavit, quia ei videbatur libertatem in republica opprimere. Contra enim civilem morem esse arbitrabatur, si praesentibus consulibus praefectus urbi delectus a solo Augusto summum imperium haberet. Sic amorem suum testari in veterem reipublicae formam volebat, quam Augustus et ipse restituisse simulabat. Quin etiam cum Octavianus Messalae post [[Actiaca Pugna|Actiacam victoriam]] gratias egisset quod tam fortiter constanterque sibi pugnasset, ut qui olim fautor Bruti Cassique fuerat, magna cum libertate respondisse dicitur se semper meliora iustioraque secutum esse, his verbis significans sicut Octaviani causam quam Antonii, ita Bruti Cassique causam iustiorem melioremque fuisse quam triumvirorum<ref>[[Plutarchus]], ''Brutus'' 53.</ref>. * [[11 a.C.n.]] Primus '''curator aquarum publicarum''' usque ad mortem factus est. Hic magistratus tum ab Augusto inventus est<ref>[[Frontinus]], ''De Aquis'' 99.</ref> : antea [[Marcus Vipsanius Agrippa|Marcus Agrippa]] hoc munus sine titulo per multos annos curaverat. * [[2 a.C.n.]] Valerius Messalla, velut princeps senatorum, Augustum in nomine populi Romani et [[Senatus Romanus|senatus]] publice exoravit, ut titulum '''patris patriae''' accipere vellet. Mortuo Messallae monumentum exstructum est tam magnificum, ut, post saeculum, [[Martialis|Martiali]] poetae non semel exemplo fuit aeternitatis frustra divitiis petitae : : "''Marmora Messallae findit caprificus..."''<ref>Epigrammata X,2(9). Ibid. etiam VIII,3(5).</ref> == De homine litterato == Valerius Messalla magnus [[orator]] fuit. Saepe una cum [[Gaius Asinius Pollio (consul 40 a.C.n.)|Asinio Pollione]] memorabatur et duo optimi oratores aetatis Augustanae, vel omnino duo optimi oratores Romani post [[Cicero]]nem a posteris habiti sunt. Ipsi iudicare non possumus, quia omnes orationes perierunt : certe scimus Messallam magistrum fuisse [[Tiberius (imperator)|Tiberii]] imperatoris. [[Tacitus]] in ''Dialogum de oratoribus'' personam induxit de eloquentia Messalae cum Ciceronis comparata his verbis loquentem : "''Cicerone mitior Corvinus et dulcior et in verbis magis elaboratus''". At [[Quintilianus]] "dignitatem" Messalae laudat hoc modo : "''At Messala nitidus et candidus et quodam modo praeferens in dicendo nobilitatem suam, viribus minor'' <ref>''Inst. or.'' X,1,113.</ref>(quam Asinius Pollio)". Senioribus enim annis ob infirmam valetudinem<ref>R. L. Jeffreys, "[https://www.jstor.org/stable/41538867 The "infirmitas" of Messalla Corvinus]", ''Latomus'', T. 46, 1987: 196-198.</ref> causas in iudiciis agere recusavit. [[Grammatica]]e quoque studiosissimus fuit et libros de litteris alphabeti composuit, teste [[Quintilianus|Quintiliano]] : "''Messala ... quosdam totos libellos non verbis modo singulis sed etiam litteris dedit''<ref>''Inst. or''. I,7,35.</ref>. Atque alibi refert nobis sententiam e libro de littera S. Commentarios historicos quoque, quibus militiam cum Gaio Cassio narrabat<ref>Graece ''Ύπονήματα''. Et [[Plutarchus]] et [[Appianus Alexandrinus|Appianus]] eos legerant.</ref> et carmina<ref>Graece ? De carminibus bucolicis et eroticis vide ''Catalepton'', Epigramma IX, 14-38.</ref> composuit. Carminibus vehementer delectabatur ac cohortem poetarum secum ducere solebat, qui patroni sui laudes canebant. Inter quos nobilissimus fuit [[Tibullus]]. Amicus etiam [[Horatius|Horatio]]<ref>''Carmina'' III,21. ''Sermones'' I,10,85.</ref> fuit et ingenium adulescentis [[Ovidius|Ovidii]]<ref>''Ex Ponto'' II,3,70-80.</ref> primus agnovit atque incitamentis stimulavit. Nullum exstat opus Messallae : constat enim libellum ''de Progenie Augusti'', qui sub eius nomine [[Renascentia litterarum|Renascentibus Temporibus]] typis impressum vulgo ferebatur, apocryphum medio aevo compositum esse. == De posteritate plus quam dubia == Genti ''Hunyadorum'', quae regnum [[Hungaria]]e quinto decimo saeculo obtinuit, et in primis regi [[Matthias Corvinus|Matthiae Corvino]], persuasum erat Marcum Valerium Messallam unum e longinquis maioribus suis fuisse. Nam corvum et in armis et in nummis praeferebat. Matthias Corvinus quidem sine herede anno [[1490]] mortuus est, sed adfinitate coniunctae familiae in [[Polonia]] fabulam de Valeriana origine sibi assumpserunt : hoc est cur hodieque videamus ''Triumphum Messallae'' in fronte palatii Krasinski [[Varsovia]]e sculptum. == Notae == <references /> == Fontes == * [[Appianus Alexandrinus|Appianus]], libro quarto ''Bellorum civilium'' IV, 159-161 et 575-576 necnon libro quinto 423-425, 427, 434, 453, 466-472. ** ''Illyrica'' XVII * [[Appendix Vergiliana]], ''Epigramma'' IX ''Ad M. Valerium Messallam Corvinum'' (poema olim [[Vergilius|Vergilio]] attributum). * [[Dio Cassius]] libro XXXXIX ''[[Historia Romana (Dio)|Historiae Romanae]]'' cap. 16 et 38 necnon libro L cap. 10 et libro LIII cap.27. * [[Tibullus|Corpus Tibullianum]], III,7 (vel IV,1 si quattuor libros efficere malis) : "Panegyricus Messalae". *[[Flavius Iosephus]], libro primo [[De bello Iudaico|de Bello Iudaico]] 243, 284 **̽libro quarto decimo ''[[Antiquitates Iudaicae|Antiquitatum Iudaicarum]]'' 325, 384 * [[Frontinus]], ''De Aquis'' capitulis 99-102. * [[Plutarchus]], ''Brutus'' 40-42, 45 et 53. * [[Quintilianus]], de ''Institutione oratoria'' * [[Seneca maior]], libro secundo ''Controversiarum'' IV,8 et alibi passim. * [[Suetonius]], [[De vita Caesarum]], ''Divus Augustus'' cap. 58 et 74, ''Tiberius'' cap.70. * [[Tacitus]], [[Annales (Tacitus)|Annales]] IV,34 et VI,11. ** [[Dialogus de oratoribus]] capitulis 17-18,20. * [[Tibullus]], libro primo ''Elegiarum'', VII (post triumphum). * [[Titus Livius]], ''Periochae'' 122. * [[Velleius Paterculus]], libro secundo ''Historiae Romanae'' capite 71. == Plura legere si cupis == * Henricus Bardon ''La littérature latine inconnue'' 1, ''L'époque républicaine''. 2, ''l'époque impériale'' - Paris : C. Klincksieck, 1952-1956 Duo volumina. * [[Hieronymus Carcopino]], "Notes biographiques sur M. Valerius Messala Corvinus (64 av. J-C. - 8 ap. J.-C.)", in '' Revue de philologie, de littérature et d'histoire anciennes'', 1946(XX) : 96-117. [https://journals.openedition.org/anabases/7154] * Marie-Claire Ferriès, ''[https://books.openedition.org/ausonius/4514 Les partisans d'Antoine : des orphelins de César aux complices de Cléopâtre]''. Burdigalae : Ausonius, 2007 : [https://books.openedition.org/ausonius/4586#anchor-toc-1-138 481-483] * François Hinard, ''Les proscriptions de la Rome républicaine''. Romae: École française de Rome, 1985, ISBN 2-7283-0094-1 (''Collection de l'École française de Rome'', 83) : 540-541 [http://www.persee.fr/web/ouvrages/home/prescript/monographie/efr_0000-0000_1985_ths_83_1 Hic legere potes] *W.R. Johnson, "[https://www.jstor.org/stable/26308540 Messalla's birthday: the politics of pastoral]", ''Arethusa'', 1950: 95-113 *Joanna Kenty, "[https://www.academia.edu/31934714/Messalla_Corvinus_Augustan_Orator_Ciceronian_Statesman Messalla Corvinus: Augustan Orator, Ciceronian Statesman]", ''Rhetorica'', 2017: 445-474 *Cyrielle Landrea, "[https://journals.openedition.org/anabases/7147 Jérôme Carcopino et la mémoire perdue de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Anabases'', 2018: 177-184 **"[https://www.persee.fr/doc/dha_2108-1433_2021_sup_24_1_5210 Concilier l’idéal républicain et le Principat augustéen : la carrière singulière de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Dialogues d'histoire ancienne'', 2021: 141-163 *Patrick Tansey, "[https://www.jstor.org/stable/41545800 Messalla Corvinus and the "Bellum Siculum"]", ''Latomus'', 2007: 882-890 * A. Valvo, 'M. Valerio Messalla Corvino negli studi più recenti', ''ANRW'' 1983(30) : 1663-1680. *Otto Zwierlein, "[https://www.jstor.org/stable/4477180 Die Chronische Unpässlichkeit des Messalla Corvinus: Rudolfo Kassel septuagenario]", ''Hermes'', 1997: 85-91 {{Index consulum rei publicae| praedecessores= [[Gnaeus Domitius Ahenobarbus (consul 32 a.C.n.)|Gnaeus Domitius Ahenobarbus]] et [[Gaius Sosius]]| annus= 31 a.C.n.<br />cum<br />[[Octavianus Augustus|Imperatore Caesare divi f. III]]| successores= [[Octavianus Augustus|Imperator Caesar Augustus]] IV et [[Marcus Licinius Crassus (consul 30 a.C.n.)|Marcus Licinius Crassus]]}} == Nexus externi == *[http://didier.belair.online.fr/Biographies/Messalla-Marcus-Valerius-Corvinus.htm Biographia Francogallice composita] {{DEFAULTSORT:Valerius Messalla Corvinus, Marcus}} [[Categoria:Nati 64 a.C.n.]] [[Categoria:Mortui 8]] [[Categoria:Auctores Latini antiqui]] [[Categoria:Augures]] [[Categoria:Oratores]] [[Categoria:Augustus]] [[Categoria:Gens Valeria|Messalla Corvinus, Marcus]] [[Categoria:Participes Belli Civilis (44-30 a.C.n.)]] [[Categoria:Legati Syriae]] [[Categoria:Praefecti urbi Romae antiqui]] [[Categoria:Senatores]] [[Categoria:Tibullus]] fb1nlqg9n68aab7agfjdbesp1y6x4ok 3995503 3995502 2026-10-18T16:50:58Z Marcus Terentius Bibliophilus 2059 Abrogans recensionem 3995502 ab usore [[User:Marcus Terentius Bibliophilus|Marcus Terentius Bibliophilus]] ([[User talk:Marcus Terentius Bibliophilus|Disputatio]] | [[Special:Contributions/Marcus Terentius Bibliophilus|conlationes]]) 3995503 wikitext text/x-wiki [[Fasciculus:Triumph of Marcus Valerius Corvinus.PNG|right|thumb|300px|[[Triumphus Messallae Corvini]] in fronte palatii Krasinski [[Varsovia]]e sculptus]] '''Marcus Valerius Messalla Corvinus''' (natus [[64 a.C.n.]], mortuus anno [[8]], ut [[Ronaldus Syme|Ronaldo Syme]] videbatur, vel [[12]]/[[13]] ut aliis<ref>Roland Jeffreys, "[https://www.jstor.org/stable/638811 The Date of Messalla's Death]", ''The Classical Quarterly'', 1985: 140-148.</ref>) fuit vir tam militarium quam [[civilitas|civilium]] rerum peritus, orator et [[scriptor]] [[Roma antiqua|Romanus]]. Anno [[31 a.C.n.]] [[Octavianus|Octaviano]] collega [[consul]]atum ordinarium gessit, anno [[27 a.C.n.]] [[Triumphus|triumphavit]] de [[Aquitania|Aquitanis]]. Non tantum opera omni genere ipse scripsit, sed etiam patrocinio suo, cum multos alios poetas, tum praecipue [[Tibullus|Albium Tibullum]], [[Ovidius|Ovidium]] et poetriam [[Sulpicia]]m, filiam sororis Valeriae fovit. Quibus poetis nonnumquam "circulus Messalae" nomen inditum est<ref>Ceri Davies, "[https://www.jstor.org/stable/642876 Poetry in the 'Circle' of Messalla]", ''Greece & Rome'', 1973: 25-35</ref>. In [[Tibullus|Corpore Tibulliano]] exstat ''Panegyricus Messalae'', non ab ipso Tibullo, sed ab ignoto poeta compositum anno 31 a.C.n. ad consulatum celebrandum<ref> ''Corpus Tibullianum III 7. Panegyricus Messalae''; a cura di E. De Luca. Rubbettino Editore, 2009. [https://www.persee.fr/doc/rea_0035-2004_2011_num_113_2_6725_t1_0715_0000_3 Recensio critica]. Cf. A. Salvatore; "De ''Laudibus Pisonis'' cum ''Panegyrico Messallae'' atque Calpurni ''Bucolicis'' comparatis", ''Rivista di filologia classica'', 1950: 177-186.</ref>. == De familia == E nobilissima et antiquissima gente Valeria ortus, Valerius Messala erat filius [[Marcus Valerius Messalla Niger|Marci Valerii Messallae Nigri]],[[consul]]is anno [[61 a.C.n.]]. Duo filii ei nati sunt, non eadem uxore : [[Marcus Valerius Messalla Messallinus]]<ref>[[Tacitus]], ''Annales'', III,34.</ref>, consul [[3 a.C.n.]] et [[Marcus Aurelius Cotta Maximus Messallinus]]<ref>[[Velleius Paterculus]] II,112.</ref>. Soror eius nupsit filio iurisconsulti [[Servius Sulpicius Rufus|Servii Sulpicii]], cui filiam genuit [[Sulpicia]]m nomine, quae nonnulla carmina nobis reliquit, in Corpore Tibulliano servata<ref>[[Tibullus|Corpus Tibullianum]] III,14 et 16 (vel IV,8 et 10).</ref>. Semifrater uterinus quoque e matre Palla (vel Polla?) ei fuit cuius mores infames erant : [[Lucius Gellius Publicola (cos. 36 a.C.n.)|Lucius Gellius Publicola]]<ref>[[Dio Cassius]] 47.24.</ref> == De cursu honorum == * 43-[[42 a.C.n.]] Marcus Valerius Messalla a [[Triumviratus|triumviris]] proscriptus<ref>[[Dio Cassius]], ''[[Historia Romana (Dio)|Historia Romana]]'' 47.11 et 49.16. [[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,471.</ref> ad exercitum [[Gaius Cassius Longinus|Cassi]] et [[Marcus Iunius Brutus|Bruti]] imperatorum perfugit<ref>[[Dio Cassius]] 47.24.</ref> : nam familiaris Gai Cassi erat<ref>[[Plutarchus|Plut]]., ''Brutus'' 40.</ref> qui eum legioni fortissimae praefecit. Post vero cladem [[Philippi|Philippensem]] in insulam [[Thasos|Thasum]] cum reliquis copiis effugit quidem sed dux victarum partium fieri ac bellum ducere noluit : itaque in [[Marcus Antonius|Marci Antonii]] fidem sese recepit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,159-161.</ref> ː iam anno [[41 a.C.n.|41]] orationem apud eum habuit pro [[Herodes Magnus|Herode]] a proceribus [[Iudaei|Iudaeorum]] accusato quod regnum usurparet<ref>[[Flavius Iosephus]], ''[[Antiquitates Iudaicae|Ant. Iud]].'' XIV.325.</ref>. Nihilominus in posterioribus scriptis memoriam pristini ducis [[Gaius Cassius Longinus|Gai Cassii]] semper magna reverentia prosecutus est<ref>[[Plutarchus]], ''Brutus'', 40-42.</ref>. * 40-[[32 a.C.n.]] : primo legatus Marci Antonii bello adversus [[Sextus Pompeius|Sextum Pompeium]] interfuit. Mox ab Antonio ad [[Octavianus|Octavianum]] transfugit<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>, cum bellum inter duos triumviros inevitabile visum est, atque etiam probrosa scripta in priorem imperatorem edidit<ref>H. Bardon I,289-290.</ref>. Iam anno 36 a.C.n. in bello Siculo adversus [[Sextus Pompeius|Sextum Pompeium]] Octaviani et [[Marcus Vipsanius Agrippa|Marci Agrippae]] legatus erat<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,423-425, 427, 434, 453.</ref> ; quin etiam illum ipsum Caesarem qui paucis ante annis eum [[Proscriptiones (43 a.C.n.)|proscripserat]], tum post [[Tauromenium|Tauromenitanam]] cladem solum sine custodibus fugientem servavit curavitque<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' V,466-472.</ref>. Ob quae merita triumvir gratiam agens eodem anno eum in [[Augur|augurum]] collegium adlexit<ref>[[Dio Cassius]] 49.16.</ref> Paulo post (ut in panegyrico legimus) expeditiones in [[Illyria]] et [[Pannonia]] duxit (35-34 a.C.n.)<ref>[[Appianus Alexandrinus|Appianus]], ''Illyr''. XVII. [[Dio Cassius]] 49.38. [[Strabo]], ''[[Geographica (Strabo)|Geogr]]''. IV.6.7</ref> * 31-[[30 a.C.n.]] Gratias agens [[Octavianus]] Messallam sibi collegam assumpsit in [[consul]]atu ordinario anni [[31 a.C.n.]] in Marci Antoni locum<ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161. [[Cassius Dio]] XLVII,11.</ref>. Valerius Messalla [[Actium|pugnae Actiacae]] interfuit atque exercitum per provincias orientales usque in [[Aegyptus|Aegyptum]] duxit. Etiam [[Syria (provincia Romana)|provinciae Syriae]] 30/29 a.C.n. praepositus fuisse videtur<ref>[[Cassius Dio]] LI,7.</ref>. * 28-[[27 a.C.n.]] Messalla bellum gessit adversus Gallos quosdam rebellantes (in qua expeditione poeta [[Tibullus]] ei comes fuit) et anno 27 a.C.n. a.d. VII Kal Oct. (25 Septembris) de [[Aquitania|Aquitanis]] triumphavit<ref>[[Fasti triumphales Romanorum|''Acta triumphorum'']] ubi [[proconsul]] dicitur. [[CIL]] I, p.461.</ref><ref>[[Appianus Alexandrinus|Appianus]] ''Bell. civ.'' IV,161</ref>. Ex manubiis refecit viam quae Roma [[Tusculum]] et [[Alba Longa|Albam]] ducebat<ref>[[Tibullus]] I,7,57sqq. Cf Robert J. Ball, "[https://www.jstor.org/stable/41533370 The Structure of Tibullus 1. 7]", ''Latomus'', 1975: 729-744.</ref>. : ''Gentis Aquitanae celeber Messalla triumphis'' :: ''et magna intonsis gloria avis''<ref>[[Tibullus]] II,1,33-34.</ref> * [[26 a.C.n.]] Augustus praefecturam urbanam creavit<ref>Vel, si mavis, quodam modo redivivam fecit : nam et antea fuerant nonnumquam praefecti urbi, consulibus et praetoribus absentibus.</ref>, ut esset qui urbanas res curaret sese absente (nam in Hispaniam profecturus erat). Valerius Messalla primus [[Praefectus urbi Romae|praefectus urbi]] factus est, sed post sex dies novum [[Magistratus|magistratum]] abdicavit, quia ei videbatur libertatem in republica opprimere. Contra enim civilem morem esse arbitrabatur, si praesentibus consulibus praefectus urbi delectus a solo Augusto summum imperium haberet. Sic amorem suum testari in veterem reipublicae formam volebat, quam Augustus et ipse restituisse simulabat. Quin etiam cum Octavianus Messalae post [[Actiaca Pugna|Actiacam victoriam]] gratias egisset quod tam fortiter constanterque sibi pugnasset, ut qui olim fautor Bruti Cassique fuerat, magna cum libertate respondisse dicitur se semper meliora iustioraque secutum esse, his verbis significans sicut Octaviani causam quam Antonii, ita Bruti Cassique causam iustiorem melioremque fuisse quam triumvirorum<ref>[[Plutarchus]], ''Brutus'' 53.</ref>. * [[11 a.C.n.]] Primus '''curator aquarum publicarum''' usque ad mortem factus est. Hic magistratus tum ab Augusto inventus est<ref>[[Frontinus]], ''De Aquis'' 99.</ref> : antea [[Marcus Vipsanius Agrippa|Marcus Agrippa]] hoc munus sine titulo per multos annos curaverat. * [[2 a.C.n.]] Valerius Messalla, velut princeps senatorum, Augustum in nomine populi Romani et [[Senatus Romanus|senatus]] publice exoravit, ut titulum '''patris patriae''' accipere vellet. Mortuo Messallae monumentum exstructum est tam magnificum, ut, post saeculum, [[Martialis|Martiali]] poetae non semel exemplo fuit aeternitatis frustra divitiis petitae : : "''Marmora Messallae findit caprificus..."''<ref>Epigrammata X,2(9). Ibid. etiam VIII,3(5).</ref> == De homine litterato == Valerius Messalla magnus [[orator]] fuit. Saepe una cum [[Gaius Asinius Pollio (consul 40 a.C.n.)|Asinio Pollione]] memorabatur et duo optimi oratores aetatis Augustanae, vel omnino duo optimi oratores Romani post [[Cicero]]nem a posteris habiti sunt. Ipsi iudicare non possumus, quia omnes orationes perierunt : certe scimus Messallam magistrum fuisse [[Tiberius (imperator)|Tiberii]] imperatoris. [[Tacitus]] in ''Dialogum de oratoribus'' personam induxit de eloquentia Messalae cum Ciceronis comparata his verbis loquentem : "''Cicerone mitior Corvinus et dulcior et in verbis magis elaboratus''". At [[Quintilianus]] "dignitatem" Messalae laudat hoc modo : "''At Messala nitidus et candidus et quodam modo praeferens in dicendo nobilitatem suam, viribus minor'' <ref>''Inst. or.'' X,1,113.</ref>(quam Asinius Pollio)". Senioribus enim annis ob infirmam valetudinem<ref>R. L. Jeffreys, "[https://www.jstor.org/stable/41538867 The "infirmitas" of Messalla Corvinus]", ''Latomus'', T. 46, 1987: 196-198.</ref> causas in iudiciis agere recusavit. [[Grammatica]]e quoque studiosissimus fuit et libros de litteris alphabeti composuit, teste [[Quintilianus|Quintiliano]] : "''Messala ... quosdam totos libellos non verbis modo singulis sed etiam litteris dedit''<ref>''Inst. or''. I,7,35.</ref>. Atque alibi refert nobis sententiam e libro de littera S. Commentarios historicos quoque, quibus militiam cum Gaio Cassio narrabat<ref>Graece ''Ύπονήματα''. Et [[Plutarchus]] et [[Appianus Alexandrinus|Appianus]] eos legerant.</ref> et carmina<ref>Graece ? De carminibus bucolicis et eroticis vide ''Catalepton'', Epigramma IX, 14-38.</ref> composuit. Carminibus vehementer delectabatur ac cohortem poetarum secum ducere solebat, qui patroni sui laudes canebant. Inter quos nobilissimus fuit [[Tibullus]]. Amicus etiam [[Horatius|Horatio]]<ref>''Carmina'' III,21. ''Sermones'' I,10,85.</ref> fuit et ingenium adulescentis [[Ovidius|Ovidii]]<ref>''Ex Ponto'' II,3,70-80.</ref> primus agnovit atque incitamentis stimulavit. Nullum exstat opus Messallae : constat enim libellum ''de Progenie Augusti'', qui sub eius nomine [[Renascentia litterarum|Renascentibus Temporibus]] typis impressum vulgo ferebatur, apocryphum medio aevo compositum esse. == De posteritate plus quam dubia == Genti ''Hunyadorum'', quae regnum [[Hungaria]]e quinto decimo saeculo obtinuit, et in primis regi [[Matthias Corvinus|Matthiae Corvino]], persuasum erat Marcum Valerium Messallam unum e longinquis maioribus suis fuisse. Nam corvum et in armis et in nummis praeferebat. Matthias Corvinus quidem sine herede anno [[1490]] mortuus est, sed adfinitate coniunctae familiae in [[Polonia]] fabulam de Valeriana origine sibi assumpserunt : hoc est cur hodieque videamus ''Triumphum Messallae'' in fronte palatii Krasinski [[Varsovia]]e sculptum. == Notae == <references /> == Fontes == * [[Appianus Alexandrinus|Appianus]], libro quarto ''Bellorum civilium'' IV, 159-161 et 575-576 necnon libro quinto 423-425, 427, 434, 453, 466-472. ** ''Illyrica'' XVII * [[Appendix Vergiliana]], ''Epigramma'' IX ''Ad M. Valerium Messallam Corvinum'' (poema olim [[Vergilius|Vergilio]] attributum). * [[Dio Cassius]] libro XXXXIX ''[[Historia Romana (Dio)|Historiae Romanae]]'' cap. 16 et 38 necnon libro L cap. 10 et libro LIII cap.27. * [[Tibullus|Corpus Tibullianum]], III,7 (vel IV,1 si quattuor libros efficere malis) : "Panegyricus Messalae". *[[Flavius Iosephus]], libro primo [[De bello Iudaico|de Bello Iudaico]] 243, 284 **̽libro quarto decimo ''[[Antiquitates Iudaicae|Antiquitatum Iudaicarum]]'' 325, 384 * [[Frontinus]], ''De Aquis'' capitulis 99-102. * [[Plutarchus]], ''Brutus'' 40-42, 45 et 53. * [[Quintilianus]], de ''Institutione oratoria'' * [[Seneca maior]], libro secundo ''Controversiarum'' IV,8 et alibi passim. * [[Suetonius]], [[De vita Caesarum]], ''Divus Augustus'' cap. 58 et 74, ''Tiberius'' cap.70. * [[Tacitus]], [[Annales (Tacitus)|Annales]] IV,34 et VI,11. ** [[Dialogus de oratoribus]] capitulis 17-18,20. * [[Tibullus]], libro primo ''Elegiarum'', VII (post triumphum). * [[Titus Livius]], ''Periochae'' 122. * [[Velleius Paterculus]], libro secundo ''Historiae Romanae'' capite 71. == Plura legere si cupis == * Henricus Bardon ''La littérature latine inconnue'' 1, ''L'époque républicaine''. 2, ''l'époque impériale'' - Paris : C. Klincksieck, 1952-1956 Duo volumina. * [[Hieronymus Carcopino]], "Notes biographiques sur M. Valerius Messala Corvinus (64 av. J-C. - 8 ap. J.-C.)", in '' Revue de philologie, de littérature et d'histoire anciennes'', 1946(XX) : 96-117. [https://journals.openedition.org/anabases/7154] * Marie-Claire Ferriès, ''[https://books.openedition.org/ausonius/4514 Les partisans d'Antoine : des orphelins de César aux complices de Cléopâtre]''. Burdigalae : Ausonius, 2007 : [https://books.openedition.org/ausonius/4586#anchor-toc-1-138 481-483] * François Hinard, ''Les proscriptions de la Rome républicaine''. Romae: École française de Rome, 1985, ISBN 2-7283-0094-1 (''Collection de l'École française de Rome'', 83) : 540-541 [http://www.persee.fr/web/ouvrages/home/prescript/monographie/efr_0000-0000_1985_ths_83_1 Hic legere potes] *W.R. Johnson, "[https://www.jstor.org/stable/26308540 Messalla's birthday: the politics of pastoral]", ''Arethusa'', 1950: 95-113 *Joanna Kenty, "[https://web.archive.org/web/20240820152015/https://www.academia.edu/31934714/Messalla_Corvinus_Augustan_Orator_Ciceronian_Statesman Messalla Corvinus: Augustan Orator, Ciceronian Statesman]", ''Rhetorica'', 2017: 445-474 *Cyrielle Landrea, "[https://journals.openedition.org/anabases/7147 Jérôme Carcopino et la mémoire perdue de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Anabases'', 2018: 177-184 **"[https://www.persee.fr/doc/dha_2108-1433_2021_sup_24_1_5210 Concilier l’idéal républicain et le Principat augustéen : la carrière singulière de M. Valerius Messalla Corvinus (cos. 31 av. J.-C.)]", ''Dialogues d'histoire ancienne'', 2021: 141-163 *Patrick Tansey, "[https://www.jstor.org/stable/41545800 Messalla Corvinus and the "Bellum Siculum"]", ''Latomus'', 2007: 882-890 * A. Valvo, 'M. Valerio Messalla Corvino negli studi più recenti', ''ANRW'' 1983(30) : 1663-1680. *Otto Zwierlein, "[https://www.jstor.org/stable/4477180 Die Chronische Unpässlichkeit des Messalla Corvinus: Rudolfo Kassel septuagenario]", ''Hermes'', 1997: 85-91 {{Index consulum rei publicae| praedecessores= [[Gnaeus Domitius Ahenobarbus (consul 32 a.C.n.)|Gnaeus Domitius Ahenobarbus]] et [[Gaius Sosius]]| annus= 31 a.C.n.<br />cum<br />[[Octavianus Augustus|Imperatore Caesare divi f. III]]| successores= [[Octavianus Augustus|Imperator Caesar Augustus]] IV et [[Marcus Licinius Crassus (consul 30 a.C.n.)|Marcus Licinius Crassus]]}} == Nexus externi == *[http://didier.belair.online.fr/Biographies/Messalla-Marcus-Valerius-Corvinus.htm Biographia Francogallice composita] {{DEFAULTSORT:Valerius Messalla Corvinus, Marcus}} [[Categoria:Nati 64 a.C.n.]] [[Categoria:Mortui 8]] [[Categoria:Auctores Latini antiqui]] [[Categoria:Augures]] [[Categoria:Oratores]] [[Categoria:Augustus]] [[Categoria:Gens Valeria|Messalla Corvinus, Marcus]] [[Categoria:Participes Belli Civilis (44-30 a.C.n.)]] [[Categoria:Legati Syriae]] [[Categoria:Praefecti urbi Romae antiqui]] [[Categoria:Senatores]] [[Categoria:Tibullus]] 3dy0wzmagesm1c590hiemrsd25knpfl Villa Franca (Provincia Veronensis) 0 103881 3995539 3895453 2026-10-18T23:54:22Z InternetArchiveBot 139091 Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995539 wikitext text/x-wiki {{pro pagina discretiva vide|Villa Franca (discretiva)}} {{Capsa urbis Vicidata}} [[Fasciculus:CastelloVillafranca2.jpg|thumb|Villa Franca (Provincia Veronensis)]] '''Villa Franca'''<ref>[http://guide.travelitalia.com/it/guide/verona/villafranca-di-verona/ guide.travelitalia.com]</ref><ref>[https://web.archive.org/web/20160304211304/http://www.liceomedi.com/romana/toponomastica.htm www.liceomedi.com]</ref> (alia nomina: ''Burgus Liber''<ref>[https://verona.com/it/verona/villafranca-di-verona/ verona.com]</ref><ref name="lexcit" />, ''Villa Libera''<ref>[https://verona.com/it/verona/villafranca-di-verona/ verona.com]</ref><ref name="lexcit" />; deinde: ''Villa Franca Veronensis''<ref name="lexcit" />) ([[Lingua Italiana|Italiane]]: ''[[:it:Villafranca di Verona|Villafranca di Verona]]'') est [[Urbes Italiae|Urbs]] [[Italia]]e et [[Commune Italiae|municipium]], circiter 33&thinsp;000 incolarum, in [[Regio Italiae|Regione]] [[Venetia (regio)|Venetia]] et in [[Provincia Veronensis|Provincia Veronensi]] situm. Urbani ''Villafranchenses'' appellantur. == Insigne == <gallery> Fasciculus:Corona di città.svg|''[[Urbs Italiae]]'' </gallery> == Clari cives == * [[Marius Zenari]], ([[1946]]), cardinalis == Fractiones, vici et loci in municipio == === Fractiones === * [[Alpum]]<ref name="lexcit" />, ''Alpo'', * [[Dorsum Bonus]]<ref name="lexcit">[https://web.archive.org/web/20160304211304/http://www.liceomedi.com/romana/toponomastica.htm www.liceomedi.com]</ref>, [[Dussum Bonus]]<ref name="lexcit" /> ''Dossobuono'', * Pizzoletta, * Rizza, * [[Rosegaferro]], * [[Quadernorum]]<ref name="lexcit" />, [[Quaternorum]]<ref name="lexcit" /> ''Quaderni'', * Caluri. == Municipia finitima == Castel d'Azzano, Mozzecane, Povegliano Veronese, Sommacampagna, Valeggio sul Mincio, Verona, Vigasio. {{NexInt}} * [[Venetia]] (''regio''), * [[Provincia Veronensis]], * [[Verona]] (''urbs''), * [[Urbes Italiae]]. == Nexus externi == * [https://web.archive.org/web/20010217174626/http://www.comune.villafranca.vr.it/ Situs publicus] {{CommuniaCat|Villafranca di Verona|Villam Francam Veronensem}} == Pinacotheca == <gallery> Imago:Map of comune of Villafranca di Verona (province of Verona, region Veneto, Italy).svg|Collocatio finium municipii in Provincia Veronensi. </gallery> == Notae == <references /> {{urbs-stipula}} [[Categoria:Urbes Italiae in Venetia]] [[Categoria:Municipia in provincia Veronae]] 6ct6q6miybp4u0kpkfbywziofqd4u77 Virgo Candelariae 0 104553 3995540 3928195 2026-10-19T00:35:18Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995540 wikitext text/x-wiki {{L1}} [[Fasciculus:Virgendecandelariacamarin01.jpg|thumb|Imago Virginis Candelariae in [[Basilica Virginis Candelariae]] monstrata]] [[Fasciculus:Tenerife.candelaria.exterior.basilica.jpg|thumb|Basilica Virginis Candelariae ([[Insula Nivaria]])]] '''Virgo Candelariae'''<ref>[http://books.google.fr/books?id=nNg-nHgbzzkC&pg=PA11&lpg=PA11&dq=%2BVirgo+%2BCandelariae&source=bl&ots=xJHY1Q1J8i&sig=lbLryNXwwLQaZe1XoBEybAsw49g&hl=fr&ei=GiKYTrCuGqOQ4gTnnKT3Aw&sa=X&oi=book_result&ct=result&resnum=4&ved=0CD8Q6AEwAw#v=onepage&q=%2BVirgo%20%2BCandelariae&f=false Fons nominis].</ref> ([[Lingua hispanica|Hispanice]] ''Nuestra Señora de la Candelaria'' o ''Virgen de Candelaria'') est patrona [[Canariae Insulae|Canariarum Insularum]].<ref>[https://web.archive.org/web/20070928020709/http://www.conferenciaepiscopal.es/Actividades/retablo/2003/enero_25-31/breves.htm Conferentia Episcopalis Hispaniae].</ref><ref>[https://web.archive.org/web/20150924054356/http://www.obispadodetenerife.es/Obispo/doc/prensa_2005/palabras_obispo.htm Bernardus Álvarez Afonso, Sermo episcopi electi dioecesis Nivariensis].</ref> Statua in [[Basilica Virginis Candelariae|basilica homonyma]] in communi [[Candelaria]] invenitur, 20 km a [[Sancta Crux Nivariae|Sancta Cruce Nivariae]] meridie versus distanti. Haec [[basilica]], ab [[Henricus Marrero Regalado|Henrico Marrero Rigalado]] [[architectura|architecto]] autochthono designata et prope oram [[mare|maris]] aedificata, est locus peregrinationis [[insula]]rum omnium Canariarum. Virgo Candelariae est [[Madonna nigra]], quae ornamentis [[aureum|aureis]] copiose decorata in [[aedicula]] principalis basilicae altaris conlocatur, fidelibus proponitur, qui cottidie post [[missa]]m ad virginem venerandam ad altare advenire possunt. Statua Gothica [[centum]] [[annus|annos]] ante adventum [[Hispani|Hispanorum]] a duobus [[Guanchus]], ut aborigenes appellantur, ad [[litus]] invenisse dicitur, tunc nomine ''Chaxiraxi'' culta. Anno [[1599]], [[Clemens VIII (papa)|Clemens Papa VIII]] eam patronam Insularum Canariarum declaravit.<ref>[https://web.archive.org/web/20110720141013/http://www.eldia.es/2009-08-06/SUR/7-Mendoza-reivindica-Virgen-Patrona-Archipielago.htm Jesús Mendoza rector de la basílica, la Virgen de Candelaria es la Patrona de Canarias].</ref><ref>[http://corazones.org/maria/candelaria.htm ''Patrona del archipiélago Canario''] Sitio web de las ''Siervas de los Corazones Traspasados de Jesús y María''.</ref><ref>[https://web.archive.org/web/20091212173245/http://teror.es/documentos/fiestapino/Pregon2004.pdf Pregón de las fiestas de la Virgen del Pino de 2004] a cargo de Juan Artiles Sánchez, Vicario de la Diócesis Canariense.</ref> Anno [[1867]] [[Pius IX|Pius Papa IX]] eam principalem insularum Canariarum archipelagus patronam declaravit.<ref>[https://web.archive.org/web/20110720141013/http://www.eldia.es/2009-08-06/SUR/7-Mendoza-reivindica-Virgen-Patrona-Archipielago.htm Jesús Mendoza rector de la basílica, la Virgen de Candelaria es la Patrona de Canarias].</ref><ref>[http://corazones.org/maria/candelaria.htm ''Patrona del archipiélago Canario''] Situs "de las Siervas de los Corazones Traspasados de Jesús y María."</ref><ref>[https://web.archive.org/web/20091212173245/http://teror.es/documentos/fiestapino/Pregon2004.pdf Pregón de las fiestas de la Virgen del Pino de 2004 a cargo de Juan Artiles Sánchez, Vicario de la Diócesis Canariense] apud situm teror.es.</ref> Statua fluctibus procellaque ex capella, ubi per 300 annos servata erat, die [[7 Novembris]] [[1826]] abrepta est. Sculptori Hispanico ''Ferdinando Estévez'' a fratribus [[Dominicani|ordinis Praedicatorum]] mandatum est ut exemplar originali simile efficeret. Anno [[1830]] consecrata et in antiquam Ecclesia Virginis Candelariae conlocata est. Nomen ''Candelaria''<ref>Cf. [http://www.uni-mannheim.de/mateo/camenaref/ducange/bd1/jpg/s0820.html Du Cange:] "Candelaria: Festum Purificationis B. Mariae" (p. 820).</ref> est nomen [[Medium Aevum|mediaevale]] ad litteram ''festum candelarum'' (hodie: [[Festum in Praesentatione Domini]]) valens. Etsi dies festus Beatae Mariae Virginis Candelariae una cum tota [[Ecclesia Catholica Romana|Ecclesia Catholica]] die [[2 Februarii]] celebratur, etiam die [[15 Augusti]] (in die [[Assumptio Beatae Mariae Virginis|Assumptionis BMV]]) apparitio eius celebratur. Hoc die multitudo peregrinorum ad patronam floribus venerandam accurrit.<ref>[https://web.archive.org/web/20120710071745/http://cuandopasa.com/index.php?v=g1041011f Eventus in municipio Candelaria].</ref> [[Benedictus XVI|Benedictus Papa XVI]] [[Basilica Virginis Candelariae|Sanctuarium Beatae Mariae Virginis Candelariae]] Basilicam Minorem nominavit.<ref>[https://web.archive.org/web/20150211235226/http://www.eldia.es/2011-02-02/SANTACRUZ/3-Titulo-dignidad-Basilica-iglesia-Patrona-Canarias.htm#4 Título y dignidad de Basílica para la iglesia de la Patrona de Canarias,] apud situm eldia.es.</ref> {{NexInt}} *[[Basilica Virginis Candelariae]] *[[Candelaria]] *[[Dioecesis Sancti Christophori de Laguna]] *[[Insula Nivaria]] == Notae == <div class="references-small"><references/></div> == Nexus externi == * [https://web.archive.org/web/20150416023748/http://www.obispadodetenerife.es/MAIN/main.html De Dioecese Nivariensi] apud situm obispadodetenerife.es ([[Lingua Hispanica|Hispanice]]) * [https://web.archive.org/web/20141222044800/https://basilicadecandelaria.wordpress.com/ Basilica Virginis Candelariae] {{reli-stipula}} [[Categoria:Candelaria]] [[Categoria:Canariae Insulae]] [[Categoria:Maria (mater Iesu) figurata]] [[Categoria:Statuae]] [[Categoria:Dioecesis Sancti Christophori de Laguna]] 4y0zpk3ura1jarb0ah6m0q9bgkhmpvu Arès 0 124365 3995563 3653933 2026-10-19T07:47:17Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995563 wikitext text/x-wiki [[Fasciculus: Arès le port ostréicole.JPG |thumb|250 px|Arès: [[portus]]]] [[Fasciculus: Map commune FR insee code 33011.png|thumb|left|250px|Arès: communis tabula]] ''' Arès''' est [[commune]] [[Francia|Francicum]] 5'674 incolarum (anno [[2012]]) praefecturae [[Girundia (praefectura Franciae)|Girundiae]] in regione occidentali [[Aquitania]] (a die [[1 Ianuarii]] [[2016]] [[Aquitania Lemovicensis Pictaviensis et Carantoni|Aquitania Lemovicensi Pictaviensi et Carantonis]]). {{NexInt}} * [[Index communium praefecturae Girundiae|Index communium praefecturae Girundiae]] == Nexus externi == {{CommuniaCat|Arès, Gironde|Arès}} * [https://web.archive.org/web/20110903165343/http://www.ville-ares.fr/ Huius communis pagina interretialis] * {{INSEE commune|33011|de=Arès}} * [http://cassini.ehess.fr/cassini/fr/html/fiche.php?select_resultat=1166 De hoc communi apud cassini.ehess.fr] {{geo-stipula}} [[Categoria:Communia praefecturae Girumnae]] [[Categoria:Loci habitati praefecturae Girumnae]] d75n3d6b7aa2mzhil43hexcbd1dr8hj Scandix pecten-veneris 0 131556 3995484 3238252 2026-10-18T13:11:05Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995484 wikitext text/x-wiki {{taxobox |image = Scandix pecten-veneris flowers and fruits.jpg |image_caption = [[Fructus]] et [[flos|flores]] |regnum = [[Plantae]] |unranked_divisio = [[Angiospermae]] |unranked_classis = [[Eudicotyledones]] |unranked_ordo = [[Asteridae]] |ordo = [[Apiales]] |familia = [[Apiaceae]] |genus = ''[[Scandix]]'' |species = '''''S. pecten-veneris''''' |binomial = ''Scandix pecten-veneris'' |binomial_authority = [[Carolus Linnaeus|L.]] |}} '''''Scandix pecten-veneris''''' est [[species (taxinomia)|species]] [[angiospermae|plantarum florentium]] [[familia (taxinomia)|familiae]] [[Apiaceae|Apiacearum]], in [[Eurasia]] [[endemismus|endemica]] et alicubi ut [[species introducta]], aliquando ut [[herba inutilis]] nota. [[Planta]] ex [[fructus|fructu]] appellatur, cui est [[corpus (physica)|corpus]] ad 1.5 cm longum et [[rostrum]] quod ad 7 cm longum est, [[seta|setis]] [[pecten|pectinis]] similibus completum. ==Nexus externi== {{CommuniaCat|Scandix pecten-veneris|''Scandicem pecten-veneris''}} {{Fontes de plantis}} *[https://web.archive.org/web/20110607211904/http://ucjeps.berkeley.edu/cgi-bin/get_JM_treatment.pl?329,533,534 ''Jepson Manual Treatment,''] *[http://calphotos.berkeley.edu/cgi/img_query?query_src=photos_index&where-taxon=Scandix+pecten-veneris Photographemeta] {{Biologia-stipula}} [[Categoria:Species plantarum]]{{Titulus italicus}} [[Categoria:Apiaceae]] [[Categoria:Taxa Linnaei]] mkm66gl2y4hdta7opfxv9g5phwqee62 Cafeum nocturnum (van Gogh) 0 136143 3995538 3984801 2026-10-18T23:44:38Z Surajr7 208394 3995538 wikitext text/x-wiki {{titulus italicus}}{{L}} [[Fasciculus:Vincent Willem van Gogh 076.jpg|thumb|"Cafeum nocturnum" ([[Pinacotheca Universitatis Yalensis]]).]] '''''Cafeum nocturnum''''' (titulo [[Francogallice|Francogallico]] ''Le [[coffearia|café]] de nuit'') est [[pictura olearia]] a [[Vincentius van Gogh|Vincentio van Gogh]] anno [[1888]] picta, hodie in [[Pinacotheca Universitatis Yalensis]] servata in urbe [[New Haven]] [[Connecticuta]]e. Tabernam ''[[Cafeum Stationis (Arelate)|Café de la Gare]]'' figurat iuxta ''[[Platea Lamartine (Arelate)|Place Lamartine]]'' stantem in urbe [[Arelate]]. Tabernarii fuerunt [[Iosephus Michel Ginoux]] uxorque [[Maria Ginoux|Maria]], qui ambo saepius a van Gogh necnon [[Paulus Gauguin|Paulo Gauguin]] depicti sunt. Exstat et versio [[hydrochroma|pigmentis aquosis confecta]] [[color]]ibusque simplicioribus quam hodie privatus quidam possidet. Paulus Gauguin idem cafeum eodem anno pinxit, titulo ''[[Cafeum nocturnum Arelatense (Gauguin)|Café de nuit, Arles]]'', adsedente ipsa Maria Ginoux. [[Fasciculus:Van Gogh - Le Café de nuit à Arles (1888) watercolor.jpeg|thumb|"Cafeum nocturnum" (collectio privata)]] == Nexus externi == * [http://www.yale.edu/artgallery Situs pinacothecae] * "[https://web.archive.org/web/20111001012231/http://blogs.princeton.edu/wri152-3/f05/manli/gallery_3_the_night_cafe_gauguins_vs_van_goghs.html The Night Cafe: Gauguin's vs Van Gogh's]" == Bibliographia == * Meyer Schapiro, ''Van Gogh'' (Novi Eboraci: Abrams, 1994) pp. 70-71 * Roland Dorn, ''Décoration: Vincent Van Gogh's Werkreihe für das Gelbe Haus in Arles'' ([[Hildesia]]e: Olms, 1990) pp. 370-375 ISBN 3-487-09098-8 [[Categoria:Arelate]] [[Categoria:Coffeariae]] [[Categoria:Confecta 1888]] [[Categoria:Convivia figurata]] [[Categoria:Picturae Vincentii van Gogh]] [[Categoria:Pinacotheca Universitatis Yalensis]] [[Categoria:Tabulae pictae]] pticygu8k0dqlr6ixa95p6vrj88us1s 3995546 3995538 2026-10-19T02:42:42Z Ziv 172423 ([[c:GR|GR]]) [[File:Vincent Willem van Gogh 076.jpg]] → [[File:Van Gogh - The Night Café (1888).jpg]] Crit 2: More precise 3995546 wikitext text/x-wiki {{titulus italicus}}{{L}} [[Fasciculus:Van Gogh - The Night Café (1888).jpg|thumb|"Cafeum nocturnum" ([[Pinacotheca Universitatis Yalensis]]).]] '''''Cafeum nocturnum''''' (titulo [[Francogallice|Francogallico]] ''Le [[coffearia|café]] de nuit'') est [[pictura olearia]] a [[Vincentius van Gogh|Vincentio van Gogh]] anno [[1888]] picta, hodie in [[Pinacotheca Universitatis Yalensis]] servata in urbe [[New Haven]] [[Connecticuta]]e. Tabernam ''[[Cafeum Stationis (Arelate)|Café de la Gare]]'' figurat iuxta ''[[Platea Lamartine (Arelate)|Place Lamartine]]'' stantem in urbe [[Arelate]]. Tabernarii fuerunt [[Iosephus Michel Ginoux]] uxorque [[Maria Ginoux|Maria]], qui ambo saepius a van Gogh necnon [[Paulus Gauguin|Paulo Gauguin]] depicti sunt. Exstat et versio [[hydrochroma|pigmentis aquosis confecta]] [[color]]ibusque simplicioribus quam hodie privatus quidam possidet. Paulus Gauguin idem cafeum eodem anno pinxit, titulo ''[[Cafeum nocturnum Arelatense (Gauguin)|Café de nuit, Arles]]'', adsedente ipsa Maria Ginoux. [[Fasciculus:Van Gogh - Le Café de nuit à Arles (1888) watercolor.jpeg|thumb|"Cafeum nocturnum" (collectio privata)]] == Nexus externi == * [http://www.yale.edu/artgallery Situs pinacothecae] * "[https://web.archive.org/web/20111001012231/http://blogs.princeton.edu/wri152-3/f05/manli/gallery_3_the_night_cafe_gauguins_vs_van_goghs.html The Night Cafe: Gauguin's vs Van Gogh's]" == Bibliographia == * Meyer Schapiro, ''Van Gogh'' (Novi Eboraci: Abrams, 1994) pp. 70-71 * Roland Dorn, ''Décoration: Vincent Van Gogh's Werkreihe für das Gelbe Haus in Arles'' ([[Hildesia]]e: Olms, 1990) pp. 370-375 ISBN 3-487-09098-8 [[Categoria:Arelate]] [[Categoria:Coffeariae]] [[Categoria:Confecta 1888]] [[Categoria:Convivia figurata]] [[Categoria:Picturae Vincentii van Gogh]] [[Categoria:Pinacotheca Universitatis Yalensis]] [[Categoria:Tabulae pictae]] nyqbob9oqjndg7696a8z9k9y4ehtrrt Abrahamus Stoker 0 164000 3995549 3671511 2026-10-19T03:17:05Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995549 wikitext text/x-wiki {{Capsa hominis Vicidata}} [[Fasciculus:Bram Stoker1.jpg|thumb|Abrahamus Stoker]] '''Abraham Stoker''' ([[Eblana]]e in regione urbana [[Clontarf]] die [[8 Novembris]] [[1847]] natus; mortuus [[Londinium|Londinii]] die [[20 Aprilis]] [[1912]]) fuit [[scriptor]] [[Hibernia|Hibernus]] qui ob mythistoriam titulo ''[[Dracula (Stoker)|Dracula]]'' celebratur. In aetate sua, notus est adiutor privatus histrioni Henry Irving et curator negotiis Theatri Lycei quod Irving possideret. == Opera == * 1897 : ''[[Dracula (Stoker)|Dracula]]'' {{NexInt}} *[[Vladislaus III Dracula]] *[[Vampyrus]] == Nexus externi == * [https://web.archive.org/web/20120828023827/http://www.bramstoker.org/ Situs Abrahamo Stoker dicatus] {{scriptor-stipula}} {{Lifetime|1847|1912|Stoker, Abraham}} [[Categoria:Scriptores mythistoriarum Hiberniae]] [[Categoria:Scriptores Hiberniae]] [[Categoria:Auctores Anglici]] [[Categoria:Vladislaus III Dracula]] 4ahgbrbkigspcgtivgbuisgmjmfjxql Sauchy-Cauchy 0 175088 3995499 3444569 2026-10-18T16:23:50Z JackyM59 202366 Photograph updated 3995499 wikitext text/x-wiki [[Fasciculus:Mairie de Sauchy-Cauchy.jpg|left|thumb|300x300px|Sauchy-Cauchy: [[ecclesia|Curia municipaliscclesia]]]] [[Fasciculus: Map commune FR insee code 62780.png|thumb|300px|Sauchy-Cauchy: communis tabula]] ''' Sauchy-Cauchy''' est commune [[Francia|Francicum]] 398 incolarum (anno [[2009]]) [[Tabula administrativa Franciae|praefecturae]] [[Fretum Calisii|Freti Calisii]] in provincia [[Septentrio et Fretum|Septentrioni et Freto]]. {{NexInt}} * [[Index communium praefecturae Freti Calisii]] == Nexus externi == {{CommuniaCat|Sauchy-Cauchy|Sauchy-Cauchy}} * {{INSEE commune|62780|de=Sauchy-Cauchy}} {{geo-stipula}} [[Categoria:Communia praefecturae Freti Gallici]] [[Categoria:Loci habitati praefecturae Freti Gallici]] 8ywh4wxbc9hchwd54jo0nraiqtrnauo 3995501 3995499 2026-10-18T16:47:45Z Marcus Terentius Bibliophilus 2059 3995501 wikitext text/x-wiki [[Fasciculus:Mairie de Sauchy-Cauchy.jpg|left|thumb|300x300px|Sauchy-Cauchy: [[ecclesia|Curia municipalis]]]] [[Fasciculus: Map commune FR insee code 62780.png|thumb|300px|Sauchy-Cauchy: communis tabula]] ''' Sauchy-Cauchy''' est commune [[Francia|Francicum]] 398 incolarum (anno [[2009]]) [[Tabula administrativa Franciae|praefecturae]] [[Fretum Calisii|Freti Calisii]] in provincia [[Septentrio et Fretum|Septentrioni et Freto]]. {{NexInt}} * [[Index communium praefecturae Freti Calisii]] == Nexus externi == {{CommuniaCat|Sauchy-Cauchy|Sauchy-Cauchy}} * {{INSEE commune|62780|de=Sauchy-Cauchy}} {{geo-stipula}} [[Categoria:Communia praefecturae Freti Gallici]] [[Categoria:Loci habitati praefecturae Freti Gallici]] qy90dxm4qng4umlhjow8qxay0dd1s4w Ecclesia Immaculatae Conceptionis, Sancti Christophori de Laguna 0 175945 3995507 3052315 2026-10-18T17:40:00Z CARLOS TEIXIDOR CADENAS 24762 Nova photographia turris Conceptionis. 3995507 wikitext text/x-wiki [[File:Torre de la Concepción. La Laguna, Tenerife. España, Spain.jpg|thumb|250px|Ecclesia Immaculatae Conceptionis]] '''Ecclesia Immaculatae Conceptionis''' ([[Hispanice]]: ''Iglesia Matriz de la Concepción'') est ecclesia [[paroeciae]] et [[Insula Nivaria]] et civitate [[Sancti Christophori de Laguna]].<ref>[http://www.visitarcanarias.com/iglesia_de_la_concepcion.php Iglesia Matriz de la Concepción de La Laguna]</ref> == Notae == <references/> {{aedi-stipula}} [[Categoria:Ecclesiae Hispaniae]] [[Categoria:Canariae Insulae]] [[Categoria:Dioecesis Sancti Christophori de Laguna]] [[Categoria:Fanum Sancti Christophori de Laguna]] 8y6l88h8n6ndlrznut5q8s5pc7frerd 3995536 3995507 2026-10-18T23:22:57Z IacobusAmor 1163 3995536 wikitext text/x-wiki [[Fasciculus:Torre de la Concepción. La Laguna, Tenerife. España, Spain.jpg|thumb|[[Turris]] Ecclesiae Immaculatae Conceptionis.]] '''Ecclesia Immaculatae Conceptionis''' ([[Hispanice]] ''Iglesia Matriz de la Concepción'') est [[ecclesia]] [[paroeciae]] et [[Insula Nivaria]] et civitate [[Sancti Christophori de Laguna]].<ref>[http://www.visitarcanarias.com/iglesia_de_la_concepcion.php Iglesia Matriz de la Concepción de La Laguna]/</ref> == Notae == <references/> {{aedi-stipula}} [[Categoria:Canariae Insulae]] [[Categoria:Dioecesis Sancti Christophori de Laguna]] [[Categoria:Ecclesiae Hispaniae]] [[Categoria:Fanum Sancti Christophori de Laguna]] [[Categoria:Turres]] c4nsdxjug2lma2vjv2lbj03au333dyg Atherininae 0 179461 3995565 3479481 2026-10-19T08:15:44Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995565 wikitext text/x-wiki {{Taxobox | name = Atherininae | image = Atherina hepsetus Stefano Guerrieri 1.jpg | image_width = 250 px | image_caption = ''[[Atherina hepsetus]]'' | fossil_range = {{Fossil range|41|0|r=[[Eocaenum]] medium > [[Recens]]}} | regnum = [[Animalia]] | phylum = [[Chordata]] | classis = [[Actinopterygii]] | ordo = [[Atheriniformes]] | familia = [[Atherinidae]] | subfamilia = '''Atherininae''' | subfamilia_authority = Risso, [[1827]] | subdivision_ranks = [[Genus (taxinomia)|Genera]] }} '''Atherininae''' sunt [[subfamilia]] [[piscis|piscium]] [[Atheriniformes|Atheriniformium]] [[familia (taxinomia)|familiae]] [[Atherinidae|Atherinidarum]]. ==Genera== Subfamiliae sunt [[quinque]] [[genus (taxinomia)|genera]]: * ''[[Atherina]]'' * ''[[Atherinason]]'' * ''[[Atherinosoma]]'' * ''[[Kestratherina]]'' * ''[[Leptatherina]]'' <!-- ==Notae== <div class="references-small"><references/></div> --> ==Nexus externi== * Bailly, N. [[2013]]. [http://www.marinespecies.org/aphia.php?p=taxdetails&id=151851 Atherininae.] In ''FishBase,'' ed. R. Froese et D. Pauly, per World Register of Marine Species, die [[8 Martii]] [[2013]]. * Eschmeyer, W. [https://web.archive.org/web/20260612222116/https://researcharchive.calacademy.org/research/ichthyology/catalog/fishcatmain.asp ''Catalog of fishes,] researcharchive.calacademy.org (Pars ichthyologiae, Academia Scientiarum Californiae) {{atheriniformes-stipula}} {{Nexus desiderati}} [[Categoria:Atherinidae]] [[Categoria:Taxa Risso]] [[Categoria:Taxa 1827]] eunpa6h0efnf34u38vw8onvk8mslsxd Atherinomorinae 0 179462 3995566 3479480 2026-10-19T08:15:45Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995566 wikitext text/x-wiki {{Taxobox | name = Atherinomorinae | image = Atherinomorus lacunosus (Hardyhead silverside).gif | image_width = 250 px | image_caption = ''[[Atherinomorus lacunosus]].''<br />Adumbratio Antonii Ayling | fossil_range = {{Fossil range|41|0|r=[[Eocaenum]] medium > [[Recens]]}} | regnum = [[Animalia]] | phylum = [[Chordata]] | classis = [[Actinopterygii]] | ordo = [[Atheriniformes]] | familia = [[Atherinidae]] | subfamilia = '''Atherinomorinae''' | subfamilia_authority = Dyer & Chernoff, [[1996]] | subdivision_ranks = [[Genus (taxinomia)|Genera]] }} '''Atherinomorinae''' sunt [[subfamilia]] [[piscis|piscium]] [[Atheriniformes|Atheriniformium]] [[familia (taxinomia)|familiae]] [[Atherinidae|Atherinidarum]]. ==Genera== Subfamiliae sunt [[sex]] [[genus (taxinomia)|genera]]: * ''[[Alepidomus]]'' * ''[[Atherinomorus]]'' * ''[[Atherion]]'' * ''[[Hypoatherina]]'' * ''[[Stenatherina]]'' * ''[[Teramulus]]''<!-- ==Notae== <div class="references-small"><references/></div> --> ==Nexus externi== * Bailly, N. [[2013]]. [http://www.marinespecies.org/aphia.php?p=taxdetails&id=151851 Atherinomorinae.] In ''FishBase,'' ed. R. Froese et D. Pauly, per World Register of Marine Species, die [[8 Martii]] [[2013]]. * Eschmeyer, W. [https://web.archive.org/web/20260612222116/https://researcharchive.calacademy.org/research/ichthyology/catalog/fishcatmain.asp ''Catalog of fishes,] researcharchive.calacademy.org (Pars ichthyologiae, Academia Scientiarum Californiae) {{atheriniformes-stipula}} {{Nexus desiderati}} [[Categoria:Atherinidae]] [[Categoria:Taxa Dyer]] [[Categoria:Taxa Chernoff]] [[Categoria:Taxa 1996]] exz0c5nnqepnyi1rrfzzoht384rvdqb Parcae 0 182995 3995559 3995412 2026-10-19T04:05:30Z Grufo 64423 Minora 3995559 wikitext text/x-wiki [[Fasciculus:Les Parques.jpg|thumb|''Les Parques'' ("Parcae," ca. 1885) ab [[Alfredus Agache|Alfredo Agache]] pictae.]] [[Fasciculus:Peter Paul Rubens - Sketches - WGA20439.jpg|thumb|''Tres Parcae Fatum [[Maria Medicaea|Mariae Medicaeae]] nent'' (1622–1625), pictura a [[Petrus Paulus Rubens|Petro Paulo Rubens]] picta.]] {{res|Parcae}} (fortasse a ''parcere'') in [[religio Romana|religione]] et [[mythologia Romana|mythologia]] [[Roma]]na sunt [[femina (sexus)|femineae]] [[Fatum|Fati]] [[personificatio]]nes, aliquando '''Fata''' uná appellatae. Earum [[interpretatio Graeca|nomen simillimum Graecum]] est '''''Moirai''''' ({{Graece|Μοῖραι}}), usitate '''Moerae'''<ref>{{opus|cognomen redactoris=Mommsenus|nomen redactoris=Theodorus|commentatio de redactore=Theodorus Mommsenus|titulus=I commentarii dei ludi secolari augustei e severiani con una illustrazione di Teodoro Mommsen|lingua=it|annus=1891|paginae=650-651|url paginarum=https://books.google.com/books?id=dxWDgh4SOZwC&pg=PA650}}</ref> Latine conversum, Iovis et [[Themis|Themidis]] filiae<ref>[[Hesiodus]], ''[[Theogonia]]'' 904-6.</ref> vel secundum aliam traditionem solae [[Nyx et Hemera|Noctis]] filiae<ref>[[Hesiodus]], ''ibid.'' 211-222 et [[Aeschylus]], ''[[Eumenides (Aeschylus)|Eumenides]]'' 962.</ref>. Translatum<!--Metaphorical--> [[vita]]e filum omnium mortalium et immortalium a natu ad [[mors|mortem]] moderantur<ref>[[Plato]], ''[[Politia (Plato)|Politia]]'', 620c-621b</ref>. Etiam [[deus|dei]] verentur Parcas, quarum potestati [[Iuppiter]] ipse subicitur. Nomina trium Parcarum sunt: * '''[[Nona (mythologia)|Nona]]''' (Graece ''[[Clotho]]''), quae filum vitae ex [[colus|colo]] in [[fusus|fusum]] net<ref>John Day, ''God's Conflict With the Dragon and the Sea: Echoes of a Canaanite Myth in the Old Testament'' (CUP Archive, 1985), 308.</ref> * '''[[Decima (dea)|Decima]]''' (Graece ''[[Lachesis (mythologia)|Lachesis]]''), quae filum vitae [[baculum (instrumentum)|baculo]]<!--ruler--> mentitur<ref>John Day, ''God's Conflict With the Dragon and the Sea: Echoes of a Canaanite Myth in the Old Testament'' (CUP Archive, 1985), 308.</ref> * '''[[Morta (mythologia)|Morta]]''' (Graece ''[[Atropos]]''), quae filum vitae secat et modum [[mors|mortis]] eligit<ref>L. L. Tels de Jong ''Sur quelques divinites romaines de la naissance et de la prophetie'' (1959): 70–77; 83–85.</ref><ref>P. Ramat "Morta" in ''Archivio glottologico italiano'' 40, 1960, pp. 61–67.</ref><ref>J. H. Waszinsk ''Gnomon'' 34 (1962): 445.</ref> Prima scripta exstantia quae has [[deitas|deitates]] commemorant sunt tres parvae [[stela]]e ([[cippus|cippi]]) prope [[Lavinium]] antiquum paulo post finem [[Bellum Orbis Terrarum II|Belli Orbis Terrarum II]] inventae.<ref>G. Dumezil ''La religion romaine archaique'' (Paris, 1974), pars 4.</ref> Inscriptionem ferunt: <blockquote> Neuna fata, Neuna dono, Parca Maurtia dono </blockquote> Nomina duarum Parcarum Romanarum sic memoriae mandantur (''Neuna'' = Nona, ''Maurtia'' = Morta), adque notionem [[fatum|fati]] conectuntur.<ref>L. L. Tels De Jong ''Sur quelques divinites romaines de la naissance et de la prophetie'' (1959), 67–130.</ref> Nona [[homo|hominis]] vitae summam<!--lifespan--> ''[[Glossarium religionis Romanae antiquae#dies lustricus|die lustrico]]'' decernere habebatur; hoc est die quo [[nomen proprium|nomen]] [[infans|infantis]] eligebatur, qui dies erat dies [[novem|nonus]] post natum [[mas|puerum]] et [[octo|octavus]] post [[femina (sexus)|puellam]] natam.<ref>S. Breemer et J. H. Waszinsk, ''Mnemosyne'' 3 Ser. 13, 1947, pp. 254–270: de fato personale cum collatione diei lustrici adligato.</ref> Iteratio [[nundinae|nundinarum]] habebatur [[Fasti|dies festus]] et ergo [[Fasti|nefastus]] a [[Gaius Iulius Caesar|Iulio Caesare]], [[Cornelius Labeo|Cornelio Labeone]], et aliis [[scriptor]]ibus dicebatur, quia eodem die [[Flamen dialis#Flaminica Dialis|flaminica dialis]] [[sacrificium]] [[caper|capri]] [[Iuppiter|Iovi]] dicatum in [[Regia]] facere solebat.<ref>[[Macrobius|Macr]]. ''[[Saturnalia (Macrobius)|Sat]].'' I 16, 30.</ref> Plura de Parcis apud ''[[Metamorphoses (Ovidius)|Metamorphoses]]'' [[Ovidius|Ovidii]] inveniesː 2.654, 5.532, 8.452, 15.781. De mythologicis fabulis [[Plato]] et [[Pythagoras]] Necessitatis filias in [[Cosmologia|cosmologiam]] transtulerunt ubi [[Sphaera caelestis|sphaerarum caelestium]] rotationi aliquid conferunt<ref>''[[Politia (Plato)|Politia]]'' 617c-d</ref>. ==Notae== <references/> {{NexInt}} * {{safesubst:Nexus ad paginam creandam creatamve|Fata (discretiva)|<>|en|qid=Q27943279}} * {{safesubst:Nexus ad paginam creandam creatamve|Index deitatum Romanarum ortus et pueritiae|<>|en|qid=Q14226036}} * {{safesubst:Nexus ad paginam creandam creatamve|Nornae||en|qid=Q204608}}, deae quae pro Parcis in [[mythologia Nordica]] valent == Nexus externi == {{CommuniaCat|Moirae|Parcas}} [[Categoria:Deae Romanae]] [[Categoria:Fatum]] [[Categoria:Mythologia Romana]] juo2secjm8acs9l8jq12gg9sq79103z Academia Artium et Litterarum Americana 0 223229 3995551 3901591 2026-10-19T03:24:29Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995551 wikitext text/x-wiki [[Fasciculus:WTM NewYorkDolls 011.jpg|thumb|Audubon Xystus, campus quem academia partit.]] [[Fasciculus:Audubon Terrace American Academy of Arts and Letters West 155th Street entrance.jpg|thumb|[[Ostium|Ostia]] [[aes|aenea]] [[aedificium|aedificii]] administrationis in Via 155 Occidentali ab [[Adolphus Alexander Weinman|Adolpho Alexandro Weinman]], sodale academiae, designata sunt, [[memoria]]e [[Maria Freeman|Mariae E. Wilkins Freeman]] et [[scriptor|scriptricum]] [[Civitates Foederatae|Civitatum Foederatarum]] dicata.]] '''Academia Artium et Litterarum Americana''' est [[societas dignitatum]]<!--honor society--> cui rite sunt 250 sodales; suum propositum est "alere, adiuvare, et sustinere excellentiam" in [[litterae Civitatum Foederatarum|litteris]], [[musica Civitatum Foederatarum|musica]], et [[artes oculorum Civitatum Foederatarum|artibus]] [[Civitates Foederatae|Americanis]]. Societas, in vicinia [[Washington Heights (Manhata)|Washington Heights]] [[Manhata]]e [[Urbs Novum Eboracum|Novi Eboraci]] sita, [[Audubon Terrace]], rem multiplicem in [[Broadway Novum Eboracum)|Broadway]] inter vias [[155th Street (Manhata)|155]] et [[156th Street (Manhata)|156]] occidentes, cum [[Societas Hispanica Americae|Societate Hispanica Americae]] et [[Boricua Collegium|Boricua Collegio]] partit. [[Pinacotheca]]e academiae secundum [[horarium]] constitutum propalam aperiuntur. Petitur [[auditorium]] a [[musicus|musicis]] qui [[musica]]m per machinam [[phonographum|phonographice]] vivi imprimere volunt, quia [[acustica]]e inter optimos [[tellus|orbis terrarum]] locos putantur. ==Sodales== Infra est index selectus sodalium priorum Instituti et Academiae Artius et Litterarum Nationalis:<ref>''The history of the National Institute of Arts & Letters and the American Academy of Arts & Letters as Told, Decade by Decade, by Eleven Members: [[Ludovicus Auchincloss]], [[Ioannes Beeson]], [[Hortensia Calisher]], [[Ada Ludovica Huxtable]], [[Wolf Kahn]], [[R. W. B. Lewis]], [[Ricardus Lippold]], [[Normannus Mailer]], [[Cynthia Ozick]], [[Arthurus Schlesinger, Jr.]],'' ed. [[Ioannes Updike]] (Novi Eboraci: Columbia University Press, 1998).</ref> {{div col|cols=3}} *[[Henricus Brooks Adams|Henricus Adams]]<ref name="nyt1916a">[http://query.nytimes.com/mem/archive-free/pdf?res=9D05E0DF123AE633A25751C1A9679D946796D6CF "Academicians Meet Here This Week; Members of Institute Will Join Them in Sessions at the Ritz-Carlton. France to send Greeting; Concert Wherein All Works Are by American Composers Will Be Heard,"] ''New York Times.'' 12 Novembris 1916.</ref> *[[Herbert Adams (sculptor)|Herbert Adams]]<ref name="nyt1916b">[http://query.nytimes.com/mem/archive-free/pdf?res=9E0CE6DB1530E733A05755C1A9679D946796D6CF "Two New Members for the Academy; Dr. Barrett Wendell and Garl Melchers, the Painter, Honored at Meeting"] ''New York Times,'' 16 Novembris 1916.</ref> *[[Henricus Mills Alden]]<ref name="nyt1916a"/> *[[Hannah Arendt]] *[[Newton Arvin]]<ref>American Academy of Arts and Letters: [https://web.archive.org/web/20110726004624/http://www.artsandletters.org/academicians2_deceased.php Deceased Members]</ref> *[[W. H. Auden]] *[[Paulus Wayland Bartlett]]<ref name="nyt1916b" /> *[[Chester Beach]]<ref>[http://query.nytimes.com/gst/abstract.html?res=9806E4DE1339E13ABC4D52DFB4678383609EDE "W. R. Thayer Wins Medal.; J.G. Huneker and Others Elected to Arts and Letters Institute.]</ref> *[[Stephanus Vincentius Benet]] *[[Gulielmus Rose Benet]] *[[Eduinus Howland Blashfield]]<ref name="nyt1916b" /> *[[Gulielmus Crary Brownell|William Brownell]]<ref name="nyt1916b" /> *[[Georgius de Forest Brush]]<ref name="nyt1916a"/> *[[Ioannes Burroughs]]<ref name="nyt1921">[http://query.nytimes.com/mem/archive-free/pdf?res=9802E6D81E30E633A2575AC1A9679D946095D6CF "Academy Honors John Burroughs; Naturalist Praised by Bliss Perry and Hamlin Garland at Memorial Meeting,"] ''New York Times,'' 19 November 1921.</ref> *[[Gulielmus S. Burroughs]] *[[Nicholas Murray Butler]]<ref name="nyt1916b" /> *[[Georgius Vashingtonius Cable]]<ref name="nyt1916b" /> *[[Georgius Whitefield Chadwick]]<ref name="nyt1916b" /> *[[Gulielmus Merritt Chase]]<ref name="nyt1916b" /> *[[Timothaeus Cole]]<ref name="nyt1916a"/> *[[Kenyon Cox]]<ref name="nyt1916a"/> *[[Ioannes Dos Passos]] *[[Dux Ellington]] *[[Radulphus Ellison]] *[[Daniel Chester French]]<ref name="nyt1916b" /> *[[Hamlin Garland]]<ref name="nyt1918">[http://query.nytimes.com/mem/archive-free/pdf?res=9504E4D9133FE433A25751C1A9679C946996D6CF "Elected to Academy; Brand Whitlock and Hamlin Garland in Arts and Letters,"] ''New York Times,''12 Ianuarii 1918.</ref> *[[Carolus Dana Gibson]]<ref name="nyt1921"/> *[[Cass Gilbert]]<ref name="nyt1916a"/> *[[Ricardus Watson Gilder]] *[[Basilius Gildersleeve]]<ref name="nyt1916a"/> *[[Brendan Gill]] *[[Gulielmus Gillette]]<ref name="nyt1916b" /> *[[Daniel Coit Gilman]] *[[Allen Ginsberg]] *[[Bertram G. Goodhue]] *[[Robertus Grant (novelist)|Robert Grant]]<ref name="nyt1916a"/> *[[Gulielmus Elliot Griffis]]<ref>[http://select.nytimes.com/gst/abstract.html?res=F40617FE3A59127A93C4A91789D85F4C8285F9&scp=15&sq=order+of+meiji&st=p "Dr. Griffis, Friend of Japan, Dies; Educator Who Helped Japanese Adapt Themselves to Western Civilization,"] ''New York Times,'' 6 Februarii 1928.</ref> *[[Arthurus Twining Hadley]]<ref name="nyt1916b" /> *[[Childe Hassam]]<ref name="nyt1921"/> *[[Thomas Hastings (architectus)|Thomas Hastings]]<ref name="nyt1916b" /> *[[David Jayne Hill]]<ref name="nyt1921"/> *[[Ripley Hitchcock]]<ref>Stanley Wertheim, ''A Stephen Crane Encyclopedia'' (Greenwood Press, 1997), 155 [http://books.google.co.uk/books?id=-uzry987mP4C&pg=PA155&lpg=PA155&dq=%22ripley+hitchcock%22&source=web&ots=ce94cfGv2V&sig=BWwI4ZjRZh1kVwiG69wIRWHGDas&hl=en&sa=X&oi=book_result&resnum=4&ct=result#PPA155,M1].</ref> *[[Iulia Ward Howe]] *[[William Henry Howe]] *[[Gulielmus Dean Howells]]<ref name="nyt1916b" /> *[[Archer M. Huntington|Archer Milton Huntington]]<ref>[http://query.nytimes.com/mem/archive-free/pdf?res=9E0CE2DB1538E633A25756C2A9679C946496D6CF "Huntington Gives Site for Academy; Men of Arts and Letters to Erect Building Near Riverside Drive and 155th St. Next to Hispanic Museum; National Institute and American Academy Accept Offer of Eight City Lots for Site,"] ''New York Times,'' 25 Ianuarii 1915.</ref> *[[Carolus Ives]] *[[Henricus James]]<ref name="nyt1916b" /> *[[Robertus Underwood Johnson]] *[[Ludovicus I. Kahn]] *[[Maxine Kumin]] *[[Sinclair Lewis]] *[[Roy Lichtenstein]] *[[Henricus Cabot Lodge]]<ref name="nyt1916a"/> *[[Abbott Lawrence Lowell]]<ref>[http://query.nytimes.com/mem/archive-free/pdf?res=9D05E0DF123AE633A25751C1A9679D946796D6CF "Academicians Meet Here This Week; Members of Institute Will Join Them in Sessions at the Ritz-Carlton,"] ''New York Times,'' 12 Novembris 1916.</ref> *[[Maria McCarthy (auctor)|Maria McCarthy]] *[[Hamilton Mabie]]<ref name="nyt1916a"/> *[[Archibaldus MacLeish]] *[[Fridericus MacMonnies]]<ref name="nyt1916a"/> *[[Brander Matthews]]<ref name="nyt1916a"/> *[[Gulielmus Rutherford Mead]]<ref name="nyt1916b" /> *[[Gari Melchers]]<ref name="nyt1916b" /> *[[Edna Sanctus Vincentius Millay]] *[[Carolus Moore (businessman)|Charles Moore]]<ref>H. Paul Caemmerer, "Charles Moore and the Plan of Washington," ''Records of the Columbia Historical Society'' 46/47 (1944/1945): 237–258, 254.</ref> *[[Douglas Moore]] *[[Paulus Elmer More]]<ref name="nyt1916a"/> *[[Robertus Motherwell]] *[[Thomas Nelson Page|Thomas N. Page]]<ref name="nyt1916a"/> *[[Horatius Parker]]<ref name="nyt1916a"/> *[[Iosephus Pennell]]<ref>[http://select.nytimes.com/mem/archive/pdf?res=FB0C1EFE355B12738DDDAD0A94DC405B868EF1D3 "Joseph Pennell, Noted Artist, Dead; Won High Honors as Etcher and Illustrator – Later Taught Art and Wrote Books,"] ''New York Times,'' 24 Aprilis 1926.</ref> *[[Bliss Perry]]<ref name="nyt1916a"/> *[[Gulielmus Lyon Phelps]] *[[Carolus Adams Platt]]<ref>[http://select.nytimes.com/mem/archive/pdf?res=FB0E10FE385B107A93CBA9178AD95F408385F9 "Academy Elects Gay and Lippman; Artist and Journalist Named to Vacancies Left by Deaths of Platt and Shorey,"] ''New York Times,'' 9 Novembris 1934.</ref> *[[Ezra Pound]] *[[Iacobus Ford Rhodes]]<ref name="nyt1916b" /> *[[Iacobus Whitcomb Riley]]<ref name="nyt1916b" /> *[[Georgius Lockhart Rives]]<ref name="nyt1916a"/> *[[Elihu Root]]<ref name="nyt1921"/> *[[Theodorus Roosevelt]]<ref name="nyt1916a"/> *[[Marcus Rothko]] *[[Eero Saarinen]] *[[Carolus Sandburg]] *[[Ioannes Singer Sargent]]<ref name="nyt1916a"/> *[[Meyer Schapiro]] *[[Harrius Rowe Shelley]] *[[Stuart Sherman]] *[[Robertus E. Sherwood]] *[[Paulus Shorey]]<ref>[http://query.nytimes.com/mem/archive-free/pdf?res=9407EFDD1339E13ABC4E52DFB4678383609EDE "Would Encourage Study of Classics; Academy of Arts and Letters Suggests Courses for Schools and Colleges; Sees Aid to Civilization; Resolution Says Opposite Policy Would Lower the Culture of the American People,"] ''New York Times,'' 16 Decembris 1918.</ref> *[[Gulielmus Milligan Sloane]]<ref name="nyt1916b" /> *[[Wallace Stevens]] *[[Meryl Streep]]<ref>[https://web.archive.org/web/20190428121049/http://hosted.ap.org/dynamic/stories/U/US_ARTS_ACADEMY?SITE=IADES&SECTION=HOME&TEMPLATE=DEFAULT "Streep would like to thank the (arts) academy,"] "DesMoines Register," 12 Aprilis 2010.</ref> *[[Lorado Taft]]<ref>[http://select.nytimes.com/mem/archive/pdf?res=FA0814F73D5A1B7B93C3AA178BD95F428385F9 "Mr. Lorado Taft Dies; Leading Sculptor; Creator of Some of Country's Outstanding Monuments is Stricken at 76; Was Teacher in Chicago; ''Fountain of Time'' and ''Columbus Memorial'' in Washington Among Chief Works,"] ''New York Times,'' 31 Octobris 1936.</ref> *[[Iosephus Tal]]<ref>{{cite web|url=http://www.artsandletters.org/academicians2_deceased.php#t |title=American Academy of Arts and Letters - Deceased Members |publisher=Artsandletters.org}}.</ref> *[[Booth Tarkington]]<ref name="nyt1921"/> *[[Abbott Thayer]]<ref name="nyt1921"/> *[[Gulielmus Roscoe Thayer]]<ref name="nyt1916b" /> *[[Augustus Thomas]]<ref name="nyt1916b" /> *[[Virgil Thomson]] *[[Lionel Trilling]] *[[Henricus van Dyke]]<ref name="nyt1916a"/> *[[Ioannes Charles Van Dyke|Ioannes Carolus van Dyke]] *[[Elihu Vedder]]<ref name="nyt1921"/> *[[Curtius Vonnegut]]<ref>{{cite web|url=http://www.artsandletters.org/academicians2_deceased.php |title=American Academy of Arts and Letters - Deceased Members |publisher=Artsandletters.org}}.</ref> *[[Iulianus Alden Weir]]<ref name="nyt1916b" /> *[[Barrett Wendell]]<ref name="nyt1921"/> *[[Editha Wharton]] *[[Andreas D. White]]<ref name="nyt1916a"/> *[[Thornton Wilder]] *[[Brand Whitlock]]<ref name="nyt1921"/> *[[Gulielmus Carolus Williams]] *[[Woodrow Wilson]]<ref name="nyt1921"/> *[[Owen Wister]]<ref name="nyt1916a"/> *[[Georgius Eduardus Woodberry]]<ref name="nyt1916a"/> *[[Franciscus Lloyd Wright]] *[[Iacobus Wright (poeta)|Iacobus A. Wright]] {{div col end}}<!--PLUS IN EN:--> ==Notae== <div class="references-small"><references/></div> ==Bibliographia== *Lewis, Richard W. B. [[1998]]. [http://www.nytimes.com/books/first/u/updike-arts.html?_r=1&scp=4&sq=national%20institute%20of%20arts%20and%20letters&st=cse&oref=slogin "1898–1907: The Founder's Story,"] in [http://books.google.com/books?id=cqdKGvah7OIC&printsec=frontcover&dq=A+Century+of+Arts+%26+Letters&source=gbs_summary_r&cad=0#PRA2-PA291,M1 ''A Century of Arts & Letters.''] Ed. John Updike. Novi Eboraci: Columbia University Press. ISBN 0231102488; ISBN 9780231102483. ==Nexus externi== {{CommuniaCat|American Academy of Arts and Letters|Academiam Artium et Litterarum Americanam}} *[http://www.artsandletters.org artsandletters.org Situs proprius] *[https://web.archive.org/web/20060923120222/http://www4.law.cornell.edu/uscode/html/uscode36/usc_sup_01_36_06_II_08_B_10_203.html Cornell Legal Institute: Title 36 > Subtitle II > Part B > Chapter 203 > § 20301 et seq.] *United States House of Representatives: [https://web.archive.org/web/20071101023157/http://uscode.house.gov/uscode-cgi/fastweb.exe?search 36 USC Chapter 203] **United States Government Printing Office: [https://web.archive.org/web/20081012113718/http://www.access.gpo.gov/uscode/title36/subtitleii_partb_chapter203_.html US Code, Title 36, Chapter 203, revised §4701 et seq. (1916–1998),] *[http://www.aaa.si.edu/collections/american-academy-arts-and-letters-records-6959 Tabulae Academiae Artium et Litterarum Americanae, 1864–1942,] (Archives of American Art, Smithsonian Institution) [[Categoria:Constituta 1904]] [[Categoria:Cultura Civitatum Foederatarum]] [[Categoria:Musea Novi Eboraci]] [[Categoria:Urbs Novum Eboracum]] [[Categoria:Academia Artium et Litterarum Americana|!]] s8ut1mdf03xm5h26m5wt033285dz81t Mons Wood 0 235977 3995567 3995399 2026-10-19T08:23:05Z Demetrius Talpa 81729 3995567 wikitext text/x-wiki {{videdis|Mons Christi (discretiva)}}[[Imago:Cerro de Monte Cristo.JPG|thumb|In monte Wood]] {{res|Mons Wood}} vel {{res|Mons Christi}} est [[mons]] 285 [[m]] altitudinis est, prope [[sinus Sancti Iuliani|sinu Sancti Iuliani]], in provincia [[Sancta Crux (provincia Argentinae)|Sanctae Crucis]], in [[Patagonia]] [[Argentina]]e sita. Primo a [[Ferdinandus Magellanus|Ferdinando Magellano]] [[navigatio|navigatore]] [[Lusitania|Lusitano]] Mons Christi denominatus est. Magellanus, anno 1520, in sinu hiemavit<ref>''"In eo portu sub tuguriis et magalibus in littore, menses aestivos nostri quatuor amplius a frigore detenti et tempestatibus inclusi egerunt. In Kalendis namque Aprilis portum captarunt illum, exierunt vero nono calendas Septembris."'' [[Petrus Martyr ab Angleria]], ''Decadas de orbe novo'' (1520).</ref> et ante eum abesse in culmine montis erigere crucem iussit.<ref>''"Qui, in cima del piú alto monte, drizzassemo una croce in segno de questa terra che era del re di Spagna, e chiamassemo questo monte Monte de Cristo"''. Pigafetta, Antonio, Relazione del primo viaggio intorno al mondo, Istituto editoriale italiano, collana Viaggi Esplorazioni Scoperte, curator Camillo Manfroni (1956), 9. In linea in [http://www.liberliber.it/mediateca/libri/p/pigafetta/relazione_del_primo_viaggio_intorno_etc/pdf/relazi_p.pdf PDF.]</ref> Anno 1670, expeditio Britannica Ioannis Narborough litora Patagonica exploravit et Ioannes Wood nauta cum sociis sinum Sancti Juliani inspexit, in montem Christi ascendit et in petra scripturam nominis <small>JOHN WOOD</small> sculpsit. Expeditio Ioachimi Olivares y Centeno, anno 1746, illam scripturam invenit; qua de causa mons nomine Monte Wood noscitur.<ref>Juan Hilarión Lenzi, ''Historia de Santa Cruz'' (Buenos Aires: Lomelinos Hermanos, 1980), 199-202.</ref> Mons situs septem [[chm]] a medio [[Portus Sancti Iuliani|Portu Sancto Iuliano]] est.<ref>http://www.mbendi.com/a_sndmsg/facility.asp?I=1804868{{Nexus deficitur|date=October 2022 |bot=InternetArchiveBot |fix-attempted=yes }}.</ref> Ab imo ad summum iter thematicum religiosum habet cuius nomen Via Lucis est.<ref>https://web.archive.org/web/20140325212950/http://sanjulian.gov.ar/pag_turismo.php?id=61.</ref><ref>https://web.archive.org/web/20140329102123/http://www.san-julian.com.ar/atractivos/via-lucis.</ref> Mons visorium{{dubsig}} naturale est a quo dominatur sinus et [[Oceanus Atlanticus]] et [[oppidum]] videntur. == Notae et bibliographiae == <references/> ==Nexus externi== {{fontes geographici}} [[Categoria:Montes Argentinae]] je5t6t8yc9a1mqltpcogwpgok4z6i85 3995568 3995567 2026-10-19T08:24:02Z Demetrius Talpa 81729 3995568 wikitext text/x-wiki {{videdis|Mons Christi (discretiva)}}[[Imago:Cerro de Monte Cristo.JPG|thumb|In monte Wood]] {{res|Mons Wood}} vel {{res|Mons Christi}} est [[mons]] 285 [[m]] altitudinis est, prope [[sinus Sancti Iuliani|sinu Sancti Iuliani]], in provincia [[Sancta Crux (provincia Argentinae)|Sanctae Crucis]], in [[Patagonia]] [[Argentina]]e sita. Primo a [[Ferdinandus Magellanus|Ferdinando Magellano]] [[navigatio|navigatore]] [[Lusitania|Lusitano]] Mons Christi denominatus est. Magellanus, anno 1520, in sinu hiemavit<ref>''"In eo portu sub tuguriis et magalibus in littore, menses aestivos nostri quatuor amplius a frigore detenti et tempestatibus inclusi egerunt. In Kalendis namque Aprilis portum captarunt illum, exierunt vero nono calendas Septembris."'' [[Petrus Martyr ab Angleria]], ''Decadas de orbe novo'' (1520).</ref> et ante eum abesse in culmine montis erigere crucem iussit.<ref>''"Qui, in cima del piú alto monte, drizzassemo una croce in segno de questa terra che era del re di Spagna, e chiamassemo questo monte Monte de Cristo"''. Pigafetta, Antonio, Relazione del primo viaggio intorno al mondo, Istituto editoriale italiano, collana Viaggi Esplorazioni Scoperte, curator Camillo Manfroni (1956), 9. In linea in [http://www.liberliber.it/mediateca/libri/p/pigafetta/relazione_del_primo_viaggio_intorno_etc/pdf/relazi_p.pdf PDF.]</ref> Anno 1670, expeditio Britannica Ioannis Narborough litora Patagonica exploravit et Ioannes Wood nauta cum sociis sinum Sancti Juliani inspexit, in montem Christi ascendit et in petra scripturam nominis <small>JOHN WOOD</small> sculpsit. Expeditio Ioachimi Olivares y Centeno, anno 1746, illam scripturam invenit; qua de causa mons nomine Monte Wood noscitur.<ref>Juan Hilarión Lenzi, ''Historia de Santa Cruz'' (Buenos Aires: Lomelinos Hermanos, 1980), 199-202.</ref> Mons situs septem [[chm]] a medio [[Portus Sancti Iuliani|Portu Sancti Iuliani]] est.<ref>http://www.mbendi.com/a_sndmsg/facility.asp?I=1804868{{Nexus deficitur|date=October 2022 |bot=InternetArchiveBot |fix-attempted=yes }}.</ref> Ab imo ad summum iter thematicum religiosum habet cuius nomen Via Lucis est.<ref>https://web.archive.org/web/20140325212950/http://sanjulian.gov.ar/pag_turismo.php?id=61.</ref><ref>https://web.archive.org/web/20140329102123/http://www.san-julian.com.ar/atractivos/via-lucis.</ref> Mons visorium{{dubsig}} naturale est a quo dominatur sinus et [[Oceanus Atlanticus]] et [[oppidum]] videntur. == Notae et bibliographiae == <references/> ==Nexus externi== {{fontes geographici}} [[Categoria:Montes Argentinae]] isjh5aatjdpnxuyj8vpu5b632ufv0nu Fata 0 264219 3995557 3196817 2026-10-19T04:03:38Z Grufo 64423 Forma caduca paginae sic parata ut entitas Vicidatorum [[:d:Q2234275]] huc nectatur 3995557 wikitext text/x-wiki Forma caduca paginae sic parata ut entitas Vicidatorum [[:d:Q2234275]] huc nectatur. #REDIRECT [[Parcae]] 9jbxo26tnw0jy4awof29wzdkpus8hiz 3995558 3995557 2026-10-19T04:04:26Z Grufo 64423 Redirectionem restitui 3995558 wikitext text/x-wiki #REDIRECT [[Parcae]] {{De hac redirectione}} 97mzeu7601lpnjm4nhaya6wssj3elad Marcus Valerius Messalla Rufus 0 266189 3995498 3846064 2026-10-18T15:51:17Z Marcus Terentius Bibliophilus 2059 /* De gente */ 3995498 wikitext text/x-wiki {{L1}} '''Marcus Valerius Messalla Rufus''' (primo saeculo a.C.n. floruit, natus circa 103/102 a.C.n., mortuus circa 27/26 a.C.n.) fuit senator Romanus qui anno 53 a.C.n. (anno horribili) [[Consul|consulatum]] ab aestate usque ad finem anni cum [[Gnaeus Domitius Calvinus|Gnaeo Domitio Calvino]] gessit. Bello civili Caesarem secutus est. Diu vixit et in senectute nonnullos libros hodie deperditos conscripsit. == De gente == Patricia [[Gens Valeria|Valeriorum gente]] ortus Marcus filius Hortensiae erat, clarissimi oratoris [[Quintus Hortensius Hortalus|Quinti Hortensii Hortali]] sororis<ref>[[Valerius Maximus|Val. Max.]] V.9.2.</ref>. Soror ipsius Valeria [[Dictatura|dictatori]] [[Sylla|Cornelio Syllae]] nupsit. Filius quoque ei fuit qui anno consulatus (53 a.C.n.) [[Denarius|denarios]] cudendos curavit quos MESSAL.F PATRE COS inscripsit<ref>Crawford 435/1. E. Babelon Valeria 13. [https://web.archive.org/web/20240323231029/https://www.lesdioscures.com/1414va-denier-valeria/nggallery/slideshow Nummus apud Dioscuros.] Non necessario [[triumvir monetalis]] fuit : nam litterae SC nummo inscriptae indicare videntur hoc munus extra ordinem ei mandatum esse. Multis enim [[Magistratus|magistratibus]] illo anno respublica caruisse videtur.</ref> et sive [[consul suffectus]] [[Marcus Valerius Messalla (consul 32 a.C.n.)|anni 32 a.C.n.]] sive [[Potitus Valerius Messala|anni 29 a.C.n.]] esse potest. "Rufus" cognominatus est ut e colore capillorum a [[Marcus Valerius Messalla Niger|Valerio Messalla Nigro]] distingueretur. == De cursu honorum == Iam 81/80 a.C.n. adulescentulus adhuc [[augur]] ob Syllae adfinitatem factus est (ab inauguratione usque ad mortem eius quinquaginta quinque anni interfuisse dicuntur<ref>[[Macrobius]] I.9.14.</ref>). Praetor fuit circa 61/60 a.C.n. Anno 54 a.C.n. consulatum petebat sed tum omnes quattuor petitores ex lege de ambitu rei facti sunt<ref>[[Cicero]], ''Ad Quintum'' III.2 (Messalla a [[Quintus Pompeius Rufus (tribunus plebis)|Quinto Pompeio Rufo]] postulatus est).</ref>. Quod propter flagitium infamia maxima flagraverunt atque ex variis dilationibus et intercessionibus comitia prohibita quominus haberentur usque ad medium annum 53. Tum tandem post longum [[Interrex|interregnun]]<ref>Plus quam triginta. [[Dio Cassius]] 40.45. [[Plutarchus|Plut.]], ''Pompeius'' 54 </ref>, mense Iulio Cnaeus Domitius et Marcus Valerius Messala [[consul]]es renuntiati sunt in reliquos sex menses. At novi consules et ipsi prohibiti sunt quin comitia [[consul]]um qui sibi succederent haberent seditionibus ac rixis sempiternis inter [[Publius Clodius Pulcher|Clodianas]] et [[Titus Annius Milo|Milonianas]] armatas manus coortis<ref>Consul Domitius Calvinus et ipse tum vulnus accepisse dicitur (Dio Cassius 40.46).</ref>. Itaque mense Ianuario [[52 a.C.n.]] ad interregnum reditum est. Republica ita vexata, nihil memoria dignum in consulatu effecit Valerius Messalla. Paulo post de ambitu e lege Pompeia postulatus primum Hortensii avunculi gratia, qui eum defendebat<ref>Orationem hodie deperditam postea publicavit ([[Valerius Maximus]], ''loc. cit''.)</ref>, indignantibus omnibus absolutus est, mox tamen iterum e [[Lex Licinia de sodaliciis (55 a.C.n.)|lege Licinia de sodaliciis]] accusatus culpae manifestae succubuit<ref>''[[Ad familiares (Cicero)|Ad fam]]''. VIII.2 et 4.</ref>. Bello civili ineunte a Caesare simul cum ceteris exulibus restitutus<ref>[[Dio Cassius]] 41.36</ref>, Messalla eum in Africam et in Siciliam legatus sequebatur. == De operibus == Litterariis studiis senectutem impendit. Duo tantum Messallae opera nobis nota sunt : libri ''de Auspiciis'' quorum excerpta brevia nobis [[Aulus Gellius]] et [[Macrobius]] tradiderunt, quibus auguralem scientiam explicabat et libri ''de Familiis'' qui ad genealogiam historiamque nobilium familiarum Romanarum pertinuisse videntur. [[Plinius]] inter fontes ''[[Naturalis historia (Plinius)|Historiae Naturalis]]'' 'Messallam senem' refert. == Notae == <references /> == Fontes == * [[Aulus Gellius]] libro tertio decimo ''[[Noctes Atticae|Noctium Atticarum]]'' capitulis 14-16. * [[Bellum Africum]] 28, 86, 88. * [[Cassius Dio]], libro XL ''[[Historia Romana (Dio)|Historiae Romanae]]'', cap. 45. * [[Cicero]], libro octavo ''Epistularum ad Familiares'' ep. 2 et 4. ** libro tertio ''Epistularum ad Quintum fratrem'', epistulae 1-3 et 8-9 necnon libro secundo ep. 14. ** libro quarto ''Epistularum ad Atticum'' epistulae 9 et 15-17. * [[Macrobius]], libro primo ''Saturnaliorum'', capitibus 9(14) 16(28). *[[Plutarchus]], ''Pompeius'' 54 * {{Pnh}} libro XXXIV capitulo 137. * [[Valerius Maximus]], libro quinto ''Factorum dictorumque memorabilium'', 9.2. == Plura legere si cupis == * ''The fragments of the Roman historians'', Oxford University Press, 2013, vol. 1 : 385-389. ISBN 978-0-19-927703-2 {{Index consulum rei publicae| praedecessores=[[Appius Claudius Pulcher (consul 54 a.C.n.)|Appius Claudius Pulcher]] et [[Lucius Domitius Ahenobarbus (consul 54 a.C.n.)|L. Domitius Ahenobarbus]]| annus= 53 a.C.n.<br />cum<br />[[Gnaeus Domitius Calvinus|Gnaeo Domitio Calvino]]| successores=[[Quintus Caecilius Metellus Pius Scipio Nasica|Quintus Caecilius Metellus Pius Scipio]] et [[Gnaeus Pompeius Magnus]] III}} [[Categoria:Nati saeculo 2 aut 1 a.C.n.]] [[Categoria:Mortui saeculo 1 a.C.n.]] [[Categoria:Augures]] [[Categoria:Consules]] [[Categoria:Gens Valeria]] [[Categoria:Auctores Latini antiqui]] 58bapv6ahsy9qnaky8xxaxxmyvampva Sinus Bengalensis 0 292016 3995495 3887310 2026-10-18T14:56:47Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995495 wikitext text/x-wiki {{coord|15|N|88|E|type:waterbody_scale:10000000|display=title}} [[Fasciculus:Bay of Bengal map.png|thumb|[[Tabula geographica]] Sinus Bengalensis.<ref>{{cite web|url=http://www.worldatlas.com/aatlas/infopage/baybengal.htm|title=Map of Bay of Benglal – World Seas, Bay of Bengal Map Location – World Atlas}}.</ref><ref>{{cite book |last=Chowdhury |first=Sifatul Quader |year=[[2012]] |chapter=Bay of Bengal |chapter-url=http://en.banglapedia.org/index.php?title=Bay_of_Bengal |editor1-last=Islam |editor1-first=Sirajul |editor1-link=Sirajul Islam |editor2-last=Jamal |editor2-first=Ahmed A. |title=Banglapedia: National Encyclopedia of Bangladesh |edition=seconda |publisher=Asiatic Society of Bangladesh}}.</ref>]] '''Sinus Bengalensis''',<ref>"Sinus Bengalensis, vel Mare Bengalense": Thomas Dilworth, ''New and Complete Description of the Terrestrial and Celestial Globes'' {{Google Books|CLNgAAAAcAAJ|p. 28}}. "Sinus Bengalensis" etiam apud Bernardum Varenium, ''Geographia generalis'' {{Google Books|n8delXh8LJ8C|[p. 203}}; {{Google Books|VULjbKrnIlwC|p.346}}</ref><ref>Vb. adiect. etiam "Bengaliensis" (''[[Corticaria bengaliensis]],'' [[taxinomia|taxinomicum]] unius ex [[latridiidae|latridiidis]] [[nomen proprium|nomen]], bene constitutum est, et ''Hemidactylus bengaliensis'' est [[synonymum]] ''[[Hemidactylus flaviviridis|Hemidactyli flaviviridis]],'' una ex [[gekkonidae|gekkonidis]], sed nomen ''Hemidactylus bengalensis'' etiam invenitur), rarius "Benghalensis", e.g. ''[[Ficus benghalensis|Ficu benghalensi]]'' ([[Rosales]]: [[Moraceae]]).</ref> olim '''Gangeticus Sinus,'''<ref>[[Ioannes Baptista Bourguignon d'Anville]], ''Orbis Veteribus Notus,'' [[tabula geographica]] (Londinii: Laurie et Whittle, 1794).</ref> est [[sinus]] [[mare|maritimus]] in [[septentrio]]nali [[oriens|orientalique]] [[Oceanus Indicus|Oceani Indici]] [[regio]]ne situs, ubi [[terra]]e finitimae sunt [[India]] in [[occidens|occasum]] et occidentem [[septentrio]]nemque, [[Bangladesia]] in septentriones, et [[Birmania]] [[Insulae Andamanenses et Nicobarenses|Insulaeque Andamanenses et Nicobarenses]] Indiae in [[oriens|orientem]]. Eius fines in [[meridies|meridie]] sunt linea inter [[Sangaman Kanda]], [[Srilanca]]m, et maxime septentrionalem occidentalemque [[terra]]m in [[Sumatra]] [[Indonesia]]e descripta. Quae [[regio]] est maximum [[tellus|telluris]] [[corpus aquae]] quod [[sinus]] iuste appellatur. Hoc sinus in India antiqua appellabatur [[Kalinga]] Sagar, sed tempore [[Regimen Britannicum|Regiminis Britannici]] ortum est [[nomen proprium|nomen]] Sinus Bengalensis, ex [[Bengala]] derivatum, regione [[historia|historica]] cum [[Portus Kolkata]] pro aditu [[regnum coronae in India|regni coronae in India]] esset. [[Cox's Bazar]], longissimum [[tellus|orbis terrarum]] [[litus]] maritimum, et [[Sundarbans]],<ref>Siddiqui 2012.</ref> maxima [[silva]] [[mangle|manglium]] et [[habitatio]] [[natura]]lis ''[[Panthera tigris tigris|Pantherae tigris tigris]],'' [[animal]]is civici ambarum Indiae et Bangladesiae,<ref>{{cite book |last=Lytton |first=E. |date=[[1841]] |title=The Critical and Miscellaneous Writings of Sir Edward Lytton. Vol. 2 |url=https://books.google.com/books?id=MuYdAAAAMAAJ&pg=PA167 |page=167}}.</ref> secundum eius litora inveniuntur. Sinus Bengalensis [[area (geometria)|aream]] [[superficies|superficialem]] 2&thinsp;600&thinsp;000 [[chiliometrum quadratum|chiliometrorum quadratorum]] comprehendere plerumque aestimatur. Sinus est 2090 [[chiliometrum|chiliometra]] longus et 1610 chiliometra latus. Eius [[altitudo]] media est 2600 [[metrum|metra]], sed maxima est 4694 metra. Nonnulla [[flumen|flumina]] permagna in sinum defluunt: [[Ganges]] – [[Hooghly flumen|Hooghly]], [[Padma (flumen)|Padma]], [[Brahmaputra]] – [[Iamuna (Bangladesa)|Iamuna]], [[Barak]] – [[Surma]] – [[Meghna]], [[Temalas]], [[Godavari]], [[Mahanadi]], [[Brahmani Flumen|Brahmani]], [[Baitarani]], [[Crisna (flumen)|Crisna]], [[Caveri]]. Inter [[portus]] magni momenti sunt [[Maderaspatanum]], [[Ennore]], [[Chittagongum]], [[Columbum (Srilanca)|Columbum]], [[Calcutta]]-[[Haldia]], [[Mongla]], [[Paradip]], [[Portus Blairensis]], [[Thoothukudi]], [[Visakhapatnam]], [[Dhamra]]. Inter portus minores sunt [[Gopalpur]], [[Kakinada]], [[Payra]]. ==Biologia marina: flora et fauna== [[Fasciculus:Spinnarc.JPG|thumb|''[[Stenella longirostris]]'' in Sinu Bengalensi.]] [[Fasciculus:Tachypleus gigas.JPG|thumb|''[[Tachypleus gigas]]'' in [[Odisha]].]] [[Fasciculus:Shore Temple on Bay of Bengal.jpg|thumb|[[Templum]] litorale, situs [[patrimonium totius mundi|patrimonii totius mundi]] [[UNESCO]], in litore Sinus Bengalensis [[aedificium|aedificatum]].]] Diversae formae [[biologia|biologicae]] in Sinu Bengalensi abundant, inter quas [[scopulus curalii|scopuli curalii]], [[aestuarium|aestuaria]], seminaria [[pisces|piscium]] pariendorum et alendorum, et [[mangle|manglia]]. Sinus est unum ex maximis telluris [[oecosystema marina|oecosystematibus]] [[oecoregio marina|marinis]]. ''[[Kerilia jerdonii]]'' [[anguis]] maritimus in sinu viget. ''[[Conus bengalensis]]'' est una ex testis maritimis quae secundum litora sinus [[photographia|photographematibus]] facile capi possunt.<ref>[http://www.oceanlight.com/lightbox.php?lr=Bay_of_Bengal Phillip Colla Natural History Photography] URL accessus [[21 Ianuarii]] [[2007]].</ref> ''[[Lepidochelys olivacea]],'' [[testudo]] maritima in periculum addicta, supervivit, quia [[nidus|nidos]] in Gahirmatha Marine Wildlife Sanctuary [[Litus Gahirmatha|Litoris Gahirmatha]] [[Odisha]]e in India facere potest. Variae [[istiophoridae]], ''[[Sphyraena]],'' ''[[Katsuwonus pelamis]],'' ''[[Thunnus albacares]],'' ''[[Sousa chinensis]],'' et ''[[Balaenoptera edeni]]'' insignissima [[animalia]] maritima sunt. ''[[Bodianus neilli]],'' [[species]] [[labridae|labridarum]], in turbidis scopulis curalii tenuibusque scopulis litoralibus [[habitatio|habitant]]. [[Grex|Greges]] [[odontoceti|odontocetorum]] saepe videntur, praecipue ''[[Tursiops truncatus|Tursiopium truncatorum]],'' ''[[Stenella attenuata|Stenellarum attenuatarum]],'' et ''[[Stenella longirostris|Stenellarum longirostrium]].'' [[Thunnini]] et odontoceti plerumque in eisdem [[aqua|aquis]] habitant. In aquis autem tenuioribus [[calor|calidioribusque]] litoralibus, ''[[Orcaella brevirostris]]'' invenitur.<ref>{{cite news|last=Haider |first=Mashida R. |date=5 Ianuarii [[2005]] |title=Naturalist |url=http://www.newagebd.com/2005/jan/05/nature.html |newspaper=New Age |location=Dhaka |archive-url=https://web.archive.org/web/20101130180306/http://www.newagebd.com/2005/jan/05/nature.html |archive-date=30 Novembris [[2010]] |url-status=dead}}.</ref><ref>[https://web.archive.org/web/20070203023201/http://www.cms.int/reports/small_cetaceans/data/S_attenuata/s_attenuata.htm CMS: Stenella attenuata, Pantropical spotted dolphin] {{Webarchive|url=https://web.archive.org/web/20070203023201/http://www.cms.int/reports/small_cetaceans/data/S_attenuata/s_attenuata.htm |date=3 Februarii 2007 }} URL accessum 14 Octobris 2020.</ref> [[Great Nicobar Biosphere Reserve]] est refugium multorum animalium, inter quae ''[[Crocodylus porosus]],'' ''[[Dermochelys coriacea]],'' et ''[[Cuora amboinensis kamaroma]].'' ''[[Panthera tigris tigris]]'' (vulgo regalis tigris Bengalensis saepe appellata), alia species in periculum addicta, in [[Sundarbans National Park|Sundarbans]] habitat, magna [[delta fluminis|delta]] aestuarina, quae magnam manglium regionem in [[Delta Gangetica]] obtinet.<ref>[https://web.archive.org/web/20040830122811/http://www.emecs.or.jp/guidebook/eng/pdf/17bengal.pdf 17 Bay of Bengal] URL accessed 21 Ianuarii 2007</ref><ref>{{cite web |url=http://zipcodezoo.com/Animals/B/Bodianus_neilli.asp |title=Bodianus neilli (Bay of Bengal Hogfish) |website=Zipcode Zoo |archive-url=https://web.archive.org/web/20080530132428/http://zipcodezoo.com/Animals/B/Bodianus_neilli.asp |archive-date=30 Maii 2008 |access-date=14 Octobris 2020}}.</ref> ==Notae== <references/> ==Bibliographia== *Bissinger, Jared. [[2010]]. "The Maritime Boundary Dispute Between Bangladesh and Myanmar: Motivations, Potential Solutions, and Implications." ''Asia Policy,'' Iulio 2010. National Bureau of Asian Research. [http://www.nbr.org/publications/element.aspx?id=449 Editio interretialis.] *Chattopadhyay, Bhaskar. [[1994]]. ''An introduction to the maritime history of India: with special reference to the Bay of Bengal.'' Calcuttae: Punthi Pustak. ISBN 8185094756. *Curray, Joseph R., et David G. Moore. [[1971]]. "Growth of the Bengal Deep-Sea Fan and Denudation in the Himalayas." ''Geological Society of America Bulletin'' 82 (3): 563–72. Bibcode:1971GSAB...82..563C. doi:10.1130/0016-7606(1971)82[563:GOTBDF]2.0.CO;2. *Curray, Joseph R., Frans J. Emmel, et David G. Moore. [[2002]]. "The Bengal Fan: morphology, geometry, stratigraphy, history and processes." [https://en.wikipedia.org/wiki/Marine_and_Petroleum_Geology ''Marine and Petroleum Geology''] 19 (10): 1191–1223. doi:10.1016/S0264-8172(03)00035-7. Elsevier Science Ltd. *Siddiqui, Neaz Ahmad. [[2012]]. "Sundarbans, The." In ''Banglapedia: National Encyclopedia of Bangladesh,'' ed. secunda, ed. Sirajul Islam ee Ahmed A. Jamal. Asiatic Society of Bangladesh. [https://web.archive.org/web/20160304200506/http://en.banglapedia.org/index.php?title=Sundarbans,_The Editio interretialis.] ==Nexus externi== {{CommuniaCat|Bay of Bengal|Sinum Bengalensem}} *Suryanarayan, V. [[2000]]. [http://www.india-seminar.com/2000/487/487%20suryanarayan.htm 487 "Prospects for a Bay of Bengal Community."] *[http://www.britannica.com/place/Arabian-Sea "Arabian Sea: depth contours and undersea features."] Map/Still, ''Britannica Concise.'' *[http://www.encyclopedia.com/doc/1E1-Bengal-B.html "Bay of Bengal."] Encyclopedia.com. *[https://web.archive.org/web/20130822041633/http://www.boblme.org/ "Bay of Bengal Large Marine Ecosystem Project."] *[https://www.smh.com.au/lifestyle/worlds-longest-beach-hidden-in-bangladesh-20070131-gdpda7.html "World's longest beach hidden in Bangladesh."] ''The Sydney Morning Herald,'' 31 Ianuarii 2007. [[Categoria:Archaeologia maritima]] [[Categoria:Geographia Bangladeshae]] [[Categoria:Geographia Birmaniae]] [[Categoria:Geographia Srilancae]] [[Categoria:Maria marginalia Oceani Indici]] [[Categoria:Sinus Asiae]] [[Categoria:Sinus Bengaliensis|!]] [[Categoria:Sinus Indiae]] {{Myrias|Geographia}} q63h2rx04oi6vuiw9ljy2w6a1rh603x Terekius 0 292190 3995487 3995481 2026-10-18T13:28:24Z Demetrius Talpa 81729 3995487 wikitext text/x-wiki {{flumen|Terekius|[[Fasciculus:Terekzimoj.jpg|thumb|350px|Terekius in [[Pylae Caucasiae|Pylis Caucasiis]] hieme]] | 623 | 2713 | 305 (16 chm ab ostio) | 43 200 |''Zilga Choch'' mons | [[Mare Caspium]] |[[Georgia]], [[Russia]]}} {{res|Terekius}}<ref>[[Eduardus Eichwald|Eduardi Eichwald]] ''Faunae Caspii maris primitiae...'', Moscuae 1838, p. 130{{Google Books|YMc3AQAAMAAJ}}. Eiusdem ''Fauna Caspio-Caucasica'', Petropoli 1846, p. 36 {{Google Books|X19EAQAAIAAJ}}.<br>Interdum et '''Terek''' et '''Terec'''.</ref> sive antiquius '''Alonta'''<ref>[[Graece]] Ἀλόντα, ν. [[Claudius Ptolemaeus|Ptolemaei]] ''[[Geographia (Ptolemaeus)|Geographia]]'' V 9, 12; {{Smith geo|Alonta}}</ref> ([[Georgiane]] თერგი, [[Russice]] ''Терек'', [[Ossetice]] et [[Tsetsenice]] ''Терк'', [[Ingussice]] ''Тийрк'', [[Lingua Cabardino-Circassica|Cabardino-Circassice]] ''Тэрч'', [[Lingua Karaczaevo-Balcarica|Karaczaevo-Balcarice]] ''Терк суу'', [[lingua Cumucica|Cumucice]] ''Терек-сув'') est flumen in [[Georgia]] et in [[Russia]]. In Georgia in monte ''Zilga Choch'' [[Caucasus Maior|Caucasi Maioris]] oritur, inter [[iugum Principale]] et [[iugum Laterale]] fluxu superiore fluit, per [[Caucasiae portae|Caucasias portas]] iugum Laterale transit, 623 chm patet et in [[mare Caspium]] per [[delta fluminis|delta]]m magnam influit. In Russia per res publicas [[Ossetia Septentrionalis|Ossetiam Septentrionalem]], [[Ingussetia]]m, [[Cabardino-Balcaria]]m, per [[territorium Stauropolitanum]] et per res publicas [[Tsetsenia]]m et [[Daghestania]]m fluit. [[Pylae Caucasiae]] [[Ossetia Septentrionalis|Ossetiae Septentrionalis]] caput et [[Mosdoc]] et [[Kislaria]] ad Terekium stant. == Notae == <references /> == Nexus externi == {{fontes geographici}} {{Commonscat|Terek River|Terekium flumen}} [[Categoria:Flumina Russiae Europaeae]] [[Categoria:Flumina Georgiae]] [[Categoria:Ossetia Septentrionalis]] [[Categoria:Ingussetia]] [[Categoria:Cabardino-Balcaria]] [[Categoria:Territorium Stauropolitanum]] [[Categoria:Tsetsenia]] [[Categoria:Daghestania]] [[Categoria:Systema fluviorum maris Caspii]] n4gysjbt6te79k4q0a8bju4wcseiahk 3995505 3995487 2026-10-18T16:54:21Z Demetrius Talpa 81729 3995505 wikitext text/x-wiki {{flumen|Terekius|[[Fasciculus:Terekzimoj.jpg|thumb|350px|Terekius in [[Pylae Caucasiae|Pylis Caucasiis]] hieme]] | 623 | 2713 | 305 (16 chm ab ostio) | 43 200 |''Zilga Choch'' mons | [[Mare Caspium]] |[[Georgia]], [[Russia]]}} {{res|Terekius}}<ref>[[Eduardus Eichwald|Eduardi Eichwald]] ''Faunae Caspii maris primitiae...'', Moscuae 1838, p. 130{{Google Books|YMc3AQAAMAAJ}}. Eiusdem ''Fauna Caspio-Caucasica'', Petropoli 1846, p. 36 {{Google Books|X19EAQAAIAAJ}}.<br>Interdum et '''Terek''' et '''Terec'''.</ref> sive antiquius '''Alonta(s)'''<ref>[[Graece]] Ἀλόντα(ς), ν. [[Claudius Ptolemaeus|Ptolemaei]] ''[[Geographia (Ptolemaeus)|Geographia]]'' V 9, 12; ''[[Paulys Real-Enzyklopädie der classischen Altertumswissenschaft]]'', [[:s:de:RE:Alontas|sub verbo]]; {{Smith geo|Alonta}}</ref> ([[Georgiane]] თერგი, [[Russice]] ''Терек'', [[Ossetice]] et [[Tsetsenice]] ''Терк'', [[Ingussice]] ''Тийрк'', [[Lingua Cabardino-Circassica|Cabardino-Circassice]] ''Тэрч'', [[Lingua Karaczaevo-Balcarica|Karaczaevo-Balcarice]] ''Терк суу'', [[lingua Cumucica|Cumucice]] ''Терек-сув'') est flumen in [[Georgia]] et in [[Russia]]. In Georgia in monte ''Zilga Choch'' [[Caucasus Maior|Caucasi Maioris]] oritur, inter [[iugum Principale]] et [[iugum Laterale]] fluxu superiore fluit, per [[Caucasiae portae|Caucasias portas]] iugum Laterale transit, 623 chm patet et in [[mare Caspium]] per [[delta fluminis|delta]]m magnam influit. In Russia per res publicas [[Ossetia Septentrionalis|Ossetiam Septentrionalem]], [[Ingussetia]]m, [[Cabardino-Balcaria]]m, per [[territorium Stauropolitanum]] et per res publicas [[Tsetsenia]]m et [[Daghestania]]m fluit. [[Pylae Caucasiae]] [[Ossetia Septentrionalis|Ossetiae Septentrionalis]] caput et [[Mosdoc]] et [[Kislaria]] ad Terekium stant. == Notae == <references /> == Nexus externi == {{fontes geographici}} {{Commonscat|Terek River|Terekium flumen}} [[Categoria:Flumina Russiae Europaeae]] [[Categoria:Flumina Georgiae]] [[Categoria:Ossetia Septentrionalis]] [[Categoria:Ingussetia]] [[Categoria:Cabardino-Balcaria]] [[Categoria:Territorium Stauropolitanum]] [[Categoria:Tsetsenia]] [[Categoria:Daghestania]] [[Categoria:Systema fluviorum maris Caspii]] 51q3rjmm2po68x12y7h4d06buqoa5r1 Urbanus Dubois 0 298120 3995532 3810621 2026-10-18T21:57:08Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995532 wikitext text/x-wiki {{Capsa hominis Vicidata}} '''Urbanus Dubois''', vulgo plene ''Urbain François Dubois'' ([[Tresia]]e die [[26 Maii]] [[1818]] natus; [[Nicaea (Francia)|Nicaea]]e mortuus die [[14 Martii]] [[1901]]) fuit coquus et scriptor de re culinaria. Cum collaboratore [[Aemilius Bernard|Aemilio Bernard]] ''La Cuisine classique'' anno [[1856]] edidit: hi praeter omnes alios [[servitium Russicum (gastronomia)|servitium Russicum]] loco [[servitium Francicum (gastronomia)|Francici]] in [[Francia]] institui suaserunt. Praeceptum {{Creanda|fr|Veau Orloff|vitulina stilo Orlov|vitulinae stilo Orlov}}, in [[Russia]] praesertim usitatum, primus dedit. Pater fuit [[Felix Dubois|Felicis Dubois]] diurnarii et exploratoris. [[Fasciculus:Veal Orloff 4.jpg|thumb|upright=1.25|{{Creanda|fr|Veau Orloff|Vitulina Orloff}} modo hodierno parata]] In oppido natali educatus est iuxta presbyterum qui linguas Francogallicam Latinamque docuit. Ibidem mox artem culinariam didicit apud patruum Ioannem Dubois cauponarium denuo celebrem qui olim Napoleoni exsuli [[Elba]]e et [[insula Sanctae Helenae|S. Helenae]] coquus meruerat. Deinde Lutetiae apud [[Iacobus de Rothschild|Iacobum de Rothschild]] (ubi antea [[Maria Antonius Carême|Carême]], his annis Ludovicus Haas merebat) et in tribus popinis operam dedit, videlicet ''[[Café Tortoni]]'', ''[[Café Anglais]]'', ''[[Le Rocher de Cancale]]''. Deinde in [[Russia]] apud Uruski camerlengum imperatorium coquus merebat. His annis cum [[Aemilius Bernard|Aemilio Bernard]], qui et ipse in Russia laborabat, librum capitalem ''La Cuisine classique'' composuit. Mox coquinam gessit apud principem {{Creanda|ru|Орлов, Алексей Фёдорович|Alexius Theodori f. Orlov|Alexium Theodori f. Orlov}}, cui dicavit {{Creanda|fr|Veau Orloff|Vitulina Orloff|vitulinam Orloff}}, ferculum a se inventum. Principe Orlov anno [[1862]] mortuo, Dubois post duos annos coquus iuxta [[Gulielmus I (imperator Germaniae)|Gulielmum I]] [[Borussia]]e regem factus est. Id officium cum collaboratore Bernard, qui ibi iam operam dabat, aequis temporibus partiebat. Editio tertia ''La Cuisine classique'' regi Gulielmo reginaeque [[Augusta (Saxonia-Vimarii-Eisenach)|Augusta]]e ab ambobus dicata est. Breve temporis spatium ab [[1870]], [[Bellum Germano-Francicum|bello Germano-Francico]] saeviente, Dubois in patriam reditus est. His annis solus plura opera scripta suscepit tam Anglice quam Francogallice, videlicet ''The Household Cookery-book'' et ''Nouvelle Cuisine bourgeoise'' familiis modestioribus destinatum, ''Cuisine de tous les pays'' et ''Cosmopolitan Cookery'' de arte coquinaria Europaea sicut ipse observaverat, ''Artistic Cookery'' et ''Cuisine artistique'' ubi stilum ornatum a Carême perfectum renovavit. == Scripta == * 1856 (cum [[Aemilius Bernard|Emile Bernard]]) : ''La Cuisine classique: études pratiques, raisonnées et démonstratives de l'école française appliquée au service à la russe''. Lutetiae [https://archive.org/details/bub_gb_pBo-AAAAcAAJ Textus] apud ''Internet Archive'' * 1868 : ''Cuisine de tous les pays: études cosmopolites'' [https://gallica.bnf.fr/ark:/12148/bpt6k65442310 3a ed. 1872] [https://archive.org/details/b21525808 7a ed. 1899] * 1870 : ''Artistic Cookery: a practical system suited for the use of the nobility and gentry and for public entertainments''. Londinii: Longmans Green {{Google Books|tGcKAQAAMAAJ}} * 1870 : ''Cosmopolitan Cookery: popular studies''. Londinii: Longmans Green [https://archive.org/details/b28131241 Textus] * 1871 : ''The Household Cookery-book: practical and elementary methods''. Londinii: Longmans Green [https://archive.org/details/b28095820 versio Anglica 1871] * 1872-1874 : ''Cuisine artistique: études de l'école moderne'' [https://archive.org/details/cuisineartistiqu01dubo vol. 1] [https://archive.org/details/cuisineartistiqu02dubo vol. 2] * ante 1876 : ''École des cuisinières: méthodes élémentaires, économiques: cuisine, pâtisserie, office'' [https://gallica.bnf.fr/ark:/12148/bpt6k65490239 2a ed. 1876] [https://archive.org/details/ecoledescuisinie00dubo 13a ed. 1890] * 1878 : ''Nouvelle Cuisine bourgeoise pour la ville et pour la campagne'' [https://archive.org/details/b28078792 Textus] apud ''Internet Archive'' * 1883 : ''Grand Livre des pâtissiers et des confiseurs'' [https://gallica.bnf.fr/ark:/12148/bpt6k1061729 pars 1] [https://gallica.bnf.fr/ark:/12148/bpt6k106173p pars 2] * ante 1893 : ''La Cuisine d'aujourd'hui: école des jeunes cuisiniers: service des déjeuners, service des diners'' [https://archive.org/details/lacuisinedaujour00dubo 3a ed. 1893] * ante 1894 : ''La pâtisserie d'aujourd'hui: école des jeunes pâtissiers'' [https://gallica.bnf.fr/ark:/12148/bpt6k3412588h 2a ed. 1894] == Bibliographia == * "Dubois (Urbain)" in Joseph Favre, ''Dictionnaire universel de cuisine pratique'' (2a ed. 1905) [https://gallica.bnf.fr/ark:/12148/bpt6k57317645/f304 vol. 2 p. 741] * "Dubois (Urbain)" in Georges Vicaire, ''Bibliographie gastronomique'' (Lutetiae: Rouquette, 1890) [https://archive.org/details/b21779442/page/290/mode/1up coll. 289-291] apud ''Internet Archive'' == Nexus externi == * "[https://web.archive.org/web/20210830193041/https://www.cuisine-lucullus.com/histoire-de-la-cuisine/12-les-personnages/637-dubois-urbain Dubois-Urbain]" apud ''La Confrérie des Amis de Lucullus'' (fons principalis textus nostri) * "[https://chefsimon.com/articles/litterature-urbain-dubois Dubois (Urbain)]" apud ''Chef Simon'' {{DEFAULTSORT:Dubois, Urbanus}} [[Categoria:Nati 1818]] [[Categoria:Mortui 1901]] [[Categoria:Coqui]] [[Categoria:Artifices Franciae]] [[Categoria:Scriptores de re cibaria]] [[Categoria:Auctores Francogallici]] [[Categoria:Auctores Anglici]] qob4mfj0u6cyhipc8eue3vcx3m1ddlb Tubulus renalis colligens 0 302941 3995526 3821778 2026-10-18T20:42:02Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995526 wikitext text/x-wiki [[Fasciculus:Kidney nephron.png|thumb|Nephronis anatomia.]] '''Tubulus renalis colligens''' vel brevius '''tubulus collector''' in [[anatomia]] [[ren]]um est pars tubularis quae [[urina]]m e plurium [[nephron]]um [[Tubulus contortus distalis|tubulis contortis distalibus]] colligit atque per partem medullae [[sal]]e maxime saturatam usque ad [[calyx renalis|calycem renalem]] ducit. Tubi collectores apud [[mammalia]] maximi momenti sunt ad [[aqua]]m sive in [[organismus|organismo]] retinendam sive ex organismo emittendam, ita ut volumen aquae in toto organismo sibi constans maneat. Nam illi tubi qui urinam dilutam (100 mOsm apud homines) recipiunt sine [[Vasopressinum|vasopressino]] impermeabiles sunt. Econtra si cellulae tubuli lumen cingentes vasopressinum (antidiureticum hormon) ligant aquaporinas (hoc est canales aquae permeabiles) [[Membrana cellulae|membranae]] suae inserunt<ref>Stefan Kreida, Susanna Törnroth-Horsefield, "[https://www.sciencedirect.com/science/article/abs/pii/S0959440X15001190 Structural insights into aquaporin selectivity and regulation]", ''Current Opinion in Structural Biology'', 2015(Augustus)ː 126-134.</ref>. Tum aqua sponte sua per [[osmosis|osmosim]], ut a liquore dilutiore ad liquorem saturatum (nam medulla renalis infima sale et [[urea]] saturata est), e tubulo collectore exit et in sanguinem remeat.<ref>{{cite journal |authors=Nielsen S., Chou C. L., Marples D., Christensen E. I., Kishore B. K., Knepper M. A. |title=Vasopressin increases water permeability of kidney collecting duct by inducing translocation of aquaporin-CD water channels to plasma membrane |journal={{PNAS}} |year=1995 |month=Feb |volume=92 |issue=4 |pages=1013-7 |url=https://pubmed.ncbi.nlm.nih.gov/7532304/}}{{doi|10.1073/pnas.92.4.1013}}.</ref> Osmolaritas urinae humanae usque ad 1200 mOsm condensari potestː tum aquà quam plurimà servatà substantiae inutiles per urinam parum dilutam [[Excretio|excerni]] possunt. Ita per vasopressinum [[mammalia]] [[homoeostasis|homoeostasem]] aquae moderantur. [[Rodentia]] quaedam in [[deserta|desertis]] aridis viventia (exempli gratia ''[[Dipodomys ordii]]'') urinam usque ad 5500 mOsm saturare valent; ne bibere quidem eis necessarium estː [[aqua metabolica]] aut in [[victus|victu]] reperto utuntur. Non tantum vasopressino respondent cellulae tubuli colligentis sed etiam aliis [[Hormon|hormontibus]] ut [[aldosteron|aldosteroni]]<ref>Olga Komarynets, Alexandra Chassot, Eva Bernabeu, Jan Czogalla, Isabelle Roth, Nicolas Liaudet, François Prodon, Johannes Loffing, Eric Feraille. [[2019]]. "[https://faseb.onlinelibrary.wiley.com/doi/10.1096/fj.201901947R Aldosterone controls primary cilium length and cell size in renal collecting duct principal cells]", The FASEB Journal. </ref> qui [[ion]]tum Na<sup>+</sup> ex urina recuperationem stimulat aut [[factor natriureticus auricularis|auriculari natriuretico factori]] qui contrarium efficit et [[Ion|iontum]] Na<sup>+</sup> ex urina recuperationem inhibet (natriureticus = [[natrium]] in urina, auricularis quia ille factor e cellulis auriculi sive [[atria cordis|atrii]] [[cor]]dis emittitur cum [[pressio sanguinis]] crescit). Aliae substantiae e sanguine in urinam per easdem cellulas tubuli collectoris excernuntur ut [[ion]]ta K<sup>+</sup> (aldosterone instigante) vel H<sup>+</sup> (ad sanguinis ceterorumque humorum corporalium aciditatem moderandam<ref>Carolyn Yucha, "[https://pubmed.ncbi.nlm.nih.gov/15114801/ Renal regulation of acid-base balance]", ''Nephrol Nurs J'', 2004: 201-8. </ref>). == Notae == <references /> == Fontes == *Sherwood, Klandorf, Yancey, ''Animal physiologyː from Genes to Organisms'', 2013ː cap. 12 et 13. *Elaine N. Marieb et Katja Koehn, ''Anatomie et physiologie humaines'' (undecima editio), Pearson, 2019 cap. 25 et 26. == Nexus externi == *[https://web.archive.org/web/20120116234615/http://www.aquaportail.com/definition-1012-osmoregulation.html Osmoregulation apud Aquaportail (Francogallice)] [[Categoria:Renes]] tmwfuce4iva1mb3u6tdpbcovlw0ukv9 Ordo militiae Iesu Christi 0 303092 3995491 3995467 2026-10-18T13:53:39Z IacobusAmor 1163 ~ 3995491 wikitext text/x-wiki {{Vicificanda}} {{latinitas|-3}} [[Fasciculus:Cross of the Military Order of Christ.svg|thumb|upright=0.6|[[Crux]] ordinis propria.]] '''Ordo militiae Iesu Christi''' ([[Lusitanice]] ''Ordem de Cavalaria de Nosso Senhor Jesus Cristo'') fuit [[Ordo militaris|societas equestris]] in [[Portugallia|Lusitania]] anno [[1319]] condita;anno autem [[1834]], stata{{dubsig}} est privilegia abolitis et opibus divenditis. Postea nomen societatis pro honore attribuendo adoptatum est, quo homines valde merentibus praemiarentur. ==Historia== === Historia Equitum Templi in Portugallia === [[Pauperes commilitones Christi Templique Salomonici|Templarii]] circa annum [[1118]] conditi sunt, et [[imperator]]es circa [[Europa]]m mox fecerunt ut suas conatus in [[Palaestina|Terra Sancta]] sustentarent, saltem ab [[1122]] in [[Portugallia|Lusitania]] habita, in [[regio Bracarensis|regione Bracarensi]], ubi Ordo donationes continuos accepit et ubi etiam terras emerunt. Hoc factum est solum duobus vel tribus annis post conditam [[Hierosolyma|Hierosolymam]], et circiter septem annos ante eos cognitos et confirmationem in [[Concilium Trecense|Concilio Trecensi]]. Templarii etiam terras a quadam Domina Teresia anno [[1126]] donatas acceperunt, paucis ante annis Lusitaniae regnum plene [[libertas|liberum]] evaserunt. Lusitaniae prima terra in Europa fuit ubi habitavit.<!--Qui ibi habitabat? Dicta Domina Teresa?--> [[Gualdim Pais]], magister provincialis Ordinis Templi in Lusitania, construxit ''Conventum Christi'' anno 1160 . Locum sortitus est, et signum accepit, ut novum Templarii castrum in colle inter Friam fluvium construeret. et S. Gregorii Argiui. Institutio loci legendae et chronicae praedicant electum esse propter rationes mysticas et ex inspiratione divina, ex exercitiis sicut geomantiae a Magistro Provinciali, secundum exercitia ex fortuna et praedestinatione desumpta. Hanc visionem magicam roborare eo quod sors pertinebat parva catenae septem elevationum (lugar dos sete montes), quae civitas septem collium divulgata est, sicut septem montes Ierusalem, septem colles Romae vel septem columnis Constantinopolitanis. Conventus Christi testamentum est facultatibus architecturae Templariorum. Ecclesia octagonalis a Domo Petrae aedicula Hierosolymorum islamica inspirata, a Templariis adhibita ut fundamentum operationum est. Domum Petrae sita est in Monte Templi, ubi [[Templum Hierosolymitanum]] ante ejus destructionem anno Domini millesimo ducentesimo 70 stabat, et Templarii credebant Domum Petrae fuisse reliquias Templi antiqui, a quo nomen traxit. Ordo liniamenta aediculae in eorum imagines et architecturae incorporavit, inter sigilla Grandis Magistrorum. [[Architectura]] Ecclesiae Sancti Sepulchri etiam exemplar inservire potest. Sepulchrum ipsum stat in structura rotunda elaborata intra (rotunda – 35 m diametro), globo trium columnarum inter quattuor paria columnarum quadratarum columnarum sustinentium tectum ornatum, concameratum. Fieri potest ut columnae rotundae IV saeculo a primo loco in fronte templi Romani removeantur. Renovationis columnae expositae sunt columnas initio multo altiores fuisse et Peregrinus eas in medium ad usum rotundae saeculi XII secare. Die [[13 Iulii]] anno [[1190]], [[Abu Yusuf Yaqub al-Mansur]] Rex Mauritaniae Templariis in Tomar obsedit. Haec probatio fortitudinis confirmavit Templariorum potestatem militarem eosque constituit ut necessariam praesentiam in tuenda Lusitania septentrionali. Pais obiit anno [[1195]] postquam quinquaginta annos regnaverat. '''Conventus Christi''' in Tomar{{dubsig}} in Lusitania<gallery> Fasciculus:Convento de Cristo, safe inside Tomar castle (54199027283).jpg|alt= Fasciculus:Convento de Cristo Tomar 6.jpg|alt= Fasciculus:Convento de Cristo Tomar 3.jpg|alt= Fasciculus:Convento de Cristo Tomar 3.jpg|alt= Fasciculus:Casa do Capítulo, Convento de Cristo 81.jpg|alt= Fasciculus:Convento de Cristo by Juntas 6.jpg|alt= Fasciculus:Convento de Cristo 54b.jpg|alt= Fasciculus:Convento do Cristo (31).jpg|alt= Fasciculus:Tomar Convento de Cristo Christusritterkirche 756.jpg|alt= Fasciculus:Tomar Convento de Cristo Christusritterkirche 757.jpg|alt= Fasciculus:Upper Choir of the Church of Convento de Cristo (Tomar) 67.jpg|alt= Fasciculus:Charola in Convent of Christ - interior 57.jpg|alt= </gallery> === Nativitas ordinis === Post suppressionem ordinis Templarii a Clemente Papa anno 1312, rex Dionysius novum ordinem condendi milites in regno suo promovit. "Christi Militia" sub patrocinio [[Benedictus de Nursia|S. Benedicti]] anno 1317 (aliquot fontes dicunt 14 Augusti 1318) approbavit, et Papa Ioannes XXII hunc ordinem a Bulla Papali die 14 Martii 1319 approbavit, "AD EA EX QVIBVIS". ] Post quattuor annos tractatus, Ioannes papa XXII aliam bullam permittit Dionysio ut bona Templarii ordini Christi anno 1323 concederent. Milites ordinis erant voto paupertatis, castitatis et obedientiae regi commisso. Incertum est quot Templariorum in novo ordine permanserint; quidam historici ordinem Christi dicunt re vera Templariorum sub novo nomine fuisse, alii vero eum ut formationem maxime originalem vident. Primus Grandis Magister, Dominus Gil Martins, eques Sancti Benedicti in Ordine Aviz fuerat. Ordo Christi primus in Castro Marim, in Algarbia (in dioecesi Faro). Anno 1357, ordo ad [[oppidum]] Tomar prope [[Scalabis|Scalabim]] ferebatur, sedem pristinam ordinis milicie Templariorum in Lusitania. (Alii fontes dant diem motivum 1366 sub sexto Grandi Magistro Dom Nuno Rodrigues) === Henrici Navigatoris mandatum === Post 1417, a rege Ioanne I Lusitaniae ad Pontificem rogante, Henricus Navigator princeps (1417-1460) factus est ordinis magister generalis. Princeps Henricus anno 1394 natus, filius regis tertius. Eo tempore Duarte I et Afonso V reges Lusitaniae fuerunt. Anno 1433, Rex Duarte statum ordinis "Summi" dedi non super his territoriis, quae iam tenuerunt, sed in omnibus futuris conquestibus. Papa Calixtus III anno 1455 confirmavit Afonso V iurisdictionem suam temporalem prorogasse concedendo praerogativa regia super tribus nominationibus episcopalibus in locis ab Ordine regentibus. Anno 1460, Rex Afonso V concessit militibus Christi V saeculo indictionem de omnibus mercibus ex novis Africae agris. Pecunia utens Ordine Christi, Princeps Henricus scholam Navigatoris in Sagres ordinat, viam ad principatum Lusitanorum praeparans; ex hoc vico, primum magnae expeditiones tempore inventae deductae sunt. Post Henricum magnum dominium regium tenebatur. Henricus Azores et Madeira insulas colonias fecit — intendebat ad meridiem ultra promontorium Bojador, insularum Canariarum meridiem versus. In conventu Tomar aedificatae sunt duae claustrales Gothicae, regnante Henrico principe. Henricus fuit dux Visensium et socius equitum Garterii. Henricus impetus in historiam magnus est, cum arguably excussum est Europaeae studii exploratio colonialis quae mundum proximis quattuor saeculis sic transformet. Crux Ordinis vela Lusitanorum ornavit in itineribus suis in Indiam, Brasiliam et Iaponiam. '''In redactione...'''{{dubsig}} In libertatem restitutam anno 1640, novus Rex Ioannes IV Lusitanus ramum equitatus Ordinis Christi renovat originali innovatione: Novi Equites etiam saeculares religiosi fratres Ordinis facti sunt. Hi milites extra coenobium cum suis familiis degebant et peculiarem regulam pro vita saeculari habuerunt. Missio eorum equitum maxime fuit ad bellum instaurandum. Ordo equitum religiosorum saecularium certo consecratur anno [[1779]] cum reformatione reginae Mariae I. Extincta religiosorum virorum Ordinum anno [[1834]], Ordo Christi extinctus est. Regina autem Maria II statuit Ordinem Christi ordinem honorarium servare. In statu, Ordo Christi eundem gradum obtinet et eius Grandis Magister est Praesidens Reipublicae Portugalliae. {| class="wikitable" !№ !Magistri Ordinis Christi <small>(Nascimento–Morte)</small> !Retractus !Eleito ! colspan="2" |Tempus in functionis !Notae |- ! colspan="7" |Magistri in Castro Marim fundati (1319-1356) |- !1 |'''Gil Martins'''<small>(–1321)</small> | | |(1319) |(13 de novembro de 1321) |Primus Magister Ordinis |- !2 |'''João Lourenço'''<small>(–)</small> | | |(1321) |(1327) |Secundus Magister Ordinis |- !'''3''' |'''Martim Gonçalves Leitão'''<small>(–)</small> | | |(1327) |(1335) ! |- !'''4''' |'''Estêvão Gonçalves Leitão'''<small>(–)</small> | | |(1335) |(1344) |4º Magister Ordinis |- !'''5''' |'''Rodrigo Anes'''<small>(–)</small> | | |(1344) |(1356) |5º Magister Ordinis |- ! colspan="7" |Magistri in Tomar fundati (1356–????) |- !6 |'''Nuno Rodrigues Freire de Andrade'''<small>(–)</small> | | |(1356) |(1372) |6º Magister Ordinis |- !7 |'''Lopo Dias de Sousa'''<small>(1359–1417)</small> | | |(1373) |(1417) |7º et ultimus Magister Religiosus, Canonicus, Ordinis Christi. |} # D. Gil Martins (1319–?) # D. João Lourenço (?–?) # D. Martim Gonçalves Leitão (?–?) # D. Estevão Gonçalves Leitão (?–?) # D. Rodrigo Anes (?–?) # D. Nuno Rodrigues Freire de Andrade (?–1373) # D. Lopo Dias de Sousa (1373–1417) (Ultimus Magister Religiosus et Canonicus.)) # Infante D. Henrique (25 maii 1420 – 13 novembris 1460) # Infante D. Fernando, Dux Visensis (11 Novembris 1461 - 18 Septembris 1470) # D. João, lll Dux Visiensis, Dux III Covilhã, II Dux Beja ac Dominus Mourae II (1460-1472) # D. Afonso V (1472 – August 28, 1481). # D. Diogo, IV Visensis Dux, III Beja Dux (1481–1484). # D. Manuel I (1484 - 13 Decembris 1521, V Visensis Dux, Beja IV et Rex Portugalliae a 1495) Ab anno 1420, instituto per [[Alphonsus I (rex Portugalliae)|Alphonsus Henricus I]] (Primus Rex Portugalliae) ut Ordinis Christi Praefecto, eius administratio manus pedites familiae vel Regis ipsius iam non relinquet. Ab 1495 deinceps Magistri Ordinis semper a Rege et postea a Praesidente Reipublicae praestabuntur. == Bibliographia == * Gustav Adolph Ackermann: ''Ordensbuch sämmtlicher in Europa blühender und erloschener Orden und Ehrenzeichen''. Annaberg 1855. * Paul Hieronymussen: ''Orders, Medals and Decorations of Britain and Europe in Colour''. Londinii 1967. * Arnhard Graf Klenau: ''Europäische Orden ab 1700''. Monaci 1978. * Eberhard Schmitt, ed. ''Dokumente zur Geschichte der europäischen Expansion''. :tomus I: Charles Verlinden et E. Schmitt (ed.): ''Die mittelalterlichen Ursprünge der europäischen Expansion''. Beck, Monaci 1986, ISBN 3-406-30372-2. ::fasciculus 50: ''Papst Johannes approbiert den portugiesischen Christus-Orden 1319'', p. 281–287. ::fasciculus 40: ''Nikolaus V. überträgt in der Bulle „Romanus pontifex“ …'', p. 218–231. ::fasciculus 41: ''Calixt III. überträgt in der Bulle „Inter cetera“ …'', p. 231–237. == Nexus externi == {{CommuniaCat|Order of Christ (Portugal)|Ordinem militiae Iesu Christi}} * [http://www.ordens.presidencia.pt/?idc=153&list=1 elenchus Lusitanorum honoratorum] *[https://www.infopedia.pt/apoio/artigos/$ordem-de-cristo summarium apud Infopedia] *Manuel Luciano da Silva, Médico: [https://web.archive.org/web/20081119082631/http://www.dightonrock.com/infelizmenteosportuguesesnaosabe.htm "Infelizmente os portugueses não conhecem as características únicas da Cruz da Ordem de Cristo".] (de crucis historia) [[Constituta 1319]] [[Categoria:Historia Portugalliae]] [[Categoria:Ordines militares]] fkll8f8z9x2i2tr9mjy8hv36wr539fc Usor:Grufo/Officina/Experimenta/e3 2 307838 3995550 3981963 2026-10-19T03:24:22Z Grufo 64423 3995550 wikitext text/x-wiki # {{Opus | nomen = Roy Patrick Kerr | cognomen = Kerr | titulus = Gravitational field of a spinning mass as an example of algebraically special metrics | contextus = Physical Review Letters | commentatio de contextu = Physical Review Letters | volumen = 11 | fasciculus = 5 | paginae = 237–238 | annus = 1963 | doi = 10.1103/PhysRevLett.11.237 | bibcode = 1963PhRvL..11..237K }} # {{Opus | cognomen auctoris 1 = Landau | nomen auctoris 1 = Leo Davidis | commentatio de auctore 1 = Leo Landau | cognomen auctoris 2 = Lifshitz | nomen auctoris 2 = Eugenius Mikhailovich | commentatio de auctore 2 = Eugenius Mikhailovich Lifshitz | nomenclatura = compendiaria | titulus = The Classical Theory of Fields | contextus = Course of Theoretical Physics | volumen = 2 | annus = 1975 | editio = 4 | isbn = 978-0-08-018176-9 | locus = [[Novum Eboracum|Novi Eboraci]] | paginae = 321–330 }} # {{Opus | cognomen auctoris = Tartaglia | nomen auctoris = Angelus | titulus = Detection of the gravitometric clock effect | annus = 2008 | contextus = Classical and Quantum Gravity | volumen = 17 | fasciculus = 4 | paginae = 783–792 | s2cid = 9356721 | arxiv = gr-qc/9909006 | bibcode = 2000CQGra..17..783T | doi = 10.1088/0264-9381/17/4/304 }} # {{Opus | cognomen auctoris = Visser | nomen auctoris = Matthaeus | titulus = The Kerr spacetime: A brief introduction | tempus = 2008-01-15 | pagina = 35 | url = https://arxiv.org/pdf/0706.0622v3 | contextus = arXiv General Relativity and Quantum Cosmology | url contextus = https://arxiv.org/archive/gr-qc | arxiv = 0706.0622v3 }} # {{Opus | cognomen auctricis = Blundell | nomen auctricis = Catharina | titulus = Black Holes: A Very Short Introduction | annus = 2015 | url = https://books.google.com/books?id=72nLCgAAQBAJ | pagina = 31 | url paginae = https://books.google.com/books?id=72nLCgAAQBAJ&dq=ergosphere+pumpkin&pg=PA31 }} # {{Opus | cognomen auctoris = Pfister | nomen auctoris = Herbertus | titulus = On the history of the so-called Lense–Thirring effect | annus = 2005 | contextus = General Relativity and Gravitation | volumen = 39 | fasciculus = 11 | paginae = 1735–1748 | url = http://philsci-archive.pitt.edu/archive/00002681/ | s2cid = 22593373 | bibcode = 2007GReGr..39.1735P | citeseerx = 10.1.1.693.4061 | doi = 10.1007/s10714-007-0521-4 }} # {{Opus | cognomen auctoris 1 = Pfister | nomen auctoris 1 = Herbertus | cognomen auctoris 2 = Braun | nomen auctoris 2 = H. K. | titulus = Induction of correct centrifugal force in a rotating mass shell | contextus = Classical and Quantum Gravity | volumen = 2 | fasciculus = 6 | annus = 1985 | paginae = 909–918 | s2cid = 250883114 | doi = 10.1088/0264-9381/2/6/015 | bibcode = 1985CQGra...2..909P }} # {{Opus | cognomen 1 = Van Patten | nomen 1 = R. A. | cognomen 2 = Everitt | nomen 2 = C. W. F. | titulus = Possible Experiment with Two Counter-Orbiting Drag-Free Satellites to Obtain a New Test of Einsteins's General Theory of Relativity and Improved Measurements in Geodesy | contextus = Physical Review Letters | annus = 1976 | volumen = 36 | fasciculus = 12 | paginae = 629–632 | doi = 10.1103/PhysRevLett.36.629 | s2cid = 120984879 | bibcode = 1976PhRvL..36..629V }} # {{Opus | cognomen 1 = Van Patten | nomen 1 = R. A. | cognomen 2 = Everitt | nomen 2 = C. W. F. | titulus = A possible experiment with two counter-rotating drag-free satellites to obtain a new test of Einstein's general theory of relativity and improved measurements in geodesy | contextus = Celestial Mechanics | fasciculus = 4 | volumen = 13 | annus = 1976 | paginae = 429–447 | doi = 10.1007/BF01229096 | s2cid = 121577510 | bibcode = 1976CeMec..13..429V }} # {{Opus | cognomen = Ciufolini | nomen = I. | titulus = Measurement of Lense–Thirring Drag on High-Altitude Laser-Ranged Artificial Satellites | contextus = Physical Review Letters | volumen = 56 | fasciculus = 4 | annus = 1986 | paginae = 278–281 | bibcode = 1986PhRvL..56..278C | doi = 10.1103/PhysRevLett.56.278 | pmid = 10033146 }} # {{Opus | bibcode = 1978A&A....69..321C | cognomen 1 = Cugusi | nomen 1 = L. | cognomen 2 = Proverbio | nomen 2 = E. | titulus = Relativistic Effects on the Motion of Earth's Artificial Satellites | contextus = Astronomy and Astrophysics | volumen = 69 | annus = 1978 | pagina = 321 }} # {{Opus | cognomen 1 = Ciufolini | nomen 1 = I. | cognomen 2 = Lucchesi | nomen 2 = D. | cognomen 3 = Vespe | nomen 3 = F. | cognomen 4 = Mandiello | nomen 4 = A. | titulus = Measurement of dragging of inertial frames and gravitomagnetic field using laser-ranged satellites | contextus = Il Nuovo Cimento A | volumen = 109 | fasciculus = 5 | annus = 1996 | paginae = 575–590 | doi = 10.1007/BF02731140 | s2cid = 124860519 | bibcode = 1996NCimA.109..575C }} # {{Opus | cognomen 1 = Ciufolini | nomen 1 = I. | titulus = On a new method to measure the gravitomagnetic field using two orbiting satellites | contextus = Il Nuovo Cimento A | volumen = 109 | fasciculus = 12 | annus = 1996 | paginae = 1709–1720 | doi = 10.1007/BF02773551 | s2cid = 120415056 | bibcode = 1996NCimA.109.1709C }} # {{Opus | cognomen 1 = Ciufolini | nomen 1 = I. | cognomen 2 = Pavlis | nomen 2 = E. C. | titulus = A confirmation of the general relativistic prediction of the Lense–Thirring effect | contextus = Nature | commentatio de contextu = Nature | volumen = 431 | fasciculus = 7011 | annus = 2004 | paginae = 958–960 | pmid = 15496915 | s2cid = 4423434 | doi = 10.1038/nature03007 | bibcode = 2004Natur.431..958C }} # {{Opus | cognomen 1 = Ciufolini | nomen 1 = I. | cognomen 2 = Pavlis | nomen 2 = E.C. | cognomen 3 = Peron | nomen 3 = R. | titulus = Determination of frame-dragging using Earth gravity models from CHAMP and GRACE | contextus = New Astronomy | volumen = 11 | fasciculus = 8 | annus = 2006 | paginae = 527–550 | doi = 10.1016/j.newast.2006.02.001 | bibcode = 2006NewA...11..527C }} # {{Opus | cognomen 1 = Iorio | nomen 1 = L. | cognomen 2 = Morea | nomen 2 = A. | titulus = The Impact of the New Earth Gravity Models on the Measurement of the Lense-Thirring Effect | contextus = General Relativity and Gravitation | volumen = 36 | fasciculus = 6 | annus = 2004 | paginae = 1321–1333 | arxiv = gr-qc/0304011 | bibcode = 2004GReGr..36.1321I | s2cid = 119098428 | doi = 10.1023/B:GERG.0000022390.05674.99 }} # {{Opus | cognomen = Renzetti | nomen = G. | contextus = Central European Journal of Physics | titulus = History of the attempts to measure orbital frame-dragging with artificial satellites | volumen = 11 | fasciculus = 5 | annus = 2013 | paginae = 531–544 | bibcode = 2013CEJPh..11..531R | doi = 10.2478/s11534-013-0189-1 | accessus ad doi = liberus }} # {{Opus | cognomen = Renzetti | nomen = G. | titulus = Some reflections on the Lageos frame-dragging experiment in view of recent data analyses | contextus = New Astronomy | volumen = 29 | annus = 2014 | paginae = 25–27 | bibcode = 2014NewA...29...25R | doi = 10.1016/j.newast.2013.10.008 | accessus ad doi = liberus }} # {{Opus | cognomen 1 = Iorio | nomen 1 = L. | cognomen 2 = Lichtenegger | nomen 2 = H. I. M. | cognomen 3 = Ruggiero | nomen 3 = M. L. | cognomen 4 = Corda | nomen 4 = C. | titulus = Phenomenology of the Lense-Thirring effect in the solar system | contextus = Astrophysics and Space Science | volumen = 331 | fasciculus = 2 | annus = 2011 | paginae = 351–395 | doi = 10.1007/s10509-010-0489-5 | s2cid = 119206212 | arxiv = 1009.3225 | bibcode = 2011Ap&SS.331..351I }} # {{Opus | bibcode = 2011EPJP..126...72C | cognomen 1 = Ciufolini | nomen 1 = I. | cognomen 2 = Paolozzi | nomen 2 = A. | cognomen 3 = Pavlis | nomen 3 = E. C. | cognomen 4 = Ries | nomen 4 = J. | cognomen 5 = Koenig | nomen 5 = R. | cognomen 6 = Matzner | nomen 6 = R. | cognomen 7 = Sindoni | nomen 7 = G. | cognomen 8 = Neumeyer | nomen 8 = H. | titulus = Testing gravitational physics with satellite laser ranging | contextus = The European Physical Journal Plus | volumen = 126 | fasciculus = 8 | pagina = 72 | annus = 2011 | doi = 10.1140/epjp/i2011-11072-2 | s2cid = 122205903 }} # {{Opus | cognomen = Everitt | nomen = C. W. F. | cognomen redactoris = Bertotti | nomen redactoris = B. | titulus = The Gyroscope Experiment I. General Description and Analysis of Gyroscope Performance | annus = 1974 | contextus = Proc. Int. School Phys. “Enrico Fermi” Course LVI | paginae = 331–360 | domus editoria = New Academic Press | locus = [[Novum Eboracum|Novi Eboraci]] }} # {{Opus | cognomen = Everitt | nomen = C. W. F. | cognomen redactoris 1 = Ruffini | nomen redactoris 1 = R. J. | cognomen redactoris 2 = Sigismondi | nomen redactoris 2 = C. | titulus = The Gyroscope Experiment I. General Description and Analysis of Gyroscope Performance | contextus = Nonlinear Gravitodynamics. The Lense–Thirring Effect | annus = 2003 | paginae = 439–468 | domus editoria = World Scientific }} # {{Opus | cognomen 1 = Everitt | nomen 1 = C. W. F. | cognomen 2 = Buchman | nomen 2 = Saps | cognomen 3 = DeBra | nomen 3 = D. B. | cognomen 4 = Keiser | nomen 4 = G. M. | cognomen 5 = Lockhart | nomen 5 = J. M. | cognomen 6 = Muhlfelder | nomen 6 = B. | cognomen 7 = Parkinson | nomen 7 = B. W. | cognomen 8 = Turneaure | nomen 8 = J. P. | auctor 9 = Grex ''Gravity Probe B'' | cognomen redactoris 1 = Laemmerzahl | nomen redactoris 1 = C. | cognomen redactoris 2 = Everitt | nomen redactoris 2 = C. W. F. | cognomen redactoris 3 = Hehl | nomen redactoris 3 = F. W. | titulus = Gravity Probe B: Countdown to Launch | tempus = 2001-01-01 | contextus = Gyros, Clocks, Interferometers…: Testing Relativistic Gravity in Space | paginae = 52–82 | series = Lecture Notes in Physics | volumen seriei = 562 | domus editoria = Springer Nature | doi = 10.1007/3-540-40988-2_4 }} # {{Opus | cognomen = Pugh | nomen = G. E. | titulus = Proposal for a Satellite Test of the Coriolis Prediction of General Relativity | annus = 1959 | contextus = WSEG, Research Memorandum No. 11 }} # {{Opus | cognomen = Pugh | nomen = G. E. | cognomen redactoris 1 = Ruffini | nomen redactoris 1 = R. J. | cognomen redactoris 2 = Sigismondi | nomen redactoris 2 = C. | titulus = Proposal for a Satellite Test of the Coriolis Prediction of General Relativity | contextus = Nonlinear Gravitodynamics. The Lense–Thirring Effect | annus = 2003 | paginae = 414–426 | domus editoria = World Scientific }} # {{Opus | cognomen = Leonardus I. | nomen = Schiff | titulus = On Experimental Tests of the General Theory of Relativity | contextus = American Journal of Physics | volumen = 28 | annus = 1960 | paginae = 340–343 }} # {{Opus | cognomen 1 = Ries | nomen 1 = J. C. | cognomen 2 = Eanes | nomen 2 = R. J. | cognomen 3 = Tapley | nomen 3 = B. D. | cognomen 4 = Peterson | nomen 4 = G. E. | titulus = Prospects for an improved Lense–Thirring test with SLR and the GRACE gravity mission | contextus = Proceedings of the 13th International Laser Ranging Workshop NASA CP 2003 | annus = 2003 | url = https://cddis.nasa.gov/lw13/docs/presentations/sci_ries_1p.pdf }} # {{Opus | cognomen 1 = Muhlfelder | nomen 1 = B. | cognomen 2 = Mac Keiser | nomen 2 = G. | cognomen 3 = Turneaure | nomen 3 = J. | titulus = poster L1.00027 | annus = 2007 }} # {{Opus | domus editoria = einstein.stanford.edu | tempus inspectionis = 2019-09-27 | titulus = StanfordNews 4/14/07 | url = https://einstein.stanford.edu/content/press_releases/SU/pr-aps-041807.pdf }} # {{Opus | titulus = Report of the 2008 Senior Review of the Astrophysics Division Operating Missions | domus editoria = [[NASA]] | retrospectio = 20080921103646 | tempus inspectionis = 2009-03-20 | url = http://nasascience.nasa.gov/astrophysics/about-us/science-strategy/senior-reviews/AstroSR08_Report.pdf | salus url = obiit }} # {{Opus | cognomen = Hecht | nomen = Jeff | titulus = Gravity Probe B scores ‘F’ in NASA review | domus editoria = New Scientist | lingua = en-US | tempus inspectionis = 2023-09-17 | url = https://www.newscientist.com/article/dn13938-gravity-probe-b-scores-f-in-nasa-review/ }} # {{Opus | titulus = Gravity Probe B – MISSION STATUS | url = http://einstein.stanford.edu/highlights/status1.html }} # {{Opus | titulus = Gravity Probe B finally pays off | retrospectio = 20120930181448 | tempus = 2013-09-23 | tempus inspectionis = 2011-05-07 | url = http://www.sciencenews.org/view/generic/id/73870/title/Gravity_Probe_B_finally_pays_off_ | salus url = obiit }} # {{Opus | titulus = Gravity Probe B: Final results of a space experiment to test general relativity | contextus = Physical Review Letters | retrospectio = 20120520054840 | tempus = 2011-05-01 | tempus inspectionis = 2011-05-06 | url = http://prl.aps.org/accepted/L/ea070Y8dQ491d22a28828c95f660a57ac82e7d8c0 | salus url = obiit }} # {{Opus | cognomen 1 = Perrotto | nomen 1 = Trent J. | titulus = Gravity Probe B | url = https://www.nasa.gov/mission_pages/gpb/gpb_results.html | domus editoria = [[NASA]] | locus = [[Washingtonia]]e | tempus inspectionis = 2019-08-23 }} # {{Opus | cognomen 1 = Ramanujan | nomen 1 = Krishna | titulus = As World Turns it Drags Time and Space | domus editoria = [[NASA]] | tempus inspectionis = 23 August 2019 | url = https://www.nasa.gov/vision/earth/lookingatearth/earth_drag.html }} # {{Opus | cognomen 1 = Ciufolini | nomen 1 = I. | cognomen 2 = Paolozzi | nomen 2 = A. | cognomen 3 = Pavlis | nomen 3 = E. C. | cognomen 4 = Koenig | nomen 4 = R. | cognomen 5 = Ries | nomen 5 = J. | cognomen 6 = Gurzadyan | nomen 6 = V. | cognomen 7 = Matzner | nomen 7 = R. | cognomen 8 = Penrose | nomen 8 = R. | cognomen 9 = Sindoni | nomen 9 = G. | cognomen 10 = Paris | nomen 10 = C. | cognomen 11 = Khachatryan | nomen 11 = H. | cognomen 12 = Mirzoyan | nomen 12 = S. | titulus = A test of general relativity using the LARES and LAGEOS satellites and a GRACE Earth gravity model: Measurement of Earth's dragging of inertial frames | contextus = The European Physical Journal C | volumen = 76 | fasciculus = 3 | annus = 2016 | pagina = 120 | doi = 10.1140/epjc/s10052-016-3961-8 | arxiv = 1603.09674 | bibcode = 2016EPJC...76..120C | pmc = 4946852 | pmid = 27471430 }} # {{Opus | cognomen 1 = Merritt | nomen 1 = D. | cognomen 2 = Alexander | nomen 2 = T. | cognomen 3 = Mikkola | nomen 3 = S. | cognomen 4 = Will | nomen 4 = C. | titulus = Testing Properties of the Galactic Center Black Hole Using Stellar Orbits | contextus = Physical Review D | volumen = 81 | fasciculus = 6 | annus = 2010 | doi = 10.1103/PhysRevD.81.062002 | article-number = 062002 | arxiv = 0911.4718 | bibcode = 2010PhRvD..81f2002M | s2cid = 118646069 }} # {{Opus | cognomen = Will | nomen = C. | titulus = Testing the General Relativistic "No-Hair" Theorems Using the Galactic Center Black Hole Sagittarius A* | contextus = Astrophysical Journal Letters | volumen = 674 | fasciculus = 1 | annus = 2008 | paginae = L25–L28 | s2cid = 11685632 | doi = 10.1086/528847 | arxiv = 0711.1677 | bibcode = 2008ApJ...674L..25W }} # {{Opus | cognomen = Williams | nomen = R. K. | titulus = Extracting X rays, Ύ rays, and relativistic e<sup>−</sup>–e<sup>+</sup> pairs from supermassive Kerr black holes using the Penrose mechanism | contextus = Physical Review D | volumen = 51 | fasciculus = 10 | annus = 1995 | paginae = 5387–5427 | pmid = 10018300 | doi = 10.1103/PhysRevD.51.5387 | bibcode = 1995PhRvD..51.5387W }} # {{Opus | cognomen = Williams | nomen = R. K. | titulus = Collimated escaping vortical polar e<sup>−</sup>–e<sup>+</sup> jets intrinsically produced by rotating black holes and Penrose processes | contextus = The Astrophysical Journal | volumen = 611 | fasciculus = 2 | annus = 2004 | paginae = 952–963 | doi = 10.1086/422304 | s2cid = 1350543 | arxiv = astro-ph/0404135 | bibcode = 2004ApJ...611..952W }} # {{Opus | cognomen = Penrose | nomen = R. | titulus = Gravitational collapse: The role of general relativity | contextus = Nuovo Cimento Rivista | volumen = 1 | annus = 1969 | fasciculus = Numero Speciale | paginae = 252–276 | bibcode = 1969NCimR...1..252P }} # {{Opus | cognomen 1 = Gariel | nomen 1 = J. | cognomen 2 = MacCallum | nomen 2 = M. A. H. | cognomen 3 = Marcilhacy | nomen 3 = G. | cognomen 4 = Santos | nomen 4 = N. O. | titulus = Kerr geodesics, the Penrose process and jet collimation by a black hole | contextus = Astronomy & Physics | volumen = 515 | fasciculus = A15 | annus = 2010 | mensis = 6 | arxiv = gr-qc/0702123v1 | doi = 10.1051/0004-6361/200913678 }} # {{Opus | cognomen 1 = Venkatraman Krishnan | nomen 1 = V. | cognomen 2 = Bailes | nomen 2 = M. | cognomen 3 = van Straten | nomen 3 = W. | cognomen 4 = Wex | nomen 4 = N. | cognomen 5 = Freire | nomen 5 = P. C. C. | cognomen 6 = Keane | nomen 6 = E. F. | cognomen 7 = Tauris | nomen 7 = T. M. | cognomen 8 = Rosado | nomen 8 = P. A. | cognomen 9 = Bhat | nomen 9 = N. D. R. | cognomen 10 = Flynn | nomen 10 = C. | cognomen 11 = Jameson | nomen 11 = A. | cognomen 12 = Osłowski | nomen 12 = S. | titulus = Lense–Thirring frame dragging induced by a fast-rotating white dwarf in a binary pulsar system | contextus = Science | volumen = 367 | fasciculus = 5 | tempus = 2020-01-31 | paginae = 577–580 | arxiv = 2001.11405 | bibcode = 2020Sci...367..577V | doi = 10.1126/science.aax7007 | pmid = 32001656 | s2cid = 210966295 }} # {{Opus | cognomen auctoris = Einstein | nomen auctoris = Albertus | commentatio de auctore = Albertus Einstein | titulus = The meaning of relativity | latine = Significatio relativitatis | contextus = The Stafford Little Lectures of Princeton University | url = https://lectures.princeton.edu/sites/g/files/toruqf296/files/2020-08/_Albert_Einstein__Brian_Greene__The_meaning_of_rel_BookZZ.org_.pdf | editio = 5 | annus primae editionis = 1921 | mensis primae editionis = 5 | url primae editionis = https://archive.org/details/meaningofrelativ00eins_0 | annus = 1970 | domus editoria = Princeton University Press | locus = [[Princetonia]]e }} # {{Opus | cognomen = Ginzburg | nomen = Vitalis Lazarevich | titulus = Artificial Satellites and the Theory of Relativity | paginae = 149–160 | contextus = Scientific American | commentatio de contextu = Scientific American | annus = 1959 | mensis = 5 | volumen = 200 | fasciculus = 5 | doi = 10.1038/scientificamerican0559-149 | bibcode = 1959SciAm.200e.149G }} # {{Opus | cognomen 1 = Lense | nomen 1 = Iosephus | cognomen 2 = Thirring | nomen 2 = Ioannes | nomenclatura = compendiaria | titulus = Über den Einfluss der Eigenrotation der Zentralkörper auf die Bewegung der Planeten und Monde nach der Einsteinschen Gravitationstheorie | annus = 1918 | contextus = Physikalische Zeitschrift | volumen = 19 | paginae = 156–163 | bibcode = 1918PhyZ...19..156L }} # {{Opus | cognomen auctoris 1 = Misner | nomen auctoris 1 = Carolus Gulielmus | cognomen auctoris 2 = Thorne | nomen auctoris 2 = Kip Stephanus | commentatio de auctore 2 = Kip Thorne | cognomen auctoris 3 = Wheeler | nomen auctoris 3 = Ioannes Archibaldus | nomenclatura = compendiaria | titulus = Gravitation | annus = 1973 | domus editoria = W. H. Freeman and Company | locus = [[Franciscopolis (California)|Franciscopoli]] | url = https://physicsgg.me/wp-content/uploads/2023/05/misner_thorne_wheeler_gravitation_freema.pdf | retrospectio = 20240728193849 | salus url = vivit | isbn = 0-7167-0344-0 }} # {{Opus | cognomen = Renzetti | nomen = Iacobus | titulus = History of the attempts to measure orbital frame-dragging with artificial satellites | contextus = Central European Journal of Physics | annus = 2013 | mensis = 5 | volumen = 11 | fasciculus = 5 | paginae = 531–544 | bibcode = 2013CEJPh..11..531R | doi = 10.2478/s11534-013-0189-1 | doi-access = free }} # {{Opus | cognomen auctoris = Sciama | nomen auctoris = Dionysius Gulielmus | titulus = On the origin of inertia | latine = De origine inertiae | contextus = Monthly Notices of the Royal Astronomical Society | volumen = 113 | paginae = 34–42 | url = https://ui.adsabs.harvard.edu/abs/1953MNRAS.113...34S | url forma pdf = https://articles.adsabs.harvard.edu/pdf/1953MNRAS.113...34S | annus = 1953 | annus compositionis = 1952 | doi = 10.1093/mnras/113.1.34 | bibcode = 1953MNRAS.113...34S }} # {{Opus | cognomen = Thirring | nomen = Ioannes | annus = 1918 | titulus = Über die Wirkung rotierender ferner Massen in der Einsteinschen Gravitationstheorie | latine = De effectu massarum volventium remotarum secundum theoria gravitationis Einsteiniana | contextus = Physikalische Zeitschrift | volumen = 19 | pagina = 33 | bibcode = 1918PhyZ...19...33T }} # {{Opus | cognomen = Thirring | nomen = Ioannes | annus = 1921 | titulus = Berichtigung zu meiner Arbeit: ‘Über die Wirkung rotierender Massen in der Einsteinschen Gravitationstheorie’ | latine = De rebus corrigendis in mea commentatione ''De effectu massarum remotarum volventium secundum theoria gravitationis Einsteiniana'' | contextus = Physikalische Zeitschrift | volumen = 22 | pagina = 29 | bibcode = 1921PhyZ...22...29T }} s5nv4y3h2sprch71mpze7hucga60i5t Modulus:Params/harenarium 828 311169 3995530 3993794 2026-10-18T21:49:35Z Grufo 64423 Experimentum 3995530 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_the_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos) local nextfn if ctx.pipe[next_fn_pos] ~= nil then nextfn = ctx.pipe[next_fn_pos]: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 ctx.fnpos = next_fn_pos 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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 trarg = raw_arg:match'^%s*(.-)%s*$' if trarg == 'without_sorting' then return nil, 2, false, trarg end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, trarg end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil or (opts[offs + 3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[offs + 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, offs + 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, offs, whoami) local keyw local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else keyw = arg: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 arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1 end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, 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, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tmp], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tmp], opts[argc], 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] and opts[offs + 3]:match'^%s*(.-)%s*$' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tmp for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tmp = opts[offs + 2]:match'^%s*(.*%S)' end if tmp == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, tmp == 'here' and offs + 3 or offs + 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then sortfn = sortfunctions[opts[offs + 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, offs + 1) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then mode = a_modes[opts[offs + 3]:match'^%s*(.-)%s*$'] end if mode == nil then mode, argc = 0, offs + 3 else argc = offs + 4 end if val == nil and mode > 1 then return context_iterate(ctx, argc) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_matching') 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_not_matching') 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, 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_matching') 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_not_matching') 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, '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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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]|[with/without flushed glue]|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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 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 = opts[offs + 2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if opts[offs + 1] ~= nil and opts[offs + 1]:match'^%s*new%s*$' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params if opts[offs + 1] ~= nil then mode = merge_modes[opts[offs + 1]:match'^%s*(.-)%s*$'] or -1 argc = mode > 0 and 3 or mode + 2 else mode, argc = 0, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local tmp local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tmp = opts[offs + 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 bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) 0cx699tbdujt46njm68ojo337gkes19 3995541 3995530 2026-10-19T01:06:30Z Grufo 64423 Experimentum 3995541 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_nextfn) local nextfn if trimmed_nextfn ~= nil then nextfn = trimmed_nextfn elseif ctx.pipe[next_fn_pos] ~= nil then nextfn = ctx.pipe[next_fn_pos]: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 ctx.fnpos = next_fn_pos 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil or (opts[offs + 3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[offs + 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, offs + 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, offs, whoami) local keyw local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else keyw = arg: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 arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1 end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, 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, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tmp], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tmp], opts[argc], 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tn for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tn = opts[offs + 2]:match'^%s*(.*%S)' end if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3, tn) or context_iterate(ctx, offs + 2, tn) 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local tn, sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then sortfn = sortfunctions[tn] 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, offs + 1, tn) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local tn, mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' end if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_matching') 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_not_matching') 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, 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_matching') 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_not_matching') 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, '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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) 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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 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 = opts[offs + 2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tn local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local tn, mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then mode = merge_modes[tn] or -1 argc = mode > 0 and 3 or mode + 2 if mode ~= -1 then tn = nil end else mode, argc = -2, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc, tn) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local tmp local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tmp = opts[offs + 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 bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) sc4sbeop9yq7a93iq2yfptwyrj4caug 3995542 3995541 2026-10-19T01:09:40Z Grufo 64423 3995542 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_nextfn) local nextfn if trimmed_nextfn ~= nil then nextfn = trimmed_nextfn elseif ctx.pipe[next_fn_pos] ~= nil then nextfn = ctx.pipe[next_fn_pos]: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 ctx.fnpos = next_fn_pos 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil or (opts[offs + 3] or ''):match'^%s*$' ~= nil then argc = 4 end local flg = opts[offs + 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, offs + 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, offs, whoami) local keyw local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else keyw = arg: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 arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1 end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, 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, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tmp], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tmp], opts[argc], 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tn for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tn = opts[offs + 2]:match'^%s*(.*%S)' end if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3) or context_iterate(ctx, offs + 2, tn) 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local tn, sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then sortfn = sortfunctions[tn] 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, offs + 1, tn) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local tn, mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' end if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_matching') 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_name_not_matching') 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, 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_matching') 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc = load_pattern_args(opts, offs, 'with_value_not_matching') 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, '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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 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, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) 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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 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 = opts[offs + 2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tn local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local tn, mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then mode = merge_modes[tn] or -1 argc = mode > 0 and 3 or mode + 2 if mode ~= -1 then tn = nil end else mode, argc = -2, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc, tn) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local tmp local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tmp = opts[offs + 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 bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) fww0827z1pl3pidt5u5iqqivvrjge8b 3995544 3995542 2026-10-19T02:16:09Z Grufo 64423 Experimentum 3995544 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_nextfn) local nextfn if trimmed_nextfn ~= nil then nextfn = trimmed_nextfn elseif ctx.pipe[next_fn_pos] ~= nil then nextfn = ctx.pipe[next_fn_pos]: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 ctx.fnpos = next_fn_pos 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local tn, flg local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil then argc = 4 elseif opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' if tn == nil then argc = 4 end end if tn == nil and opts[offs + argc] ~= nil then tn = opts[offs + argc]:match'^%s*(.*%S)' end if tn ~= nil then flg = mkeywords[tn] if flg ~= nil then tn = nil end end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, offs + argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl), tn end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, offs, whoami) local tn, kwid local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else tn = arg:match'^%s*(.*%S)' if tn ~= nil then kwid = mkeywords[tn] end if kwid == nil or (state > 0 and kwid > 0) then break else state = kwid if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1, kwid == nil and tn or nil end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tn, tmp local optslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, offs, true, false, true, true repeat tmp = opts[argc] if tmp ~= nil then tn = tmp:match'^%s*(.*%S)' end if tn == nil then break end if optslots[1] ~= nil and trim_parse_opts[tn] ~= nil then tmp = trim_parse_opts[tn] trimn, trimu, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tn] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tn], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tn] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tn], opts[argc], nil else break end argc = argc + 1 until argc - offs > 2 return isp, iplain, psp, pplain, trimn, trimu, argc, argc - offs > 2 and tn or nil 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tn for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tn = opts[offs + 2]:match'^%s*(.*%S)' end if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3) or context_iterate(ctx, offs + 2, tn) 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local tn, sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then sortfn = sortfunctions[tn] 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, offs + 1, tn) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local tn, mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' end if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_matching') 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, tn) 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_not_matching') 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, tn) end local yesmatch, 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, tn) 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_matching') 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, tn) 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_not_matching') 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, tn) 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'mapping_by_replacing') if die then return context_iterate(ctx, argc, tn) 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, tn) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc, tn) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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, tn) 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc, tn) 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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, tn) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos, tn = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs, tn) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 1, tn) 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) 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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 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 = opts[offs + 2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tn local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local tn, mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then mode = merge_modes[tn] or -1 argc = mode > 0 and 3 or mode + 2 if mode ~= -1 then tn = nil end else mode, argc = -2, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc, tn) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local tmp local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tmp = opts[offs + 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 bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) 22j7gxfagijltih8b7ilj76phrc3ujb 3995547 3995544 2026-10-19T03:00:03Z Grufo 64423 3995547 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_nextfn) local nextfn if trimmed_nextfn ~= nil then nextfn = trimmed_nextfn elseif ctx.pipe[next_fn_pos] ~= nil then nextfn = ctx.pipe[next_fn_pos]: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 ctx.fnpos = next_fn_pos 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local tn, flg local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil then argc = 4 elseif opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' if tn == nil then argc = 4 end end if tn == nil and opts[offs + argc] ~= nil then tn = opts[offs + argc]:match'^%s*(.*%S)' end if tn ~= nil then flg = mkeywords[tn] if flg ~= nil then tn = nil end end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, offs + argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl), tn end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, offs, whoami) local tn, kwid local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else tn = arg:match'^%s*(.*%S)' kwid = tn ~= nil and mkeywords[tn] or nil if kwid == nil or (state > 0 and kwid > 0) then break else state = kwid if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1, kwid == nil and tn or nil end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tn, tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, true, false, true, true repeat noptslots, tn = noptslots - 1, opts[argc] if tn ~= nil then tn = tn:match'^%s*(.*%S)' end if tn == nil then break end if optslots[1] ~= nil and trim_parse_opts[tn] ~= nil then tmp = trim_parse_opts[tn] trimn, trimu, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tn] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tn], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tn] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tn], opts[argc], nil else break end argc = argc + 1 tn = nil until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc, tn 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tn for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tn = opts[offs + 2]:match'^%s*(.*%S)' end if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3) or context_iterate(ctx, offs + 2, tn) 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local tn, sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then sortfn = sortfunctions[tn] 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, offs + 1, tn) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local tn, mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' end if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_matching') 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, tn) 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_not_matching') 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, tn) end local yesmatch, 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, tn) 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_matching') 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, tn) 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_not_matching') 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, tn) 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'mapping_by_replacing') if die then return context_iterate(ctx, argc, tn) 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, tn) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic if opts[offs + 1] ~= nil then magic = opts[offs + 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc, tn) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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, tn) 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc, tn) 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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, tn) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos, tn = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs, tn) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) 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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] if tname ~= nil then tname = tname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 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 = opts[offs + 2] if fname ~= nil then fname = fname:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] if magic ~= nil then magic = magic:match'^%s*(.*%S)' else error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tn local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local tn, mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then mode = merge_modes[tn] or -1 argc = mode > 0 and 3 or mode + 2 if mode ~= -1 then tn = nil end else mode, argc = -2, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc, tn) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 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, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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 tname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tname = opts[offs + 1]:match'^%s*(.*%S)' end if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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 mname, fname local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then mname = opts[offs + 1]:match'^%s*(.*%S)' end if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end if opts[offs + 2] ~= nil then fname = opts[offs + 2]:match'^%s*(.*%S)' end if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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 magic local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then magic = opts[offs + 1]:match'^%s*(.*%S)' end if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local tmp local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tmp = opts[offs + 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 bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) 5t1rz1vfmb4rmfl8ex9h4fmaxrwnhpj 3995560 3995547 2026-10-19T06:23:21Z Grufo 64423 Experimenta 3995560 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], idx = val, 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_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_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_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, 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 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Possible modes for the `merging_substack` modifier local merge_modes = { as_new_parameters = 0, as_suffixes = 1, as_prefixes = 2 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `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: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, shifting = true, splicing = 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, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_fname) local fname = trimmed_fname or ctx.pipe[next_fn_pos] and ctx.pipe[next_fn_pos]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end if library[fname] == nil then if ctx.firstposonly[fname] == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. fname .. '’ directive can only appear in first position', 0) end end ctx.fnpos = next_fn_pos return library[fname] 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_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], 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 currsnap, newparams = 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) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, 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_param_name(src[pin + 1]) mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_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, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from 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 tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) 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, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local tn, flg local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil then argc = 4 elseif opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' if tn == nil then argc = 4 end end if tn == nil and opts[offs + argc] ~= nil then tn = opts[offs + argc]:match'^%s*(.*%S)' end if tn ~= nil then flg = mkeywords[tn] if flg ~= nil then tn = nil end end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, offs + argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl), tn end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, offs, whoami) local tn, kwid local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else tn = arg:match'^%s*(.*%S)' kwid = tn ~= nil and mkeywords[tn] or nil if kwid == nil or (state > 0 and kwid > 0) then break else state = kwid if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1, kwid == nil and tn or nil end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tn, tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, true, false, true, true repeat noptslots, tn = noptslots - 1, opts[argc] if tn ~= nil then tn = tn:match'^%s*(.*%S)' end if tn == nil then break end if optslots[1] ~= nil and trim_parse_opts[tn] ~= nil then tmp = trim_parse_opts[tn] trimn, trimu, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tn] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tn], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tn] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tn], opts[argc], nil else break end argc = argc + 1 tn = nil until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc, tn 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], margs[varg] = key, 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], rargs[varg] = key, 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, 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, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, 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, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #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 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 else key = get_param_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 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], idx = val, idx + 1 until pos2 == nil return 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_param_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 end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, do_sort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if do_sort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], 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_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 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, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs 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(cache) 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 tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(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 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end 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 flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then 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 return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) 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 tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[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(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end 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, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 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, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end local tn for _ in pairs(ctx.params) do retval = retval + 1 end if opts[offs + 2] ~= nil then tn = opts[offs + 2]:match'^%s*(.*%S)' end if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3) or context_iterate(ctx, offs + 2, tn) 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], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end 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 tmp[key], nnums = val, nnums + 1 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 do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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 do tbl[idx] = nil end for idx = 1, lcut 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, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 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(opts[offs + 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, 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 do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 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(opts[offs + 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, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 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[ctx.fnpos + 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, ctx.fnpos + 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], tbl[key] = val, 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, ctx.fnpos + 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 tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, 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(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local tn, sortfn local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] ~= nil then tn = opts[offs + 1]:match'^%s*(.*%S)' end if tn ~= nil then sortfn = sortfunctions[tn] 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, offs + 1, tn) end return context_iterate(ctx, offs + 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 tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 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, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 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 local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 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 if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local tn, mode, argc local src = get_param_name(opts[offs + 1]) local val = tbl[src] if opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' end if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 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, offs + 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, ctx.fnpos + 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, ctx.fnpos + 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 tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_matching') 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, tn) 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 tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_not_matching') 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, tn) end local yesmatch, 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, tn) 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 nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_matching') 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, tn) 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 yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_not_matching') 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, tn) 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[ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 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, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'mapping_by_replacing') if die then return context_iterate(ctx, argc, tn) 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, tn) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 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, offs + 2) 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, ctx.fnpos + 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, ctx.fnpos + 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 cache, len local tbl = ctx.params local sortfn, argc, do_sort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if do_sort then local words, wl cache, words, len, wl = get_sorted_key_list(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 = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' 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, offs + 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/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' 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, offs + 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/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' 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, offs + 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, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc, tn) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, 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, tn) 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 local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[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, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 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 = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' 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], model.args = gid, 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc, tn) 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, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 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, tn) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos, tn = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs, tn) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 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 local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_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_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|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' )) 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 opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 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_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 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 opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 local tn = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 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, ctx.fnpos + 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 substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 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 substacks have 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.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 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 substacks have been created', 0) end local mode, argc local opts, offs, tmp1, tmp2 = ctx.pipe, ctx.fnpos, ctx.parents[ncurrparent], ctx.params local tn = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tn ~= nil then mode = merge_modes[tn] or -1 argc = mode > 0 and 3 or mode + 2 if mode ~= -1 then tn = nil end else mode, argc = -2, 1 end if mode < 2 then ctx.params = tmp1 end if mode > 0 then local pref, suff if mode == 1 then pref, suff = tmp1, tmp2 else pref, suff = tmp2, tmp1 end tmp2 = opts[offs + 2] or '' for key, val in pairs(suff) do tmp1 = pref[key] pref[key] = tmp1 ~= nil and tmp1 .. tmp2 .. val or val end else for key, val in pairs(tmp2) do tmp1[key] = val end end ctx.parents[ncurrparent], ctx.n_parents = nil, ncurrparent - 1 return context_iterate(ctx, offs + argc, tn) 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, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! 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, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } 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, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end 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, offs + 2) }) 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, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, 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: `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], ret[nss + 2], nss = pps, val, 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) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 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], nss = pps, nss + 2 ret[nss] = table.concat(cnv) 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, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) 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, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) 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.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos local tmp = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) 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, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_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, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) iji463zasekgctfjh3146kcbnidz4pq Santosh Ram 0 313094 3995571 3995480 2026-10-19T11:01:46Z Klf2026 216472 catergory remotum 3995571 wikitext text/x-wiki   '''Santosh Ram''' est director, scriptor et effector cinematographicus Indicus. Notissimus est brevibus pelliculis ''Vartul'' (2009), ''Galli'' (2015) et ''Prashna'' (2020), quae in variis festivitatibus cinematographicis toto orbe terrarum selectae et exhibitae sunt. <ref>{{Cite web|url=http://archive.loksatta.com/index.php?option=com_content&view=article&id=29034:2009-12-03-19-26-11&Itemid=1|title=साकारले प्रयत्नांचे ‘वर्तुळ’|website=archive.loksatta.com}}</ref> Eius prima brevis pellicula ''Vartul'' <ref>{{Cite web|url=http://archive.indianexpress.com/news/zee-talkies--film-released/510207/2|title=Vartul to be screened at Third Eye Asian Film Festival|website=archive.indianexpress.com}}</ref> in plus quam quinquaginta et sex festivitatibus exhibita est et tredecim praemia reportavit. ''Prashna'' (Quaestio, 2020) pro Filmfare Short Film Awards 2020 finalis designata est. Santosh Ram Iridis Praemium cum mentione speciali (Scriptura) pro ''Prashna'' in UNICEF Innocenti Film Festival 2021 in [[Florentia|Florentiae]], [[Italia|Italiae]] vicit. == Vita et origo == Ram natus est in Dongershelki, in districtu Latur, [[Maharastra|Maharashtra]]. Ram in familia mediae condicionis in Udgir, <ref>{{Cite web|url=https://www.misalpav.com/node/15564|title=वर्तूळ - एक अनुभव|website=misalpav.com}}</ref> Maharashtra, India, adolevit. Ab infantia in regione Marathwada educatus est.<ref>{{Cite web|url=https://www.thehindu.com/news/cities/mumbai/news/Cinema-that-can%E2%80%99t-escape-reality/article13991081.ece|title=Cinema that can’t escape reality|website=thehindu.com}}</ref> == Cursus == Santosh<ref>{{Cite web|url=https://www.thehindu.com/news/national/other-states/showcasing-maharashtras-rural-milieu-like-no-other-filmmaker/article37672830.ece|title=Showcasing Maharashtra’s rural milieu like no other filmmaker|website=thehindu.com}}</ref> cursum suum cinematographicum scribendo incepit et anno 2009 breves pelliculas <ref>{{Cite web|url=https://issuu.com/thegoldensparrow/docs/tgs_broadsheet_pages_april_30_pdf_f/7|title=His Cinema doesnot escape reality|website=issuu.com/thegoldensparrow/docs}}</ref> dirigere coepit. Primam suam brevem pelliculam [[Lingua Marathica|Marathicam]], ''Vartul'', in pellicula 35mm cinematographica confecit. ''Vartul'' (2009) in plus quam quinquaginta et sex festivitatibus nationalibus et internationalibus exhibita est, inter quas: 11th Osian's Cinefan Film Festival <ref>{{Cite web|url=https://www.deccanherald.com/content/27577/Vartul-screened-osians-cinefan-film.html|title='Vartul' to be screened at Osian's-Cinefan film festival|website=deccanherald.com}}</ref> 2009, [[Dellium Novum|Novae Delhi]]; 3rd International Documentary and Short Film Festival of [[Malabaria|Kerala]], 2010, [[India]]; 8th Third Eye Asian Film Festival <ref>{{Cite web|url=https://timesofindia.indiatimes.com/city/pune/vartul-to-be-screened-at-8th-third-eye-asian-film-festival/articleshow/5285972.cms|title=Vartul' to be screened at 8th Third Eye Asian film festival|website=timesofindia.Indiatimes.com}}</ref> 2009, [[Mumbai]]; et 17th Toronto Reel Asian International Film Festival 2013 ([[Canada|Canadiae]]); tredecim praemia reportavit. Secunda eius brevis pellicula ''Galli'' (2015) in tredecim festivitatibus cinematographicis nationalibus et internationalibus exhibita est. Ultima eius pellicula ''Prashna'' (2020)<ref>{{Cite web|url=https://www.unicef.org/press-releases/unicef-innocenti-film-festival-tells-stories-childhood-around-world|title=UNICEF Innocenti Film Festival tells stories of childhood from around the world|website=Unicef.org}}</ref> pro Filmfare Short Film Awards 2020 finalis designata est <ref>{{Cite web|url=https://www.filmfare.com/awards/short-films-2020/finalists/prashna-question/3612|title=Prashna (Question) – Social Awareness Short Film|website=Filmfare.com}}</ref> et in triginta et sex festivitatibus cinematographicis toto orbe terrarum publice selecta est <ref>{{Cite web|url=https://www.migrationcollective.com/lmff-online-program-2021|title=Online programme|website=migrationcollective.com}}</ref>, sedecim praemia reportans. == Filmographia == {| class="wikitable sortable" !Annus ! Pellicula ! Lingua ! Director ! Scriptor ! Effector ! class="unsortable" | Notae |- | 2009 | ''Vartul'' | Marathica || sic || sic || Non | Selecta in quinquaginta et tribus festivitatibus cinematographicis<br /> Quattuordecim praemia reportavit |- | 2015 | ''Galli'' | Marathica || sic || sic || sic | Selecta in tredecim festivitatibus cinematographicis |- | 2020 | ''Prashna'' <ref>{{Cite web|url=https://asianmoviepulse.com/2021/09/short-film-review-prashna-question-2020-by-santosh-ram|title=Short Film Review: Prashna (Question, 2020) by Santosh Ram|website=asianmoviepulse.com}}</ref> | Marathica || sic || sic || Non | Selecta in triginta et quattuor festivitatibus cinematographicis<br /> Sedecim praemia reportavit |- | 2024 | ''Historia Yuvraj et Shahajahan'' | Marathica, Hindica || sic || sic || sic | Brevis pellicula |- | 2026 | ''China Mobile'' <ref>{{Cite web|url=https://divyamarathi.bhaskar.com/news/BOL-MB-marathi-film-china-mobiles-poster-release-5219132-NOR.html|title=संतोष राम दिग्दर्शित 'चायना मोबाईल' सिनेमाच्या पोस्टरचे अनावरण|website=divyamarathi.bhaskar.com}}</ref> | Marathica || sic || sic || sic | Pellicula longa |} == Praemia et laudes == ''Vartul'' 2009 * Optima Pellicula - 4th International Short Film Festival of India 2010, [[Maderaspatanum|Chennai]]. * Optima Pellicula - 2nd International Film Festival Nagpur 2011 * Optimus Director - Pune Short Film Festival 2011, [[Pune]] * Optima Pellicula - 6th Goa Marathi Film Festival 2013, [[Goa]] * Optima Pellicula - Kerala Short Film Festival 2013 * Praemium Laudis pro Excellentia in Cinematographia - Kanyakumari International Film Festival 2013, Kanyakumari * Mentio Specialis Iuratorum - Navi Mumbai International Film Festival <ref>{{Cite web|url=https://www.americanbazaaronline.com/2014/02/06/filmmakers-ravi-jadhav-nagesh-kukunoor-felicitated-navi-mumbai-international-film-festival|title=The winners of the festival are|website=americanbazaaronline.com}}</ref> 2014, Navi Mumbai * Optima Pellicula - Barshi Short Film Festival 2014 * Optima Pellicula - 1st Maharashtra Short Film Festival 2014 * Nominata - Maharashtra Times Awards 2010 ''Prashna'' 2020 * Iridis Praemium cum Mentione Speciali (Scriptura) - UNICEF Innocenti Film Festival 2021, [[Florentia|Florentiae]], [[Italia|Italiae]]. <ref>{{Cite web|url=https://www.unicef.org/nepal/press-releases/uiff-scarecrow-win|title=Honors Given to Top Films in Competition at the UNICEF Innocenti Film Festival|website=unicef.org}}</ref> * Nominatio - Optima Brevis Pellicula - Filmfare Awards 2020, [[Mumbai]] <ref>{{Cite web|url=https://www.filmfare.com/awards/short-films-2020/finalists/prashna-question/3612|title=Prashna (Question) – Social Awareness Short Film|website=Filmfare.com}}</ref> * Optima Brevis Pellicula - 3rd Vintage International Film Festival, Kolhapur <ref>{{Cite web|url=https://www.maharashtrajanbhumi.in/2020/10/Vintage-International-Film-Festival-starts-today.html|title=विंटेज आंतरराष्ट्रीय चित्रपट महोत्सवास आजपासून सुरु, जाणून घ्या 'विंटेज'च्या कलाकृती|website=www.maharashtrajanbhumi.in}}</ref> 2020 * Optima Brevis Pellicula - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Optima Brevis Pellicula Socialis - Bettiah International Film Festival 2020 * Optima Brevis Pellicula, Mentio Specialis Honoris - Plant Seed International Short Film Festival 2020 * Optimus Director - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Optima Scriptura Cinematographica - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Mentio Specialis pro Optima Brevi Pellicula Fictionali - 14th SIGNS Short and Documentary Film Festival, <ref>{{Cite web|url=https://www.lokmat.com/latur/santosh-rams-question-best-short-film-bengal-kerala-a693|title=santosh ram's question best short film at Bengal and kerala|website=lokmat.com}}</ref> 2021 * Optima Brevis Pellicula - 6th Bengal International Short Film Festival, [[Calcutta|Kolkata]] <ref>{{Cite web|url=https://btvnewsmaharashtra.blogspot.com/2021/06/blog-post_14.html|title=बंगाल आणि केरळ मध्ये संतोष राम यांचा "प्रश्न" ठरला सर्वोत्कृष्ट लघुपट|website=btvnewsmaharashtra.blogspot.com}}</ref> 2021 * Mentio Specialis Iuratorum - 9th Smita Patil Documentary and Short Film Festival, [[Pune]]. * Optima Fabula - Ma Ta Short Film Festival 2022, [[Mumbai]] * Diploma Internationalis Certaminis Brevium Pelliculorum "Ad progressionem educationis in locis remotis" - 9th Zero Plus Film Festival, [[Tumenum|Tyumen]], [[Russia]] <ref>{{Cite web|url=https://vk.com/@zeroplusfest-pobediteli-ix-mezhdunarodnogo-festivalya-nol-plus|title=Winners of the IX International Festival "Zero Plus"|website=zeroplusff.ru}}</ref> == Notae == <references responsive="1"></references> == Nexus externi == * {{IMDb name|4407714}} [[Categoria:Nati 1979]] [[Categoria:Homines vivi]] [[Categoria:Moderatores cinematographici Indiae]] ipovphckmhfpavc8gicjqpfgpku18og 3995573 3995571 2026-10-19T11:21:53Z Klf2026 216472 infobox additae 3995573 wikitext text/x-wiki  {{Capsa hominis Vicidata}} '''Santosh Ram''' (die [[03 Novembris]] [[1979]] natus) est [[moderator cinematographicus]] [[India|Indian]]. '''Santosh Ram''' est director, scriptor et effector cinematographicus Indicus. Notissimus est brevibus pelliculis ''Vartul'' (2009), ''Galli'' (2015) et ''Prashna'' (2020), quae in variis festivitatibus cinematographicis toto orbe terrarum selectae et exhibitae sunt. <ref>{{Cite web|url=http://archive.loksatta.com/index.php?option=com_content&view=article&id=29034:2009-12-03-19-26-11&Itemid=1|title=साकारले प्रयत्नांचे ‘वर्तुळ’|website=archive.loksatta.com}}</ref> Eius prima brevis pellicula ''Vartul'' <ref>{{Cite web|url=http://archive.indianexpress.com/news/zee-talkies--film-released/510207/2|title=Vartul to be screened at Third Eye Asian Film Festival|website=archive.indianexpress.com}}</ref> in plus quam quinquaginta et sex festivitatibus exhibita est et tredecim praemia reportavit. ''Prashna'' (Quaestio, 2020) pro Filmfare Short Film Awards 2020 finalis designata est. Santosh Ram Iridis Praemium cum mentione speciali (Scriptura) pro ''Prashna'' in UNICEF Innocenti Film Festival 2021 in [[Florentia|Florentiae]], [[Italia|Italiae]] vicit. == Vita et origo == Ram natus est in Dongershelki, in districtu Latur, [[Maharastra|Maharashtra]]. Ram in familia mediae condicionis in Udgir, <ref>{{Cite web|url=https://www.misalpav.com/node/15564|title=वर्तूळ - एक अनुभव|website=misalpav.com}}</ref> Maharashtra, India, adolevit. Ab infantia in regione Marathwada educatus est.<ref>{{Cite web|url=https://www.thehindu.com/news/cities/mumbai/news/Cinema-that-can%E2%80%99t-escape-reality/article13991081.ece|title=Cinema that can’t escape reality|website=thehindu.com}}</ref> == Cursus == Santosh<ref>{{Cite web|url=https://www.thehindu.com/news/national/other-states/showcasing-maharashtras-rural-milieu-like-no-other-filmmaker/article37672830.ece|title=Showcasing Maharashtra’s rural milieu like no other filmmaker|website=thehindu.com}}</ref> cursum suum cinematographicum scribendo incepit et anno 2009 breves pelliculas <ref>{{Cite web|url=https://issuu.com/thegoldensparrow/docs/tgs_broadsheet_pages_april_30_pdf_f/7|title=His Cinema doesnot escape reality|website=issuu.com/thegoldensparrow/docs}}</ref> dirigere coepit. Primam suam brevem pelliculam [[Lingua Marathica|Marathicam]], ''Vartul'', in pellicula 35mm cinematographica confecit. ''Vartul'' (2009) in plus quam quinquaginta et sex festivitatibus nationalibus et internationalibus exhibita est, inter quas: 11th Osian's Cinefan Film Festival <ref>{{Cite web|url=https://www.deccanherald.com/content/27577/Vartul-screened-osians-cinefan-film.html|title='Vartul' to be screened at Osian's-Cinefan film festival|website=deccanherald.com}}</ref> 2009, [[Dellium Novum|Novae Delhi]]; 3rd International Documentary and Short Film Festival of [[Malabaria|Kerala]], 2010, [[India]]; 8th Third Eye Asian Film Festival <ref>{{Cite web|url=https://timesofindia.indiatimes.com/city/pune/vartul-to-be-screened-at-8th-third-eye-asian-film-festival/articleshow/5285972.cms|title=Vartul' to be screened at 8th Third Eye Asian film festival|website=timesofindia.Indiatimes.com}}</ref> 2009, [[Mumbai]]; et 17th Toronto Reel Asian International Film Festival 2013 ([[Canada|Canadiae]]); tredecim praemia reportavit. Secunda eius brevis pellicula ''Galli'' (2015) in tredecim festivitatibus cinematographicis nationalibus et internationalibus exhibita est. Ultima eius pellicula ''Prashna'' (2020)<ref>{{Cite web|url=https://www.unicef.org/press-releases/unicef-innocenti-film-festival-tells-stories-childhood-around-world|title=UNICEF Innocenti Film Festival tells stories of childhood from around the world|website=Unicef.org}}</ref> pro Filmfare Short Film Awards 2020 finalis designata est <ref>{{Cite web|url=https://www.filmfare.com/awards/short-films-2020/finalists/prashna-question/3612|title=Prashna (Question) – Social Awareness Short Film|website=Filmfare.com}}</ref> et in triginta et sex festivitatibus cinematographicis toto orbe terrarum publice selecta est <ref>{{Cite web|url=https://www.migrationcollective.com/lmff-online-program-2021|title=Online programme|website=migrationcollective.com}}</ref>, sedecim praemia reportans. == Filmographia == {| class="wikitable sortable" !Annus ! Pellicula ! Lingua ! Director ! Scriptor ! Effector ! class="unsortable" | Notae |- | 2009 | ''Vartul'' | Marathica || sic || sic || Non | Selecta in quinquaginta et tribus festivitatibus cinematographicis<br /> Quattuordecim praemia reportavit |- | 2015 | ''Galli'' | Marathica || sic || sic || sic | Selecta in tredecim festivitatibus cinematographicis |- | 2020 | ''Prashna'' <ref>{{Cite web|url=https://asianmoviepulse.com/2021/09/short-film-review-prashna-question-2020-by-santosh-ram|title=Short Film Review: Prashna (Question, 2020) by Santosh Ram|website=asianmoviepulse.com}}</ref> | Marathica || sic || sic || Non | Selecta in triginta et quattuor festivitatibus cinematographicis<br /> Sedecim praemia reportavit |- | 2024 | ''Historia Yuvraj et Shahajahan'' | Marathica, Hindica || sic || sic || sic | Brevis pellicula |- | 2026 | ''China Mobile'' <ref>{{Cite web|url=https://divyamarathi.bhaskar.com/news/BOL-MB-marathi-film-china-mobiles-poster-release-5219132-NOR.html|title=संतोष राम दिग्दर्शित 'चायना मोबाईल' सिनेमाच्या पोस्टरचे अनावरण|website=divyamarathi.bhaskar.com}}</ref> | Marathica || sic || sic || sic | Pellicula longa |} == Praemia et laudes == ''Vartul'' 2009 * Optima Pellicula - 4th International Short Film Festival of India 2010, [[Maderaspatanum|Chennai]]. * Optima Pellicula - 2nd International Film Festival Nagpur 2011 * Optimus Director - Pune Short Film Festival 2011, [[Pune]] * Optima Pellicula - 6th Goa Marathi Film Festival 2013, [[Goa]] * Optima Pellicula - Kerala Short Film Festival 2013 * Praemium Laudis pro Excellentia in Cinematographia - Kanyakumari International Film Festival 2013, Kanyakumari * Mentio Specialis Iuratorum - Navi Mumbai International Film Festival <ref>{{Cite web|url=https://www.americanbazaaronline.com/2014/02/06/filmmakers-ravi-jadhav-nagesh-kukunoor-felicitated-navi-mumbai-international-film-festival|title=The winners of the festival are|website=americanbazaaronline.com}}</ref> 2014, Navi Mumbai * Optima Pellicula - Barshi Short Film Festival 2014 * Optima Pellicula - 1st Maharashtra Short Film Festival 2014 * Nominata - Maharashtra Times Awards 2010 ''Prashna'' 2020 * Iridis Praemium cum Mentione Speciali (Scriptura) - UNICEF Innocenti Film Festival 2021, [[Florentia|Florentiae]], [[Italia|Italiae]]. <ref>{{Cite web|url=https://www.unicef.org/nepal/press-releases/uiff-scarecrow-win|title=Honors Given to Top Films in Competition at the UNICEF Innocenti Film Festival|website=unicef.org}}</ref> * Nominatio - Optima Brevis Pellicula - Filmfare Awards 2020, [[Mumbai]] <ref>{{Cite web|url=https://www.filmfare.com/awards/short-films-2020/finalists/prashna-question/3612|title=Prashna (Question) – Social Awareness Short Film|website=Filmfare.com}}</ref> * Optima Brevis Pellicula - 3rd Vintage International Film Festival, Kolhapur <ref>{{Cite web|url=https://www.maharashtrajanbhumi.in/2020/10/Vintage-International-Film-Festival-starts-today.html|title=विंटेज आंतरराष्ट्रीय चित्रपट महोत्सवास आजपासून सुरु, जाणून घ्या 'विंटेज'च्या कलाकृती|website=www.maharashtrajanbhumi.in}}</ref> 2020 * Optima Brevis Pellicula - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Optima Brevis Pellicula Socialis - Bettiah International Film Festival 2020 * Optima Brevis Pellicula, Mentio Specialis Honoris - Plant Seed International Short Film Festival 2020 * Optimus Director - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Optima Scriptura Cinematographica - 4th Anna Bhau Sathe International Film Festival, [[Pune]] 2021 * Mentio Specialis pro Optima Brevi Pellicula Fictionali - 14th SIGNS Short and Documentary Film Festival, <ref>{{Cite web|url=https://www.lokmat.com/latur/santosh-rams-question-best-short-film-bengal-kerala-a693|title=santosh ram's question best short film at Bengal and kerala|website=lokmat.com}}</ref> 2021 * Optima Brevis Pellicula - 6th Bengal International Short Film Festival, [[Calcutta|Kolkata]] <ref>{{Cite web|url=https://btvnewsmaharashtra.blogspot.com/2021/06/blog-post_14.html|title=बंगाल आणि केरळ मध्ये संतोष राम यांचा "प्रश्न" ठरला सर्वोत्कृष्ट लघुपट|website=btvnewsmaharashtra.blogspot.com}}</ref> 2021 * Mentio Specialis Iuratorum - 9th Smita Patil Documentary and Short Film Festival, [[Pune]]. * Optima Fabula - Ma Ta Short Film Festival 2022, [[Mumbai]] * Diploma Internationalis Certaminis Brevium Pelliculorum "Ad progressionem educationis in locis remotis" - 9th Zero Plus Film Festival, [[Tumenum|Tyumen]], [[Russia]] <ref>{{Cite web|url=https://vk.com/@zeroplusfest-pobediteli-ix-mezhdunarodnogo-festivalya-nol-plus|title=Winners of the IX International Festival "Zero Plus"|website=zeroplusff.ru}}</ref> == Notae == <references responsive="1"></references> == Nexus externi == * {{IMDb name|4407714}} [[Categoria:Nati 1979]] [[Categoria:Homines vivi]] [[Categoria:Moderatores cinematographici Indiae]] avfldoaumlueircqu5iinyb1rsjuerk Aretas 0 321671 3995562 3950257 2026-10-19T07:18:44Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995562 wikitext text/x-wiki {{Disambiguatio}} __DISAMBIG__ {{Vicificanda}} '''{{res|Aretas}}'''<ref>Healey, John F. (2001). "Ch. 2. Background: Nabataean history and trade". The religion of the Nabataeans: a conspectus. Religions in the Graeco-Roman world, vol. 136. Leiden ; Boston: Brill. p. 29. ISBN 978-90-04-10754-0. "We thus enter a period in which the sources are suf- ficiently abundant for us to be able to reconstruct a detailed table of Nabataean kings. The chronology has undergone revisions and refinements in recent years and the simplified list which follows is based on that of Robert Wenning (1993a), to which reference should be made for details: Aretas (ḥrtt) I c.168 B.C.[,] Aretas II c.120-96 B.C. [...]".</ref> est nomen [[Lingua Graeca|Graecum]] latum a regibus [[Nabataei|Nabataeorum]] qui incolerunt [[Petra (Iordania)|urbem Petrae]] abhinc circa [[Saeculum 2 a.C.n.|saeculo 2 a.C.n]] ad [[saeculum 2]]. Possit significare: * [[Aretas I]] erat rex qui [[Nabataea|Nabataeam]] Petrae regnavit. Videtur ille primus gentis regum qui regnaverunt in tempore [[Antiochus IV Epiphanius|Antiochi IV Epiphanii]] (ab anno 175 a.C.n. ad annum 164 a.C.n.) * [[Aretas II]] Nabataeam Petrae regnavit ab anno 120 a.C.n aut anno 110 a.C.n. ad annum 96 a.C.n. * [[Aretas III]] Nabateam Petrae regnavit ab anno 87 a.C.n. ad annum 62 a.C.n. * [[Aretas IV Philopatris]] erat socer [[Herodes Antipas|Herodis Antipas]]; in Novo Testamento (2 Cor. ille nominatur velut ut rex [[Damascus|urbis Damasci]] in tempore conversionis [[Paulus Tarsensis|apostuli Pauli]] Tarsensis ([[Epistula II ad Corinthios|Epistula 2 ad Corinthios]] [https://www.blueletterbible.org/vul/2co/11/32/t_conc_1089032 11:32]). * [[Arethas|Aretas (martyr Christianus)]] (anno mortis 523) ==Notae== <references /> {{NexInt}} * [[Aretas III]] * [[Haritha (disambiguation)|Haritha (discretiva)]] * [[Index regum Nabataeorum]] * [[Lingua Aramaica]] * [[Lingua Aramaica Nabataea]] * [[Petra (Iordania)]] * [[Saeculum 2 a.C.n.]] ==Nexus externi== ===Ad Vicipaedias et Victionaria linguarum variarum=== * [https://en.wikipedia.org/wiki/Arethas Arethas (pagina discretiva) in Vicipaedia Anglica] * [[Ἀρέτας|Ἀρέτας (Arétas) in Victionario]] * [[wiktionary:Aretas|Aretas in Victionario (Anglice)]] * [[wiktionary:Ἀρέτας#Ancient_Greek|Ἀρέτας (Arétas) in Victionario (Anglice)]] * [[wiktionary:Reconstruction:Proto-Semitic/ḥaraṯ-|Reconstructio:Proto-Semitica/ḥaraṯ- in Victionario (Anglice)]] ===Ad nexus alterios variosque=== * [https://logeion.uchicago.edu/%E1%BC%88%CF%81%CE%AD%CF%84%CE%B1%CF%82 Ἀρέτας], in [https://logeion.uchicago.edu/about ΛΟΓΕΙΟΝ] [''Logeion''] Index Verborum in lingua Graeca et Latina (Anglica, Francogallica, Hispanica, Germanica, Batava et Sinica) (Anglice: , [[Universitas Chicaginiensis]], abhinc 2011: ** [https://web.archive.org/web/20260106133717/https://artflsrv03.uchicago.edu/philologic4/Greek/query?report=concordance&method=phrase&q=lemma:%E1%BC%88%CF%81%CE%AD%CF%84%CE%B1%CF%82&start=0&end=0&author= Quaere corpus litterarum ad verbum hoc: "Ἀρέτας" in '''PhiloLogic4''' Concordantia (in lingua Graeca antiqua). ARTFL Proiecto, Universitas Chicaginiensis, pagina visa in die 26 Novembris anno 2025.] * Ἀρέτας [https://www.blueletterbible.org/lexicon/g702/kjv/tr/0-1/ G702] In [[:en:James_Strong_(theologian)|Strong, I.]]. (1979), ''[[:en:Strong's_Concordance|Strong’s Exhaustive Concordance to the Bible]].'' * [https://diconab.huma-num.fr/ Corpus Interretionale Inscriptionum Nabataearum et Arabicarum Emergentium (Anglice: "The Digital Corpus of the Nabataean and Developing Arabic Inscriptions") (DiCoNab)] * Quattuor inscriptiones encyclopaedicae de Areta In Smith, W. (1848). ''Lexicon biographiae et mythologiae Graecae et Romanae'' (Anglice: ''A Dictionary of Greek and Roman biography and mythology).'' [[Londinium|Londinii]]. Ioannes Murray: impressus a Spottiswoode et Sociis, versio interretialis in [https://www.perseus.tufts.edu/hopper/ Bibliotheca Digitali Persei]: ** [https://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0104%3Aalphabetic+letter%3DA%3Aentry+group%3D38%3Aentry%3Daretas-bio-1 Inscriptio Persei de Areta in sectione A.38.aretas-bio-1] ** [https://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0104%3Aalphabetic+letter%3DA%3Aentry+group%3D38%3Aentry%3Daretas-bio-2 Inscriptio Persei de Areta in sectione A.38.aretas-bio-2] ** [https://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0104%3Aentry%3Daretas-bio-3 Inscriptio Persei de Areta in sectione A.38.aretas-bio-3] ** [https://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0104%3Aentry%3Daretas-bio-4 Inscriptio Persei de Areta in sectione A.38.aretas-bio-4] * [https://www.blueletterbible.org/vul/2co/11/32/t_conc_1089032 Epistula 2 ad Corinthios 11:32], [https://www.blueletterbible.org/lexicon/g702/kjv/tr/0-1/ in Novo Testamento interretiali (Anglice: In an Online New Testament via blueletterbible.org"] ==Si vis plura legere== * Healey, Ioannes (John) F. (2001). [https://lccn.loc.gov/99058629 Religio Nabataeorum: Conspectus (Anglice: "The Religion of the Nabataeans: A Conspectus")]. In ''Religions in the Graeco-Roman World''. Vol. 136. Apud urbem Leidensis: Brill. ISBN 9789004107540. [https://lccn.loc.gov/99058629 LCCN 99058629]. [https://search.worldcat.org/en/title/43185847 OCLC 43185847]. [[Categoria:Nabataei]] [[Categoria:Antiquae civitates Asiae]] [[Categoria:Personae Biblicae]] [[Categoria:Nomina gentilicia]] [[Categoria:Linguae Afrasiaticae]] [[Categoria:Linguae Graeciae]] [[Categoria:Iordania]] [[Categoria:Arabes]] gu4f03npuf57iqeef5en9pr9gnrsk9g Franciscus Maria 0 322057 3995572 3945168 2026-10-19T11:17:17Z JackyM59 202366 Photograph updated 3995572 wikitext text/x-wiki {{Disnomen}} {{Nomen | genus = Masculinum | origo = Latina atque Hebraica | significatio = “(homo) gentis Francorum” atque “amatus” | imago = Buste de Voltaire par Jean Antoine Houdon (Louvre RF 1426).jpg | capitulum = Effigies philosophi atque scriptoris Francogallici [[Franciscus Maria Arouet|Francisci Mariae Arouet]], Lutetiae sita }} {{res|Franciscus Maria}} ({{pns|ae|m}})<ref>“Romana eius commoratio incidit in celebrationem VII saeculi ab obitu sancti Francisci Asisiensis (1926-1927) et in beatificationem '''Francisci Mariae''' a Camporubeo”; ''Acta Apostolicae Sedis'', an. et vol. CVIII, n. 8 (Civitatis Vaticanae, 2016): 934 [https://www.vatican.va/archive/aas/documents/2016/acta-agosto2016.pdf].</ref> est nomen masculinum, quod e ''[[Franciscus|Francisco]]'' nomine Latino medii aevi ac ''Maria'' nomine feminino [[Hebraice|Hebraico]] componitur. Saepe adhibetur apud [[Francia|Francogallicos]] ([[Francice]] ''François-Marie'')<ref>''Behind the Name'', s.v. “[https://www.behindthename.com/name/franc15ois01marie François-Marie]”. {{Ling|Anglice}}</ref> atque [[Italia|Italicos]] ([[Italiane]] ''Francesco Maria''). == Homines == * [[Franciscus Maria Arouet]], sive Voltarius * [[Franciscus Maria Borbonius de Monte]] * {{safesubst:Nexus ad paginam creandam creatamve|Franciscus Maria a Camporubeo||it|qid=Q934434}}, sanctus * [[Franciscus Maria Feltrius de Ruvere]] * [[Franciscus Maria Grimaldi]] * [[Franciscus Maria Milesi]] * [[Franciscus Maria Piave]] * [[Franciscus Maria Richini]] * [[Franciscus Maria Weyergans]] == Notae == <references /> [[Categoria:Nomina composita]] [[Categoria:Praenomina masculina]] nuiuu0o95la8x47fdb640xf109ssxmd Estivali gaudio 0 324488 3995553 3955696 2026-10-19T03:49:20Z Grufo 64423 Minora 3995553 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 = }} {{lores|Estivali gaudio}} est initium [[carmen|carminis]] a [[Goliardus|discipulis vagantibus]] [[Latinitas medii aevi|Latine]] scripti, quod in codice [[Carmina Burana|Carminum Buranorum]] sub numero LXXX reperitur.<ref name="carmina-amatoria-71-87">{{Opus | titulus = Carmina amatoria 71–87 | url = https://www.hs-augsburg.de/~harsch/Chronologia/Lspost13/CarminaBurana/bur_cam2.html }}.</ref> == Textus == {{Versus numerati| {{Nota typographica|style=margin-right: .5em;|1a.}}Estivali gaudio tellus renovatur, militandi studio Venus excitatur. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|1b.}}Ornantur prata floribus varii coloris, quorum delectatio causa fit amoris. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2a.}}In calore vivido nunc reformantur omnia, hiemali tedio que viluere languida. tellus ferens gramina decoratur floribus, et vestiuntur nemora frondosis arboribus. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2b.}}Amorum officiis hec arrident tempora, geminatis sociis restaurantur federa. festa colit Veneris puellaris curia, propinat Amor teneris amaris miscens dulcia. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur.<ref name="carmina-amatoria-71-87" /> }} == Descriptio == Hoc carmen, in sectione amatoria codicis servatum, renovationem mundi tempore aestivo celebrat, ubi terra, prata, et nemora post hiemis taedium rursus florescunt. Poëta naturam describit quasi scaenam ubi [[Venus (dea)|Venus]] excitatur et chorus iuvenum gaudet, avium cantu comitante, secundum morem [[Latinitas medii aevi|litterarum goliardicarum]].<ref name="carmina-amatoria-71-87" /> Argumentum carminis in gaudio amantium vertitur, qui sine malitia vel “felle” sub potestate [[Amor (deus)|Amoris]] in unum coniunguntur. In fine, textus exprimit quomodo temporis amoenitas foedera amicitiae et veneris restauret, dulcia amaris in curia puellari miscens, dum hiems funditus eradicatur.<ref name="carmina-amatoria-71-87" /> == Notae == <references /> == 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]] p5t940tnw4ud4zganruu65h3lu03pyv 3995554 3995553 2026-10-19T03:50:05Z Grufo 64423 /* Descriptio */ 3995554 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 = }} {{lores|Estivali gaudio}} est initium [[carmen|carminis]] a [[Goliardus|discipulis vagantibus]] [[Latinitas medii aevi|Latine]] scripti, quod in codice [[Carmina Burana|Carminum Buranorum]] sub numero LXXX reperitur.<ref name="carmina-amatoria-71-87">{{Opus | titulus = Carmina amatoria 71–87 | url = https://www.hs-augsburg.de/~harsch/Chronologia/Lspost13/CarminaBurana/bur_cam2.html }}.</ref> == Textus == {{Versus numerati| {{Nota typographica|style=margin-right: .5em;|1a.}}Estivali gaudio tellus renovatur, militandi studio Venus excitatur. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|1b.}}Ornantur prata floribus varii coloris, quorum delectatio causa fit amoris. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2a.}}In calore vivido nunc reformantur omnia, hiemali tedio que viluere languida. tellus ferens gramina decoratur floribus, et vestiuntur nemora frondosis arboribus. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2b.}}Amorum officiis hec arrident tempora, geminatis sociis restaurantur federa. festa colit Veneris puellaris curia, propinat Amor teneris amaris miscens dulcia. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur.<ref name="carmina-amatoria-71-87" /> }} == Descriptio == Hoc carmen, in sectione amatoria codicis servatum, renovationem mundi tempore aestivo celebrat, ubi terra, prata, et nemora post hiemis taedium rursus florescunt. Poëta naturam quasi scaenam describit ubi [[Venus (dea)|Venus]] excitatur et chorus iuvenum gaudet, avium cantu comitante, secundum morem [[Latinitas medii aevi|litterarum goliardicarum]].<ref name="carmina-amatoria-71-87" /> Argumentum carminis in gaudio amantium vertitur, qui sine malitia vel “felle” sub potestate [[Amor (deus)|Amoris]] in unum coniunguntur. In fine, textus exprimit quomodo temporis amoenitas foedera amicitiae et veneris restauret, dulcia amaris in curia puellari miscens, dum hiems funditus eradicatur.<ref name="carmina-amatoria-71-87" /> == Notae == <references /> == 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]] hjqhrc8hhj0dkzoos3c27gkjd6ue4q5 3995555 3995554 2026-10-19T03:50:17Z Grufo 64423 /* Descriptio */ 3995555 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 = }} {{lores|Estivali gaudio}} est initium [[carmen|carminis]] a [[Goliardus|discipulis vagantibus]] [[Latinitas medii aevi|Latine]] scripti, quod in codice [[Carmina Burana|Carminum Buranorum]] sub numero LXXX reperitur.<ref name="carmina-amatoria-71-87">{{Opus | titulus = Carmina amatoria 71–87 | url = https://www.hs-augsburg.de/~harsch/Chronologia/Lspost13/CarminaBurana/bur_cam2.html }}.</ref> == Textus == {{Versus numerati| {{Nota typographica|style=margin-right: .5em;|1a.}}Estivali gaudio tellus renovatur, militandi studio Venus excitatur. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|1b.}}Ornantur prata floribus varii coloris, quorum delectatio causa fit amoris. gaudet chorus iuvenum, dum turba frequens avium garritu modulatur. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2a.}}In calore vivido nunc reformantur omnia, hiemali tedio que viluere languida. tellus ferens gramina decoratur floribus, et vestiuntur nemora frondosis arboribus. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur. {{Nota typographica|style=margin-right: .5em;|2b.}}Amorum officiis hec arrident tempora, geminatis sociis restaurantur federa. festa colit Veneris puellaris curia, propinat Amor teneris amaris miscens dulcia. {{Nota typographica|style=margin-right: .5em;|(Refl.)}}Quanta sunt gaudia amanti et amato, sine fellis macula dilecte sociato! iam revernant omnia nobis delectabilia, hiems eradicatur.<ref name="carmina-amatoria-71-87" /> }} == Descriptio == Hoc carmen, in sectione amatoria codicis servatum, renovationem mundi tempore aestivo celebrat, ubi terra, prata, et nemora post hiemis taedium rursus florescunt. Poëta naturam quasi scenam describit ubi [[Venus (dea)|Venus]] excitatur et chorus iuvenum gaudet, avium cantu comitante, secundum morem [[Latinitas medii aevi|litterarum goliardicarum]].<ref name="carmina-amatoria-71-87" /> Argumentum carminis in gaudio amantium vertitur, qui sine malitia vel “felle” sub potestate [[Amor (deus)|Amoris]] in unum coniunguntur. In fine, textus exprimit quomodo temporis amoenitas foedera amicitiae et veneris restauret, dulcia amaris in curia puellari miscens, dum hiems funditus eradicatur.<ref name="carmina-amatoria-71-87" /> == Notae == <references /> == 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]] po3d24njjqcj4spjxwdkgs823kbwve3 Samuel Hartlibius 0 324590 3995483 3988897 2026-10-18T12:25:46Z InternetArchiveBot 139091 Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995483 wikitext text/x-wiki {{Capsa hominis Vicidata}} [[Fasciculus:Samuel Hartlib his legacie 1651 tp.jpg|thumb|''Samuel Hartlib his legacie'' (1651): titulus]] {{res|Samuel Hartlibius}},<ref>Editionem praeludiorum [[Iohannes Amos Comenius|Comenii]], anno 1637 divulgatam, in titulo operis "S. B." sed in praefatione "[https://archive.org/details/bim_early-english-books-1475-1640_conatuum-comenianorum-pr_komensk-jan-amos_1637/page/n3/mode/2up Samuel Hartlibius]" subscripsit</ref> vulgo ''Hartlib'' ([[Elbinga]]e in [[Polonia]] anno circiter [[1600]] natus; mortuus [[Londinium|Londinii]] die [[10 Martii]] [[1662]]), scientiae educationisque amator, in [[Anglia]] habitavit ubi epistulas cum eruditis pluribus commutabat. Inde provenerint archiva [[Hartlibiana]] litterarum scientificarum in pluribus bibliothecis hodiernis servata, praesertim apud [[Universitas Sheffieldiensis|Universitatem Sheffieldiensem]]. Inde ab historicis proponitur "{{safesubst:Nexus ad paginam creandam creatamve|grex Hartlibiana||en|qid=Q604837}}" (e nomine conductoris) et describitur "[[collegium invisibile]] nostrum" (''our invisible college''): talibus verbis [[Robertus Boyle]], Hartlibi amicus, collaborationem illam nuncupavit. Inde provenit insuper [[Societas Regalis Londini]]ensis, sub aegide regis [[Carolus II (rex Angliae)|Caroli II]] condita; sed collaboratores plures Samuelis Hartlib, una cum illo ipso, e nova Societate exclusi sunt tanquam rei publicae [[Oliverius Cromwellus|Cromwelli]]que sectatores. Samuel Hartlib filius fuit mercatorum, scilicet Georgii Hartlieb, Germani qui iamdudum Elbingae in Polonia pro societate mercatorum maris Baltici Anglorum agebat, et Anglae e familia mercatorum [[Gedanum|Gedani]] habitante, nomine Elizabetha Langton. Ipse [[Regiomontium|Regiomontii]] in [[Universitas Albertina Regiomontii|Universitate Albertina]] eruditum esse censebatur; recentius autem discipulum fuisse in academia urbis {{safesubst:Nexus ad paginam creandam creatamve|Alta Ripa (Polonia)|Altae Ripae|en|qid=Q214640}} [[Silesia]]e constat. Aliquot menses [[Cantabrigia]]e apud [[collegium Emmanuelis (Cantabrigia)|collegium Emmanuelis]], magistri [[Ioannes Preston|Ioannis Preston]] discipulus fortasse privatus, anno fere 1625 degebat. Londinium anno [[1628]] petivit. Ibi anno insequenti Mariam Burningham in matrimonium duxit. Anno circiter 1661, vicinus [[Samuel Pepys|Samuelis Pepys]], in Axe Yard [[Londinium|Londinii]] Londinii habitabat: ibi mortuus est. == Scripta selecta == * 1637 (editor) : [[Iohannes Amos Comenius]], ''Conatuum Comenianorum praeludia.'' William Turner, Oxoniae; [https://archive.org/details/bim_early-english-books-1475-1640_conatuum-comenianorum-pr_komensk-jan-amos_1637/mode/1up Textus]; [https://archive.org/details/bim_early-english-books-1475-1640_conatuum-comenianorum-pr_komensk-jan-amos_1637 Editio interretialis] ** editio 2a, 1639 : ''Reverendi et clarissimi viri Iohannis Amos Comenii Pansophiae prodromus''. Londinii: L. Fawne et S. Gellibrand; [https://www.digitale-sammlungen.de/en/view/bsb10916229 Textus apud Monacenses] * 1641 :''A briefe relation of that which hath been lately attempted to procure ecclesiastical peace amongst Protestants.'' Londinii; [https://quod.lib.umich.edu/e/eebo/A37055.0001.001?rgn=main;view=fulltext Editio interretialis]; [https://archive.org/details/bim_early-english-books-1641-1700_a-briefe-relation-of-tha_dury-john_1641/mode/1up Textus] * 1641 (sunt qui [[Gabriel Plattes|Gabrieli Plattes]] adscribunt) : ''A description of the famous kingdome of Macaria.'' Londinii; [https://quod.lib.umich.edu/e/eebo/A45750.0001.001?rgn=main;view=fulltext Editio interretialis] * 1642 (editor) : [[Ioannes Dury]], ''A motion tending to the publick good of this age and of posteritie.'' Londinii; [https://quod.lib.umich.edu/e/eebo/A37077.0001.001?rgn=main;view=fulltext Editio interretialis] * 1643 : ''A faithfvll and seasonable advice, or, The necessity of a correspondencie for the advancement of the Protestant cause humbly suggested to the great councell of England assembled in Parliament.'' [Londinii?]; [https://quod.lib.umich.edu/e/eebo/A45752.0001.001?rgn=main;view=fulltext Editio interretialis]; [https://web.archive.org/web/20260807204626/https://cesimadigital.pucsp.br/handle/bcd/4500%3Flocale-attribute%3Den Textus] {{Google Books|c-dbAAAAQAAJ}} * 1647 : ''Considerations tending to the happy accomplishment of Englands reformation in church and state.: Humbly presented to the piety and wisdome of the High and Honourable Court of Parliament.'' [Londinii] [https://quod.lib.umich.edu/e/eebo2/A87186.0001.001?rgn=main;view=fulltext Editio interretialis]; [https://web.archive.org/web/20260808190445/https://cesimadigital.pucsp.br/handle/bcd/4506%3Flocale-attribute%3Den Textus] * 1648 : ''A further discoverie of the office of publick addresse for accommodations.'' London 1648 [https://quod.lib.umich.edu/e/eebo/A45753.0001.001?rgn=main;view=fulltext Editio interretialis] * 1651 : ''The reformed husband-man''. Londinii; [https://archive.org/details/b30341012/page/n5/mode/2up Textus] * 1651 : ''Samuel Hartlib his legacie: or An enlargement of the Discourse of husbandry used in Brabant and Flaunders.'' Londinii [https://quod.lib.umich.edu/e/eebo2/A87190.0001.001?rgn=main;view=fulltext Editio interretialis]; [https://babel.hathitrust.org/cgi/pt?id=wu.89094194099&seq=17 Textus] ** 3a editio, 1655 : ''Samuel Hartlib his legacy of husbandry.'' Londinii [https://quod.lib.umich.edu/e/eebo/A45756.0001.001?rgn=main;view=fulltext Editio interretialis]; [https://babel.hathitrust.org/cgi/pt?id=uc1.31822042770032&seq=5 Textus] == Notae == <references/> == Bibliographia == * J. Crawford et al., edd., ''The Hartlib papers''. 2a ed. Sheffield, 2002 [CD-ROM] * D. R. Dickson, ''The Tessera of Antilia: Utopian Brotherhood and Secret Societies in the Early Seventeenth Century''. Lugduni Batavorum: Brill, 1998 * M. Greengrass, "Hartlib, Samuel (c. 1600–1662)" (2004/2007) in {{ODNB}} {{Penna}} * M. Greengrass, M. Leslie, T. Raylor, edd., ''Samuel Hartlib and universal reformation: studies in intellectual communication''. 1994 * Stéphane Haffemayer, ''Les Lumières radicales de la Révolution anglaise. Samuel Hartlib et les réseaux de l’Intelligence (1600-1660)''. Lutetiae: Classiques Garnier, 2018 * G. H. Turnbull, ''Samuel Hartlib: a sketch of his life and his relations to J. A. Comenius''. Londinii: Oxford University Press, 1920; [https://archive.org/details/cu31924027998859/ Textus apud Internet Archive] * G. H. Turnbull, ''Hartlib, Dury and Comenius: gleanings from Hartlib's papers''. Liverpolii: University Press of Liverpool, 1947; [https://archive.org/details/hartlibdurycomen0000turn/page Exemplar mutuabile] * Charles Webster, ''The great instauration: science, medicine and reform, 1626–1660''. 1975 * Charles Webster, ''A Portrait of Samuel Hartlib: In Search of Universal Betterment''. Cantabrigiae: Open Book Publishers, 2025 {{Penna}}; [https://archive.org/details/da3926c2-ddb8-4567-b13e-1be2fee655ab Textus] * Charles Webster, ed., ''Utopian planning and the puritan revolution: Gabriel Plattes, Samuel Hartlib and Macaria''. 1979 == Nexus externi == {{Fontes biographici}} {{Anni vitae|saeculo 16 aut 17|1662|Hartlib, Samuel}} [[Categoria:Eruditi Poloniae]] [[Categoria:Eruditi Angliae]] [[Categoria:Scriptores de re rustica]] [[Categoria:Protestantes]] ok61vngin4zewj8p3gg69pvl7b22tpx Thyminum 0 325468 3995519 3963857 2026-10-18T19:28:42Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995519 wikitext text/x-wiki [[Fasciculus:Base pair AT.svg|thumb|Par basium in ADN. Thyminum (unus cyclus) duplo vinculo cum adenino (duo cycli) iunctum est.]] '''Thyminum''' (nota T) est compositum [[aminum]]<ref>[https://pubchem.ncbi.nlm.nih.gov/compound/Thymine Pubchem]</ref> categoriae [[Pyrimidinum|pyrimidinorum]] (cum uno cyclo), una e quattuor [[Basis nucleici acidi|basibus nucleicis]] quae in [[Acidum desoxyribonucleicum|acido desoxyribonucleïco]] velut alphabetum linguae [[Genetica|geneticae]] constituunt. Summa eius formula est {{chem|C|5|H|6|N|2|O|2}}. In duplici [[Helix|helice]] [[Chromosoma|chromosomatum]] [[Vinculum chemicum|vinculis hydrogenicis]] duobus cum [[Adeninum|adenino]] iungitur: nullum aliud [[Par basium|par]] formare potest. In [[Acidum ribonucleicum|acido ribonucleïco]] non invenitur ubi [[Uracilum|uracilum]] eius locum tenet. Thyminum gregem [[Methylum|methylum]] ({{chem|CH|3}}) in [[Carbonium|carbonio]] 5 praebet quem non habet uracilum (quocirca ei aliud nomen est 5-methyluracilum). Nomen e [[Thymus (glandula)|thymo]] ortum est quia ibi primum thyminum inventum est. [[Nucleosidum]] (basis + [[pentosum]]) (ribo)thymidinum vel desoxythymidinum appellatur. Nucleotidum (nucleosidum + [[phosphatum]]) e nomine basis appellatur thymidinum monophosphatum. == Notae == <references/> == Nexus externi == *[[Vicimedia Communia|Vicimedia communia]] plura habent quae ad [https://commons.wikimedia.org/wiki/Category:Thymine thyminum] spectant. *[https://www.futura-sciences.com/sante/definitions/genetique-thymine-836/ Futura] * [https://web.archive.org/web/20260310062313/https://www.aquaportail.com/dictionnaire/definition/11946/thymine Aquaportail] [[Categoria:Nucleobases]] [[Categoria:Pyrimidina]] jd2uzyiuf9yyza5cueuh6t2a4czkpu7 Uracilum 0 325482 3995531 3963858 2026-10-18T21:53:52Z InternetArchiveBot 139091 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 3995531 wikitext text/x-wiki [[Fasciculus:Uracil.svg|thumb|Structura chemica uracili.]] '''Uracilum''' (nota U) est [[Compositum chemicum|compositum]] [[Chemia organica|organicum]] [[Nitrogenium|nitrogeniatum]]<ref>[https://pubchem.ncbi.nlm.nih.gov/compound/uracil PubChem]</ref> categoriae [[Pyrimidinum|pyrimidinorum]] (cum uno cyclo), una e quattuor [[Basis nucleici acidi|basibus nucleicis]] quae in [[Transcriptio (biologia)|ADN transcribendo]] moleculam [[Acidum ribonucleicum|acidi ribonucleici]] formant et "nuntium" ab [[ADN]] missum in [[cellula|cellularum]] [[cytoplasma]] transferunt. Summa eius formula est {{chem|C|4|H|4|N|2|O|2}}. In ARN molecula uracilum illos locos implet ubi in ADN [[adeninum]] legitur quocum [[Vinculum chemicum|vinculis hydrogenicis]] duobus iungitur: nullum aliud [[Par basium|par]] formare potest. In acido desoxyribonucleïco inveniri non debet<ref>De pathologia enim agitur: Oliver Mortusewicz, James Haslam, Helge Gad, Thomas Helleday. "[https://www.cell.com/molecular-cell/fulltext/S1097-2765(25)00355-7 Uracil-induced replication stress drives mutations, genome instability, anti-cancer treatment efficacy, and resistance]", ''Molecular Cell'', 2025: 1897-1906.</ref> ubi [[thyminum]] eius locum tenet. Thyminum gregem [[Methylum|methylum]] ({{chem|CH|3}}) in [[Carbonium|carbonio]] quinto praebet quem non habet uracilum. [[Nucleosidum]] (basis uracilum + [[pentosum]]) uridinum appellatur. Nucleotidum (nucleosidum + [[phosphatum]]) e nomine basis appellatur plerumque uridinum monophosphatum. == Notae == <references/> == Plura legere si cupis == *Susital Mal, Chris H. J. Franco, Binay Kumar, Alexander M. Kirillov, Subrata Das. "[https://pubs.rsc.org/en/content/articlehtml/2025/ce/d5ce00362h Exploring uracil derivatives: synthesis, crystal structure insights, and antibacterial activity]", ''CrystEngComm'', 2025:3456-3466 == Nexus externi == *[[Vicimedia Communia|Vicimedia communia]] plura habent quae ad [https://commons.wikimedia.org/wiki/Category:Uracil uracilum] spectant. *[https://www.futura-sciences.com/sante/definitions/genetique-uracile-280/ Futura] *[https://web.archive.org/web/20260516020436/https://www.aquaportail.com/dictionnaire/definition/4403/uracile Aquaportail] *[https://www.britannica.com/science/uracil Britannica] [[Categoria:Nucleobases]] [[Categoria:Pyrimidina]] e9pvrs9dbveugqljbc7sayunwwg4vfv Mors adiuta 0 329369 3995527 3994469 2026-10-18T20:46:15Z ~2026-55843-70 216450 3995527 wikitext text/x-wiki {{discretiva}} '''Mors adiuta''', '''mors auxiliata''', '''mors cum auxilio''', '''auxilium ad moriendum''', '''adiumentum ad mortem''', '''mors voluntaria''', '''finis vitae adiutus''' aut '''auxilium in morte''' est terminus generalis ad auxilium moriendi designandum, qui ad quemlibet ex sequentibus modis procedendi referri potest: * [[Euthanasia]], interventus qui mortem aegroti terminalis efficit vel accelerat, eo consilio ut dolor et cruciatus vitentur. * [[Suicidium adiutum]], auxilium vel adiumentum alteri personae praestitum ad propriam vitam finiendam. * [[Sedatio terminalis]], administratio medicamentorum effectum tranquillandi vel sedandi habentium personae quae morti appropinquat, quae mortem aegroti accelerare potest. {{NexInt}} * [[Ius moriendi]] * [[Mors digna]] [[Categoria:Mors]] 5to39oo231jke4cuhkadwqzkl6m3e8x 3995535 3995527 2026-10-18T23:20:08Z IacobusAmor 1163 ~ 3995535 wikitext text/x-wiki {{discretiva}} '''''Mors adiuta''''', '''''mors auxiliata''''', '''''mors cum auxilio''''', '''''auxilium ad moriendum''''', '''''adiumentum ad mortem''''', '''''mors voluntaria''''', '''''finis vitae adiutus''''', aut '''''auxilium in morte''''' est terminus generalis ad auxilium [[mors|moriendi]] designandum, qui ad quemlibet ex sequentibus modis procedendi referri potest: * [[Euthanasia]], interventus qui mortem aegroti terminalis efficit vel accelerat, eo consilio ut dolor et cruciatus vitentur. * [[Suicidium adiutum]], auxilium vel adiumentum alteri personae praestitum ad propriam vitam finiendam. * [[Sedatio terminalis]], administratio medicamentorum effectum tranquillandi vel sedandi habentium personae quae morti appropinquat, quae mortem aegroti accelerare potest. {{NexInt}} * [[Ius moriendi]] * [[Mors digna]] [[Categoria:Euthanasia]] [[Categoria:Mors]] 6zlmmeug7cxhtv3j4dbqdw7wfh35bd3 Fluxus conscientiae 0 329377 3995492 3995458 2026-10-18T13:55:40Z IacobusAmor 1163 3995492 wikitext text/x-wiki [[Fasciculus:UlyssesCover.jpg|thumb|Involucrum [[Ulysses (Joyce)|Ulysses]] ab [[Iacobus Joyce|Iacobo Joyce]].]] {{res|Fluxus conscientiae}}{{Convertimus|sicut=[[Italice]]|barbarice={{npc|it|Flusso di coscienza}}}} in [[critica litterarum]] est modus vel ratio [[narratio|narrandi]] qua [[scriptor]] multitudinem [[cogitatio]]num [[sensus|sensuum]]que depingere conatur qui [[animus|animum]] suum percurrunt.<ref>[https://www.britannica.com/art/stream-of-consciousness stream of consciousness] ([[Encyclopaedia Britannica]]).</ref> Tali rationi saepe est forma {{safesubst:Nexus ad paginam creandam creatamve|monologus interior|monologi interioris|de|qid=Q466163}},<ref>[https://www.britannica.com/art/interior-monologue interior monologue] (Encyclopaedia Britannica).</ref> qui nexibus caret aut interpunctione inaequabili distinguitur. [[Iacobus Joyce]]<ref>''[[Ulysses (Joyce)|Ulysses]]'' et ''[[Finnegans Wake]].''</ref>, [[T. S. Eliot]]<ref>''The Love Song of J. Alfred Prufrock.''</ref>, [[Gulielmus Faulkner]]<ref>''The Sound and the Fury.''</ref>, [[Iacobus Kerouac]]<ref>''On the Road.''</ref>, [[Marcellus Proust]] et [[Virginia Woolf]] inter [[scriptor]]es qui fluxu conscientiae usi sunt numerantur. Notio fluxūs conscientiae ex opere ''{{Op|The Principles of Psychology}}'',<ref>Latine: “Principia psychologiae.”</ref> quod [[Gulielmus James|Gulielmus James]] anno [[1890]] edidit, originem duxit. == Notae == <references/> == Nexus externi == {{CommuniaCat|Stream of consciousness|fluxum conscientiae}} [[Categoria:Ars]] [[Categoria:Ars rhetorica]] [[Categoria:Litterae]] [[Categoria:Modernismus litteratus]] flo286tnm1ec74yigk8d3uy8wg8gqg8 Sancta Crux (provincia Argentinae) 0 329393 3995569 3995390 2026-10-19T08:25:07Z Demetrius Talpa 81729 3995569 wikitext text/x-wiki {{videdis|Sancta Crux (discretiva)}}{{Capsa subdivisionis Vicidata}} {{res|Provincia Sanctae Crucis}}{{Convertimus}} ([[Hispanice]] ''Santa Cruz'') est [[Argentina]]e provincia {{num|1101593}} incolarum (anno [[2010]]). In extremitate Argentinae australi sita est, in [[Patagonia]] inter [[Chilia]]m et [[Oceanus Atlanticus|Oceanum Atlanticum]]; [[planities elata]] et frigida est. Ab [[Argentina]] solum saeculo XIX exeunte occupata est. Caput provinciae est [[Rivus Gallaecus]], alia urbs maior [[Portus Sancti Iuliani]]. Flumina maxima sunt [[flumen Sanctae Crucis|flumen Sanctae Crucis]], de quo provincia nomen habet, et [[flumen Desideratum]] (cum tributario [[flumen Picturarum|flumine Picturarum]]). == Notae == <references /> ==Nexus interni== *[[Mons Christi]] ==Nexus externi== {{fontes geographici}} {{Formula:Provinciae Argentinae}} [[Categoria:Provinciae Argentinae]] [[Categoria:Patagonia]] ld5zrpzhoryednk6hkguh0bfvo0n9d9 Usor:ווסטוק/lingua 2 329424 3995510 3995349 2026-10-18T18:06:58Z ווסטוק 215963 3995510 wikitext text/x-wiki <noinclude> ; [[Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * </noinclude>[[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude><noinclude> * {{ {{FULLPAGENAME}} }} * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] * {{tl|Capsa lateralis}} </noinclude> aa8rhmlqx1gsc35dfdvtl3q90a66hr9 3995511 3995510 2026-10-18T18:08:50Z ווסטוק 215963 3995511 wikitext text/x-wiki <noinclude> ; [[Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * [[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude><noinclude> * {{ {{FULLPAGENAME}} }} * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] * {{tl|Capsa lateralis}} </noinclude> e9qru2sdsleeeh5ypqblk8reykjlwpn 3995513 3995511 2026-10-18T18:47:58Z ווסטוק 215963 3995513 wikitext text/x-wiki <noinclude> {| align=center |+ </noinclude>[[Usor:{{ROOTPAGENAME}}/lingua|lingua]]<noinclude> | {{plainlist| * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hy}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * [[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] }}</noinclude><noinclude> |style="text-align:center;"| : {{ {{FULLPAGENAME}} }} : [[Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] : {{tl|Capsa lateralis}} : [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] |}</noinclude> q4czpm0j103j6w3ar86bmc5znin3y2s 3995516 3995513 2026-10-18T18:53:59Z ווסטוק 215963 3995516 wikitext text/x-wiki <noinclude> * {{ {{FULLPAGENAME}} }} * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hy}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * [[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude>[[Usor:{{ROOTPAGENAME}}/lingua|lingua]]<noinclude> * [ [Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] * {{tl|Capsa lateralis}} </noinclude> 3c7vmpwbnvlge0fw0pmghwzj0dbc26n 3995517 3995516 2026-10-18T18:54:47Z ווסטוק 215963 3995517 wikitext text/x-wiki <noinclude> * {{ {{FULLPAGENAME}} }} * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hy}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * [[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude>[[Usor:{{ROOTPAGENAME}}/lingua|lingua]]<noinclude> * [[Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] * {{tl|Capsa lateralis}} </noinclude> hs7caloah3w2v2sakz471mgv7gjv44j 3995523 3995517 2026-10-18T19:50:27Z ווסטוק 215963 3995523 wikitext text/x-wiki <noinclude> * {{ {{FULLPAGENAME}} }} * </noinclude>[[ar: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hy: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hy}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * </noinclude>[[ku: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ku}}]] * </noinclude>[[ko: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ko}}]] * [[la: user: {{PAGENAME}}|{{ROOTPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{ROOTPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude>[[Usor:{{ROOTPAGENAME}}/lingua|lingua]]<noinclude> * [[Special: CentralAuth/{{ROOTPAGENAME}}|Central Auth]] * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] * {{tl|Capsa lateralis}} </noinclude> bmmd1tf2eqhdd3lqibrph24m8ythzv0 3995528 3995523 2026-10-18T20:47:44Z ווסטוק 215963 3995528 wikitext text/x-wiki <noinclude> * [[Special: CentralAuth/{{ROOTPAGENAME}}|Special: Central Auth]] * [[Usor:{{ROOTPAGENAME}}/Capsa lateralis|Capsa lateralis]] {{tl|Capsa lateralis}} * </noinclude>[[ar: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ar}}]] * </noinclude>[[ca: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ca}}]] * </noinclude>[[ceb: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ceb}}]] * </noinclude>[[cy: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:cy}}]] * </noinclude>[[de: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:de}}]] * </noinclude>[[el: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:el}}]] * </noinclude>[[en: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:en}}]] * </noinclude>[[eo: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:eo}}]] * </noinclude>[[es: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:es}}]] * </noinclude>[[et: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:et}}]] * </noinclude>[[fa: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:fa}}]] * </noinclude>[[fr: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:fr}}]] * </noinclude>[[he: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:he}}]] * </noinclude>[[hy: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:hy}}]] * </noinclude>[[hyw: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:hyw}}]] * </noinclude>[[it: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:it}}]] * </noinclude>[[ku: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ku}}]] * </noinclude>[[ko: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ko}}]] * [[la: user: {{PAGENAME}}|{{SUBPAGENAME}}]] * [[{{#language:la}}]] * </noinclude>[[lmo: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:lmo}}]] * </noinclude>[[lv: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:lv}}]] * </noinclude>[[min: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:min}}]] * </noinclude>[[ms: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ms}}]] * </noinclude>[[mt: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:mt}}]] * </noinclude>[[no: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:no}}]] * </noinclude>[[pt: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:pt}}]] * </noinclude>[[ro: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ro}}]] * </noinclude>[[ru: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:ru}}]] * </noinclude>[[tr: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:tr}}]] * </noinclude>[[yi: user: {{PAGENAME}}|{{SUBPAGENAME}}]]<noinclude> * [[{{#language:yi}}]] * </noinclude> hufrd5d8m6oqebj08o7taa67jbihs58 Marcus Pupius Piso Frugi Calpurnianus 0 329444 3995486 3995356 2026-10-18T13:21:14Z Marcus Terentius Bibliophilus 2059 3995486 wikitext text/x-wiki '''Marcus Pupius Piso Frugi Calpurnianus''' fuit [[Senatus Romanus|senator Romanus]] primi saeculi a.C.n. qui [[Consul|consulatum]] cum [[Marcus Valerius Messalla Niger|Valerio Messalla]] anno [[61 a.C.n.]] gessit. E clientibus [[Pompeius|Pompei]] erat. In consulatu [[Publius Clodius Pulcher|Publium Clodium]] [[Sacra Bonae Deae (62 a.C.n.)|sacrilegii]] convictum tuebatur quocirca [[Cicero]] in [[Epistulae ad Atticum|epistulis ad amicum Titum Pomponium]] nulli verbo contumelioso adversus eum pepercit. In philosophia adsectator [[Peripatetici|Peripateticae doctrinae]] fuit. == De origine et educatione == E nobili [[gens Calpurnia|gente Calpurniorum Pisonum]] ortus a Marco quodam Pupio adoptatus est<ref>[[Cicero]], ''Pro domo sua'' 13</ref>, quod ipsum nomen revelat. Frater ei fuit Gaius Calpurnius Piso consul anno 67 a.C.n. quem sententiam primum rogabat cum consul senatui praesidebat<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.2.</ref>. Discipulus fuit [[Lucius Licinius Crassus|Lucii Licinii Crassi]] oratoris atque peripatetici philosophi Staseae Neapolitani. Condiscipulus Ciceronis atque etiam repetitor (nam aliquanto maior natu erat) fuit<ref>[[Cicero]], ''[[Brutus (Cicero)|Brutus]]'' 240 et 310. [[Quintus Asconius Pedianus|Asconius]] ad ''In Pisonem'' 62</ref> qui postea eum quinto libro ''[[De finibus bonorum et malorum|de Finibus]]'' induxit doctrinae moralis peripateticorum explanandae causa. == De cursu honorum == * Anno [[83 a.C.n.|83]] [[quaestor]] fuit tum cum [[populares]] dominabantur. Mox tamen ad exercitum [[Lucius Cornelius Scipio Asiaticus (consul 83 a.C.n.)|Scipionis]] consulis cui sorte obtigisset non profectus ad [[Sylla|Syllanos]] transfugit<ref>''[[Orationes Verrinae|In Verrem]]'' II.1.37.</ref>. Postea etiam Anniam, quae [[Lucius Cornelius Cinna|Cinnae]] uxor fuerat, repudiavit<ref>[[Velleius Paterculus]] II.41.</ref>. * anno incerto in aedilitate petenda repulsam rettulit<ref>Cicero, ''[[Pro Plancio]]'' 21.</ref> * circa [[72 a.C.n.]] [[praetor]] fuit et ex praetura [[proconsul]] in Hispania [[Quintus Caecilius Metellus Pius|Metello Pio]] successisse videtur * [[69 a.C.n.]] de Hispania ob victoriam non alioqui notam [[Triumphus|triumphavit]]. [[ Lucius Calpurnius Piso Caesoninus (consul 58 a.C.n.)|Lucius Calpurnius Piso]], consul [[58 a.C.n.|58 a.c.n.]] eius nimiam triumphi cupidinem irridere solebat<ref>[[Quintus Asconius Pedianus|Asconius]], ad ''In Pisonem'' 62</ref>. * Inter [[67 a.C.n.|67]] et 63 a.C.n. legatus Gnaei Pompei fuit. In bello adversus [[Pirata|piratas]] [[Propontis]] et ostium [[Pontus Euxinus|Ponti Euxini]] ei mandata sunt (67)<ref>[[Appianus Alexandrinus|Appianus]], ''Mithridatica'' 95.</ref>. Adhuc memoratur in [[Hierosolyma|Hierosolymae obsessione]]<ref> [[Flavius Iosephus]], ''[[Antiquitates Iudaicae|Antiquitates Iuadaicae]]'' 14.59 et ''[[De bello Iudaico|Bellum Iudaicum]]'' 1.144.</ref> * [[62 a.C.n.]] consulatum petebat. Huius consulatus tam cupidus erat Pompeius (sperabat enim ratam a senatu fore consule adiuvante novam ordinationem Orientis a se factam) ut differenda [[comitia |comitia consularia]] rogaverit ita ut ipse candidato praesens adesset, quod tamen a [[Cato minor|Catone]] ceterisque [[optimates|optimatibus]] ei negatum est<ref>[[Plutarchus]], ''Cato minor'' 30.1-3 et ''[[Vita Pompei (Plutarchus)|Pompeius]]'' 44.1. Econtra [[Cassius Dio|Dio Cassius]] XXXVII.44 adfirmare videtur comitia revera postposita esse.</ref>. * [[61 a.C.n.]] consul fuit cum Messalla Nigro. Tum ita aperte Publium Clodium in scandalo pollutorum [[Sacra Bonae Deae|Bonae Deae sacrorum]] una cum [[Tribunus plebis|tribuno plebis]] [[Quintus Fufius Calenus|Fufio Caleno]] tuebatur ut rogationem a consulibus (hoc est ab ipso) ex senatusconsulto promulgatam impugnarit. Cicero indignans de eo scribebat: ''Piso amicitia P. Clodi ductus operam dat ut ea rogatio quam ipse fert et fert ex s.c. et de religione antiquetur''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.3. Cf ibidem I.14.5.</ref>. Postquam vero Clodius a iudicibus [[Marcus Licinius Crassus (triumvir)|M. Licinii Crassi]] pecunia corruptis contra manifestam rei veritatem absolutus est ita indignati sunt omnes optimates ut M. Pupius Piso nullam [[Provincia Romana|provinciam]] post consulatum obtinuerit ([[Syria (provincia Romana)|Syriam]] speraverat) nec ullum alium honorem. Praeterea res a Pompeio sibi mandatas non peragere potuit<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.16.8.</ref>. Fortasse operae pretium est nonnulla verba contumeliosa a Cicerone in consulem Pupium Pisonem invecta hic referre. Ita dicitur ''parvo animo et pravo tamen ... facie magis quam facetiis ridiculus, nihil agens cum republica... a quo nihil speres boni rei publicae, quia non vult, nihil speres mali, quia non audet''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.2.</ref>. Et in alia epistula: ''uno vitio minus vitiosus, quod iners, quod somni plenus, quod imperitus, quod apraktotatos sed voluntate ita kachektes, ut Pompeium post illam contionem, in qua ab eo senatus laudatus est, odisse coeperit. Itaque mirum in modum omnes a se bonos alienavit. Neque id magis amicitia Clodi adductus fecit quam studio perditarum rerum atque partium''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.14.6.</ref>. Ac postremo: ''consul autem ille deterioris histrionis similis''...<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.16.12.</ref>. == Praecipui fontes == * [[Asconius]], ad ''In Pisonem'' 62. * Cicero, libro primo [[Epistulae ad Atticum|Epistularum ad Atticum]] 13-14 et 16 ** libro quinto ''[[De finibus bonorum et malorum|de Finibus]]'' == Notae == <references /> == Plura legere si cupis == *Erich S. Gruen, "[https://www.jstor.org/stable/25010571 Pompey and the Pisones]", ''California Studies in Classical Antiquity'', 1988: 155-170 *Francis X. Ryan, "[https://www.jstor.org/stable/4436377 M. Pupius Piso and "Consulares" in 61 B.C.]", ''Historia: Zeitschrift für Alte Geschichte'', 1995: 255-256 *Gilles Sauron, "Un interlocuteur du ” De finibus ” à Oplontis (Torre Annunziata) : M. Pupius Piso", ''Revue des études latines'', 1995: 92-114 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Pupis Piso Frugi Calpurnianus, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Piso Frugi Calpurnianus, Marcus]] [[Categoria:Senatores]] iswasevlgyvjnyh251qwd5cy4g5er3x 3995493 3995486 2026-10-18T13:58:16Z IacobusAmor 1163 ~ 3995493 wikitext text/x-wiki {{res|Marcus Pupius Piso Frugi Calpurnianus}} fuit [[Senatus Romanus|senator Romanus]] [[saeculum 1 a.C.n.||primi saeculi a.C.n.]], qui [[Consul|consulatum]] cum [[Marcus Valerius Messalla Niger|Valerio Messalla]] anno [[61 a.C.n.]] gessit. E clientibus [[Pompeius|Pompei]] erat. In consulatu [[Publius Clodius Pulcher|Publium Clodium]] [[Sacra Bonae Deae (62 a.C.n.)|sacrilegii]] convictum tuebatur quocirca [[Cicero]] in [[Epistulae ad Atticum|epistulis ad amicum Titum Pomponium]] nulli verbo contumelioso adversus eum pepercit. In [[philosophia]], adsectator [[Peripatetici|Peripateticae doctrinae]] fuit. == De origine et educatione == E nobili [[gens Calpurnia|gente Calpurniorum Pisonum]] ortus a Marco quodam Pupio adoptatus est<ref>[[Cicero]], ''Pro domo sua'' 13</ref>, quod ipsum nomen revelat. Frater ei fuit Gaius Calpurnius Piso consul anno 67 a.C.n. quem sententiam primum rogabat cum consul senatui praesidebat<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.2.</ref>. Discipulus fuit [[Lucius Licinius Crassus|Lucii Licinii Crassi]] oratoris atque peripatetici philosophi Staseae Neapolitani. Condiscipulus Ciceronis atque etiam repetitor (nam aliquanto maior natu erat) fuit<ref>[[Cicero]], ''[[Brutus (Cicero)|Brutus]]'' 240 et 310. [[Quintus Asconius Pedianus|Asconius]] ad ''In Pisonem'' 62</ref> qui postea eum quinto libro ''[[De finibus bonorum et malorum|de Finibus]]'' induxit doctrinae moralis peripateticorum explanandae causa. == De cursu honorum == * Anno [[83 a.C.n.|83]] [[quaestor]] fuit tum cum [[populares]] dominabantur. Mox tamen ad exercitum [[Lucius Cornelius Scipio Asiaticus (consul 83 a.C.n.)|Scipionis]] consulis cui sorte obtigisset non profectus ad [[Sylla|Syllanos]] transfugit<ref>''[[Orationes Verrinae|In Verrem]]'' II.1.37.</ref>. Postea etiam Anniam, quae [[Lucius Cornelius Cinna|Cinnae]] uxor fuerat, repudiavit<ref>[[Velleius Paterculus]] II.41.</ref>. * anno incerto in aedilitate petenda repulsam rettulit<ref>Cicero, ''[[Pro Plancio]]'' 21.</ref> * circa [[72 a.C.n.]] [[praetor]] fuit et ex praetura [[proconsul]] in Hispania [[Quintus Caecilius Metellus Pius|Metello Pio]] successisse videtur * [[69 a.C.n.]] de Hispania ob victoriam non alioqui notam [[Triumphus|triumphavit]]. [[ Lucius Calpurnius Piso Caesoninus (consul 58 a.C.n.)|Lucius Calpurnius Piso]], consul [[58 a.C.n.|58 a.c.n.]] eius nimiam triumphi cupidinem irridere solebat<ref>[[Quintus Asconius Pedianus|Asconius]], ad ''In Pisonem'' 62</ref>. * Inter [[67 a.C.n.|67]] et 63 a.C.n. legatus Gnaei Pompei fuit. In bello adversus [[Pirata|piratas]] [[Propontis]] et ostium [[Pontus Euxinus|Ponti Euxini]] ei mandata sunt (67)<ref>[[Appianus Alexandrinus|Appianus]], ''Mithridatica'' 95.</ref>. Adhuc memoratur in [[Hierosolyma|Hierosolymae obsessione]]<ref> [[Flavius Iosephus]], ''[[Antiquitates Iudaicae|Antiquitates Iuadaicae]]'' 14.59 et ''[[De bello Iudaico|Bellum Iudaicum]]'' 1.144.</ref> * [[62 a.C.n.]] consulatum petebat. Huius consulatus tam cupidus erat Pompeius (sperabat enim ratam a senatu fore consule adiuvante novam ordinationem Orientis a se factam) ut differenda [[comitia |comitia consularia]] rogaverit ita ut ipse candidato praesens adesset, quod tamen a [[Cato minor|Catone]] ceterisque [[optimates|optimatibus]] ei negatum est<ref>[[Plutarchus]], ''Cato minor'' 30.1-3 et ''[[Vita Pompei (Plutarchus)|Pompeius]]'' 44.1. Econtra [[Cassius Dio|Dio Cassius]] XXXVII.44 adfirmare videtur comitia revera postposita esse.</ref>. * [[61 a.C.n.]] consul fuit cum Messalla Nigro. Tum ita aperte Publium Clodium in scandalo pollutorum [[Sacra Bonae Deae|Bonae Deae sacrorum]] una cum [[Tribunus plebis|tribuno plebis]] [[Quintus Fufius Calenus|Fufio Caleno]] tuebatur ut rogationem a consulibus (hoc est ab ipso) ex senatusconsulto promulgatam impugnarit. Cicero indignans de eo scribebat: ''Piso amicitia P. Clodi ductus operam dat ut ea rogatio quam ipse fert et fert ex s.c. et de religione antiquetur''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.3. Cf ibidem I.14.5.</ref>. Postquam vero Clodius a iudicibus [[Marcus Licinius Crassus (triumvir)|M. Licinii Crassi]] pecunia corruptis contra manifestam rei veritatem absolutus est ita indignati sunt omnes optimates ut M. Pupius Piso nullam [[Provincia Romana|provinciam]] post consulatum obtinuerit ([[Syria (provincia Romana)|Syriam]] speraverat) nec ullum alium honorem. Praeterea res a Pompeio sibi mandatas non peragere potuit<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.16.8.</ref>. Fortasse operae pretium est nonnulla verba contumeliosa a Cicerone in consulem Pupium Pisonem invecta hic referre. Ita dicitur ''parvo animo et pravo tamen ... facie magis quam facetiis ridiculus, nihil agens cum republica... a quo nihil speres boni rei publicae, quia non vult, nihil speres mali, quia non audet''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.13.2.</ref>. Et in alia epistula: ''uno vitio minus vitiosus, quod iners, quod somni plenus, quod imperitus, quod apraktotatos sed voluntate ita kachektes, ut Pompeium post illam contionem, in qua ab eo senatus laudatus est, odisse coeperit. Itaque mirum in modum omnes a se bonos alienavit. Neque id magis amicitia Clodi adductus fecit quam studio perditarum rerum atque partium''<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.14.6.</ref>. Ac postremo: ''consul autem ille deterioris histrionis similis''...<ref>''[[Epistulae ad Atticum|Ad Atticum]]'' I.16.12.</ref>. == Praecipui fontes == * [[Asconius]], ad ''In Pisonem'' 62. * Cicero, libro primo [[Epistulae ad Atticum|Epistularum ad Atticum]] 13-14 et 16 ** libro quinto ''[[De finibus bonorum et malorum|de Finibus]]'' == Notae == <references /> == Plura legere si cupis == *Erich S. Gruen, "[https://www.jstor.org/stable/25010571 Pompey and the Pisones]", ''California Studies in Classical Antiquity'', 1988: 155-170 *Francis X. Ryan, "[https://www.jstor.org/stable/4436377 M. Pupius Piso and "Consulares" in 61 B.C.]", ''Historia: Zeitschrift für Alte Geschichte'', 1995: 255-256 *Gilles Sauron, "Un interlocuteur du ” De finibus ” à Oplontis (Torre Annunziata) : M. Pupius Piso", ''Revue des études latines'', 1995: 92-114 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Pupis Piso Frugi Calpurnianus, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Piso Frugi Calpurnianus, Marcus]] [[Categoria:Senatores]] ey3v1k8fz6gjs3vj4893ttcvysne2eh Marcus Valerius Messalla Niger 0 329489 3995485 2026-10-18T13:19:26Z Marcus Terentius Bibliophilus 2059 Paginam instituit, scribens ''''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Cl...' 3995485 wikitext text/x-wiki '''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Messalla Niger, Marcus]] [[Categoria:Senatores]] [[Categoria:Censores]] 9sealr91hq3dmxgwisxw4idpbybxsqh 3995488 3995485 2026-10-18T13:28:41Z Marcus Terentius Bibliophilus 2059 3995488 wikitext text/x-wiki '''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Fontes == *{{CIL|6|8326}} == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Messalla Niger, Marcus]] [[Categoria:Senatores]] [[Categoria:Censores]] ttz5pva2r00qij3n12njpyn76suepao 3995489 3995488 2026-10-18T13:31:29Z Marcus Terentius Bibliophilus 2059 /* Fontes */ 3995489 wikitext text/x-wiki '''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Fontes == *{{CIL|6|3826}} == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Messalla Niger, Marcus]] [[Categoria:Senatores]] [[Categoria:Censores]] 8aduyu8mrovwhj1zeynrh0k5kdk9wev 3995490 3995489 2026-10-18T13:33:17Z Marcus Terentius Bibliophilus 2059 /* Fontes */ 3995490 wikitext text/x-wiki '''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Fontes == *{{CIL|6|3826}} {{CIL|6|31540e}} == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Pupia|Messalla Niger, Marcus]] [[Categoria:Senatores]] [[Categoria:Censores]] ekzbwf9p6cw949d3ofmk6f5eyhquj08 3995494 3995490 2026-10-18T14:05:05Z Marcus Terentius Bibliophilus 2059 3995494 wikitext text/x-wiki '''Marcus Valerius Messalla Niger''' (mortuus ante [[46 a.C.n.]]) fuit senator Romanus qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Fontes == *{{CIL|6|3826}} {{CIL|6|31540e}} == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Consules]] [[Categoria:Gens Valeria|Messalla Niger, Marcus]] [[Categoria:Senatores]] [[Categoria:Censores]] ep45ubqmr6c45c4bjkemt7ub3q5pa80 3995537 3995494 2026-10-18T23:24:34Z IacobusAmor 1163 3995537 wikitext text/x-wiki {{res|Marcus Valerius Messalla Niger}} (mortuus ante [[46 a.C.n.]]) fuit [[senator Romanus]] qui [[consul|consulatum]] anno [[61 a.C.n.]] una cum [[Marcus Pupius Piso Frugi Calpurnianus|Marco Pupio Pisone]] gessit ac deinde usque ad [[censor|censuram]] pervenit. Nec inter [[optimates]] nec inter [[populares]] numerari potest. == Fontes == *{{CIL|6|3826}} {{CIL|6|31540e}} == Plura legere si cupis == *Richard J. Evans, "[https://www.jstor.org/stable/24591849 A note on the consuls from 69 to 60 a.C.n.]", ''Acta Classica'', 1988: 97-105 {{Lifetime|saeculo 2 a.C.n.|saeculo 1 a.C.n.|Valerius Messalla Niger, Marcus}} [[Categoria:Censores]] [[Categoria:Consules]] [[Categoria:Gens Valeria|Messalla Niger, Marcus]] [[Categoria:Senatores]] 1cr6ifjgm96gbj2kaz0pyz5hc2d1o21 Aestivali gaudio 0 329492 3995556 2026-10-19T03:51:03Z Grufo 64423 Redirectionem ad “[[Estivali gaudio]]” creavi 3995556 wikitext text/x-wiki #REDIRECT [[Estivali gaudio]] 5c4z2kztyfklenzy7q5x323cogyv9h8