Wikipedia
tumwiki
https://tum.wikipedia.org/wiki/Jani_likulu
MediaWiki 1.47.0-wmf.23
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Brazil
0
4828
123247
50715
2026-10-11T02:44:44Z
Viyowoyero-vya-Malaŵi
11606
123247
wikitext
text/x-wiki
{{Infobox country
| conventional_long_name = Federative Republic of Brazil
| common_name = Brazil
| native_name = {{native name|pt|República Federativa do Brasil}}
| image_flag = Flag of Brazil.svg
| alt_flag =
| image_coat = Coat of arms of Brazil.svg
| alt_coat =
| symbol_type = Coat of arms
| other_symbol = {{vunblist |{{lang|pt|[[National Seal of Brazil|Selo Nacional do Brasil]]}}<br />{{small|National Seal of Brazil}} <br />[[File:National Seal of Brazil (color).svg|100px|link=National Seal of Brazil]]}}
| other_symbol_type = [[Seal (emblem)|National Seal]]
| national_motto = {{native phrase|pt|Ordem e Progresso|nolink=yes}}<br />{{small|"Order and Progress"}}
| national_anthem = {{native phrase|pt|[[Brazilian National Anthem|Hino Nacional Brasileiro]]|nolink=yes}}<br />{{small|"Brazilian National Anthem"}}<br /><div style="display:inline-block;margin-top:0.4em;">[[File:Hino-Nacional-Brasil-instrumental-mec.ogg]]</div>
| flag_anthem = {{native phrase|pt|[[Brazilian Flag Anthem|Hino à Bandeira Nacional]]|nolink=yes}}<br />{{small|"National Flag Anthem"}}<br /><div style="display:inline-block;margin-top:0.4em;">[[File:Brazilian Flag Anthem (Brazilian Army).ogg]]</div>
| image_map = BRA orthographic.svg
| alt_map =
| capital = [[Brasília]]
| coordinates = {{small|{{Coord|15|47|S|47|52|W|type:city}}}}
| largest_city = [[São Paulo]]<br />{{small|{{coord|23|33|S|46|38|W|display=inline}}}}
| languages_type = Official language<br />{{nobold|and national language}}
| languages = [[Portuguese language|Portuguese]]
| languages2_type = Recognized regional languages
| languages2 =
| ethnic_groups = {{Tree list}}
*47.7% [[White Brazilians|White]]{{efn|includes [[Arab Brazilian]], [[History of the Jews in Brazil|Jewish Brazilian]], and [[Romani people|Romani Brazilian]]}}
*{{nowrap|43.1% [[Pardo Brazilians|Mixed]]}}{{efn|includes ''[[Caboclo]]'', ''[[Mulatto]]'', and ''[[Zambo]]''}}
*7.6% [[Afro-Brazilians|Black]]
*1.1% [[Asian Brazilians|East Asian]]{{efn|The Brazilian census uses the term ''amarela'' (or ''yellow'' in English) as a racial category to describe people of East Asian background. This category therefore excludes those of other Asian origins, such as West Asians/Arabs and South Asians}}
*0.4% [[Indigenous peoples in Brazil|Indigenous]]
{{Tree list/end}}
| ethnic_groups_year = 2010
| ethnic_groups_ref = <ref name="census2010">[ftp://ftp.ibge.gov.br/Censos/Censo_Demografico_2010/Caracteristicas_Gerais_Religiao_Deficiencia/tab1_4.pdf IBGE – Instituto Brasileiro de Geografia e Estatística (Brazilian Institute for Geography and Statistics). 2010 Census]. Retrieved 7 August 2012.</ref><ref>{{cite web | title=2010 Population Census – General characteristics of population, religion and persons with disabilities (Portuguese) | website=ibge.gov.br | date=16 November 2012 | url=http://www.ibge.gov.br/home/presidencia/noticias/noticia_impressao.php?id_noticia=2170 | archive-url=https://web.archive.org/web/20121116103249/http://www.ibge.gov.br/home/presidencia/noticias/noticia_impressao.php?id_noticia=2170 | archive-date=16 November 2012 | url-status=dead | language=pt | access-date=10 August 2019}}</ref>
| demonym = [[Brazilians|Brazilian]],
in Portuguese: Brasileira/e/o
| government_type = [[Federalism|Federal]] [[Presidential system|presidential]] [[republic|constitutional republic]]
| leader_title1 = [[President of Brazil|President]]
| leader_name1 = [[Luiz Inácio Lula da Silva]]
| leader_title2 = [[Vice President of Brazil|Vice President]]
| leader_name2 = [[Geraldo Alckmin]]
| leader_title3 = {{nowrap|[[President of the Chamber of Deputies (Brazil)|President of the<br />Chamber of Deputies]]}}
| leader_name3 = [[Arthur Lira]]
| leader_title4 = [[President of the Federal Senate (Brazil)|President of the <br />Federal Senate]]
| leader_name4 = {{nowrap|[[Rodrigo Pacheco (politician)|Rodrigo Pacheco]]}}
| leader_title5 = {{nowrap|[[Supreme Federal Court#President and Vice-President of the Court|President of the]]<br />[[Supreme Federal Court]]}}
| leader_name5 = [[Rosa Weber]]
| legislature = {{nowrap|[[National Congress of Brazil|National Congress]]}}
| upper_house = {{nowrap|[[Federal Senate (Brazil)|Federal Senate]]}}
| lower_house = {{nowrap|[[Chamber of Deputies (Brazil)|Chamber of Deputies]]}}
| sovereignty_type = [[Independence of Brazil|Independence]]
| sovereignty_note = from [[United Kingdom of Portugal, Brazil and the Algarves|Portugal]]
| established_event1 = [[Independence of Brazil|Declared]]
| established_date1 = 7 September 1822
| established_event2 = [[Treaty of Rio de Janeiro (1825)|Recognized]]
| established_date2 = 29 August 1825
| established_event3 = [[Proclamation of the Republic (Brazil)|Republic]]
| established_date3 = 15 November 1889
| established_event4 = [[Constitution of Brazil|Current constitution]]
| established_date4 = 5 October 1988
| area_km2 = 8515767
| area_label = Total
| area_rank = 5th
| area_sq_mi = 3287597
| percent_water = 0.65
| population_estimate = 217,240,060<ref>{{Cite CIA World Factbook|country=Brazil|access-date=24 September 2022|year=2022}}</ref>
| population_estimate_year = 2022
| population_estimate_rank = 7th
| population_density_km2 = 25
| population_density_sq_mi = 64
| population_density_rank = 193rd
| GDP_PPP = {{increase}} $3.958 trillion<ref name="IMFWEOBR">{{cite news |url=https://www.imf.org/en/Publications/WEO/weo-database/2022/October/weo-report?c=223,&s=NGDPD,PPPGDP,NGDPDPC,PPPPC,&sy=2020&ey=2027&ssm=0&scsm=1&scc=0&ssd=1&ssc=0&sic=0&sort=country&ds=.&br=1|title=World Economic Outlook Database, October 2022 |publisher=[[International Monetary Fund]] |newspaper=Imf |access-date=12 January 2023}}</ref>
| GDP_PPP_year = 2023
| GDP_PPP_rank = 8th
| GDP_PPP_per_capita = {{increase}} $18,396<ref name="IMFWEOBR" />
| GDP_PPP_per_capita_rank = 86th
| GDP_nominal = {{increase}} $2.059 trillion<ref name="IMFWEOBR" />
| GDP_nominal_year = 2023
| GDP_nominal_rank = 12th
| GDP_nominal_per_capita = {{increase}} $9,571<ref name="IMFWEOBR" />
| GDP_nominal_per_capita_rank = 81th
| Gini = 48.9<!--number only-->
| Gini_year = 2020
| Gini_change = decrease <!--increase/decrease/steady-->
| Gini_ref = <ref name="WBgini">{{cite web |url=http://data.worldbank.org/indicator/SI.POV.GINI?locations=BR |title=GINI index (World Bank estimate) – Brazil |publisher= World Bank |access-date=12 January 2023}}</ref>
| HDI = 0.754<!--number only-->
| HDI_year = 2021<!-- Please use the year to which the data refers, not the publication year-->
| HDI_change = decrease<!--increase/decrease/steady-->
| HDI_ref = <ref name="HDI">{{cite web|url=https://hdr.undp.org/system/files/documents/global-report-document/hdr2021-22pdf_1.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://hdr.undp.org/system/files/documents/global-report-document/hdr2021-22pdf_1.pdf |archive-date=9 October 2022 |url-status=live|title=Human Development Report 2021/2022|language=en|publisher=[[United Nations Development Programme]]|date=8 September 2022|access-date=8 September 2022}}</ref>
| HDI_rank = 87th
| currency = [[Brazilian real|Real]] (R$)
| currency_code = BRL
| time_zone = [[Time in Brazil|BRT]]
| utc_offset = −2 to −5
| date_format = [[Date and time notation in Brazil|dd/mm/yyyy]] ([[Common Era|CE]])
| drives_on = right
| calling_code = [[Telephone numbers in Brazil|+55]]
| iso3166code =
| cctld = [[.br]]
| religion = {{Tree list}}
*88.8% [[Christianity in Brazil|Christianity]]
**64.6% [[Catholic Church in Brazil|Catholicism]]
**22.2% [[Protestantism in Brazil|Protestantism]]
**2.0% Other [[List of Christian denominations|Christian]]
*8.0% [[Irreligion in Brazil|No religion]]
*2.0% [[Spiritism]]
*1.2% Other
{{Tree list/end}}
| religion_ref = <ref>{{cite web | title=2010 Population Census – General characteristics of population, religion and persons with disabilities (Portuguese) | website=ibge.gov.br | date=16 November 2012 | url=http://www.ibge.gov.br/home/presidencia/noticias/noticia_impressao.php?id_noticia=2170 | archive-url=https://web.archive.org/web/20121116103249/http://www.ibge.gov.br/home/presidencia/noticias/noticia_impressao.php?id_noticia=2170 | archive-date=16 November 2012 | url-status=dead | language=pt | access-date=10 August 2019}}</ref>
| religion_year = 2010
| today =
}}
'''Brazil''', ni chalo icho chili kwa [[Amelika wa Kummwela]].
==Vigaŵa==
{{Brazil Labelled Map}}
{{Countries of South America}}
[[Category:Amelika wa Kummwela]]
3smp5lpkayftpv6fibnyfesvfvxe5fq
India
0
5377
123244
115086
2026-10-11T02:40:59Z
Viyowoyero-vya-Malaŵi
11606
123244
wikitext
text/x-wiki
[[File:Flag of India.svg|300px|thumb]]
[[File:India (orthographic projection).svg|250px|thumb]]
'''India''' ni chalo icho chili kwa [[Asia]].
==Vigaŵa==
{{India States and Territories Labelled Map}}
[[Category:Asia]]
[[Category:India]]
1djooqc32nrskbfx2a1lrqxtupxe5tu
Indonesia
0
5553
123248
116167
2026-10-11T02:45:31Z
Viyowoyero-vya-Malaŵi
11606
123248
wikitext
text/x-wiki
[[File:Flag of Indonesia.svg|300px|thumb]]
[[File:Indonesia (orthographic projection).svg|250px|thumb]]
'''Indonesia''' (id: '''Indonesia''', ms: '''Indonesia''', ace: '''Indônèsia''', jv: '''Indonésia'''), ni chalo icho chili kwa [[Asia]].
==Vigaŵa==
{{Indonesia provinces labelled map}}
{{Indonesia}}
[[Category:Asia]]
rylcef9uhp1offiuqtgv3r4rfy132zk
123249
123248
2026-10-11T02:45:57Z
Viyowoyero-vya-Malaŵi
11606
123249
wikitext
text/x-wiki
[[File:Flag of Indonesia.svg|250px|thumb]]
[[File:Indonesia (orthographic projection).svg|200px|thumb]]
'''Indonesia''' (id: '''Indonesia''', ms: '''Indonesia''', ace: '''Indônèsia''', jv: '''Indonésia'''), ni chalo icho chili kwa [[Asia]].
==Vigaŵa==
{{Indonesia provinces labelled map}}
{{Indonesia}}
[[Category:Asia]]
7hj50hf4ugove7qyt37kls6a13zbjuh
Covid-19
0
6893
123239
121654
2026-10-11T02:27:31Z
Viyowoyero-vya-Malaŵi
11606
123239
wikitext
text/x-wiki
'''COVID-19''' panji [[Nthenda ya Corona]] ([[Corona Virus]]) ni mtundu wa nthenda iyo ikukola munthu kwizila mu mvuche, mata panji kukolana chasa na munthu uyo wana nthenda iyi. Kachibungu ako kakwambiska nthenda iyi kakuchemeka "Kachibungu kakali kachiwili ako kakutimbanizga nthowa ya mathutilo"(severe acute respiratory syndrome coronavirus 2 ).
Munthu wakwamba kusangika na kachibungu aka wakawa wa ku [[Wuhan]], chalo cha [[China]], mu chaka cha December, 2019.<ref name="Unnamed-20230318115223">https://www.wsj.com/articles/in-hunt-for-covid-19-origin-patient-zero-points-to-second-wuhan-market-11614335404</ref>
Vimanyikwilo vakuti munthu wana nthena iyi vikupambana munthu pa munthu, kwene kene kanandi munthu ukupulikanga:
* Kuwawa kwa mutu
* Kukhosomola
* Kusuzgika pa kuthuta
* Kuphwanya kwa thupi
* Chikhoso cha mamphina
* Masuzgikilo gha pulika kunowa kwa chakulya na kununkhizga.<ref>https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7753439</ref>
Vimanyikwilo ivi vingaoneka pala pajumpha siku limoza panji madazi 14, pala watola waka nthenda iyi.Mzinda unandi wa wanthu awo wakukolekana na nthenda iyi wakuwevye vimanyikwilo nge ni vipachanya ivi.Wachekulu ndiwo wali pa chiophyezo chikulu chomene cha nthenda iyi.
== VIMANYIKWILO VAKUTI UNA NTHENDA YA CORONA ==
* Vilonda va pasingo
* Kujala kwa mphuno
* Kufuma kwa mamphina
* Kukhosomola
* Kusuzgika pa kuthuta
* Kuphwanya kwa thupi
* Chikhoso cha mamphina
* Masuzgikilo gha pulika kunowa kwa chakulya na kununkhizga fungo la vinthu.
== CHAKWAMBISKA NTHENDA YA CORONA ==
Matenda gha Corona ghakwamba na kachibungu ako pa chingerezi kakuchemeka kuti 'severe acute respiratory syndrome coronavirus 2' (SARS-CoV-2).
== UMO MUNTHU UKUTOLELA NTHENDA IYI ==
Kwizila mu kuthuta mphepo zakunangika na munthu uyo wana matenda agha pakukhosomola or pakuthunya.
== References (uko kwafuma umboni wa ivi valembeka pachanya) ==
1 <ref name="Unnamed-20230318115223"/>Wuhani Official news reports
2. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7753439
px4w2kw37a6m44sz6krotpoy3r31f6u
123240
123239
2026-10-11T02:27:48Z
Viyowoyero-vya-Malaŵi
11606
Revise
123240
wikitext
text/x-wiki
{{Revision}}
'''COVID-19''' panji [[Nthenda ya Corona]] ([[Corona Virus]]) ni mtundu wa nthenda iyo ikukola munthu kwizila mu mvuche, mata panji kukolana chasa na munthu uyo wana nthenda iyi. Kachibungu ako kakwambiska nthenda iyi kakuchemeka "Kachibungu kakali kachiwili ako kakutimbanizga nthowa ya mathutilo"(severe acute respiratory syndrome coronavirus 2 ).
Munthu wakwamba kusangika na kachibungu aka wakawa wa ku [[Wuhan]], chalo cha [[China]], mu chaka cha December, 2019.<ref name="Unnamed-20230318115223">https://www.wsj.com/articles/in-hunt-for-covid-19-origin-patient-zero-points-to-second-wuhan-market-11614335404</ref>
Vimanyikwilo vakuti munthu wana nthena iyi vikupambana munthu pa munthu, kwene kene kanandi munthu ukupulikanga:
* Kuwawa kwa mutu
* Kukhosomola
* Kusuzgika pa kuthuta
* Kuphwanya kwa thupi
* Chikhoso cha mamphina
* Masuzgikilo gha pulika kunowa kwa chakulya na kununkhizga.<ref>https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7753439</ref>
Vimanyikwilo ivi vingaoneka pala pajumpha siku limoza panji madazi 14, pala watola waka nthenda iyi.Mzinda unandi wa wanthu awo wakukolekana na nthenda iyi wakuwevye vimanyikwilo nge ni vipachanya ivi.Wachekulu ndiwo wali pa chiophyezo chikulu chomene cha nthenda iyi.
== VIMANYIKWILO VAKUTI UNA NTHENDA YA CORONA ==
* Vilonda va pasingo
* Kujala kwa mphuno
* Kufuma kwa mamphina
* Kukhosomola
* Kusuzgika pa kuthuta
* Kuphwanya kwa thupi
* Chikhoso cha mamphina
* Masuzgikilo gha pulika kunowa kwa chakulya na kununkhizga fungo la vinthu.
== CHAKWAMBISKA NTHENDA YA CORONA ==
Matenda gha Corona ghakwamba na kachibungu ako pa chingerezi kakuchemeka kuti 'severe acute respiratory syndrome coronavirus 2' (SARS-CoV-2).
== UMO MUNTHU UKUTOLELA NTHENDA IYI ==
Kwizila mu kuthuta mphepo zakunangika na munthu uyo wana matenda agha pakukhosomola or pakuthunya.
== References (uko kwafuma umboni wa ivi valembeka pachanya) ==
1 <ref name="Unnamed-20230318115223"/>Wuhani Official news reports
2. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7753439
ie9uhwyvqn1crlk6eya5rhpi9rk75gs
ChiTumbuka
0
20519
123238
122846
2026-10-11T02:25:58Z
Viyowoyero-vya-Malaŵi
11606
123238
wikitext
text/x-wiki
{{Short description|Niger-Congo language originating in parts of Malawi, Zambia, and Tanzania}}
{{good article}}
{{Infobox language
| name = ChiTumbuka
| states = [[Malaŵi]], [[Tanzania]], [[Zambia]]
| region =
| speakers = 7 miliyoni
| date = 2022
| ref =
| familycolor = Niger-Congo
| fam2 = [[Atlantic–Congo languages|Atlantic–Congo]]
| fam3 = [[Volta-Congo]]
| fam4 = [[Benue–Congo languages|Benue–Congo]]
| fam5 = [[Bantoid languages|Bantoid]]
| fam6 = [[Southern Bantoid]]
| fam7 = [[Bantu languages|Bantu]] ([[Guthrie classification of Bantu languages#Zone N|Zone N]])
| fam8 = [[Nyasa languages|Nyasa]]
| iso2 = tum
| iso3 = tum
| glotto = tumb1250
| glottorefname = Tumbuka
| script = {{Plainlist}}
* [[Latin script]] ([[Roman alphabet]])
* [[Mwangwego script]]
{{endplainlist}}
| minority = {{plainlist}}
* {{flag|Malawi}}
* {{flag|Zambia}}
* {{flag|Tanzania}}
{{endplainlist}}
| image = The Gonapamuhanya festival 2025.jpg
| imagecaption = Msonkhano wa chikhalidwe cha ChiTumbuka cha chikondwerero cha Gonapamuhanya cha ŵanthu ŵa ChiTumbuka
| guthrie = N.21
| lingua = [http://linguasphere.info/?page=linguascale&linguacode=99-AUS-wc 99-AUS-wc] (+ chi-Kamanga) <br>incl. varieties 99-AUS-wca...-wcl
}}
'''ChiTumbuka''' ntchiyowoyero cha [[ŴaTumbuka|ŵanthu]] ŵa mtundu wachi [[Bantu]] icho chikuyowoyeka mu [[Malaŵi]], [[Zambia]], na [[Tanzania]].<ref name="Michigan">[https://web.archive.org/web/20151123103050/http://africa.isp.msu.edu/afrlang/Tumbuka_root.html Michigan State University African Studies Center information page].</ref> Lizgu ili likumanyikwaso kuti Chitumbuka panji Citumbuka. Chi- icho chili kunthazi kwa Tumbuka chikung'anamura "mu nthowa ya", ndipo apa likung'anamura "chiyowoyero cha ŵanthu ŵa Tumbuka". ChiTumbuka chili mu chiyowoyero chimoza na [[ChiCheŵa|ChiCheŵa]] na [[ChiSena|Sena]].<ref>Kiso (2012), pp.21ff.</ref>
Buku linyake ([[The World Almanac]]) likuti mu charu ichi muli ŵanthu pafupifupi 2,080,000. Ŵanthu ŵanandi ŵakuyowoya ChiTumbuka, nangauli ŵanyake ŵakuti ŵalipo ŵachoko chomene. Ŵanthu ŵanandi awo ŵakuyowoya ChiTumbuka ŵakukhala mu Malaŵi.<ref name="Michigan" /> ChiTumbuka ndicho chikuyowoyeka chomene kumpoto kwa Malawi, chomenechomene mu vigaŵa vya [[Rumphi]], [[Mzuzu]], na [[Mzimba]].<ref>University of Malawi (2006) Language Mapping Survey for Northern Malawi.</ref>
Pali mphambano yikuru pakati pa ciyowoyero ca ChiTumbuka ico cikuyowoyeka mu misumba ya ku Malawi (ico cili na mazgu ghanyake kufuma ku [[Chiswahili|Ciswahili]] na ChiCheŵa) na ciyowoyero ca ChiTumbuka ico cikuyowoyeka mu mizi. Ŵanthu ŵanandi ŵakuwona kuti chiyowoyero cha Rumphi ndicho ntchakutowa chomene.<ref>Kamwendo (2004), p.282.</ref> Chiyowoyero cha ku Mzimba chikakhwaskika chomene na chiNgoni ([[ChiZulu|Zulu]]).
Kwamba kale, ŵanthu ŵanandi ŵakuyowoya ChiTumbuka na ChiCheŵa. Ndipouli, ciyowoyero ca Tumbuka cikasuzgika comene mu nyengo ya muwuso wa Pulezidenti [[Hastings Kamuzu Banda]], cifukwa mu 1968 cifukwa ca fundo yake yakuti paŵe mtundu umoza na ciyowoyero cimoza, ciyowoyero ici cikaleka kuŵa ca boma mu Malawi. Ntheura, mu masukulu, pa wayilesi, na mu manyuzipepara ŵakafumiskamo ciyowoyero ici.<ref>Kamwendo (2004), p.278.</ref> Mu 1994, apo boma la Tumbuka likamba kulamulira na vipani vinandi, ŵakambaso kutegherezga maungano gha pa wayilesi. Kweni mabuku na mabuku ghanyake ghakaŵa ghanandi yayi.<ref>See Language Mapping Survey for Northern Malawi (2006), pp.38-40 for a list of publications.</ref>
== Malembelo ==
[[File:WIKITONGUES-Temwa_Speaking_Tumbuka_-_free_to_use_file_under_Wikipedia_policies.webm|thumb|326x326px|Temwa wakuyowoya ChiTumbuka.]]
Pali nthowa ziŵiri zakulembera ChiTumbuka izo zikugwiliskirika nchito: kalembero ka kaluso (kakulembeka mu [[Baibolo]] la ChiTumbuka la [[Wikipediya|Wikipedia]] na mu [[nyuzipepara y]]<nowiki/>a Fuko), umo mazgu gha banthu 'ŵanthu' na chaka 'chaka' ghakulembeka na 'b' na 'ch', na kalembero ka kaluso (kakulembeka mu dikishonare ya ChiTumbuka iyo yikufumiskika pa [[Intaneti]] na Centre for Language Studies na mu Baibolo la pa Intaneti), umo mazgu ghakulembeka na 'ŵ' na 'c', nga ŵanthu na caka. (Sumu ya 'ŵ' ni [w] yakuzingilizgika makora iyo yikuzunulika na lulimi pafupi na i).<ref>Atkins, Guy (1950) [https://www.jstor.org/stable/1156786 "Suggestions for an Amended Spelling and Word Division of Nyanja"] ''Africa: Journal of the International African Institute'', Vol. 20, No. 3, p.205.</ref> Ŵanthu ŵakumanya yayi apo ŵakwenera kulemba 'r' na 'l', nga ni cakulya ([[Dikishonare]]) panji cakurya (Baibolo) 'chakurya.' (Nadi, [l] na [r] ni mazgu ghakupambanapambana gha chiyowoyero chimoza.) Kweniso pali kukayikira pakati pa mazgu ghakuti'sk' na'sy' (miskombe na misyombe ('bamboo') ghali mu dikishonare ya ChiTumbuka).<ref>See entries {{lang|tum|citatanga}}, {{lang|tum|cidunga}}, {{lang|tum|cihengo}}.</ref>
== Kuyowoya mazgu ==
=== Mavowele ===
Mu chiyowoyero cha Tumbuka muli mazgu ghakuyana waka nga ni /a/, /ɛ/, /i/, /ɔ/, /u/ na /m̩/ aghoso ghali mu [[ChiCheŵa]].<ref>Vail (1972), p. 1.</ref>
[[File:Monile.ogg|thumb|Kutauzgana mu ChiTumbuka.]]
=== Makonsonanti ===
Malizga gha chiyowoyero cha Tumbuka ghakuyana waka na gha ChiCheŵa, kweni ghakupambana. Mu chiyowoyero cha ChiCheŵa mulije mazgu ghakuti /ɣ/, /β/, na /h/. Kweniso ŵanthu ŵakutemwa kupulika mazgu agho ghakufuma mu mulomo {{IPA|/vʲ/}}, {{IPA|/fʲ/}}, {{IPA|/bʲ/}}, {{IPA|/pʲ/}}, {{IPA|/skʲ/}}, {{IPA|/zgʲ/}}, and {{IPA|/ɽʲ/}}.
Mu ChiTumbuka mulije vilembo vya ChiCheŵa nga ni /psj/, /bzj/, /t͡s/, /d͡z/. Mazgu gha /s/ na /z/ ghakusangika yayi mu ChiTumbuka, ntheura Chewa nsómba ('somba') = Tumbuka somba. Lizgu lakuti /ʃ/ likusangika mu mazgu gha ku vyaru vinyake pera nga ni shati ('shati') na shuga ('shuga'). ChiTumbuka /?? / nyengo zinyake chikuyana na ChiCheŵa /d/, ChiCheŵa kudwala 'kuŵa mulwari' = Tumbuka kulwala, ChiCheŵa kudya 'kurya' = Tumbuka kulya. Kuyowoya kwa lizgu lakuti "sk" na lizgu lakuti "zg" vikupambana kuyana na chiyowoyero.
Makonsonanti gha Tumbuka kanandi ghakusangika mu viyowoyero vinyake. Vinyake vingalembeka pambere chindindindi chindambe kufuma. Pa chithuzithuzi ichi, pali mazgu agho ghangaŵa pa chilembo ichi:
{| class="wikitable" style="text-align:center;"
|+Malembo gha Tumbuka<ref>Chavula (2016), pp. 11–13.</ref><ref>Vail (1972), pp. 4–19.</ref>
! colspan="2" rowspan="2" |
! colspan="3" |[[Labial consonant|labial]]
! colspan="3" |[[Dental consonant|dental]]
! colspan="2" |[[Palatal consonant|palatal]]
! colspan="2" |[[Velar consonant|velar]]
! rowspan="2" |[[Glottal consonant|glottal]]
|-
!<small>plain</small>
!<small>lab.</small>
!<small>pal.</small>
!<small>plain</small>
!<small>lab.</small>
!<small>pal.</small>
!<small>plain</small>
!<small>lab.</small>
!<small>plain</small>
!<small>lab.</small>
|-
! colspan="2" |[[Nasal consonant|nasal]]
|ma<br />{{IPAslink|m}}
|mwa<br />{{IPAslink|mʷ}}
|mya<br />{{IPAslink|mʲ}}
|na<br />{{IPAslink|n}}
|nwa<br />{{IPAslink|nʷ}}
|nya<br />{{IPAslink|nʲ}}
|
|
|ng'a<br />{{IPAslink|ŋ}}
|ng'wa<br />{{IPAslink|ŋʷ}}
|
|-
! rowspan="5" |[[plosive]]/<br />[[affricate]]
!<small>unvoiced</small>
|pa<br />{{IPAslink|p}}
|pwa<br />{{IPAslink|pʷ}}
|pya<br />{{IPAslink|pʲ}}
|ta<br />{{IPAslink|t}}
|twa<br />{{IPAslink|tʷ}}
|tya<br />{{IPAslink|tʲ}}
|ca<br />{{IPAslink|t͡ʃ}}
|cwa<br />{{IPAslink|t͡ʃʷ}}
|ka<br />{{IPAslink|k}}
|kwa<br />{{IPAslink|kʷ}}
|
|-
!<small>voiced</small>
|ba<br />{{IPAslink|ɓ}}
|bwa<br />{{IPAslink|ɓʷ}}
|bya<br />{{IPAslink|bʲ}}
|da<br />{{IPAslink|ɗ}}
|dwa<br />{{IPAslink|ɗʷ}}
|dya<br />{{IPAslink|ɗʲ}}
|ja<br />{{IPAslink|d͡ʒ}}
|jwa<br />{{IPAslink|d͡ʒʷ}}
|ga<br />{{IPAslink|g}}
|gwa<br />{{IPAslink|gʷ}}
|
|-
!<small>aspirated</small>
|pha<br />{{IPAslink|pʰ}}
|phwa<br />{{IPAslink|pʷʰ}}
|phya<br />{{IPAslink|pʲʰ}}
|tha<br />{{IPAslink|tʰ}}
|thwa<br />{{IPAslink|tʷʰ}}
|thya<br />{{IPAslink|tʲʰ}}
|cha<br />{{IPAslink|t͡ʃʰ}}
|
|kha<br />{{IPAslink|kʰ}}
|khwa<br />{{IPAslink|kʷʰ}}
|
|-
!<small>nasalised</small>
|mba<br />{{IPAslink|ᵐb}}
|mbwa<br />{{IPAslink|ᵐbʷ}}
|mbya<br />{{IPAslink|ᵐbʲ}}
|nda<br />{{IPAslink|ⁿd}}
|ndwa<br />{{IPAslink|ⁿdʷ}}
|(ndya){{efn|Only in the word {{lang|tum|ndyali}}.}}<br />{{IPAslink|ⁿdʲ}}
|nja<br />{{IPAslink|ⁿd͡ʒ}}
|
|nga<br />{{IPAslink|ᵑg}}
|ngwa<br />{{IPAslink|ᵑgʷ}}
|
|-
!<small>nasalised<br />aspirated</small>
|mpha<br />{{IPAslink|ᵐpʰ}}
|mphwa<br />{{IPAslink|ᵐpʷʰ}}
|mphya<br />{{IPAslink|ᵐpʲʰ}}
|ntha<br />{{IPAslink|ⁿtʰ}}
|nthwa<br />{{IPAslink|ⁿtʷʰ}}
|(nthya)<br />{{IPAslink|ⁿtʲʰ}}
|ncha<br />{{IPAslink|ⁿt͡ʃʰ}}
|
|nkha<br />{{IPAslink|ᵑkʰ}}
|nkhwa<br />{{IPAslink|ᵑkʷʰ}}
|
|-
! rowspan="2" |[[fricative]]
!<small>unvoiced</small>
|fa<br />{{IPAslink|f}}
|fwa<br />{{IPAslink|fʷ}}
|fya<br />{{IPAslink|fʲ}}
|sa<br />{{IPAslink|s}}
|swa<br />{{IPAslink|sʷ}}
|ska (sya)<br />{{IPAslink|sʲ}}
|(sha)<br />{{IPAslink|ʃ}}
|
|
|
|ha<br />{{IPAslink|h}}
|-
!<small>voiced</small>
|va<br />{{IPAslink|v}}
|vwa<br />{{IPAslink|vʷ}}
|vya<br />{{IPAslink|vʲ}}
|za<br />{{IPAslink|z}}
|zwa<br />{{IPAslink|zʷ}}
|zga<br />{{IPAslink|zʲ}}
|
|
|
|
|
|-
! colspan="2" |[[semivowel]]/ [[Liquid consonant|liquid]]
|ŵa<br />{{IPAslink|β}}
|wa<br />{{IPAslink|w}}
|
|la/ra<br />{{IPAslink|ɽ}}
|lwa/rwa<br />{{IPAslink|ɽʷ}}
|lya/rya<br />{{IPAslink|ɽʲ}}
|ya<br />{{IPAslink|j}}
|
|gha<br />{{IPAslink|ɣ}}
|
|
|}
{{notelist}}
=== Kapulikikilo ===
Kupambana kukuru pakati pa ChiCheŵa na ChiTumbuka nkhwa kuti ChiCheŵa ni chiyowoyero icho chikuyowoya mazgu ghakupambanapambana.
ChiTumbuka chili na mazgu ghakupambanapambana, chifukwa lizgu lililose ilo likuyowoyeka payekha likuyana waka na lizgu lakwamba ilo likufuma pa lizgu laumaliro.<ref>Downing (2008, 2012).</ref> Ntheura, mu ChiTumbuka nchambura macitiko kupambaniska mazgu ghaŵiri ghakupambanapambana, nga umo vikuŵira mu ChiCheŵa na viyowoyero vinyake vya Bantu. Ndipouli, lizgu laumaliro yayi ndilo likuŵa pa lizgu lililose, kweni lizgu laumaliro pera:<ref>Downing (2012), p.123.</ref>
* {{lang|tum|ti-ku-phika sî:ma}} 'tikuphika sima'
A greater variety of tonal patterns is found in the [[Ideophone|ideophones]] (expressive words) of Tumbuka; for example Low ({{lang|tum|yoyoyo}} 'disintegrating into small pieces'), High ({{lang|tum|fyá:}} 'swooping low (of birds)'), High-Low ({{lang|tum|phúli}} 'sound of thing bursting'), and Low-High ({{lang|tum|yií}} 'sudden disappearance'), etc.<ref>Moto (1999), pp.112-120.</ref>
Intonational tones are also used in Tumbuka; for example, in yes-no questions there is often a High-Low fall on the final syllable of the question:<ref>Downing (2008), p.55.</ref>
* {{lang|tum|ku-limirâ-so ngô:mâ?}} 'are you also weeding the maize?'
There does not seem to be any consistent, direct correlation between tone in Tumbuka and [[Focus (linguistics)|focus]].<ref>Downing (2012), p.129.</ref>
== Mazina ==
=== Makilasi gha manoun ===
Nga umo vikuŵira na viyowoyero vya ŵanthu ŵa ku Bantu, mazina gha ChiTumbuka ghakupangika mu vigaŵa vyakupambanapambana kuyana na vigaŵa vya mazina. Lizgu lililose lili na lizgu lake lakwimira, lizgu lakwimira, na lizgu la chiyowoyero. Para pali mphindano pakati pa mazgu agha na mazgu ghakwambilira, mazgu agha ndigho ghakuŵa pakwamba pakusankha zina. Mwaciyelezgero, lizgu lakuti katundu 'vinthu,' nangauli lili na lizgu lakuti ka-, lili mu gulu 1, cifukwa munthu wakuyowoya katundu uyu 'vinthu ivi' na lizgu lakuti uyu. Ŵanthu ŵa ku Malaŵi (nga umo viliri mu dikishonare ya ChiTumbuka ya pa Yunivesite ya Malawi) ŵakuzunura mazina gha viŵaro mu viyowoyero vinyake nga ni "Mu-Ŵa-"; kweni ŵanthu ŵa ku Bantu ŵakuzunura viŵaro mu manambara (1/2 etc.) agho ghakuyana na viŵaro vya viŵaro mu viyowoyero vinyake vya ku Bantu. Nyengo zinyake mazina ghakukolerana yayi na magulu ghakulondezgapo agha, nga ni fumu'mukuru' (kalasi 9) uyo wali na mazina ghanandi mu kilasi 6.
'''Class 1/2 (Mu-Ŵa-)'''
Some nouns in this class lack the prefix Mu-:
* {{lang|tum|Munthu}} pl. {{lang|tum|ŵanthu (banthu)}} = person
* {{lang|tum|Muzungu}} pl. {{lang|tum|ŵazungu (bazungu)}} = foreigner, white man
* {{lang|tum|Mwana}} pl. {{lang|tum|ŵana (bana)}} = child
* {{lang|tum|Bulu}} pl. {{lang|tum|ŵabulu}} = donkey
* {{lang|tum|Sibweni}} pl. {{lang|tum|ŵasibweni}} = maternal uncle
* {{lang|tum|Katundu}} (no pl.) = goods, possessions
'''Class 3/4 (Mu-Mi-)'''
* {{lang|tum|Mutu}} pl. {{lang|tum|mitu}} = head
* {{lang|tum|Mkuyu}} pl. {{lang|tum|mikuyu}} = fig-tree
* {{lang|tum|Moyo}} pl. {{lang|tum|miyoyo}} = life
* {{lang|tum|Mtima}} pl. {{lang|tum|mitima}} = heart
'''Class 5/6 (Li-Ma-)'''
* {{lang|tum|Bele (bhele}} pl. {{lang|tum|mabele (mabhele)}} = breast
* {{lang|tum|Boma (bhoma)}} pl. {{lang|tum|maboma (mabhoma)}} = government, district
* {{lang|tum|Botolo (bhotolo)}} pl. {{lang|tum|mabotolo (mabhotolo)}} = bottle
* {{lang|tum|Fuko}} pl. {{lang|tum|mafuko}} = tribe, nation
* {{lang|tum|Jiso}} pl. {{lang|tum|maso}} = eye
* {{lang|tum|Maji}} (no singular) = water
* {{lang|tum|Phiri}} pl. {{lang|tum|mapiri}} = hill
* {{lang|tum|Suzgo}} pl. {{lang|tum|masuzgo}} = problem, trouble
* {{lang|tum|Woko}} pl. {{lang|tum|mawoko}} = hand
'''Class 7/8 (Ci-Vi-)'''
* {{lang|tum|Caka (chaka)}} pl. {{lang|tum|vyaka}} = year
* {{lang|tum|Caro (charo)}} pl. {{lang|tum|vyaro}} = country, land
* {{lang|tum|Ciŵeto (chibeto)}} pl. {{lang|tum|viŵeto (vibeto)}} = farm animal
* {{lang|tum|Cidakwa (chidakwa)}} pl. {{lang|tum|vidakwa}} = drunkard
* {{lang|tum|Cikoti (chikoti)}} pl. {{lang|tum|vikoti}} = whip
'''Class 9/10 (Yi-Zi-)'''
* {{lang|tum|Mbale}} pl. {{lang|tum|mbale (mambale)}} = plate
* {{lang|tum|Ndalama}} pl. {{lang|tum|ndalama}} = money
* {{lang|tum|Njelwa}} pl. {{lang|tum|njelwa}} = brick
* {{lang|tum|Nkhuku}} pl. {{lang|tum|nkhuku}} = chicken
* {{lang|tum|Somba}} pl. {{lang|tum|somba}} = fish
'''Class 11 (Lu-)'''
Some speakers treat words in this class as if they were in class 5/6.<ref>Shiozaki (2004).</ref>
* {{lang|tum|Lwande}} = side
* {{lang|tum|Lumbiri}} = fame
* {{lang|tum|Lulimi}} = tongue
'''Class 12/13 (Ka-Tu-)'''
* {{lang|tum|Kanthu (kantu)}} pl. {{lang|tum|tunthu (tuntu)}} = small thing
* {{lang|tum|Kamwana}} pl. {{lang|tum|tuŵana (tubana)}} = baby
* {{lang|tum|Kayuni}} pl. {{lang|tum|tuyuni}} = bird
* {{lang|tum|Tulo}} (no singular) = sleep
'''Class 14/6 (U-Ma-)'''
These nouns are frequently abstract and have no plural.
* {{lang|tum|Usiku}} = night
* {{lang|tum|Ulimi}} = farming
* {{lang|tum|Ulalo}} pl. {{lang|tum|maulalo}} = bridge
* {{lang|tum|Uta}} pl. {{lang|tum|mauta}} = bow
'''Class 15 (Ku-) Infinitive'''
* {{lang|tum|Kugula}} = to buy, buying
* {{lang|tum|Kwiba (kwibha)}} = to steal, stealing
'''Classes 16, 17, 18 (Pa-, Ku-, Mu-) Locative'''
* {{lang|tum|Pasi}} = underneath
* {{lang|tum|Kunthazi (kuntazi)}} = in front, before
* {{lang|tum|Mukati}} = inside
=== Concords ===
Viyezgo, vimanyikwiro, manambara, mazgu ghakupambanapambana, na vimanyikwiro mu ChiTumbuka vikwenera kukolerana na lizgu ilo likuyowoyeka. Ŵakuchita nthena na vilembo vyakwambilira, vyakunthazi, panji vyakunthazi ivyo vikuchemeka 'concords.' Mtundu 1 uli na viyowoyero vyakupambanapambana, nga ni mazina ghakwimira vinthu, mazgu ghakwamba, mazgu ghaumaliro, manambara, vimanyikwiro, na mazgu ghaumaliro:<ref>Chase (2004).</ref><ref>Shiozaki (2004)</ref><ref>Vail (1971).</ref>
* {{lang|tum|Mwana u'''yu'''}} = this child
* {{lang|tum|Mwana '''yu'''moza}} = one child
* {{lang|tum|Mwana u'''yo'''}} = that child
* {{lang|tum|Mwana '''yo'''se}} = the whole child
* {{lang|tum|Mwana '''wa'''li'''yo'''se}} = every child
* {{lang|tum|Mwana '''wa'''ka'''mu'''wona}} = the child saw him
* {{lang|tum|Mwana '''mu'''choko (coko)}} = the small child
* {{lang|tum|Mwana '''wa''' Khumbo}} = Khumbo's child
* {{lang|tum|Mwana '''wa'''ne}} = my child
* {{lang|tum|Mwana '''wa'''wona}} = the child has seen
Makilasi ghanyake gha manoun ghali na mitundu yichoko ya vimanyikwiro vyakukolerana, nga umo tingawonera pa thebulu ilo lili musi umu:
{| class="wikitable" style="text-align: center; width: 200px; height: 200px;"
|+Table of Tumbuka concords
!
!noun
!English
!this
!num
!that
!all
!subj
!object
!adj
!of
!perf
|-
!1
|{{lang|tum|mwana}}
|child
|{{lang|tum|uyu}}
|''yu-''
|{{lang|tum|uyo}}
|{{lang|tum|yose}}
|''wa-''
|''-mu-''
|''mu-''
|{{lang|tum|wa}}
|''wa-''
|-
!2
|{{lang|tum|ŵana}}
|children
|{{lang|tum|aŵa}}
|''ŵa-''
|{{lang|tum|awo}}
|{{lang|tum|wose}}
|''ŵa-''
|''-ŵa-''
|''ŵa-''
|{{lang|tum|ŵa}}
|''ŵa-''
|-
!3
|{{lang|tum|mutu}}
|head
|{{lang|tum|uwu}}
|''wu-''
|{{lang|tum|uwo}}
|{{lang|tum|wose}}
|''wu-''
| -''wu-''
|''wu-''
|{{lang|tum|wa}}
|''wa-''
|-
!4
|{{lang|tum|mitu}}
|heads
|{{lang|tum|iyi}}
|''yi-''
|{{lang|tum|iyo}}
|{{lang|tum|yose}}
|''yi-''
|''-yi-''
|''yi-''
|{{lang|tum|ya}}
|''ya-''
|-
!5
|{{lang|tum|jiso}}
|eye
|{{lang|tum|ili}}
|''li-''
|{{lang|tum|ilo}}
|{{lang|tum|lose}}
|''li-''
|''-li-''
|''li-''
|{{lang|tum|la}}
|''la-''
|-
!6
|{{lang|tum|maso}}
|eyes
|{{lang|tum|agha}}
|''gha-''
|{{lang|tum|agho}}
|{{lang|tum|ghose}}
|''gha-''
|''-gha-''
|''gha-''
|{{lang|tum|gha}}
|''gha-''
|-
!7
|{{lang|tum|caka}}
|year
|{{lang|tum|ici}}
|''ci-''
|{{lang|tum|ico}}
|{{lang|tum|cose}}
|''ci-''
|''-ci-''
|''ci-''
|{{lang|tum|ca}}
|''ca-''
|-
!8
|{{lang|tum|vyaka}}
|years
|{{lang|tum|ivi}}
|''vi-''
|{{lang|tum|ivyo}}
|{{lang|tum|vyose}}
|''vi-''
|''-vi-''
|''vi-''
|{{lang|tum|vya}}
|''vya-''
|-
!9
|{{lang|tum|nyumba}}
|house
|{{lang|tum|iyi}}
|''yi-''
|{{lang|tum|iyo}}
|{{lang|tum|yose}}
|''yi-''
|''-yi-''
|''yi-''
|{{lang|tum|ya}}
|''ya-''
|-
!10
|{{lang|tum|nyumba}}
|houses
|{{lang|tum|izi}}
|''zi-''
|{{lang|tum|izo}}
|{{lang|tum|zose}}
|''zi-''
|''-zi-''
|''zi-''
|{{lang|tum|za}}
|''za-''
|-
!11
|{{lang|tum|lwande}}
|side
|{{lang|tum|ulu}}
|''lu-''
|{{lang|tum|ulo}}
|{{lang|tum|lose}}
|''lu-''
|''-lu-''
|''lu-''
|{{lang|tum|lwa}}
|''lwa-''
|-
!
|
|(or:
|{{lang|tum|ili}}
|''li-''
|{{lang|tum|ilo}}
|{{lang|tum|lose}}
|''li-''
|''-li-''
|''li-''
|{{lang|tum|la}}
|''la-'')
|-
!12
|{{lang|tum|kayuni}}
|bird
|{{lang|tum|aka}}
|''ka-''
|{{lang|tum|ako}}
|{{lang|tum|kose}}
|''ka-''
|''-ka-''
|''ka-''
|{{lang|tum|ka}}
|''ka-''
|-
!13
|{{lang|tum|tuyuni}}
|birds
|{{lang|tum|utu}}
|''tu-''
|{{lang|tum|uto}}
|{{lang|tum|tose}}
|''tu-''
|''-tu-''
|''tu-''
|{{lang|tum|twa}}
|''twa-''
|-
!14
|{{lang|tum|uta}}
|bow
|{{lang|tum|uwu}}
|''wu''-
|{{lang|tum|uwo}}
|{{lang|tum|wose}}
|''wu-''
|''-wu-''
|''wu-''
|{{lang|tum|wa}}
|''wa-''
|-
!15
|{{lang|tum|kugula}}
|buying
|{{lang|tum|uku}}
|''ku-''
|{{lang|tum|uko}}
|{{lang|tum|kose}}
|''ku-''
|''-ku-''
|''ku-''
|{{lang|tum|kwa}}
|''kwa-''
|-
!16
|{{lang|tum|pasi}}
|underneath
|{{lang|tum|apa}}
|''pa-''
|{{lang|tum|apo}}
|{{lang|tum|pose}}
|''pa-''
|''-pa-''
|''pa-''
|{{lang|tum|pa}}
|''pa-''
|-
!17
|{{lang|tum|kunthazi}}
|in front
|{{lang|tum|uku}}
|''ku-''
|{{lang|tum|uko}}
|{{lang|tum|kose}}
|''ku-''
|''-ku-''
|''ku-''
|{{lang|tum|kwa}}
|''kwa-''
|-
!18
|{{lang|tum|mukati}}
|inside
|{{lang|tum|umu}}
|''mu-''
|{{lang|tum|umo}}
|{{lang|tum|mose}}
|''mu-''
|''-mu-''
|''mu-''
|{{lang|tum|mwa}}
|''mwa-''
|-
|}
== Viyelezgero vya mazgu na malemba ==
Mazgu agha ndigho munthu wangayowoya para wakuluta ku chigaŵa icho ŵanthu ŵanandi ŵakuyowoya ChiTumbuka:
{| class="wikitable"
|+
!Tumbuka
!Chizungu
|-
|Moni
|Hello
|-
|Monile
|hello, to a group of people
|-
|Muli makola?
Mwaŵa uli?
|how are you?
|-
|Muli makola?
Mwaŵa uli?
|How are you?, to a group of people
|-
|Nili makola
|I'm okay
|-
|Tili makola
|We're okay
|-
|Naonga (chomene)
|Thank you (a lot)
|-
|Yewo (chomene)
|Thanks (a lot)
|-
|Ndiwe njani zina lako?
|What is your name?
|-
|Zina lane ndine....
|My name is....
|-
|Nyengo ili uli?
|What is the time?
|-
|Ningakuvwila?
|Can I help you?
|-
|Uyende makola
|Goodbye/go well/safe travels
|-
|Mwende makola
|Goodbye/go well/safe travels
(said to a group of people)
|-
|Enya/ Eh
|Yes
|-
|Yayi/Chala
|No
|-
|Kwali
|I don't know
|-
|Mukumanya kuyowoya Chizungu?
|Can you speak English?
|-
|Nayambapo kusambilila ChiTumbuka
|I've just started learning Tumbuka
|-
|Mukung'anamula vichi?
|What do you mean?
|-
|Chonde, ningaluta kubafa?
|May I please go to the bathroom?
|-
|Nakutemwa/Nkhukutemwa
|"I love you"
|-
|Phepa
|Sorry
|-
|Phepani
|Sorry (to agroup of people)
|-
|Banja
|Family
|-
|Yowoya
|Talk/speak
|}
== Verbs ==
=== Subject prefix ===
Viyezgo vyose vikwenera kuŵa na lizgu lakunjilira ilo likuyana na lizgu lakunjilira. Mwaciyerezgero, lizgu lakuti ciŵinda'muthondo' lili mu gulu la 7, ntheura usange ni munthu, verebu ili lili na c-:
: {{lang|tum|ciŵinda '''ci'''-ka-koma nkhalamu}} = 'the hunter killed a lion'<ref>Chavula (2016), p. 42.</ref>
It is also possible for the subject to be a locative noun (classes 16, 17, 18), in which case the verb has a locative prefix:<ref>Chavula (2016), p. 23.</ref>
: {{lang|tum|pamphasa '''pa'''-ka-khala mwana}} = 'on the mat there sat down a child'
The locative prefix ''ku-'' (class 17) is also used impersonally when discussing the weather:<ref>Chavula (2016), p. 24.</ref>
: {{lang|tum|'''ku'''kuzizima madazi ghano}} = 'it's cold these days'
When the subject is a personal pronoun, the subject prefixes are as follows (the pronoun itself may be omitted, but not the subject prefix):
: {{lang|tum|(ine) '''n'''-kha-gula}} = 'I bought' (''nkha-'' stands for ''ni-ka-'')
: {{lang|tum|(iwe) '''u'''-ka-gula}} = 'you bought' (informal, singular)
: {{lang|tum|(iyo)<ref>Chavula (2016), p. 23. But Kishindo et al. (2018), s.v. {{lang|tum|iye}}, have {{lang|tum|iye}}.</ref> '''wa'''-ka-gula}} = 'he, she bought'
: {{lang|tum|(ise) '''ti'''-ka-gula}} = 'we bought'
: {{lang|tum|(imwe) '''mu'''-ka-gula}} = 'you bought' (plural or respectful)
: {{lang|tum|(iwo) '''ŵa'''-ka-gula}} = 'they bought', 'he/she bought' (plural or respectful)
In the perfect tense, these are shortened to {{lang|tum|n-a-, w-a-, w-a-, t-a-, mw-a-, ŵ-a-}}, e.g. {{lang|tum|t-a-gula}} 'we have bought'.
In [[Karonga]] dialect, in the 3rd person singular ''a-'' is found instead of ''wa-'', and the 3rd plural is ''wa-'' instead of ''ŵa-'', except in the perfect tense, when ''wa-'' and ''ŵa-'' are used.<ref>McNicholl (2010), pp. 7–8.</ref>
=== Object-marker ===
To indicate the object, an infix can be added to the verb immediately before the verb root. Generally speaking, the object-marker is optional:<ref>Chavula (2016), pp. 51–64.</ref>
: {{lang|tum|Pokani wa('''yi''')gula galimoto}} = 'Pokani has bought a car' (class 9)
: {{lang|tum|Changa waka('''mu''')nyamula katundu}} = 'Changa carried the luggage' (class 1)
The object-marker agrees with the class of the object, as shown on the table of concords above.
The object-marker can also be a locative (classes 16, 17, or 18):<ref>Chavula (2016), p. 56.</ref>
: {{lang|tum|Kondwani wa('''pa''')kwera pa nyumba}} = 'Kondwani has climbed on top of the house'
The locative markers for personal pronouns are as follows:<ref>Chavula (2016), pp. 53–4.</ref>
: {{lang|tum|wa'''ni'''ona (ine)}} = 'he has seen me'
: {{lang|tum|wa'''ku'''ona (iwe)}} = 'he has seen you'
: {{lang|tum|wa'''mu'''ona}} = 'he has seen him/her'
: {{lang|tum|wa'''ti'''ona}} = 'he has seen us'
: {{lang|tum|wa'''mu'''ona'''ni'''}} = 'he has seen you' (plural or respectful)
: {{lang|tum|wa'''ŵa'''ona}} = 'he has seen them'
=== Tenses ===
Tenses in Tumbuka are made partly by adding infixes, and partly by suffixes. Unlike ChiCheŵa, tones do not form any part of the distinction between one tense and another.
In the past a distinction is made between hodiernal tenses (referring to events of today) and remote tenses (referring to events of yesterday or some time ago). However, the boundary between recent and remote is not exact.<ref>Kiso (2012), p. 176.</ref>
Pali mphambano yikuru pakati pa nyengo iyo yajumpha na nyengo iyo yajumpha. Para munthu wakuyowoya mu nyengo yakufikapo, wakuyowoya kuti vinthu vicali makora, nga ni para wakuti: 'Vikondamoyo vyatandazgika mu munda.' Para munthu wakuyowoya lizgu lakuti ndakhala, wakung'anamura kuti "Nkhukhala" panji ndakondwa. Chizindikiro cha kutali chikugwiliskirika nchito pa vinthu ivyo vikacitika kale comene kweni ivyo vikucitika mazuŵa ghano, nga ni libwe lilikuwa 'libwe lawira' panji walikutayika 'wali kufwa.'<ref>Kiso (2012), pp. 171, 178.</ref><ref>Kiso (2012), p. 171, quoting Vail (1972).</ref>
Nyengo zakunthazi nazo zikupambaniska pakati pa vyakuchitika vyapafupi na vyakutali. Vinyake vikulongora kuti cakucitika ici cizamucitikira kunyake, nga ni ndamukuchezga 'Nizamuluta kukacezga.'<ref>Kiso (2012), p. 184, quoting Vail (1972).</ref>
Compound tenses are also found in Tumbuka, such as {{lang|tum|wati wagona}} 'he had slept', {{lang|tum|wakaŵa kuti wafumapo}} 'he had just left' and {{lang|tum|wazamukuŵa waguliska}} 'he will have sold'.<ref>Kiso (2012), pp. 172, 182, 184, quoting Vail (1972).</ref>
{| class="wikitable" style="text-align: left"
|+Some Tumbuka tenses<ref>Kiso (2012), pp. 163–192.</ref>
!Tense
!Tense marker
!Example
!Translation
|-
!Present infinitive
|ku-
|{{lang|tum|'''ku'''-luta}}
|‘to go'
|-
!
|-
!Present simple
| -ku-
|{{lang|tum|wa-'''ku'''-luta}}
|‘he/she goes/is going’
|-
!Present habitual
| -ku-...-anga
|{{lang|tum|wa-'''ku'''-lut-'''anga'''}}
|‘he/she goes’ (some speakers only)
|-
!
|-
!Present perfect
| -a-
|{{lang|tum|w-'''a'''-luta}}
|‘he/she has gone’
|-
!Present perfect continuous
| -a-...-anga
|{{lang|tum|w-'''a'''-lut-'''anga'''}}
|‘he/she has been going'
|-
!Remote perfect
| -liku-
|{{lang|tum|wa-'''liku'''-luta}}
|‘he/she has gone’
|-
!
|-
!Recent past simple
| -angu-
|{{lang|tum|w-'''angu'''-luta}}
|‘he/she went’ (today)
|-
!Recent past continuous
| -angu-...-anga
|{{lang|tum|w-'''angu'''-lut-'''anga'''}}
|‘he/she was going' (today)
|-
!Remote past simple
| -ka-
|{{lang|tum|wa-'''ka'''-luta}}
|‘he/she went’
|-
!Remote past continuous
| -ka-...-anga
|{{lang|tum|wa-'''ka'''-lut-'''anga'''}}
|‘he/she was going/used to go'
|-
!
|-
![[Near future (grammar)|Near future]]
|...-enge
|{{lang|tum|wa-lut-'''enge'''}}
|'he will go' (now or today)
|-
!Emphatic future<ref>Kiso (2012), p. 183, quoting Vail (1972).</ref>
| -ti-...-enge
|{{lang|tum|wa-'''ti'''-lut-'''enge'''}}
|'he will certainly go'
|-
!Distal future<ref>Kiso (2012), p. 184, 185, quoting Vail (1972). For the term 'distal', see Botne (1999).</ref>
| -amu-(ku)-
|{{lang|tum|w-'''amuku'''-gula}}
|‘he/she will buy’ (elsewhere)
|-
!Remote future
| -zamu-(ku)-
|{{lang|tum|wa-'''zamu'''-luta}}
|‘he/she will go’ (tomorrow or later)
|-
!Remote future continuous
| -zamu-...-anga
|{{lang|tum|wa-'''zamu'''-lut-'''anga'''}}
|‘he/she will be going' (tomorrow or later)
|-
!
|-
!Present subjunctive
| -e
|{{lang|tum|ti-lut-'''e'''}}
|‘let's go'
|-
!Distal subjunctive
| -ka-...-e
|{{lang|tum|wa-'''ka'''-gul-'''e'''}}
|‘so that he can buy (elsewhere)'
|-
!Potential
| -nga-
|{{lang|tum|wa-'''nga'''-luta}}
|'he can go'<ref>McNicholl (2010), p. 8.</ref>
|}
Other future tenses are given by Vail (1972) and others.<ref>See Kiso (2012) pp. 182–188.</ref>
In the 1st person singular, ''ni-ku-'' and ''ni-ka-'' are shortened to ''nkhu-'' and ''nkha-'': {{lang|tum|nkhuluta}} 'I am going', 'I go', {{lang|tum|nkhalutanga}} 'I used to go'.<ref>Kiso (2012), pp. 163, 173.</ref>
=== Negative verbs ===
To make the negative of a verb in Tumbuka, the word {{lang|tum|yayi}} or {{lang|tum|cha(ra)}} is added at or near the end of the clause. It seems that {{lang|tum|yayi}} is preferred by younger speakers:<ref>Kiso (2012), p. 190.</ref>
: {{lang|tum|wakulemba kalata '''yayi'''}}
: 'he is not writing a letter'
: {{lang|tum|tizamugwira ntchito '''cha''' machero}}
: 'we will not work tomorrow'
With the present perfect tense, however, a separate form exists, adding ''-nda-'' and ending in ''-e'':<ref>Kiso (2012), p. 191.</ref>
: {{lang|tum|enya, n'''a'''kumana nawo}}
: 'yes, I have met him'
: {{lang|tum|yayi, ni'''nda'''kuman'''e''' nawo}}
: 'no, I haven't met him'
== The Ngoni influence on Tumbuka ==
'''Words of Ngoni (Zulu/Ndwandwe) origin found in Tumbuka:'''
Viyowoyero vyose vya ChiTumbuka vikakhwaskika na chiyowoyero cha Chigoni, chomenechomene mu chigaŵa cha Mzimba ku Malawi. Chiyowoyero cha Ngoni chikamba na ŵanthu ŵa mtundu wa Ndwandwe awo ŵakaŵa ŵazengezgani ŵa fuko la Zulu pambere Ŵazulu ŵandaŵathereske. Ntheura chiyowoyero icho Ŵandwandwe ŵakayowoyanga chikaŵa chakuyana waka na cha Ŵazulu. Apa pali viyelezgero vinyake vya mazgu gha ChiTumbuka agho ghali kufuma ku chiZulu/Ndwandwe, nangauli ghanandi ghali na mazgu ghakwambilira gha ChiTumbuka agho ghakung'anamulika mu chiyowoyero ichi.
{| class="wikitable"
!English
!Tumbuka
!Tumbuka-Ngoni dialect
|-
|See
|Wona
|Bheka
|-
|Smoke
|Khweŵa
|Bhema
|-
|Man
|Mwanalume
|Doda
|-
|Virgin
|Mwali
|Nthombi
|}
== An example of Tumbuka ==
'''Months in Tumbuka:'''
{| class="wikitable"
!English
!Tumbuka
|-
|January
|Mathipa
|-
|February
|Muswela
|-
|March
|Nyakanyaka
|-
|April
|Masika
|-
|May
|Vuna
|-
|June
|Zizima
|-
|July
|Mphepo
|-
|August
|Mpupulu
|-
|September
|Lupya
|-
|October
|Zimya
|-
|November
|Thukila
|-
|December
|Vula
|}
Chiyelezgero cha nkhani ya ŵanthu iyo yikang'anamulika mu ChiTumbuka na viyowoyero vinyake vya kumpoto kwa Malawi chili mu buku la Language Mapping Survey for Northern Malawi, ilo likalembeka na Center for Language Studies of the University of Malawi.<ref>[https://web.archive.org/web/20210413225347/http://unima-cls.org/Docs/MappingNorthernMalawi/lm-northernmalawi.pdf Language Mapping Survey], p. 60-64.</ref> Buku la ChiTumbuka ilo lili na nkhani iyi likuti:
: {{lang|tum|KALULU NA FULU (ChiTumbuka)|italics=no}}
: {{lang|tum|Fulu wakaluta kukapemphiska vyakulya ku ŵanthu. Pakuyeya thumba lake wakacita kukaka ku cingwe citali na kuvwara mu singo, ndipo pakwenda thumba lake likizanga kunyuma kwakhe.|italics=no}}
: {{lang|tum|Wali mu nthowa, kalulu wakiza kunyuma kwakhe ndipo wakati “bowo, thumba lane!” Fulu wakati, "Thumba ndane iwe, wona cingwe ici ndakaka sono nkhuguza pakwenda.” Kalulu wakakana nipera, ndipo wakati “Tilute ku Mphala yikateruzge.” Mphala yikadumula mlandu na kuceketa cingwe ico Fulu wakakakira thumba. Ŵakatola thumba lira ndipo ŵakapa kalulu.|italics=no}}
: {{lang|tum|Pa zuŵa linyakhe Kalulu wakendanga, Fulu wakamsanga ndipo wakati, "Bowo, mcira wane!" Kalulu wakati, “Ake! Fulu iwe m'cira ngwane." Fulu wakakana, ndipo wakati, "Ndasola ngwane." Ŵakaluta ku mphala, kuti yikaŵeruzge. Ku Mphala kula mlandu ukatowera Fulu. Ŵakadumula m'cira wa Kalulu nakupa Fulu.|italics=no}}
: (Translation)
: THE TORTOISE AND THE HARE
: Tortoise went to beg food from people. To carry his bag, he tied it to a long string and wore it round his neck. As he walked along, the bag was coming behind him.
: As he was on his way, Hare came up behind him and said, "There it is, my bag!" Tortoise said "The bag is mine, see this string I've tied now I'm pulling it as I go." Hare refused to accept this and said "Let's go the Court, so that it can judge us." The Court examined the case and cut Tortoise's string which he'd tied the bag with. They took that bag and gave it to Hare.
: Another day when Hare was walking along, Tortoise found him and said, "There it is, my tail!" Hare said, "Nonsense, this is my tail, Tortoise." Tortoise refused to accept this and said, "What I've got is mine." They went to the Court so that it could make a judgement. In that Court, the case went in Tortoise's favour. They cut off Hare's tail and gave it to Tortoise.
== Some vocabulary ==
=== Helpful phrases ===
* {{lang|tum|Enya}} = Yes
* {{lang|tum|Yayi}} = No
* {{lang|tum|Yebo (yeŵo)}} = Thank you
* {{lang|tum|Taonga}} = We are thankful
* {{lang|tum|Nkhukhumba chakurya!}} = I want some food !
* {{lang|tum|Munganipako chakurya?}} = could you give me some food?
* {{lang|tum|Ine nkhuyowoya ChiTumbuka yayi!}} = I do not speak ChiTumbuka!
* {{lang|tum|Yendani makola}} = Travel well.
* {{lang|tum|Nkukhumba maji yakumwa}} = I would like water to drink.
=== Greetings ===
* {{lang|tum|Mwawuka uli?}} = Good morning. (How did you wake up?)
* {{lang|tum|Tawuka makola. Kwali imwe?}} = Fine. And you? (I woke up well. I don't know about you?)
* {{lang|tum|Muli uli?}} = How are you?
* {{lang|tum|Nili makola, kwali imwe?}} = I am fine, how are you?
* {{lang|tum|Mwatandala uli?}} = Good afternoon. (How did you spend the day?)
* {{lang|tum|Natandala makola. Kwali imwe?}} = Good afternoon. How are you? (I spent the day well. I don't know about you?)
* {{lang|tum|Monile}} = somewhat more formal than "Hi". Perhaps best translated as "Greetings".
* {{lang|tum|Tionanenge}} = We shall meet again.
=== People ===
The plural ba- (ŵa-) is often used for politeness when referring to elders:
* {{lang|tum|Munyamata}} = boy
* {{lang|tum|Banyamata (ŵanyamata)}} = boys
* {{lang|tum|Musungwana}} = girl
* {{lang|tum|Basungwana (ŵasungwana)}} = girls
* {{lang|tum|Bamwali (ŵamwali)}} = young ladies
* {{lang|tum|Banchembere (ŵancembele)}} = a woman with babies
* {{lang|tum|Bamama (ŵamama)}} = mother
* {{lang|tum|Badada(ŵadhadha)}} = dad
* {{lang|tum|Bagogo (ŵagogo)}} = grandmother
* {{lang|tum|Babuya (ŵabhuya)}} = grandmother, also used when addressing old female persons
* {{lang|tum|Basekulu (ŵasekulu)}} = grandfather
* {{lang|tum|Bankhazi (ŵankhazi)}} = paternal aunt
* {{lang|tum|ŵa/Bamama ŵa/bachoko / ŵa/bakulu}} = maternal aunt usually your mother's younger/older sister
* {{lang|tum|Basibweni (ŵasibweni)}} = maternal uncle
* {{lang|tum|Badada(ŵadhadha) bachoko / bakulu}} = paternal uncle usually your father's younger/older brother
* {{lang|tum|Mudumbu(mudhumbu) wane}} = my brother/ sister (for addressing a sibling of the opposite sex)
* {{lang|tum|Muchoko wane / muzuna wane/ munung'una wane}} = my young brother / sister (for addressing a sibling of the same sex)
* {{lang|tum|Mukuru wane / mulala wane}} = my elder brother / sister (for addressing a sibling of the same sex)
=== Verbs ===
* {{lang|tum|Kusebela (Kuseŵera)}} = to play
* {{lang|tum|Kuseka}} = to laugh
* {{lang|tum|Kurya}} = to eat
* {{lang|tum|Kugona}} = to sleep
* {{lang|tum|Kwenda}} = to walk
* {{lang|tum|Kuchimbila}} = to run
* {{lang|tum|Kulemba}} = to write
* {{lang|tum|Kuchapa}} = to do laundry
* {{lang|tum|Kugeza}} = to bath
* {{lang|tum|Kuphika}} = to cook
* {{lang|tum|Kulima}} = to dig / cultivate
* {{lang|tum|Kupanda}} = to plant
* {{lang|tum|Kuvina}} = to dance
* {{lang|tum|Kwimba}} = to sing
=== Animals ===
* {{lang|tum|Fulu}} = tortoise
* {{lang|tum|Kalulu}} = hare
* {{lang|tum|Gwere}} = hippo
* {{lang|tum|Chimbwi}} = hyena
* {{lang|tum|Njoka}} = snake
* {{lang|tum|Nkhumba}} = pig
* {{lang|tum|Ng'ombe}} = cow
* {{lang|tum|Nchebe (Ncheŵe)}} = dog
* {{lang|tum|Chona/pusi/kiti}} = cat
* {{lang|tum|Mbelele}} = sheep
* {{lang|tum|Nkalamu}} = lion
* {{lang|tum|Mbuzi}} = goat
* {{lang|tum|Nkhuku}} = chicken
== Wonaniso ==
* [[Tumbuka people]]
* [[Tumbuka mythology]]
== Notable Tumbuka People ==
* [[Shepherd Bushiri|Sheperd Bushiri]] (Christian preacher)
* [[Mwai Kumwenda]] (netball player)
* [[Bridget Kumwenda|Briddget Kumwenda]] (netball player)
* [[Chakufwa Chihana]] ( human rights activist and politician)
* [[Enoch Chihana]] (member of parliament)
== Ukaboni ==
{{reflist}}
== Bibliography ==
{{refbegin}}
* Botne, Robert (1999). [https://web.archive.org/web/20210413225148/https://scholarworks.iu.edu/dspace/bitstream/handle/2022/3356/botne%20book%20chapter.pdf?sequence=1 "Future and distal -ka-'s: Proto-Bantu or nascent form(s)?"]. In: Jean-Marie Hombert and Larry M. Hyman (eds.), ''Bantu Historical Linguistics: Theoretical and Empirical Perspectives''. Stanford, CA: Center for the Study of Language and Information, pp. 473–515.
* Chase, Robert (2004). "A Comparison of Demonstratives in the Karonga and Henga Dialects of Tumbuka". Undergraduate paper. Amherst: Dept. of Linguistics, Univ. of Massachusetts.
* Chavula, Jean Josephine (2016). [https://www.lotpublications.nl/Documents/423_fulltext.pdf "Verbal derivation and valency in ChiTumbuka"]. Leiden University doctoral thesis.
* Downing, Laura J. (2006). "The Prosody and Syntax of Focus in ChiTumbuka". ''ZAS Papers in Linguistics'' 43, 55-79.
* Downing, Laura J. (2008). "Focus and prominence in ChiCheŵa, ChiTumbuka and Durban Zulu". ''ZAS Papers in Linguistics'' 49, 47-65.
* Downing, Laura J. (2012). [http://www.lingref.com/cpp/acal/42/paper2764.pdf "On the (Non-)congruence of Focus and Prominence in Tumbuka"]. ''Selected Proceedings of the 42nd Annual Conference on African Linguistics'', ed. Michael R. Marlo et al., 122-133. Somerville, MA: Cascadilla Proceedings Project.
* Downing, Laura J. (2017). "Tone and intonation in ChiCheŵa and Tumbuka". In Laura J. Downing & Annie Rialland (eds) ''Intonation in African Tone Languages''. de Gruyter, Berlin/Boston, pp. 365–392.
* Downing, Laura J. (2019). [https://www.researchgate.net/profile/Laura_Downing/publication/335175896_Tumbuka_prosody_Between_tone_and_stress/links/5d55398645851545af43be4d/Tumbuka-prosody-Between-tone-and-stress.pdf "Tumbuka prosody: Between tone and stress"]. In: Emily Clem et al (eds). ''Theory and Description in African Linguistics: Selected papers from the 47th Annual Conference on African Linguistics'', 75-94. Also available online at: [https://books.google.com/books?id=fPSrDwAAQBAJ&dq=Tumbuka+prosody%3A+Between+tone+and+stress&pg=PA75]
* Elmslie, Walter Angus (1923): ''Introductory Grammar of the Tumbuka Language''. Livingstonia Mission Press.
* Kamwendo, Gregory H. (2004). [https://web.archive.org/web/20200929073334/http://www.njas.helsinki.fi/pdf-files/vol13num3/kamwendo.pdf Kamwendo "Your ChiTumbuka is Shallow. It's not the Real ChiTumbuka: Linguistic Purism Among ChiTumbuka Speakers in Malawi"], ''Nordic Journal of African Studies'' 13(3): 275–288.
* Kishindo, Pascal J. et Allan L. Lipenga (2006). ''Parlons ChiTumbuka : langue et culture du Malawi et de la Zambie'', L'Harmattan, Paris, Budapest, Kinshasa, 138 pages. {{ISBN|2-296-00470-9}}
* Kishindo, Pascal J. (ed), Jean J. Chavula and others (2018). {{lang|tum|Mung'anamulira mazgo wa ChiTumbuka}} (ChiTumbuka dictionary). Centre for Language Studies, University of Malawi. {{ISBN|978-99960-9-610-5}}
* Kiso, Andrea (2012). [http://su.diva-portal.org/smash/get/diva2:546594/FULLTEXT01.pdf "Tense and Aspect in ChiCheŵa, ChiTumbuka, and Cisena"]. Ph.D. Thesis. Stockholm University.
* McNicholl, Duncan (2010). [https://web.archive.org/web/20190819091447/http://malawinetwork.org/guide-to-chitumbuka.pdf "The No-Nonsense Guide to Learning ChiTumbuka: Volume 1"].
* Moto, Francis (1999). "The Tonal Phonology of Bantu Ideophones". ''Malilime: Malawian Journal of Linguistics'' no.1, 100-120. (pp. 112–119 deals with tone in ChiTumbuka ideophones).
* Mphande, L. (1989). "A Phonological Analysis of the Ideophone in ChiTumbuka". Ph.D. Dissertation. The University of Texas, Austin.
* Shiozaki, Lisa (2004). "Concordial agreement in the Karonga dialect of Tumbuka". Undergraduate paper. Amherst: Dept. of Linguistics, Univ. of Massachusetts.
* Turner, W.M. (1952). ''Tumbuka–Tonga–English Dictionary'' The Hetherwick Press, Blantyre, Nyasaland (now Malawi).
* University of Malawi Centre for Language Studies (2006). [https://web.archive.org/web/20210413225347/http://unima-cls.org/Docs/MappingNorthernMalawi/lm-northernmalawi.pdf "Language Mapping Survey for Northern Malawi"].
* Vail, Hazen Leroy (1971). "The noun classes of Tumbuka". ''African studies'', v. 30, 1, p. 35-59.
* Vail, Hazen Leroy (1972). "Aspects of the Tumbuka Verb". Ph.D. dissertation, University of Wisconsin.
{{refend}}
== External links ==
{{InterWiki|code=tum}}
{{Wikivoyage|Tumbuka phrasebook|Tumbuka|a phrasebook}}
* [https://web.archive.org/web/20151123103050/http://africa.isp.msu.edu/afrlang/Tumbuka_root.html Very brief report on Tumbuka language.]
* [https://web.archive.org/web/20210413225347/http://unima-cls.org/Docs/MappingNorthernMalawi/lm-northernmalawi.pdf Language Mapping Survey for Northern Malawi]. University of Malawi Centre for Language Studies, 2006.
* [https://web.archive.org/web/20210413225407/http://unima-cls.org/Docs/MappingNorthernMalawi/mw-north-a4.jpg Language Map of Northern Malawi]
* [https://web.archive.org/web/20051222115610/http://embangweni.com/chitumbu.htm Some more ChiTumbuka vocabulary.]
* [http://www.bisharat.net/wikidoc/pmwiki.php/PanAfrLoc/Tumbuka PanAfrican L10n page on Tumbuka]
* [https://web.archive.org/web/20210308020136/http://www.unima-cls.org/ ChiTumbuka monolingual dictionary]
{{Languages of Malawi}}
{{Languages of Zambia}}
{{Narrow Bantu languages|N-S}}
{{Authority control}}
{{DEFAULTSORT:Tumbuka Language}}
[[Category:Tumbuka language| ]]
[[Category:Nyasa languages]]
[[Category:Languages of Malawi]]
[[Category:Languages of Zambia]]
[[Category:Tumbuka people]]
[[Category:Non-tonal languages in tonal families]]
[[Category:Click languages|Tumbuka language (Mzimba dialect)]]
g81q7fhukjlbo4sds4pftrgypu8j4w7
Module:Params
828
43807
123256
123158
2026-10-11T04:38:58Z
Grufo
8824
Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q122696746|master]] using [[mw:Synchronizer| #Synchronizer]]
123256
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
}
-- 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 substack has been created', 0) end
local parent = ctx.parents[ncurrparent]
for key in pairs(ctx.params) do parent[key] = nil end
return context_iterate(ctx, 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 substack has 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 substack has been created', 0) end
local currsnap = ctx.n_children + 1
if ctx.children == nil then ctx.children = { ctx.params }
else ctx.children[currsnap] = ctx.params end
ctx.params, ctx.parents[ncurrparent], ctx.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 substack has been created', 0) end
local parent, child = ctx.parents[ncurrparent], ctx.params
ctx.params, ctx.parents[ncurrparent], ctx.n_parents = parent, nil,
ncurrparent - 1
for key, val in pairs(child) do parent[key] = val end
return context_iterate(ctx, ctx.fnpos + 1)
end
-- Syntax: #invoke:params|flushing|pipe to
library.flushing = function (ctx)
if ctx.n_children < 1 then error(modulename ..
', ‘flushing’: There are no substacks to flush', 0) end
local parent, 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
})
jnrp2hde108asrud4ch6fuc8nkppvn4
Mia (zina)
0
49945
123233
2026-10-10T13:36:23Z
Viyowoyero-vya-Malaŵi
11606
Created page with "'''Mia '''ni [[zina]] lakwamba la mwanakazi. Mia waŵa yumoza wa mazina 10 agho ghakumanyikwa chomene gha ŵasungwana awo ŵababika sonosono ku [[United States]].<ref>https://www.behindthename.com/name/mia</ref> ==Mndandanda wa ŵanthu== * [[Mia Alvar]] * [[Mia Bitsch]] * [[Mia Boman]] * [[Mia Brownell]] * [[Mia Clift]] * [[Mía Cueva]] * [[Mia Davies]] * [[Mia Falkenberg]] * [[Mia Farrow]] * [[Mia Goth]] * [[Mia Hagman]] * [[Mia Isabella]] * [[Mia Kilburg]] * Mia Ki..."
123233
wikitext
text/x-wiki
'''Mia '''ni [[zina]] lakwamba la mwanakazi.
Mia waŵa yumoza wa mazina 10 agho ghakumanyikwa chomene gha ŵasungwana awo ŵababika sonosono ku [[United States]].<ref>https://www.behindthename.com/name/mia</ref>
==Mndandanda wa ŵanthu==
* [[Mia Alvar]]
* [[Mia Bitsch]]
* [[Mia Boman]]
* [[Mia Brownell]]
* [[Mia Clift]]
* [[Mía Cueva]]
* [[Mia Davies]]
* [[Mia Falkenberg]]
* [[Mia Farrow]]
* [[Mia Goth]]
* [[Mia Hagman]]
* [[Mia Isabella]]
* [[Mia Kilburg]]
* [[Mia Kirshner]]
* [[Mia Kretzer]]
* [[Mia Kupres]]
* [[Mia Love]]
* [[Mia Makaroff]]
* [[Mia Mamede]]
* [[Mia Malkova]]
* [[Mia Mastrov]]
* [[Mia May]]
* [[Mia Michaels]]
* [[Mia Mottley]]
* [[Mia Münster]]
* [[Mia Newley]]
* [[Mia Pohánková]]
* [[Mia Pojatina]]
* [[Mia Riddle]]
* [[Mia Rodriguez]]
* [[Mia Sara]]
* [[Mia Strömmer]]
* [[Mia Talerico]]
* [[Mia Tavonatti]]
* [[Mia Tharia]]
* [[Mia Threapleton]]
* [[Mia Tomlinson]]
* [[Mia Tyler]]
* [[Mia Wasikowska]]
* [[Mia Wray]]
* [[Mia Yamamoto]]
* [[Mia Zabelka]]
* [[Mia Zapata]]
* [[Mia Zutter]]
==Ukaboni==
{{reflist}}
[[Category:Mazina]]
hwd3lpjdee555aavhl76fct37hze586
Leah (zina)
0
49947
123235
2026-10-10T13:44:46Z
Viyowoyero-vya-Malaŵi
11606
Created page with "'''Leah '''ni [[zina]] lakwamba la mwanakazi. Zina lakuti "Leah" likuyowoyaso za lizgu la [[ChiNgelezi Chakale]] lakuti léah ilo likung'anamura "munda".<ref>https://www.behindthename.com/name/leah</ref> ==Mndandanda wa ŵanthu== ===Ŵanthu ŵa ufumu=== *[[Leah Isadora Behn]] ===Ŵanthu ŵa boma=== *[[Leah Manning]] *[[Leah Rabin]] *[[Leah Rosenthal]] *[[Leah Taylor Roy]] *[[Leah Ward Sears]] ===Luso na maseŵero=== {{...}} ===Ŵanyake=== *[[Leah Berman]] *Leah Ca..."
123235
wikitext
text/x-wiki
'''Leah '''ni [[zina]] lakwamba la mwanakazi.
Zina lakuti "Leah" likuyowoyaso za lizgu la [[ChiNgelezi Chakale]] lakuti léah ilo likung'anamura "munda".<ref>https://www.behindthename.com/name/leah</ref>
==Mndandanda wa ŵanthu==
===Ŵanthu ŵa ufumu===
*[[Leah Isadora Behn]]
===Ŵanthu ŵa boma===
*[[Leah Manning]]
*[[Leah Rabin]]
*[[Leah Rosenthal]]
*[[Leah Taylor Roy]]
*[[Leah Ward Sears]]
===Luso na maseŵero===
{{...}}
===Ŵanyake===
*[[Leah Berman]]
*[[Leah Carola Czollek]]
*[[Leah Chase]]
*[[Leah Findlater]]
*[[Leah Horowitz]]
*[[Leah Mosher]]
*[[Leah Namugerwa]]
==Ukaboni==
{{reflist}}
[[Category:Mazina]]
co2v8h94d4y6l7u6ztf5bkbc7f7bq1l
123236
123235
2026-10-10T13:48:08Z
Viyowoyero-vya-Malaŵi
11606
Delete
123236
wikitext
text/x-wiki
{{Delete|Some Wikidata error, meaning it is not linking with the other articles}}
'''Leah '''ni [[zina]] lakwamba la mwanakazi.
Zina lakuti "Leah" likuyowoyaso za lizgu la [[ChiNgelezi Chakale]] lakuti léah ilo likung'anamura "munda".<ref>https://www.behindthename.com/name/leah</ref>
==Mndandanda wa ŵanthu==
===Ŵanthu ŵa ufumu===
*[[Leah Isadora Behn]]
===Ŵanthu ŵa boma===
*[[Leah Manning]]
*[[Leah Rabin]]
*[[Leah Rosenthal]]
*[[Leah Taylor Roy]]
*[[Leah Ward Sears]]
===Luso na maseŵero===
{{...}}
===Ŵanyake===
*[[Leah Berman]]
*[[Leah Carola Czollek]]
*[[Leah Chase]]
*[[Leah Findlater]]
*[[Leah Horowitz]]
*[[Leah Mosher]]
*[[Leah Namugerwa]]
==Ukaboni==
{{reflist}}
[[Category:Mazina]]
tmcvd2pyhqxqwdvj5f9801vlyqiusz5
123237
123236
2026-10-10T13:48:52Z
Viyowoyero-vya-Malaŵi
11606
Fixed
123237
wikitext
text/x-wiki
'''Leah '''ni [[zina]] lakwamba la mwanakazi.
Zina lakuti "Leah" likuyowoyaso za lizgu la [[ChiNgelezi Chakale]] lakuti léah ilo likung'anamura "munda".<ref>https://www.behindthename.com/name/leah</ref>
==Mndandanda wa ŵanthu==
===Ŵanthu ŵa ufumu===
*[[Leah Isadora Behn]]
===Ŵanthu ŵa boma===
*[[Leah Manning]]
*[[Leah Rabin]]
*[[Leah Rosenthal]]
*[[Leah Taylor Roy]]
*[[Leah Ward Sears]]
===Luso na maseŵero===
{{...}}
===Ŵanyake===
*[[Leah Berman]]
*[[Leah Carola Czollek]]
*[[Leah Chase]]
*[[Leah Findlater]]
*[[Leah Horowitz]]
*[[Leah Mosher]]
*[[Leah Namugerwa]]
==Ukaboni==
{{reflist}}
[[Category:Mazina]]
co2v8h94d4y6l7u6ztf5bkbc7f7bq1l
Template:Aceh labelled map
10
49948
123241
2026-10-11T02:33:00Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123241
wikitext
text/x-wiki
{{Image label begin|image=Indonesia Aceh location map.svg|width={{{width|400}}}|float={{{float|none}}}|link=|font-size=75%|thumb={{{thumb|}}}|caption={{{caption|}}}}}
{{Image label|x=0.210|y=0.130|scale={{{width|400}}}|text=[[{{{prefix|}}}Sabang, Aceh|Sabang]]}}
{{Image label|x=0.200|y=0.200|scale={{{width|400}}}|text=[[{{{prefix|}}}Banda Aceh|Banda<br>Aceh]]}}
{{Image label|x=0.270|y=0.230|scale={{{width|400}}}|text=[[{{{prefix|}}}Aceh Besar Regency|Aceh<br>Besar]]}}
{{Image label|x=0.300|y=0.350|scale={{{width|400}}}|text=[[{{{prefix|}}}Aceh Jaya Regency|Aceh<br>Jaya]]}}
{{Image label|x=0.690|y=0.360|scale={{{width|400}}}|text=[[{{{prefix|}}}East Aceh Regency|East<br>Aceh]]}}
{{Image label|x=0.550|y=0.350|scale={{{width|400}}}|text=[[{{{prefix|}}}Bener Meriah Regency|Bener<br>Meriah]]}}
{{Image label|x=0.560|y=0.310|scale={{{width|400}}}|text=[[{{{prefix|}}}North Aceh Regency|North Aceh]]}}
{{Image label|x=0.560|y=0.260|scale={{{width|400}}}|text=[[{{{prefix|}}}Lhokseumawe]]}}
{{Image label|x=0.470|y=0.300|scale={{{width|400}}}|text=[[{{{prefix|}}}Bireuen Regency|Bireuen]]}}
{{Image label|x=0.370|y=0.330|scale={{{width|400}}}|text=[[{{{prefix|}}}Pidie Regency|Pidie]]}}
{{Image label|x=0.400|y=0.260|scale={{{width|400}}}|text=[[{{{prefix|}}}Pidie Jaya Regency|Pidie<br>Jaya]]}}
{{Image label|x=0.390|y=0.420|scale={{{width|400}}}|text=[[{{{prefix|}}}West Aceh Regency|West<br>Aceh]]}}
{{Image label|x=0.450|y=0.480|scale={{{width|400}}}|text=[[{{{prefix|}}}Nagan Raya Regency|Nagan<br>Raya]]}}
{{Image label|x=0.510|y=0.410|scale={{{width|400}}}|text=[[{{{prefix|}}}Central Aceh Regency|Central<br>Aceh]]}}
{{Image label|x=0.500|y=0.540|scale={{{width|400}}}|text=[[{{{prefix|}}}Southwest Aceh Regency|Southwest<br>Aceh]]}}
{{Image label|x=0.660|y=0.620|scale={{{width|400}}}|text=[[{{{prefix|}}}Southeast Aceh Regency|Southeast<br>Aceh]]}}
{{Image label|x=0.630|y=0.510|scale={{{width|400}}}|text=[[{{{prefix|}}}Gayo Lues Regency|Gayo<br>Lues]]}}
{{Image label|x=0.740|y=0.420|scale={{{width|400}}}|text=[[{{{prefix|}}}Langsa]]}}
{{Image label|x=0.730|y=0.470|scale={{{width|400}}}|text=[[{{{prefix|}}}Aceh Tamiang Regency|Aceh<br>Tamiang]]}}
{{Image label|x=0.630|y=0.680|scale={{{width|400}}}|text=[[{{{prefix|}}}South Aceh Regency|South<br>Aceh]]}}
{{Image label|x=0.700|y=0.760|scale={{{width|400}}}|text=[[{{{prefix|}}}Subulussalam]]}}
{{Image label|x=0.380|y=0.730|scale={{{width|400}}}|text=[[{{{prefix|}}}Simeulue Regency|Simeulue]]}}
{{Image label|x=0.680|y=0.870|scale={{{width|400}}}|text=[[{{{prefix|}}}Aceh Singkil Regency|Aceh<br>Singkil]]}}
{{Image label|x=0.850|y=0.680|scale={{{width|400}}}|text=[[{{{prefix|}}}North Sumatra|''NORTH<br>SUMATRA'']]}}
{{Image label end}}
<noinclude>
{{Documentation
| content =
Labeled map for listing [[Regency (Indonesia)|regencies]] and [[City status in Indonesia|cities]] of [[Aceh]].
== Usage ==
* {{tlc|{{PAGENAME}}}} (default linking)
* {{tlc|{{PAGENAME}}|prefix{{=}}List of Aceh regencies and cities#}} (links to sections/anchors in [[List of regencies and cities in Aceh]])
== Image label ==
{{Image label begin/doc}}
[[Category:Labelled map templates]]
[[Category:Indonesia map templates]]
}}<!--(end Documentation)-->
</noinclude>
4siuhndeqef11a1v1sn5d5xuvgthhpz
Template:ASEAN Labelled Map (blue)
10
49949
123242
2026-10-11T02:38:32Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123242
wikitext
text/x-wiki
<onlyinclude>{{Image label begin|image=ASEAN members.svg|thumb=1|float=right|width=500|margin=0.5em 0pt 1.3em 1.4em|link=|alt=labelled map of ASEAN members states|caption=Vyalo vya ASEAN}}
{{Image label small|x=0.2000|y=0.165|scale=400|text=<div style="text-align: center;">[[Myanmar|<span style="color:black;">Myanmar</span>]]</div>}}
{{Image label small|x=0.3340|y=0.190|scale=400|text=<div style="text-align: center;">[[Laos|<span style="color:black;">Laos</span>]]</div>}}
{{Image label small|x=0.4580|y=0.295|scale=400|text=<div style="text-align: center;">[[Vietnam|<span style="color:black;">Vietnam</span>]]</div>}}
{{Image label small|x=0.3040|y=0.275|scale=400|text=<div style="text-align: center;">[[Thailand|<span style="color:black;">Thailand</span>]]</div>}}
{{Image label small|x=0.3730|y=0.310|scale=400|text=<div style="text-align: center;">[[Cambodia|<span style="color:black;">Cam-<br>bodia</span>]]</div>}}
{{Image label small|x=0.6300|y=0.340|scale=400|text=<div style="text-align: center;">[[Philippines|<span style="color:black;">Philippines</span>]]</div>}}
{{Image label small|x=0.4830|y=0.455|scale=400|text=<div style="text-align: center;">[[Brunei|<span style="color:black;">Brunei</span>]]</div>}}
{{Image label small|x=0.4150|y=0.495|scale=400|text=<div style="text-align: center;">[[Malaysia|<span style="color:black;">Malaysia</span>]]</div>}}
{{Image label small|x=0.0730|y=0.550|scale=400|text=<div style="text-align: center;">[[Malaysia|<span style="color:black;">Malaysia</span>]]</div>}}
{{Image label small|x=0.0730|y=0.626|scale=400|text=<div style="text-align: center;">[[Singapore|<span style="color:black;">Singapore</span>]]</div>}}
{{Image label small|x=0.5450|y=0.620|scale=400|text=<div style="text-align: center;">[[Indonesia|<span style="color:black;">I n d o n e s i a</span>]]</div>}}
{{Image label end}}</onlyinclude><noinclude>
[[Category:ASEAN templates]]
[[Category:Labelled map templates]]
</noinclude>
dge6vatyji9ps9zp9lwf8dc2vxqp1q0
Template:India States and Territories Labelled Map
10
49950
123243
2026-10-11T02:40:10Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123243
wikitext
text/x-wiki
{{Image label begin|image=India-locator-map-blank.svg|width={{{width|400}}}|float={{{float|none}}}|font-size=74%|padding=8px}}
{{Image label|x=0.370|y=0.880|scale={{{width|400}}}|text=[[Andhra Pradesh]]}}
{{Image label|x=0.85|y=0.35|scale={{{width|400}}}|text=[[Arunachal Pradesh]]}}
{{Image label|x=0.81|y=0.456|scale={{{width|400}}}|text=[[Assam]]}}
{{Image label|x=0.630|y=0.50|scale={{{width|400}}}|text=[[Bihar]]}}
{{Image label|x=0.5025|y=0.6475|scale={{{width|400}}}|text=[[Chhattisgarh]]}}
{{Image label|x=0.3|y=0.395|scale={{{width|400}}}|text=''[[Delhi|National<br />Capital Territory]]''}}
{{Image label|x=0.18|y=0.885|scale={{{width|400}}}|text=[[Goa]]}}
{{Image label|x=0.14|y=0.595|scale={{{width|400}}}|text=[[Gujarat]]}}
{{Image label|x=0.285|y=0.355|scale={{{width|400}}}|text=[[Haryana]]}}
{{Image label|x=0.33|y=0.255|scale={{{width|400}}}|text=[[Himachal Pradesh]]}}
{{Image label|x=0.24|y=0.17|scale={{{width|400}}}|text=''[[Jammu na Kashmir|Jammu<br />na<br />Kashmir]]''}}
{{Image label|x=0.35|y=0.162|scale={{{width|400}}}|text=''[[Ladakh]]''}}
{{Image label|x=0.59|y=0.5625|scale={{{width|400}}}|text=[[Jharkhand]]}}
{{Image label|x=0.275|y=0.96|scale={{{width|400}}}|text=[[Karnataka]]}}
{{Image label|x=0.285|y=1.08|scale={{{width|400}}}|text=[[Kerala]]}}
{{Image label|x=0.305|y=0.595|scale={{{width|400}}}|text=[[Madhya Pradesh]]}}
{{Image label|x=0.225|y=0.748|scale={{{width|400}}}|text=[[Maharashtra]]}}
{{Image label|x=0.90|y=0.510|scale={{{width|400}}}|text=[[Manipur]]}}
{{Image label|x=0.78|y=0.485|scale={{{width|400}}}|text=[[Meghalaya]]}}
{{Image label|x=0.8675|y=0.58|scale={{{width|400}}}|text=[[Mizoram]]}}
{{Image label|x=0.905|y=0.4375|scale={{{width|400}}}|text=[[Nagaland]]}}
{{Image label|x=0.59|y=0.69|scale={{{width|400}}}|text=[[Odisha]]}}
{{Image label|x=0.275|y=0.315|scale={{{width|400}}}|text=[[Punjab, India|Punjab]]}}
{{Image label|x=0.20|y=0.45|scale={{{width|400}}}|text=[[Rajasthan]]}}
{{Image label|x=0.69|y=0.425|scale={{{width|400}}}|text=[[Sikkim]]}}
{{Image label|x=0.3425|y=1.04|scale={{{width|400}}}|text=[[Tamil Nadu]]}}
{{Image label|x=0.3825|y=0.795|scale={{{width|400}}}|text=[[Telangana]]}}
{{Image label|x=0.81|y=0.5425|scale={{{width|400}}}|text=[[Tripura]]}}
{{Image label|x=0.395|y=0.33|scale={{{width|400}}}|text=[[Uttarakhand]]}}
{{Image label|x=0.425|y=0.475|scale={{{width|400}}}|text=[[Uttar Pradesh]]}}
{{Image label|x=0.6875|y=0.59|scale={{{width|400}}}|text=[[West Bengal|West<br />Bengal]]}}
{{Image label|x=0.76|y=0.96|scale={{{width|400}}}|text=''[[Andaman na Nicobar Islands|Andaman<br/>na<br/>Nicobar Islands]]''}}
{{Image label|x=0.30|y=0.29|scale={{{width|400}}}|text=''[[Chandigarh]]''}}
{{Image label|x=0.057|y=0.69|scale={{{width|400}}}|text=''[[Dadra na Nagar Haveli na Daman na Diu|Dadra na Nagar Haveli na<br />Daman na Diu]]''}}
{{Image label|x=0.11|y=1.045|scale={{{width|400}}}|text=''[[Lakshadweep]]''}}
{{Image label|x=0.45|y=0.995|scale={{{width|400}}}|text=''[[Puducherry|Puducherry]]''}}
{{Image label end}}<noinclude>
{{Documentation|Template:Image label begin/doc}}
[[Category:India state and territory templates| ]]
[[Category:Labelled map templates]]
</noinclude>
bach8pkw27v7pbwe79x5ke8d57vj4r9
Template:Indonesia provinces labelled map
10
49951
123245
2026-10-11T02:42:04Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123245
wikitext
text/x-wiki
{{Image label begin|image=Indonesia provinces blank map.svg|width={{{width|800}}}|float={{{float|none}}}|link=|font-size=85%|thumb={{{thumb|}}}|caption={{{caption|}}}}}
{{Image label|x=0.045|y=0.085|scale={{{width|800}}}|text=[[{{{prefix|}}}Aceh|Aceh]]}}
{{Image label|x=0.077|y=0.13|scale={{{width|800}}}|text=[[{{{prefix|}}}North Sumatra|North<br>Sumatra]]}}
{{Image label|x=0.095|y=0.19|scale={{{width|800}}}|text=[[{{{prefix|}}}West Sumatra|West<br>Sumatra]]}}
{{Image label|x=0.15|y=0.18|scale={{{width|800}}}|text=[[{{{prefix|}}}Riau|Riau]]}}
{{Image label|x=0.24|y=0.13|scale={{{width|800}}}|text=[[{{{prefix|}}}Riau Islands|Riau<br>Islands]]}}
{{Image label|x=0.25|y=0.215|scale={{{width|800}}}|text=[[{{{prefix|}}}Bangka Belitung Islands|Bangka<br>Belitung]]}}
{{Image label|x=0.164|y=0.214|scale={{{width|800}}}|text=[[{{{prefix|}}}Jambi|Jambi]]}}
{{Image label|x=0.193|y=0.238|scale={{{width|800}}}|text=[[{{{prefix|}}}South Sumatra|South<br>Sumatra]]}}
{{Image label|x=0.121|y=0.277|scale={{{width|800}}}|text=[[{{{prefix|}}}Bengkulu|Bengkulu]]}}
{{Image label|x=0.19333333|y=0.293|scale={{{width|800}}}|text=[[{{{prefix|}}}Lampung|Lampung]]}}
{{Image label|x=0.205|y=0.33333334|scale={{{width|800}}}|text=[[{{{prefix|}}}Banten|Banten]]}}
{{Image label| text-align=left |x=0.268|y=0.288|scale={{{width|800}}}|text=[[{{{prefix|}}}Jakarta|Jakarta<br>↓]]}}
{{Image label|x=0.269|y=0.323|scale={{{width|800}}}|text=[[{{{prefix|}}}West Java|West<br>Java]]}}
{{Image label|x=0.31833333|y=0.32|scale={{{width|800}}}|text=[[{{{prefix|}}}Central Java|Central<br>Java]]}}
{{Image label|x=0.315|y=0.355|scale={{{width|800}}}|text=↑<br>[[{{{prefix|}}}Special Region of Yogyakarta|Yogyakarta]]}}
{{Image label|x=0.372|y=0.34|scale={{{width|800}}}|text=[[{{{prefix|}}}East Java|East<br>Java]]}}
{{Image label|x=0.435|y=0.3616|scale={{{width|800}}}|text=[[{{{prefix|}}}Bali|Bali]]}}
{{Image label|x=0.453|y=0.36|scale={{{width|800}}}|text=[[{{{prefix|}}}West Nusa Tenggara|West<br>Nusa<br>Tenggara]]}}
{{Image label|x=0.5466667|y=0.36666667|scale={{{width|800}}}|text=[[{{{prefix|}}}East Nusa Tenggara|East Nusa<br>Tenggara]]}}
{{Image label|x=0.322|y=0.17|scale={{{width|800}}}|text=[[{{{prefix|}}}West Kalimantan|West<br>Kalimantan]]}}
{{Image label|x=0.37166667|y=0.203|scale={{{width|800}}}|text=[[{{{prefix|}}}Central Kalimantan|Central<br>Kalimantan]]}}
{{Image label|x=0.4553|y=0.1|scale={{{width|800}}}|text=[[{{{prefix|}}}North Kalimantan|North<br>Kalimantan]]}}
{{Image label|x=0.44|y=0.17|scale={{{width|800}}}|text=[[{{{prefix|}}}East Kalimantan|East<br>Kalimantan]]}}
{{Image label|x=0.41|y=0.255|scale={{{width|800}}}|text=[[{{{prefix|}}}South Kalimantan|South<br>Kalimantan]]}}
{{Image label|x=0.6166667|y=0.14166667|scale={{{width|800}}}|text=[[{{{prefix|}}}North Sulawesi|North<br>Sulawesi]]}}
{{Image label|x=0.66|y=0.18333334|scale={{{width|800}}}|text=[[{{{prefix|}}}North Maluku|North<br>Maluku]]}}
{{Image label|x=0.55|y=0.195|scale={{{width|800}}}|text=[[{{{prefix|}}}Central Sulawesi|Central<br>Sulawesi]]}}
{{Image label|x=0.548|y=0.139| text-align=right |scale={{{width|800}}}|text=[[{{{prefix|}}}Gorontalo|Gorontalo]]<br>↓}}
{{Image label|x=0.47666666|y=0.22833334|scale={{{width|800}}}|text=[[{{{prefix|}}}West Sulawesi|West<br>Sulawesi]]}}
{{Image label|x=0.49|y=0.27|scale={{{width|800}}}|text=[[{{{prefix|}}}South Sulawesi|South<br>Sulawesi]]}}
{{Image label|x=0.575|y=0.258|scale={{{width|800}}}|text=[[{{{prefix|}}}Southeast Sulawesi|Southeast<br>Sulawesi]]}}
{{Image label|x=0.73|y=0.295|scale={{{width|800}}}|text=[[{{{prefix|}}}Maluku (province)|Maluku]]}}
{{Image label|x=0.760|y=0.195|scale={{{width|800}}}|text=[[Southwest Papua|Southwest<br />Papua]]}}
{{Image label|x=0.815|y=0.235|scale={{{width|800}}}|text=[[West Papua (province)|West<br />Papua]]}}
{{Image label|x=0.875|y=0.260|scale={{{width|800}}}|text=[[Central Papua|Central<br />Papua]]}}
{{Image label|x=0.920|y=0.230|scale={{{width|800}}}|text=[[Papua (province)|Papua]]}}
{{Image label|x=0.935|y=0.260|scale={{{width|800}}}|text=[[Highland Papua|Highland<br />Papua]]}}
{{Image label|x=0.940|y=0.313|scale={{{width|800}}}|text=[[South Papua|South<br />Papua]]}}
{{Image label end}}<noinclude>
{{Documentation
| content =
Labeled map for listing [[provinces of Indonesia]].
== Usage ==
* {{tlc|{{PAGENAME}}}} (default linking)
* {{tlc|{{PAGENAME}}|prefix{{=}}List of regencies and cities of Indonesia#}} (links to sections/anchors in [[List of regencies and cities of Indonesia]])
== Image label ==
{{Image label begin/doc}}
[[Category:Labelled map templates]]
[[Category:Indonesia map templates]]
}}<!--(end Documentation)-->
</noinclude>
khr4fmmrknfzeuu3ziiw0g927qws31q
Template:Brazil Labelled Map
10
49952
123246
2026-10-11T02:43:44Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123246
wikitext
text/x-wiki
{{Image label begin|image=Brazil Labelled Map.svg|width={{{width|}}}|float={{{float|none}}}|font-size=90%}}
{{Image label|x=0.840|y=0.09|scale={{{width|}}}|text=[[Atlantic Ocean|<i style="color: #333366;">Atlantic<br/>Ocean</i>]]}}
{{Image label|x=0.04|y=0.70|scale={{{width|}}}|text=[[Pacific Ocean|<i style="color: #333366;">Pacific<br/>Ocean</i>]]}}
{{Image label|x=0.75|y=0.701|scale={{{width|}}}|text=[[North Region, Brazil|North]]}}
{{Image label|x=0.75|y=0.737|scale={{{width|}}}|text=[[Northeast Region, Brazil|Northeast]]}}
{{Image label|x=0.75|y=0.773|scale={{{width|}}}|text=[[Central-West Region, Brazil|Central-West]]}}
{{Image label|x=0.75|y=0.809|scale={{{width|}}}|text=[[Southeast Region, Brazil|Southeast]]}}
{{Image label|x=0.75|y=0.845|scale={{{width|}}}|text=[[South Region, Brazil|South]]}}
{{Image label|x=0.10|y=0.33|scale={{{width|}}}|text=[[Acre (state)|<span style="color: black;">Acre</span>]]}}
{{Image label|x=0.20|y=0.22|scale={{{width|}}}|text=[[Amazonas (Brazilian state)|<span style="color: black;">Amazonas</span>]]}}
{{Image label|x=0.48|y=0.22|scale={{{width|}}}|text=[[Pará|<span style="color: black;">Pará</span>]]}}
{{Image label|x=0.27|y=0.08|scale={{{width|}}}|text=[[Roraima|<span style="color: black;">Roraima</span>]]}}
{{Image label|x=0.48|y=0.095|scale={{{width|}}}|text=[[Amapá|<span style="color: black;">Amapá</span>]]}}
{{Image label|x=0.24|y=0.39|scale={{{width|}}}|text=[[Rondônia|<span style="color: black;">Rondônia</span>]]}}
{{Image label|x=0.545|y=0.36|scale={{{width|}}}|text=[[Tocantins (state)|<span style="color: black;">Tocantins</span>]]}}
{{Image label|x=0.61|y=0.25|scale={{{width|}}}|text=[[Maranhão|<span style="color: black;">Maranhão</span>]]}}
{{Image label|x=0.70|y=0.40|scale={{{width|}}}|text=[[Bahia|<span style="color: black;">Bahia</span>]]}}
{{Image label|x=0.70|y=0.30|scale={{{width|}}}|text=[[Piauí|<span style="color: black;">Piauí</span>]]}}
{{Image label|x=0.75|y=0.23|scale={{{width|}}}|text=[[Ceará|<span style="color: black;">Ceará</span>]]}}
{{Image label|x=0.84|y=0.23|scale={{{width|}}}|text=[[Rio Grande do Norte|<span style="color: black;">Rio Grande<br>do Norte</span>]]}}
{{Image label|x=0.85|y=0.29|scale={{{width|}}}|text=[[Paraíba|<span style="color: black;">Paraíba</span>]]}}
{{Image label|x=0.77|y=0.32|scale={{{width|}}}|text=[[Pernambuco|<span style="color: black;">Pernambuco</span>]]}}
{{Image label|x=0.85|y=0.35|scale={{{width|}}}|text=[[Alagoas|<span style="color: black;">Alagoas</span>]]}}
{{Image label|x=0.82|y=0.38|scale={{{width|}}}|text=[[Sergipe|<span style="color: black;">Sergipe</span>]]}}
{{Image label|x=0.38|y=0.43|scale={{{width|}}}|text=[[Mato Grosso|<span style="color: black;">Mato Grosso</span>]]}}
{{Image label|x=0.39|y=0.58|scale={{{width|}}}|text=[[Mato Grosso do Sul|<span style="color: black;">Mato Grosso<br>do Sul</span>]]}}
{{Image label|x=0.565|y=0.45|scale={{{width|}}}|text=[[Federal District (Brazil)|<span style="color: black;">Federal<br>District</span>]]}}
{{Image label|x=0.52|y=0.51|scale={{{width|}}}|text=[[Goiás|<span style="color: black;">Goiás</span>]]}}
{{Image label|x=0.60|y=0.56|scale={{{width|}}}|text=[[Minas Gerais|<span style="color: black;">Minas Gerais</span>]]}}
{{Image label|x=0.52|y=0.62|scale={{{width|}}}|text=[[São Paulo (state)|<span style="color: black;">São Paulo</span>]]}}
{{Image label|x=0.70|y=0.63|scale={{{width|}}}|text=[[Rio de Janeiro (state)|<span style="color: black;">Rio de Janeiro</span>]]}}
{{Image label|x=0.75|y=0.58|scale={{{width|}}}|text=[[Espírito Santo|<span style="color: black;">Espírito Santo</span>]]}}
{{Image label|x=0.48|y=0.68|scale={{{width|}}}|text=[[Paraná (state)|<span style="color: black;">Paraná</span>]]}}
{{Image label|x=0.51|y=0.73|scale={{{width|}}}|text=[[Santa Catarina (state)|<span style="color: black;">Santa Catarina</span>]]}}
{{Image label|x=0.43|y=0.78|scale={{{width|}}}|text=[[Rio Grande do Sul|<span style="color: black;">Rio Grande<br>do Sul</span>]]}}
{{Image label|x=0.22|y=0.80|scale={{{width|}}}|text=''[[Argentina|<span style="color: #C0C0C0;">Argentina</span>]]''}}
{{Image label|x=0.22|y=0.51|scale={{{width|}}}|text=''[[Bolivia|<span style="color: #C0C0C0;">Bolivia</span>]]''}}
{{Image label|x=0.14|y=0.65|scale={{{width|}}}|text=''[[Chile|<span style="color: #C0C0C0;">Chile</span>]]''}}
{{Image label|x=0.05|y=0.07|scale={{{width|}}}|text=''[[Colombia|<span style="color: #C0C0C0;">Colombia</span>]]''}}
{{Image label|x=0.48|y=0.03|scale={{{width|}}}|text=''[[French Guiana|<span style="color: #C0C0C0;">French Guiana</span>]]''}}
{{Image label|x=0.35|y=0.07|scale={{{width|}}}|text=''[[Guyana|<span style="color: #C0C0C0;">Guyana</span>]]''}}
{{Image label|x=0.33|y=0.64|scale={{{width|}}}|text=''[[Paraguay|<span style="color: #C0C0C0;">Paraguay</span>]]''}}
{{Image label|x=0.05|y=0.43|scale={{{width|}}}|text=''[[Peru|<span style="color: #C0C0C0;">Peru</span>]]''}}
{{Image label|x=0.40|y=0.05|scale={{{width|}}}|text=''[[Suriname|<span style="color: #C0C0C0;">Suriname</span>]]''}}
{{Image label|x=0.395|y=0.86|scale={{{width|}}}|text=''[[Uruguay|<span style="color: #C0C0C0;">Uruguay</span>]]''}}
{{Image label|x=0.20|y=0.03|scale={{{width|}}}|text=''[[Venezuela|<span style="color: #C0C0C0;">Venezuela</span>]]''}}
{{Image label end}}<noinclude>
{{Documentation|Template:Image label begin/doc}}
[[Category:Labelled map templates]]
</noinclude>
e7tolov4dtokhu6wson7wnnsuhnb2ha
Template:National Parks in the Republic of Ireland labelled map
10
49953
123250
2026-10-11T02:47:48Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123250
wikitext
text/x-wiki
{{Location map+|Ireland|relief=1|width=250|float=right
| caption=[[Mndandanda wa malo ghakusungirako vinyama gha ku Ireland|Malo ghakusungirako vinyama gha ku Ireland]]{{Navbar|National Parks in the Republic of Ireland map|mini=1|nodiv=1|style=float:right}}
| places=
{{Location map~
| Ireland
| mark=
| label=[[Páirc Náisiúnta na Mara]]
| coordinates = {{coord|52|14|N|10|15|W}}
| position=top
}}
{{Location map~
| Ireland
| mark=
| label=[[Wild Nephin National Park|Wild Nephin]]
| coordinates = {{coord|54|01|N|9|42|W}}
| position=right
}}
{{Location map~
| Ireland
| mark=
| label=[[Brú na Bóinne]]
| coordinates = {{coord|53.7058|-6.4471}}
| position=bottom
}}
{{Location map~
| Ireland
| mark=
| label=[[Connemara National Park|Connemara]]
| coordinates = {{coord|53|33|04|N|9|56|0|W}}
| position=bottom
}}
{{Location map~
| Ireland
| mark=
| label=[[Glenveagh]]
| coordinates = {{coord|55|01|N|8|03|W}}
| position=bottom
}}
{{Location map~
| Ireland
| mark=
| label=[[Killarney National Park|Killarney]]
| coordinates = {{coord|51|59|36|N|9|33|0|W}}
| position=right
}}
{{Location map~
| Ireland
| mark=
| label=[[Burren National Park|Burren]]
| coordinates = {{coord|53|03|N|9|06|W}}
| position=bottom
}}
{{Location map~
| Ireland
| mark=
| label=[[Wicklow Mountains National Park|Wicklow Mountains]]
| coordinates = {{coord|53|05|N|6|20|W}}
| position=bottom
}}
}}<noinclude>
[[Category:Republic of Ireland templates]]
[[Category:Labelled map templates]]
</noinclude>
05vbeuety1tf0lvbscjchbk4tt5d3f1
Module:Location map/data/Ireland
828
49954
123251
2026-10-11T02:48:50Z
Viyowoyero-vya-Malaŵi
11606
Created page with "return { name = 'Ireland', top = 55.6, bottom = 51.2, left = -11.0, right = -5.0, image = 'Ireland adm location map.svg', image1 = 'Ireland relief location map.png' }"
123251
Scribunto
text/plain
return {
name = 'Ireland',
top = 55.6,
bottom = 51.2,
left = -11.0,
right = -5.0,
image = 'Ireland adm location map.svg',
image1 = 'Ireland relief location map.png'
}
afkiavf16db2atfjq0sz4w6k3ggtfh8
Template:Eurozone labelled map
10
49955
123252
2026-10-11T02:50:45Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123252
wikitext
text/x-wiki
{{image frame |width=410
|content=
<div style="position:relative; overflow-x:auto">
{{Image label begin|image=Eurozone map.svg{{!}}border|font-size=85%|overflow-x=visible}}
{{Image label|x=.245 |y=.645 |font-size=115%|text=[[Eurozone|<span style="color:white;letter-spacing:.44em">EUROZONE</span>]]}}
{{Image label|x=.42 |y=.45 |font-size=80% |text=[[Denmark and the euro|<span style="color:black">Denmark</span>]]}}
{{Image label|x=.516 |y=.615 |font-size=90% |text=[[Czech Republic and the euro|<span style="color:black">Czechia</span>]]}}
{{Image label|x=.59 |y=.68 |font-size=80% |text=[[Hungary and the euro|<span style="color:black">Hungary</span>]]}}
{{Image label|x=.555 |y=.54 |font-size=140% |text=[[Poland and the euro|<span style="color:black">Poland</span>]]}}
{{Image label|x=.68 |y=.70 |font-size=110% |text=[[Romania and the euro|<span style="color:black">Romania</span>]]}}
{{Image label|x=.505 |y=.34 |font-size=80% |text=[[Sweden and the euro|<span style="color:black">Sweden</span>]]}}
{{Image label|x=.25 |y=.78 |font-size=80% |text=[[Andorra and the euro|<span style="background:#F29527;color:black">Andorra</span>]]}}
{{Image label|x=.36 |y=.756 |font-size=80% |text=[[Monégasque euro coins|<span style="background:#F29527;color:black">Monaco</span>]]}}
{{Image label|x=.46 |y=.745|font-size=80% |text=[[San Marino euro coins|<span style="background:#F29527;color:black">San Marino</span>]]}}
{{Image label|x=.46 |y=.855|font-size=80% |text=[[Vatican euro coins|<span style="background:#F29527;color:black">Vatican City</span>]]}}
{{Image label|x=.70|y=.795|font-size=80% |text=[[Kosovo and the euro|<span style="background:#da2131;color:black">Kos.</span>]]}}
{{Image label|x=.57 |y=.795|font-size=80% |text=[[Montenegro and the euro|<span style="background:#da2131;color:black">Mont.</span>]]}}
{{Image label end}}
</div>}}<noinclude>
{{Documentation|Template:Image label begin/doc}}
[[Category:Labelled map templates]]
[[Category:European Union currency templates]]
</noinclude>
f693w3jgt9s1bx9heo72rpylvc6cipq
Template:European Union Labelled Map (blue)
10
49956
123253
2026-10-11T02:53:28Z
Viyowoyero-vya-Malaŵi
11606
Paste from English template
123253
wikitext
text/x-wiki
<onlyinclude>{{image frame|width=400
| content =
{{Image label begin|image=European Union enlargement.gif|width=400|padding=0px;height:400px|link=|alt=labelled map of Europe showing progressive EU enlargements}}
{{Image label small|x=0.5775|y=0.863|scale=400|text=[[Albania|<span style="color:black;">Albania</span>]]}}
{{Image label small|x=0.4675|y=0.699|scale=400|text=[[Austria|<span style="color:black;">Austria</span>]]}}
{{Image label small|x=0.6775|y=0.52|scale=400|text=[[Belarus|<span style="color:black;">Belarus</span>]]}}
{{Image label small|x=0.2875|y=0.615|scale=400|text=[[Belgium|<span style="color:black;">Belgium</span>]]}}
{{Image label small|x=0.57|y=0.795|scale=400|text=[[Bosnia and Herzegovina|<span style="color:black;">Bosnia</span>]]}}
{{Image label small|x=0.7|y=0.8|scale=400|text=[[Bulgaria|<span style="color:black;">Bulgaria</span>]]}}
{{Image label small|x=0.5125|y=0.76|scale=400|text=[[Croatia|<span style="color:black;">Croatia</span>]]}}
{{Image label small|x=0.8925|y=0.98|scale=400|text=[[Cyprus|<span style="color:black;">Cyprus</span>]]}}
{{Image label small|x=0.4875|y=0.628|scale=400|text=[[Czech Republic|<span style="color:black;">Czech<Br>Rep.</span>]]}}
{{Image label small|x=0.3775|y=0.487|scale=400|text=[[Denmark|<span style="color:black;">Denmark</span>]]}}
{{Image label small|x=0.5875|y=0.375|scale=400|text=[[Estonia|<span style="color:black;">Estonia</span>]]}}
{{Image label small|x=0.5875|y=0.27|scale=400|text=[[Finland|<span style="color:black;">Finland</span>]]}}
{{Image label small|x=0.2565|y=0.72|scale=400|text=[[France|<span style="color:black;">France</span>]]}}
{{Image label small|x=0.3875|y=0.6|scale=400|text=[[Germany|<span style="color:black;">Germany</span>]]}}
{{Image label small|x=0.6475|y=0.91|scale=400|text=[[Greece|<span style="color:black;">Greece</span>]]}}
{{Image label small|x=0.5575|y=0.707|scale=400|text=[[Hungary|<span style="color:black;">Hungary</span>]]}}
{{Image label small|x=0.0805|y=0.17|scale=400|text=[[Iceland|<span style="color:black;">Iceland</span>]]}}
{{Image label small|x=0.0975|y=0.51|scale=400|text=[[Republic of Ireland|<span style="color:black;">Ireland</span>]]}}
{{Image label small|x=0.4615|y=0.83|scale=400|text=[[Italy|<span style="color:black;">Italy</span>]]}}
{{Image label small|x=0.6155|y=0.426|scale=400|text=[[Latvia|<span style="color:black;">Latvia</span>]]}}
{{Image label small|x=0.5715|y=0.47|scale=400|text=[[Lithuania|<span style="color:black;">Lithuania</span>]]}}
{{Image label small|x=0.3075|y=0.657|scale=400|text=[[Luxembourg|<span style="color:black;">Luxembourg</span>]]}}
{{Image label small|x=0.4455|y=0.98|scale=400|text=[[Malta|<span style="color:black;">Malta<big>→</big></span>]]}}
{{Image label small|x=0.7335|y=0.67|scale=400|text=[[Moldova|<span style="color:black;">Moldova</span>]]}}
{{Image label small|x=0.5775|y=0.83|scale=400|text=[[Montenegro|<span style="color:black;">Mont.</span>]]}}
{{Image label small|x=0.2925|y=0.57|scale=400|text=[[Netherlands|<span style="color:black;">Netherlands</span>]]}}
{{Image label small|x=0.6375|y=0.845|scale=400|text=[[North Macedonia|<span style="color:black;">N. Mac.</span>]]}}
{{Image label small|x=0.3775|y=0.32|scale=400|text=[[Norway|<span style="color:black;">Norway</span>]]}}
{{Image label small|x=0.5475|y=0.567|scale=400|text=[[Poland|<span style="color:black;">Poland</span>]]}}
{{Image label small|x=0.0175|y=0.84|scale=400|text=[[Portugal|<span style="color:black;">Portugal</span>]]}}
{{Image label small|x=0.6625|y=0.719|scale=400|text=[[Romania|<span style="color:black;">Romania</span>]]}}
{{Image label small|x=0.7975|y=0.32|scale=400|text=[[Russia|<span style="color:black;">Russia</span>]]}}
{{Image label small|x=0.6175|y=0.77|scale=400|text=[[Serbia|<span style="color:black;">Serbia</span>]]}}
{{Image label small|x=0.5675|y=0.66|scale=400|text=[[Slovakia|<span style="color:black;">Slovakia</span>]]}}
{{Image label small|x=0.4655|y=0.74|scale=400|text=[[Slovenia|<span style="color:black;">Slovenia</span>]]}}
{{Image label small|x=0.1245|y=0.88|scale=400|text=[[Spain|<span style="color:black;">Spain</span>]]}}
{{Image label small|x=0.4725|y=0.3|scale=400|text=[[Sweden|<span style="color:black;">Sweden</span>]]}}
{{Image label small|x=0.3675|y=0.718|scale=400|text= [[Switzerland|<span style="color:black;">Switz-<br />erland</span>]]}}
{{Image label small|x=0.8675|y=0.86|scale=400|text=[[Turkey|<span style="color:black;">Turkey</span>]]}}
{{Image label small|x=0.7575|y=0.6|scale=400|text=[[Ukraine|<span style="color:black;">Ukraine</span>]]}}
{{Image label small|x=0.1925|y=0.496|scale=400|text=[[United Kingdom|<span style="color:black;">United<br />Kingdom</span>]]}}
{{Image label end}}
| caption = Malo gha mamembala gha European Union (Malo gha ku Europe pambere 1993 ghandafike), ghakukhazikika mu ndondomeko ya kunjilirapo. Vigaŵa vya mu Europe na vyakuzingilizga pera ndivyo vikulongoreka. <br>{{navbar|European Union Labelled Map (blue)}}
}}</onlyinclude><noinclude>
[[Category:European Union templates]]
[[Category:Labelled map templates]]
</noinclude>
59ilqe0tsoez3mb5jh5syml2mv3l8yb
Category:Labelled map templates
14
49957
123254
2026-10-11T02:54:45Z
Viyowoyero-vya-Malaŵi
11606
Paste from English category
123254
wikitext
text/x-wiki
{Template category
| type = image-based
| description = '''Templates presenting maps to which labels have been added''' {{small|(e.g. using {{tla|Image label begin|{{hsp|Image label ...}}}} templates; see {{tlbare|Image label begin/doc}})}}. ''{{hlist|style=font-size:80%; |See also {{cat|Wikipedia geographic image maps}} |[[Commons:Category:Clickable maps|{{color|#002bb8|Clickable maps}}]] and [[Commons:Commons:Image map resources|{{color|#002bb8|Image map resources}}]] at Wikimedia Commons}}''
}}
[[Category:Map templates]]
[[Category:Wikipedia image maps|τ]]
{{CatAutoTOC}}
qgyhw073zymv5e3vaxx1whx911n3y36
123255
123254
2026-10-11T02:55:15Z
Viyowoyero-vya-Malaŵi
11606
123255
wikitext
text/x-wiki
{{Template category
| type = image-based
| description = '''Templates presenting maps to which labels have been added''' {{small|(e.g. using {{tla|Image label begin|{{hsp|Image label ...}}}} templates; see {{tlbare|Image label begin/doc}})}}. ''{{hlist|style=font-size:80%; |See also {{cat|Wikipedia geographic image maps}} |[[Commons:Category:Clickable maps|{{color|#002bb8|Clickable maps}}]] and [[Commons:Commons:Image map resources|{{color|#002bb8|Image map resources}}]] at Wikimedia Commons}}''
}}
[[Category:Map templates]]
[[Category:Wikipedia image maps|τ]]
{{CatAutoTOC}}
3n9me99be6jmc5963f0q8rpa3inc2y8
The Sims
0
49958
123257
2026-10-11T05:28:54Z
Viyowoyero-vya-Malaŵi
11606
Created page with "{{Italic title}} {{Databox}} '''''{{PAGENAME}}''''' ni [[Maseŵero gha pa vidiyo|maseŵero gha pa vidiyo]] agho ghakasindikizgika na {{#invoke:wd|property|linked|references|P123}}. ==Zuŵa ilo likalembekera== ''{{PAGENAME}}'' wakafumiskika mu {{#invoke:wd|property|linked|references|P577}}. ==Ukaboni== {{reflist}} [[Category:Maseŵera gha pa vidiyo]]"
123257
wikitext
text/x-wiki
{{Italic title}}
{{Databox}}
'''''{{PAGENAME}}''''' ni [[Maseŵero gha pa vidiyo|maseŵero gha pa vidiyo]] agho ghakasindikizgika na {{#invoke:wd|property|linked|references|P123}}.
==Zuŵa ilo likalembekera==
''{{PAGENAME}}'' wakafumiskika mu {{#invoke:wd|property|linked|references|P577}}.
==Ukaboni==
{{reflist}}
[[Category:Maseŵera gha pa vidiyo]]
ah5sw8rl8uq6u9l28thyezboudfhbxj
MySims
0
49959
123258
2026-10-11T05:30:01Z
Viyowoyero-vya-Malaŵi
11606
Created page with "{{Italic title}} {{Databox}} '''''{{PAGENAME}}''''' ni [[Maseŵero gha pa vidiyo|maseŵero gha pa vidiyo]] agho ghakasindikizgika na {{#invoke:wd|property|linked|references|P123}}. ==Zuŵa ilo likalembekera== ''{{PAGENAME}}'' wakafumiskika mu {{#invoke:wd|property|linked|references|P577}}. ==Ukaboni== {{reflist}} [[Category:Maseŵera gha pa vidiyo]]"
123258
wikitext
text/x-wiki
{{Italic title}}
{{Databox}}
'''''{{PAGENAME}}''''' ni [[Maseŵero gha pa vidiyo|maseŵero gha pa vidiyo]] agho ghakasindikizgika na {{#invoke:wd|property|linked|references|P123}}.
==Zuŵa ilo likalembekera==
''{{PAGENAME}}'' wakafumiskika mu {{#invoke:wd|property|linked|references|P577}}.
==Ukaboni==
{{reflist}}
[[Category:Maseŵera gha pa vidiyo]]
ah5sw8rl8uq6u9l28thyezboudfhbxj
123259
123258
2026-10-11T05:32:30Z
Viyowoyero-vya-Malaŵi
11606
123259
wikitext
text/x-wiki
{{Italic title}}
'''''{{PAGENAME}}''''' ni [[Maseŵero gha pa vidiyo|maseŵero gha pa vidiyo]] agho ghakasindikizgika na {{#invoke:wd|property|linked|references|P123}}. Maseŵera agha ghakaguliskika mayuniti ghakujumpha 4 miliyoni kufuma mu 2008.
==Zuŵa ilo likalembekera==
''{{PAGENAME}}'' wakafumiskika mu {{#invoke:wd|property|linked|references|P577}}. Iwo wakafumiskikaso ku Microsoft Windows na mafoni mu 2008.<ref>https://medium.com/shinkretro/the-story-so-far-on-the-mysims-franchise-ed562b3266e5</ref>
==Ukaboni==
{{reflist}}
[[Category:Maseŵera gha pa vidiyo]]
bsc2539tpb0myee676i1gdovge3g7ef
An Khê
0
49960
123260
2026-10-11T09:41:29Z
Viyowoyero-vya-Malaŵi
11606
Created page with "{{Databox}} '''{{PAGENAME}}''' ni muzi mu [[chigaŵa cha Gia Lai]] mu charu cha {{#invoke:wd|property|linked|references|P17}}.<ref>https://geonames.org</ref> Muli ŵanthu 63,118 (2003).<ref>http://www.statoids.com/yvn.html</ref> ==Mbiri== Mu vilimika vya m’ma 1500, An Khê ukaŵa msumba wa [[ŴaCham]]/ŵa ku mapiri ndipo ukaŵa na zina lakuti Samriddhipuri. ==Ukaboni== {{reflist}} [[Category:Vietnam]]"
123260
wikitext
text/x-wiki
{{Databox}}
'''{{PAGENAME}}''' ni muzi mu [[chigaŵa cha Gia Lai]] mu charu cha {{#invoke:wd|property|linked|references|P17}}.<ref>https://geonames.org</ref> Muli ŵanthu 63,118 (2003).<ref>http://www.statoids.com/yvn.html</ref>
==Mbiri==
Mu vilimika vya m’ma 1500, An Khê ukaŵa msumba wa [[ŴaCham]]/ŵa ku mapiri ndipo ukaŵa na zina lakuti Samriddhipuri.
==Ukaboni==
{{reflist}}
[[Category:Vietnam]]
0ti9tkpmmusx7i2qr766irzw72bla94