Wiksiyonaryo tlwiktionary https://tl.wiktionary.org/wiki/Wiksiyonaryo:Unang_Pahina MediaWiki 1.47.0-wmf.24 case-sensitive Midya Natatangi Usapan Tagagamit Usapang tagagamit Wiksiyonaryo Usapang Wiksiyonaryo Talaksan Usapang talaksan MediaWiki Usapang MediaWiki Padron Usapang padron Tulong Usapang tulong Kategorya Usapang kategorya TimedText TimedText talk Module Module talk Event Event talk bahagi 0 2838 178197 160461 2026-10-15T02:22:13Z GinawaSaHapon 3989 178197 wikitext text/x-wiki =={{=tl=}}== ===Alternatibong pagbaybay=== * {{alt|tl|bahagui|bahague||obsolete|Abecedario}} ===Etimolohiya=== {{ety|tl|:bor|ms:bahagi|tree=+}} {{bor+|tl|ms|bahagi}}, mula sa {{der|tl|poz-mly-pro|*bahagi}}, mula sa {{der|tl|poz-pro|*baqagi}}.<ref>{{R:map:ACD|baqagi}}</ref> Tingnan din ang {{ncog|sa|भाग}}. ===Pagbigkas=== {{tl-pr|+,bahagì<q:di-pamantayan>}} ===Pangngalan=== {{tl-noun|+,bahagì|b=+}} # kabilang sa isang [[pangkat]], [[bagay]], o [[lugar]]; [[sangkap]]; [[piyesa]] #: {{syn|tl|panig|parte|dibisyon|seksiyon}} #: {{quote-web|tl|author=Jamil Santos|year=2026|publisher=GMA News|passage=Natagpuang patay ang isang lalaki sa mabatong '''bahagi '''ng Dolomite Beach sa Maynila|url=https://www.gmanetwork.com/news/balitambayan/balita/1005199/lalaki-nakitang-patay-sa-mabatong-bahagi-ng-dolomite-beach/story/|title=Lalaki, nakitang patay sa mabatong bahagi ng Dolomite Beach|site=Balitambayan}} # kabilang sa [[kabuuan]]; [[hati]]; [[porsiyon]] #: {{quote-web|tl|year=2026|publisher=Abante News|passage=Na-diagnose si Pope Leo XIV na may lung cancer matapos alisin ang '''bahagi''' ng kanyang kanang baga sa isang matagumpay na operasyon, ayon sa Vatican.|url=https://www.gmanetwork.com/news/balitambayan/balita/1005199/lalaki-nakitang-patay-sa-mabatong-bahagi-ng-dolomite-beach/story/|title=Pope Leo XIV natumbok na may lung cancer|site=Abante}} ====Hinangong kataga==== {{col3|tl|bahagihin|bahaginan|bumahagi|makibahagi|kabahagi|ipamahagi|magbahagi|maipamahagi|pabahaginin|pagbabahagi|pagbaha-bahaginin|pagbahaginin|pamamahagi|maselang bahagi|bahagdan|kabahagdanan|bahagdaning kasangkapan|kabahagdanin|ibahagi|bahagi ng pangungusap|bahagi ng pananalita|bahagi ng panalita|pamahagi}} ====Tingnan din==== {{col3|tl|bahagya|distribusyon}} ===Sanggunian=== {{reflist}} ===Magbasa pa=== * {{R:Pambansang Diksiyonaryo}} * {{R:CEDOF|1|33}} nm27kr1tggr6n8cho62jw5tafkcxk3h 178198 178197 2026-10-15T02:23:27Z GinawaSaHapon 3989 /* Pangngalan */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178198 wikitext text/x-wiki =={{=tl=}}== ===Alternatibong pagbaybay=== * {{alt|tl|bahagui|bahague||obsolete|Abecedario}} ===Etimolohiya=== {{ety|tl|:bor|ms:bahagi|tree=+}} {{bor+|tl|ms|bahagi}}, mula sa {{der|tl|poz-mly-pro|*bahagi}}, mula sa {{der|tl|poz-pro|*baqagi}}.<ref>{{R:map:ACD|baqagi}}</ref> Tingnan din ang {{ncog|sa|भाग}}. ===Pagbigkas=== {{tl-pr|+,bahagì<q:di-pamantayan>}} ===Pangngalan=== {{tl-noun|+,bahagì|b=+}} # kabilang sa isang [[pangkat]], [[bagay]], o [[lugar]]; [[sangkap]]; [[piyesa]] #: {{syn|tl|panig|parte|dibisyon|seksiyon}} #* {{quote-web|tl|author=Jamil Santos|year=2026|publisher=GMA News|passage=Natagpuang patay ang isang lalaki sa mabatong '''bahagi '''ng Dolomite Beach sa Maynila|url=https://www.gmanetwork.com/news/balitambayan/balita/1005199/lalaki-nakitang-patay-sa-mabatong-bahagi-ng-dolomite-beach/story/|title=Lalaki, nakitang patay sa mabatong bahagi ng Dolomite Beach|site=Balitambayan}} # kabilang sa [[kabuuan]]; [[hati]]; [[porsiyon]] #* {{quote-web|tl|year=2026|publisher=Abante News|passage=Na-diagnose si Pope Leo XIV na may lung cancer matapos alisin ang '''bahagi''' ng kanyang kanang baga sa isang matagumpay na operasyon, ayon sa Vatican.|url=https://www.gmanetwork.com/news/balitambayan/balita/1005199/lalaki-nakitang-patay-sa-mabatong-bahagi-ng-dolomite-beach/story/|title=Pope Leo XIV natumbok na may lung cancer|site=Abante}} ====Hinangong kataga==== {{col3|tl|bahagihin|bahaginan|bumahagi|makibahagi|kabahagi|ipamahagi|magbahagi|maipamahagi|pabahaginin|pagbabahagi|pagbaha-bahaginin|pagbahaginin|pamamahagi|maselang bahagi|bahagdan|kabahagdanan|bahagdaning kasangkapan|kabahagdanin|ibahagi|bahagi ng pangungusap|bahagi ng pananalita|bahagi ng panalita|pamahagi}} ====Tingnan din==== {{col3|tl|bahagya|distribusyon}} ===Sanggunian=== {{reflist}} ===Magbasa pa=== * {{R:Pambansang Diksiyonaryo}} * {{R:CEDOF|1|33}} cow1xxajbdwtuqgsp1zl42ezv47ppic -an 0 2907 178226 167540 2026-10-15T06:57:21Z GinawaSaHapon 3989 178226 wikitext text/x-wiki =={{=tl=}}== ===Alternatibong pagbaybay=== * {{alt|tl|-han}} * {{alt|tl|-nan}} ===Etimolohiya=== {{etymon|tl|id=suffix|:inh|phi-pro:*-an|text=++|tree=1}} ===Pagbigkas=== {{tl-pr}} ===Hulapi=== {{tl-verb|b=+,an}} # {{n-g|hulaping ikinakabit sa mga [[pandiwa|pandiwang]] nasa pokus na layon o gol upang ipakita ang pagsasagawa ng kilos sa isang tao o bagay}} #: {{uxi|tl|Buks'''an''' mo ang pinto.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita ang pagsasagawa ng kilos para mabago ang estado ng isang tao o bagay}} #: {{uxi|tl|Binagal'''an''' ni Sue ang kotse.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na direksiyon upang ipakita ang pagsasagawa ng kilos sa isang pisikal o metaporikal na direksiyon}} #: {{uxi|tl|Tinitingn'''an''' ko ang manwal.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na tagatanggap o benepaktibo upang ipakita na ang pagsasagawa ng kilos ay para sa tatanggap ng naturang kilos}} #: {{uxi|tl|Titir'''han''' ko si Roy ng keyk.}} # {{q|kapag inulit ang [[salitang-ugat]]}} {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita na ang kilos ay isinasagawa nang paminsan-minsan, madalang, bahagya, mabilisan, o walang gaanong sigla}} #: {{uxi|tl|Winawalis-'''walisan''' ko ang sahig.}} # {{q|kapag inulit ang salitang-ugat}} {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na direksiyon upang ipakita na ang kilos na isasagawa sa isang pisikal o metaporikal na direksiyon ay isinasagawa nang paminsan-minsan, madalang, bahagya, o walang gaanong sigla}} #: {{uxi|tl|Tinutulung-'''tulungan''' ni Jessy si Patty.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita na isasagawa ang kilos sa isang tao o bagay}} #: {{uxi|tl|Huwag mong sulat'''an''' ang dokumento.}} ===Hulapi=== {{tl-noun|b=+,an}} # {{n-g|Gumagawa ng mga [[pangngalan]] na pumapatungkol sa lokasyon ng [[salitang-ugat]] nito}} #: {{suffixusex|tl|aklat|aklatan}} #: {{suffixusex|tl|basura|basurahan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa lokasyon kung saan isinasagawa ang salitang-ugat}} #: {{suffixusex|tl|kain|kainan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa oras o panahon kung kailan isinasagawa ang salitang-ugat}} #: {{suffixusex|tl|ani|anihan}} #: {{suffixusex|tl|pasok|pasukan}} {{q|ng mga estudyante}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa pagiging kasangkapan o kagamitan ng salitang-ugat}} #: {{suffixusex|tl|oras|orasan}} #: {{suffixusex|tl|timbang|timbangan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa sabay-sabay na pagsasagawa sa salitang-ugat ng marami}} #: {{suffixusex|tl|sayaw|sayawan}} #: {{suffixusex|tl|kanta|kantahan}} # {{q|kapag inulit ang salitang-ugat}} {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa maliit, gaya-gaya, o pekeng anyo ng salitang-ugat}} #: {{suffixusex|tl|bahay|bahay-bahayan}} #: {{suffixusex|tl|Diyos|diyos-diyosan}} #: {{suffixusex|tl|baril|baril-barilan}} ===Hulapi=== {{tl-adv|b=+,an}} # {{lb|tl|ikinakabit sa mga bilang upang makagawa ng mga pangkat na may laking isinasaad ng naturang bilang}} #: {{suffixusex|tl|tatlo|tatluhan}} #: {{suffixusex|tl|apat|apatan}} ====Paalala sa paggamit==== * Karaniwang isinisingit ang {{IPAchar|/h/}} bago ang ''-an'' kapag nagtatapos ang isang salitang-ugat sa patinig at ''hindi'' sinusundan ng impit. Sa ilang mga kaso, maaaring maging {{IPAchar|/n/}} ang {{IPAchar|/h/}}. *: {{suffixusex|tl|ganti|gantihan<alt:ganti'''h'''an>}} *: {{suffixusex|tl|talo|talunan<alt:talu'''n'''an>}} * Minsan, nawawala ang huling patinig kapag ikinabit ang ''-an''. *: {{suffixusex|tl|sunod|sundan}} *: {{suffixusex|tl|takip|takpan}} * Nagiging {{IPAchar|/r/}} ang {{IPAchar|/d/}} tuwing ikinakabit ang ''-an''. *: {{suffixusex|tl|buklod|bukluran<alt:buklu'''r'''an>}} *: {{suffixusex|tl|bakod|bakuran<alt:baku'''r'''an>}} *: {{suffixusex|tl|bayad|bayaran<alt:baya'''r'''an>}} ====Hinangong kataga==== {{suffixsee|tl}} ====Kaugnay na kataga==== * {{l|tl|ka- -an}} ===Anagrama=== * {{anagrams|tl|a=an|na|na-}} qy0mg0sy21dfqeiv5wk10uktz8nsux1 178227 178226 2026-10-15T06:58:29Z GinawaSaHapon 3989 /* Hulapi */ 178227 wikitext text/x-wiki =={{=tl=}}== ===Alternatibong pagbaybay=== * {{alt|tl|-han}} * {{alt|tl|-nan}} ===Etimolohiya=== {{etymon|tl|id=suffix|:inh|phi-pro:*-an|text=++|tree=1}} ===Pagbigkas=== {{tl-pr}} ===Hulapi=== {{tl-verb|b=+,an}} # {{n-g|hulaping ikinakabit sa mga [[pandiwa|pandiwang]] nasa pokus na layon o gol upang ipakita ang pagsasagawa ng kilos sa isang tao o bagay}} #: {{uxi|tl|Buks'''an''' mo ang pinto.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita ang pagsasagawa ng kilos para mabago ang estado ng isang tao o bagay}} #: {{uxi|tl|Binagal'''an''' ni Sue ang kotse.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na direksiyon upang ipakita ang pagsasagawa ng kilos sa isang pisikal o metaporikal na direksiyon}} #: {{uxi|tl|Tinitingn'''an''' ko ang manwal.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na tagatanggap o benepaktibo upang ipakita na ang pagsasagawa ng kilos ay para sa tatanggap ng naturang kilos}} #: {{uxi|tl|Titir'''han''' ko si Roy ng keyk.}} # {{q|kapag inulit ang [[salitang-ugat]]}} {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita na ang kilos ay isinasagawa nang paminsan-minsan, madalang, bahagya, mabilisan, o walang gaanong sigla}} #: {{uxi|tl|Winawalis-'''walisan''' ko ang sahig.}} # {{q|kapag inulit ang salitang-ugat}} {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na direksiyon upang ipakita na ang kilos na isasagawa sa isang pisikal o metaporikal na direksiyon ay isinasagawa nang paminsan-minsan, madalang, bahagya, o walang gaanong sigla}} #: {{uxi|tl|Tinutulung-'''tulungan''' ni Jessy si Patty.}} # {{n-g|hulaping ikinakabit sa mga pandiwang nasa pokus na layon o gol upang ipakita na isasagawa ang kilos sa isang tao o bagay}} #: {{uxi|tl|Huwag mong sulat'''an''' ang dokumento.}} ===Hulapi=== {{tl-noun|b=+,an}} # {{n-g|Gumagawa ng mga [[pangngalan]] na pumapatungkol sa lokasyon ng [[salitang-ugat]] nito}} #: {{suffixusex|tl|aklat|aklatan}} #: {{suffixusex|tl|basura|basurahan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa lokasyon kung saan isinasagawa ang salitang-ugat}} #: {{suffixusex|tl|kain|kainan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa oras o panahon kung kailan isinasagawa ang salitang-ugat}} #: {{suffixusex|tl|ani|anihan}} #: {{suffixusex|tl|pasok|pasukan}} {{q|ng mga estudyante}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa pagiging kasangkapan o kagamitan ng salitang-ugat}} #: {{suffixusex|tl|oras|orasan}} #: {{suffixusex|tl|timbang|timbangan}} # {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa sabay-sabay na pagsasagawa sa salitang-ugat ng marami}} #: {{suffixusex|tl|sayaw|sayawan}} #: {{suffixusex|tl|kanta|kantahan}} # {{q|kapag inulit ang salitang-ugat}} {{n-g|Gumagawa ng mga pangngalan na pumapatungkol sa maliit, gaya-gaya, o pekeng anyo ng salitang-ugat}} #: {{suffixusex|tl|bahay|bahay-bahayan}} #: {{suffixusex|tl|Diyos|diyos-diyosan}} #: {{suffixusex|tl|baril|baril-barilan}} ===Hulapi=== {{tl-adv|b=+,an}} # {{q|tl|ikinakabit sa mga bilang upang makagawa ng mga pangkat na may laking isinasaad ng naturang bilang}} #: {{suffixusex|tl|tatlo|tatluhan}} #: {{suffixusex|tl|apat|apatan}} ====Paalala sa paggamit==== * Karaniwang isinisingit ang {{IPAchar|/h/}} bago ang ''-an'' kapag nagtatapos ang isang salitang-ugat sa patinig at ''hindi'' sinusundan ng impit. Sa ilang mga kaso, maaaring maging {{IPAchar|/n/}} ang {{IPAchar|/h/}}. *: {{suffixusex|tl|ganti|gantihan<alt:ganti'''h'''an>}} *: {{suffixusex|tl|talo|talunan<alt:talu'''n'''an>}} * Minsan, nawawala ang huling patinig kapag ikinabit ang ''-an''. *: {{suffixusex|tl|sunod|sundan}} *: {{suffixusex|tl|takip|takpan}} * Nagiging {{IPAchar|/r/}} ang {{IPAchar|/d/}} tuwing ikinakabit ang ''-an''. *: {{suffixusex|tl|buklod|bukluran<alt:buklu'''r'''an>}} *: {{suffixusex|tl|bakod|bakuran<alt:baku'''r'''an>}} *: {{suffixusex|tl|bayad|bayaran<alt:baya'''r'''an>}} ====Hinangong kataga==== {{suffixsee|tl}} ====Kaugnay na kataga==== * {{l|tl|ka- -an}} ===Anagrama=== * {{anagrams|tl|a=an|na|na-}} blzp6t5sj454m6iyczatlcn9uso3ii0 limbag 0 3155 178190 178174 2026-10-15T01:22:03Z GinawaSaHapon 3989 /* Noun */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178190 wikitext text/x-wiki =={{=tl=}}== {{etymon|tl|id=pangngalan}} ===Pronunciation=== {{tl-pr|limbág}} ===Pangngalan=== {{tl-noun|limbág|b=+}} # [[lapat|paglalapat]] ng [[teksto]] o [[larawan]] sa isang [[papel]] sa pamamagitan ng [[paglalagay]] ng [[tinta]] gamit ng isang [[makina|makinang]] nakapaglalagay nito gaya ng [[limbagan]] o [[printer]] ng [[kompyuter]] #: {{syn|tl|imprenta}} # paglalapat ng [[disenyo]] sa isang [[materyales]] gaya ng [[damit]] sa pamamagitan ng [[tatak|pagtatatak]] ng [[plantsa]] # [[edisyon]]; [[labas]] {{q|ng aklat o katulad}} # [[pagtititik]]; [[pagleletra]] ====Hinangong kataga==== {{col3|tl|paglimbag|paglilimbag|pagkakalimbag|nakalimbag|pagkalimbag|limbagan|palimbagan|magpalimbag|ipalimbag|manlilimbag|ilimbag}} ===Pang-uri=== {{tl-adj|limbág|b=+}} # [[nakalathala]]; [[nakaimprenta]] # [[nakatitik]] ===Magbasa pa=== * {{R:Pambansang Diksiyonaryo}} * {{R:KWF Diksiyonaryo}} ===Anagrama=== * {{anagrams|tl|gimbal|a=abgilm}} 155mf311qlk53elvaql6s070ljezkhw 178192 178190 2026-10-15T01:26:03Z GinawaSaHapon 3989 /* {{=tl=}} */ 178192 wikitext text/x-wiki =={{=tl=}}== {{etymon|tl|id=pangngalan}} ===Pagbigkas=== {{tl-pr|limbág}} ===Pangngalan=== {{tl-noun|limbág|b=+}} # [[lapat|paglalapat]] ng [[teksto]] o [[larawan]] sa isang [[papel]] sa pamamagitan ng [[paglalagay]] ng [[tinta]] gamit ng isang [[makina|makinang]] nakapaglalagay nito gaya ng [[limbagan]] o [[printer]] ng [[kompyuter]] #: {{syn|tl|imprenta}} # paglalapat ng [[disenyo]] sa isang [[materyales]] gaya ng [[damit]] sa pamamagitan ng [[tatak|pagtatatak]] ng [[plantsa]] # [[edisyon]]; [[labas]] {{q|ng aklat o katulad}} # [[pagtititik]]; [[pagleletra]] ====Hinangong kataga==== {{col3|tl|paglimbag|paglilimbag|pagkakalimbag|nakalimbag|pagkalimbag|limbagan|palimbagan|magpalimbag|ipalimbag|manlilimbag|ilimbag}} ===Pang-uri=== {{tl-adj|limbág|b=+}} # [[nakalathala]]; [[nakaimprenta]] # [[nakatitik]] ===Magbasa pa=== * {{R:Pambansang Diksiyonaryo}} * {{R:KWF Diksiyonaryo}} ===Anagrama=== * {{anagrams|tl|gimbal|a=abgilm}} jcpfhet4qypqvyj7q3spmqydd3bm74t ma- 0 4478 178212 160611 2026-10-15T03:30:20Z GinawaSaHapon 3989 178212 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:stative prefix>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=stative prefix}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:future prefix>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=future prefix}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} t86i4vea4c8g9sy6pb2i1jhmgvuz4fd 178217 178212 2026-10-15T03:43:07Z GinawaSaHapon 3989 /* {{=tl=}} */ 178217 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:unlaping pangkatayuan>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=stative prefix}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:unlaping panghinaharap>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=future prefix}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} hkdlnirseoiuk157mj39wbv5bjujcuq 178218 178217 2026-10-15T03:43:53Z GinawaSaHapon 3989 Tanggalin ang pagbabagong [[Special:Diff/178217|178217]] ni [[Special:Contributions/GinawaSaHapon|GinawaSaHapon]] ([[User talk:GinawaSaHapon|Usapan]]) 178218 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:stative prefix>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=stative prefix}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:future prefix>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=future prefix}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} t86i4vea4c8g9sy6pb2i1jhmgvuz4fd 178219 178218 2026-10-15T03:45:01Z GinawaSaHapon 3989 /* Hinangong kataga */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178219 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:stative prefix>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=unlaping pang-estado}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:future prefix>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=future prefix}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} 44kggc6j3xcasxss9y7rf770drpe2qs 178220 178219 2026-10-15T03:45:36Z GinawaSaHapon 3989 /* Hinangong kataga */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178220 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:stative prefix>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=stative prefix}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:future prefix>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=future prefix}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} t86i4vea4c8g9sy6pb2i1jhmgvuz4fd 178223 178220 2026-10-15T05:57:31Z GinawaSaHapon 3989 /* {{=tl=}} */ 178223 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya 1=== {{etymon|tl|:inh|poz-pro:*ma-<id:katayuan>|tree=1|text=++|id=stative prefix}} Tingnan din ang {{m|tl|may}}. ====Pagbigkas==== {{tl-pr}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|ikinakabit sa mga [[pang-uri]] upang ipakita ang kalidad}} #: {{prefixusex|tl|linis|malinis}} # {{q|unlaping ikinakabit sa mga [[pandiwa]]ng nasa pokus na tagaganap o aktor, anyo III}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|ligo|maligo}} # {{q|unlaping ikinakabit sa mga pandiwang nasa pokus na layon o gol, anyo IV}}: {{n-g|anyong pawatas}} #: {{prefixusex|tl|basa|mabasa}} ## {{n-g|unlaping ikinakabit upang ipakita na maisasagawa ang kilos}} ##: {{prefixusex|tl|tapos|matapos}} ##: {{uxi|tl|'''Natapos''' kong basahin ang libro kagabi.}} ## {{n-g|unlaping ikinakabit upang ipakita na naisagawa ang isang kilos nang hindi sinasadya}} ##: {{coord|tl|-in}} ##: {{prefixusex|tl|basag|mabasag}} ##: {{uxi|tl|'''Nabasag''' ko ang salamin.}} =====Hinangong kataga===== {{prefixsee|tl|id=katayuan}} ===Etimolohiya 2=== {{etymon|tl|:inh|map-pro:*ma-<id:panghinaharap>|tree=1|text=++|id=future prefix}} ====Pagbigkas==== {{tl-pr|máː-}} ====Unlapi==== {{tl-head|prefix|má-|b=+}} {{tlb|tl|dialectal}} # {{n-g|unlaping ikinakabit sa mga pandiwa upang mabuo ang anyong magaganap nito para sa mga inuunlapian ng {{m|tl|um-}} o sinisingitan ng {{m|tl|-um-}}}} =====Hinangong kataga===== {{prefixsee|tl|id=panghinaharap}} =====Tingnan din===== {{col3|tl|na-}} ===Magbasa pa=== * {{R:map:ACD|ma-}} ===Anagrama=== * {{anagrams|tl|a=am|am}} kve4cylhvbij9yzigeom6n95lz7nkqz prosa 0 20700 178184 155117 2026-10-15T00:50:35Z GinawaSaHapon 3989 178184 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya=== {{ety|tl|:bor|es:prosa|tree=1|text=++}} ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # [[karaniwan|karaniwang]] anyo ng [[pabigkas]] o [[pasulat]] na [[wika]] na hindi [[patula]] #: {{syn|tl|tuluyan}} # [[mababa]] o karaniwang uri ng [[akda]], [[talumpati]], o katulad ====Kasalungat==== {{col3|tl|tula|berso}} ====Kaugnay na kataga==== {{col3|tl|prosodiya}} ===Magbasa pa=== {{R:Pambansang Diksiyonaryo}} gmcg71qaow5nbhp6hnse01jnd2i0bw2 larawan 0 28531 178191 178177 2026-10-15T01:22:36Z GinawaSaHapon 3989 /* {{=tl=}} */ 178191 wikitext text/x-wiki =={{=tl=}}== ===Alternatibong pagbaybay=== * {{alt|tl|larauan||obsolete|Abecedario}} ===Etimolohiya=== {{etymon|tl|:inh|phi-pro:*ladawan|text=++|tree=1}} {{surf|tl|<alt:*laraw>|-an}}. Ikumpara sa {{cog|ilo|ladawan}}, {{cog|pam|larauan}}, {{cog|bcl|ladawan}}, {{cog|war|ladawan}}, at {{cog|mrw|ladiyawan}}. Tingnan din ang {{m|tl|laraw}}. ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # anumang [[likha]] {{q|tulad ng [[tao]], [[tanawin]], o [[gusali]]}} na inilalagay sa [[ibabaw]] {{q|ng [[papel]], [[kanbas]], [[monitor]], atbp.}} sa pamamagitan ng [[pagguhit]], [[pagpinta]], [[paglilimbag]], [[potograpiya]], atbp.; #: {{syn|tl|imahe|imahen}} # [[litrato]]; [[guhit]]; [[pinta]]; [[dibuho]] #: {{syn|tl|ilustrasyon}} # [[repleksiyon]] {{q|sa salamin o tubig}} #: {{syn|tl|anino}} # [[modelo]] {{q|ng isang gawain o layunin}}; [[halimbawa]]; [[huwaran]] # {{q|madalas sa mga santo}} [[rebulto]]; [[estatwa]] #: {{syn|tl|imahen}} ====Hinangong kataga==== {{col3|tl|tagapaglarawan|paglalarawan|pagsasalarawan|pagkakalarawan|nakalarawan|malarawan|mailarawan|maglarawan|makalarawan|larawang-buhay|ilarawan|kalarawan|kalarawnan|di-mailalarawan|di-mailarawan|larawang-diwa|larawang-guhit|panlarawan|isalarawan|larawanan|larawanin|lumarawan}} ===Magbasa pa=== * {{R:KWF Diksiyonaryo}} * {{R:Pambansang Diksiyonaryo}} * {{R:Diccionario tagálog-hispano|553}} * {{R:Vocabulario de la lengua tagala 1860}} * {{R:Vocabulario de la lengua tagala}} * {{R:Vocabulario de la lengua tagala 1613}} qy7q6mut9ko2c3ujl68ahjfr2vmtaim Module:labels/data 828 31105 178186 178171 2026-10-15T01:00:40Z GinawaSaHapon 3989 178186 Scribunto text/plain local labels = {} -- Grammatical labels labels["daglat"] = { --TLCHANGE aliases = {"abbreviation"}, --TLCHANGE glossary = true, pos_categories = "na daglat", --TLCHANGE "abbreviations" } labels["pangngalang basal"] = { --TLCHANGE aliases = {"abstract noun"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pangngalang basal", --TLCHANGE "abstract nouns", } labels["pandiwang basal"] = { --TLCHANGE aliases = {"abstract verb"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pandiwang basal", --TLCHANGE "abstract verbs", } labels["akronim"] = { --TLCHANGE aliases = {"acronym"}, --TLCHANGE glossary = true, pos_categories = "na akronim", --TLCHANGE "acronyms", } labels["active voice"] = { aliases = {"active", "in active", "in the active", "in active voice", "in the active voice"}, glossary = true, } labels["ambitransitive"] = { glossary = true, pos_categories = {"transitive verbs", "intransitive verbs"}, } labels["angry register"] = { aliases = {"angry", "anger", "said in anger"}, glossary = true, pos_categories = "angry register terms", } labels["animate"] = { glossary = true, } labels["panaganong paturol"] = { --TLCHANGE aliases = {"in the indicative", "indicative mood", "indicative"}, --TLCHANGE glossary = "panaganong paturol", --TLCHANGE "indicative mood", } labels["panaganong pasakali"] = { --TLCHANGE aliases = {"in the subjunctive", "subjunctive mood", "subjunctive"}, --TLCHANGE glossary = "panaganong pasakali", --TLCHANGE "subjunctive mood", } labels["panaganong pautos"] = { --TLCHANGE aliases = {"in the imperative", "imperative mood", "imperative"}, --TLCHANGE glossary = "panaganong pautos", --TLCHANGE "imperative mood", } labels["jussive"] = { aliases = {"in the jussive", "jussive mood"}, glossary = "jussive mood", } labels["atelic"] = { glossary = true, } labels["attenuative"] = { pos_categories = "attenuative verbs", } labels["attributive"] = { glossary = true, } labels["attributively"] = { glossary = "attributive", } labels["auxiliary"] = { glossary = true, pos_categories = "auxiliary verbs", } labels["cardinal"] = { aliases = {"cardinal number", "cardinal numeral"}, display = "[[cardinal number]]", pos_categories = "cardinal numbers", } labels["catenative"] = { glossary = "catenative verb", } labels["causative"] = { glossary = true, } labels["causative verb"] = { display = "causative", glossary = true, pos_categories = "causative verbs", } labels["cognate object"] = { aliases = {"with cognate object"}, display = "with [[w:Cognate object|cognate object]]", pos_categories = "verbs used with cognate objects", } labels["collective"] = { glossary = true, display = "collective", pos_categories = "collective nouns", } labels["collectively"] = { glossary = "collective", display = "collectively", pos_categories = "collective nouns", } labels["collective number"] = { aliases = {"collective numeral"}, display = "[[collective number]]", pos_categories = "collective numbers", } labels["common"] = { glossary = true, } labels["comparable"] = { glossary = true, } labels["completive"] = { pos_categories = "completive verbs", } labels["concrete verb"] = { display = "concrete", Wiktionary = true, pos_categories = "concrete verbs", } labels["contraction"] = { aliases = {"contractions", "contracted"}, glossary = true, pos_categories = "contractions", } labels["control verb"] = { aliases = {"control"}, Wikipedia = true, pos_categories = "control verbs", } labels["copulative"] = { aliases = {"copular"}, glossary = true, pos_categories = "copulative verbs", } labels["pamilang"] = { --TLCHANGE aliases = {"countable", "nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang pamilang", --TLCHANGE "countable nouns", } labels["cumulative"] = { pos_categories = "cumulative verbs", } labels["defective adjective"] = { aliases = {"defective a", "defective adj", "defective adjectives"}, display = "defective", glossary = true, pos_categories = "defective adjectives", } labels["defective noun"] = { aliases = {"defective n", "defective nouns"}, display = "defective", glossary = true, pos_categories = "defective nouns", } labels["defective verb"] = { aliases = {"defective v", "defective vb", "defective verbs"}, display = "defective", glossary = true, pos_categories = "defective verbs", } labels["deliberate misspelling"] = { display = "deliberate [[misspelling]]", } labels["delimitative"] = { pos_categories = "delimitative verbs", } labels["deponent"] = { glossary = true, pos_categories = "deponent verbs", } labels["distributive"] = { pos_categories = "distributive verbs", } labels["distributive number"] = { aliases = {"distributive numeral"}, display = "[[distributive number]]", pos_categories = "distributive numbers", } labels["ditransitive"] = { glossary = true, pos_categories = "ditransitive verbs", } labels["dual only"] = { aliases = {"dual-only", "dualonly", "duale tantum"}, display = "[[dual]] only", pos_categories = "dualia tantum", } labels["dysphemistic"] = { aliases = {"dysphemism"}, glossary = "dysphemism", pos_categories = "dysphemisms", } labels["by ellipsis"] = { aliases = {"ellipsis"}, glossary = "ellipsis", pos_categories = "ellipses", } labels["emphatic"] = { glossary = true, } labels["ergative"] = { glossary = true, pos_categories = "ergative verbs", } labels["expressive"] = { glossary = true, pos_categories = "expressive terms", } labels["by extension"] = { aliases = {"hence"}, } labels["feminine"] = { glossary = true, } labels["focus"] = { glossary = true, pos_categories = "focus adverbs", } labels["fractional"] = { aliases = {"fractional number", "fractional numeral"}, display = "[[fractional number]]", pos_categories = "fractional numbers", } labels["frequentative"] = { glossary = true, pos_categories = "frequentative verbs", } labels["hedge"] = { aliases = {"hedges"}, glossary = true, pos_categories = "hedges", } labels["ideophonic"] = { aliases = {"ideophone"}, glossary = true, } labels["sawikain"] = { --TLCHANGE aliases = {"idiom", "idiomatically", "idiomatic"}, --TLCHANGE glossary = true, pos_categories = "na sawikain", --TLCHANGE "idioms", } labels["imperfect"] = { glossary = true, } labels["imperfective"] = { glossary = true, pos_categories = "imperfective verbs", } labels["impersonal"] = { glossary = true, pos_categories = "impersonal verbs", } labels["in the singular"] = { aliases = {"in singular"}, display = "in the [[singular]]", } labels["in the dual"] = { aliases = {"in dual"}, display = "in the [[dual]]", } labels["in the plural"] = { aliases = {"in plural"}, display = "in the [[Appendix:Glossary#plural|plural]]", } labels["inanimate"] = { aliases = {"not animate"}, glossary = true, } labels["inchoative"] = { glossary = true, pos_categories = "inchoative verbs", } labels["indefinite"] = { aliases = {"indef", "not definite"}, glossary = true, } labels["initialism"] = { glossary = true, pos_categories = "initialisms", } labels["intensive verb"] = { display = "intensive", pos_categories = "intensive verbs", } labels["katawanin"] = { --TLCHANGE aliases = {"not transitive", "intransitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang katawanin", --TLCHANGE "intransitive verbs", } labels["IPA"] = { aliases = {"International Phonetic Alphabet"}, Wikipedia = "International Phonetic Alphabet", plain_categories = "IPA symbols", } labels["iterative"] = { glossary = true, pos_categories = "iterative verbs", } labels["litotes"] = { aliases = {"litote", "litotic", "litotical"}, glossary = true, pos_categories = true, } labels["panlalaki"] = { --TLCHANGE aliases = {"masculine"}, --TLCHANGE glossary = true, } labels["mediopassive voice"] = { aliases = {"mediopassive", "in mediopassive", "in the mediopassive", "in mediopassive voice", "in the mediopassive voice"}, glossary = true, } labels["meiosis"] = { aliases = {"meioses", "meiotic"}, glossary = true, pos_categories = "meioses", } labels["middle voice"] = { aliases = {"middle", "in middle", "in the middle", "in middle voice", "in the middle voice"}, glossary = true, } labels["misspelling"] = { display = "[[misspelling]]", } labels["mnemonic"] = { display = "[[mnemonic]]", pos_categories = "mnemonics", } labels["modal"] = { Wikipedia = "Modality (linguistics)", } labels["modal adverb"] = { aliases = {"modal adverbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal adverbs", } labels["modal verb"] = { aliases = {"modal verbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal verbs", } labels["NAPA"] = { aliases = {"Americanist_phonetic_notation"}, Wikipedia = "Americanist_phonetic_notation", plain_categories = "NAPA symbols", } labels["always in the negative"] = { glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative"] = { aliases = {"chiefly used in the negative", "negative polarity", "negative polarity item", "usually in the negative", "usually used in the negative"}, glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative plural"] = { aliases = {"chiefly used in the negative plural", "negative polarity plural", "negative polarity plural item", "usually in the negative plural", "usually used in the negative plural"}, display = "chiefly in the [[Appendix:Glossary#negative polarity item|negative]] [[Appendix:Glossary#plural|plural]]", pos_categories = "negative polarity items", } labels["chiefly in the positive"] = { aliases = {"chiefly used in the positive", "positive polarity", "positive polarity item", "usually in the positive", "usually used in the positive"}, glossary = "positive polarity item", -- pos_categories = {"positive polarity items"}, } labels["chiefly in the positive plural"] = { aliases = {"chiefly used in the positive plural", "positive polarity plural", "positive polarity plural item", "usually in the positive plural", "usually used in the positive plural"}, display = "chiefly in the [[Appendix:Glossary#positive polarity item|positive]] [[Appendix:Glossary#plural|plural]]", -- pos_categories = "positive polarity items", } labels["balaki"] = { --TLCHANGE aliases = {"neuter"}, --TLCHANGE glossary = true, } -- British English ("ise") labels["nominalised"] = { aliases = {"nominalisation", "substantivised", "substantivisation"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } -- American English ("ize") labels["nominalized"] = { aliases = {"nominalization", "substantivized", "substantivization"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } labels["not comparable"] = { aliases = {"notcomp", "incomparable", "uncomparable"}, glossary = "uncomparable", } labels["onomatopoeia"] = { glossary = true, pos_categories = "onomatopoeias", } labels["ordinal"] = { aliases = {"ordinal number", "ordinal numeral"}, display = "[[ordinal number]]", pos_categories = "ordinal numbers", } labels["partitive verb"] = { display = "[[Appendix:Glossary#transitive|transitive]], usually [[Appendix:Finnic telic and atelic verbs|atelic]]", pos_categories = "transitive verbs", -- = "partitive verbs", } labels["perfect"] = { glossary = true, } labels["pandiwari"] = { --TLCHANGE aliases = {"participle"}, --TLCHANGE glossary = true, } labels["balintiyak"] = { --TLCHANGE aliases = {"passive", "in passive", "in the passive", "in passive voice", "in the passive voice", "passive voice"}, --TLCHANGE glossary = true, } labels["perfect"] = { glossary = true, } labels["perfective"] = { glossary = true, pos_categories = "perfective verbs", } labels["plural only"] = { aliases = {"plural-only", "pluralonly", "plurale tantum"}, display = "[[Appendix:Glossary#plural|plural]] only", pos_categories = "pluralia tantum", } labels["possessional adjective"] = { aliases = {"possessional", "possessional adjectives"}, display = "possessional", glossary = true, pos_categories = "possessional adjectives", } labels["possessive pronoun"] = { aliases = {"possessive determiner"}, display = "possessive", glossary = "possessive determiner", pos_categories = "possessive pronouns", } labels["postpositive"] = { glossary = true, } labels["predicative"] = { glossary = true, } labels["predicatively"] = { glossary = "predicative", } labels["prepositive"] = { glossary = true, } labels["prescriptive"] = { aliases = {"normative", "prescribed"}, glossary = true, } labels["privative"] = { pos_categories = "privative verbs", } labels["procedure word"] = { display = "[[procedure word]]", } labels["productive"] = { glossary = true, } -- TODO: This label is probably inappropriate for many languages labels["pronominal"] = { glossary = "pronominal verb", } labels["pronunciation spelling"] = { glossary = true, } labels["pro-verb"] = { Wikipedia = true, } labels["reciprocal"] = { glossary = true, pos_categories = "reciprocal verbs", } labels["reflexive"] = { glossary = true, pos_categories = "reflexive verbs", } labels["reflexive pronoun"] = { glossary = "reflexive", pos_categories = "reflexive pronouns", } labels["relational"] = { glossary = true, pos_categories = "relational adjectives", } labels["repetitive"] = { pos_categories = "repetitive verbs", } labels["respelling"] = { glossary = true, } labels["reversative"] = { pos_categories = "reversative verbs", } labels["rhetorical question"] = { glossary = true, pos_categories = "rhetorical questions", } labels["rhotic"] = { glossary = true, } labels["saturative"] = { aliases = {"sative"}, pos_categories = "saturative verbs", } labels["semelfactive"] = { glossary = true, pos_categories = "semelfactive verbs", } labels["sentence adverb"] = { glossary = true, pos_categories = "sentence adverbs", } labels["set phrase"] = { display = "[[set phrase]]", } labels["simile"] = { glossary = true, pos_categories = "similes", } labels["singular only"] = { aliases = {"singular-only", "singulare tantum", "no plural"}, display = "singular only", pos_categories = "singularia tantum", } labels["snowclone"] = { glossary = true, pos_categories = "snowclones", } labels["stative"] = { aliases = {"stative verb"}, glossary = true, pos_categories = "stative verbs", } labels["strictly"] = { aliases = {"strict", "narrowly", "narrow"}, glossary = true, } labels["substantive"] = { glossary = true, track = true, } labels["terminative"] = { pos_categories = "terminative verbs", } labels["palipat"] = { --TLCHANGE aliases = {"transitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang palipat", --TLCHANGE "transitive verbs" } labels["transmission error"] = { Wiktionary = true, } labels["unaccusative"] = { aliases = {"not accusative"}, Wikipedia = "Unaccusative verb", } labels["di-pamilang"] = { --TLCHANGE aliases = {"not countable", "uncountable", "di-nabibilang", "di nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang di-pamilang", --TLCHANGE "uncountable nouns", } labels["unergative"] = { aliases = {"not ergative"}, Wikipedia = "Unergative verb", } labels["UPA"] = { aliases = {"Uralic Phonetic Alphabet"}, Wikipedia = "Uralic Phonetic Alphabet", plain_categories = "UPA symbols", } labels["usually plural"] = { aliases = {"usually in the plural", "usually in plural"}, display = "usually in the [[Appendix:Glossary#plural|plural]]", deprecated = true, } -- Usage labels labels["4chan"] = { aliases = {"4chan slang"}, display = "[[w:4chan|4chan]] {{glossary|slang}}", pos_categories = "4chan slang", } labels["4chan lgbt"] = { aliases = {"tttt"}, display = "[[w:4chan|4chan]] /lgbt/ {{glossary|slang}}", pos_categories = "4chan /lgbt/ slang", } labels["ACG"] = { display = "[[ACG]]", -- see also "fandom slang" pos_categories = "fandom slang", } labels["endearing"] = { aliases = {"affectionate"}, display = "[[endearing]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "endearing terms", } labels["endearing form"] = { aliases = {"affectionate form"}, display = "[[endearing]]", pos_categories = "endearing forms", } labels["pre-classical"] = { aliases = {"Pre-classical", "pre-Classical", "Pre-Classical", "Preclassical", "preclassical", "ante-classical", "Ante-classical", "ante-Classical", "Ante-Classical", "Anteclassical", "anteclassical"}, display = "pre-Classical", regional_categories = true, } labels["anti-LGBTQ slur"] = { -- don't add aliases "homophobia" or "transphobia" because these could be topical categories aliases = {"homophobic", "transphobic"}, display = "anti-[[LGBTQ]] [[slur]]", pos_categories = "anti-LGBTQ slurs", } labels["makaluma"] = { --TLCHANGE aliases = {"antiquated", "archaic"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong makaluma"] = { --TLCHANGE aliases = {"archaic form"}, --TLCHANGE glossary = "makaluma", --TLCHANGE "archaic", display = "makaluma", --TLCHANGE "archaic", pos_categories = "na anyong makaluma", --TLCHANGE "archaic forms", } labels["Australian slang"] = { display = "[[Australian]] {{glossary|slang}}", regional_categories = "Australian", plain_categories = true, } labels["avoidance"] = { glossary = true, } labels["back slang"] = { aliases = {"backslang", "back-slang"}, glossary = "backslang", pos_categories = true, } labels["Bargoens"] = { Wikipedia = true, plain_categories = true, } labels["Braille"] = { Wikipedia = true, } labels["British slang"] = { aliases = {"UK slang"}, display = "[[British]] {{glossary|slang}}", plain_categories = true, } labels["Cambridge University slang"] = { aliases = {"University of Cambridge slang", "Cantab slang"}, display = "[[w:University of Cambridge|Cambridge University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["cant"] = { aliases = {"argot", "cryptolect"}, display = "[[cant]]", pos_categories = true, } labels["capitalized"] = { aliases = {"capitalised"}, display = "[[capitalisation|capitalized]]", } labels["Castilianism"] = { aliases = {"Hispanicism"}, display = "[[Castilianism]]", } labels["childish"] = { aliases = {"baby talk", "child language", "infantile", "puerile"}, display = "[[childish]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "childish terms", } labels["chu Nom"] = { display = "[[Vietnamese]] [[chữ Nôm]]", plain_categories = "Vietnamese Han tu", } labels["Cockney rhyming slang"] = { display = "[[Cockney rhyming slang]]", plain_categories = true, } labels["kolokyal"] = { --TLCHANGE aliases = {"colloquial", "colloquially"}, --TLCHANGE glossary = true, pos_categories = "na salitang kolokyal" --TLCHANGE "colloquialisms", } -- FIXME! The following two are apparently for Persian but probably don't belong in this file. labels["colloquial-um"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence um", } labels["colloquial-un"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence un", } labels["corporate jargon"] = { aliases = {"business jargon", "corporatese", "businessese", "corporate speak", "business speak"}, display = "[[corporate]] [[jargon]]", pos_categories = true, } labels["costermongers"] = { aliases = {"coster", "costers", "costermonger", "costermongers back slang", "costermongers' back slang"}, display = "[[Appendix:Costermongers' back slang|costermongers]]", plain_categories = "Costermongers' back slang", } labels["criminal slang"] = { aliases = {"thieves' cant", "Thieves' Cant", "thieves cant", "thieves'", "thieves", "thieves' cant"}, -- Thieves' Cant is English-only, so defined in the English submodule; if other languages try to use it, it's just criminal slang display = "[[criminal]] {{glossary|slang}}", topical_categories = "Crime", pos_categories = true, } labels["may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned", "dated"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang may kalumaan", --TLCHANGE "dated terms", } labels["anyong may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned form", "dated form"}, --TLCHANGE glossary = "may kalumaan", --TLCHANGE "dated", display = "may kalumaan", --TLCHANGE "dated", pos_categories = "na anyong may kalumaan", --TLCHANGE "dated forms", } -- combine with previous? labels["dated sense"] = { glossary = "dated", sense_categories = "dated", } labels["mapanlait"] = { --TLCHANGE aliases = {"pejorative", "derogative", "disparaging", "derogatory"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang mapanlait", --TLCHANGE "derogatory terms", } labels["anyong mapanlait"] = { --TLCHANGE aliases = {"pejorative form", "derogative form", "disparaging form", "derogatory form"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE "[[derogatory]]", pos_categories = "na anyong mapanlait", --TLCHANGE "derogatory forms", } labels["dialect"] = {-- separated from "dialectal" so e.g. "obsolete|outside|the|_|dialect|of..." displays right glossary = "dayalekto", pos_categories = "dialectal terms", } labels["dialectal"] = { glossary = true, display = "dayalekto", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "dialectal terms", } labels["dialectal form"] = { glossary = "dialectal", display = "dayalekto", pos_categories = "dialectal forms", } labels["dialects"] = {-- separated from "dialectal" so e.g. "obsolete|outside|dialects" displays right glossary = "dialectal", pos_categories = "dialectal terms", } labels["dis legomenon"] = { display = "[[dis legomenon]]", pos_categories = "dis legomena", } labels["dismissal"] = { display = "[[dismissal]]", pos_categories = "dismissals", } labels["drag slang"] = { aliases = {"Drag Race slang"}, display = "[[drag]] {{glossary|slang}}", pos_categories = "drag slang", } labels["ecclesiastical"] = { display = "[[ecclesiastical#Adjective|ecclesiastical]]", pos_categories = "ecclesiastical terms", } labels["ethnic slur"] = { aliases = {"racial slur"}, display = "[[ethnic]] [[slur]]", pos_categories = "ethnic slurs", } labels["euphemistic"] = { aliases = {"euphemism"}, glossary = "euphemism", pos_categories = "euphemisms", } labels["eye dialect"] = { display = "[[eye dialect]]", pos_categories = true, } labels["familiar"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "familiar terms", } labels["fandom slang"] = { aliases = {"fandom"}, display = "[[fandom]] {{glossary|slang}}", pos_categories = true, } labels["figurative"] = { aliases = {"metaphorical", "metaphoric", "metaphor"}, glossary = "figurative", } labels["figuratively"] = { aliases = {"metaphorically"}, glossary = "figurative", } labels["folk songs"] = { aliases = {"folksongs", "used in folk songs", "used in folksongs"}, pos_categories = "folk poetic terms", display = "used in [[folk song]]s", } labels["folk tales"] = { aliases = {"folktales", "used in folk tales", "used in folktales"}, pos_categories = "folk poetic terms", display = "used in [[folk tale]]s", } labels["folk poetic"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "folk poetic terms", } labels["pormal"] = { --TLCHANGE aliases = {"formal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "na salitang pormal",--TLCHANGE "formal terms", } labels["anyong pormal"] = { --TLCHANGE aliases = {"formal form"}, --TLCHANGE glossary = "pormal", --TLCHANGE "formal" display = "pormal", --TLCHANGE "formal", pos_categories = "na anyong pormal", --TLCHANGE "formal forms", } labels["gay slang"] = { display = "[[gay]] {{glossary|slang}}", pos_categories = true, } labels["gender critical slang"] = { aliases = {"gender-critical slang", "GC slang", "TERF slang"}, display = "[[gender-critical]] {{glossary|slang}}", pos_categories = "gender-critical slang", } labels["gender-neutral"] = { glossary = "gender-neutral", pos_categories = "gender-neutral terms", } labels["graffiti slang"] = { display = "[[graffiti#Noun|graffiti]] {{glossary|slang}}", pos_categories = true, } labels["genericized trademark"] = { aliases = {"generic trademark", "proprietary eponym"}, display = "[[genericized trademark]]", pos_categories = "genericized trademarks", } labels["ghost word"] = { aliases = {"ghost"}, display = "ghost word", glossary = true, pos_categories = "ghost words", } labels["hapax legomenon"] = { aliases = {"hapax"}, display = "hapax legomenon", glossary = true, pos_categories = "hapax legomena", } labels["higher register"] = { aliases = {"high register", "elevated register", "elevated"}, glossary = "higher register", pos_categories = "higher register terms", } labels["makasaysayan"] = { --TLCHANGE aliases = {"historic", "historical"}, --TLCHANGE glossary = true, sense_categories = true, } labels["non-native speakers"] = {-- language-agnostic version aliases = {"NNS"}, display = "[[non-native speaker]]s", -- so preceded by "used by", "error by children and", etc? or reword? regional_categories = {"Non-native speakers'"}, } -- used exclusively by languages that use the "Jpan" script code labels["historical hiragana"] = { pos_categories = true, } -- used exclusively by languages that use the "Jpan" script code labels["historical katakana"] = { pos_categories = true, } -- applies to Japanese and Korean, etc., please do not confuse with "polite" labels["honorific"] = { Wikipedia = "Honorifics (linguistics)", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "honorific terms", } -- for Ancient Greek labels["Homeric epithet"] = { display = "[[Homeric Greek|Homeric]] [[w:Epithets in Homer|epithet]]", omit_postComma = true, plain_categories = "Epic Greek", } -- applies to Japanese and Korean, etc. labels["humble"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[humble]]", pos_categories = "humble terms", } -- for Akkadian labels["in hendiadys"] = { aliases = {"hendiadys"}, display = "in {{w|hendiadys}}", pos_categories = "terms used in hendiadys", } labels["humorous"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp; NB and cf a similar "jocular" label further up on this page aliases = {"humorously", "jocular"}, glossary = true, pos_categories = "humorous terms", } labels["hyperbolic"] = { aliases = {"hyperbole"}, glossary = true, pos_categories = "hyperboles", } labels["hypercorrect"] = { glossary = true, pos_categories = "hypercorrections", } labels["hyperforeign"] = { glossary = true, pos_categories = "hyperforeign terms", } labels["imperial"] = { aliases = {"emperor", "empress"}, pos_categories = "royal terms", } labels["incel slang"] = { display = "[[incel]] {{glossary|slang}}", pos_categories = true, } labels["impormal"] = { --TLCHANGE aliases = {"informally", "not formal", "informal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang impormal", --TLCHANGE "informal terms", } labels["anyong impormal"] = { --TLCHANGE aliases = {"informal form"}, --TLCHANGE glossary = "impormal", --TLCHANGE "informal", display = "impormal", --TLCHANGE "informal", pos_categories = "na anyong impormal" --TLCHANGE "informal forms", } labels["Internet slang"] = { aliases = {"internet slang"}, display = "[[Internet]] {{glossary|slang}}", pos_categories = "internet slang", } labels["IRC"] = { display = "[[IRC]]", pos_categories = "internet slang", } labels["ironic"] = { display = "[[irony|ironic]]", } -- Not the same as "journalism", which maps to a topical category (e.g. [[:Category:en:Journalism]], instead of [[:Category:English journalistic terms]]). labels["journalistic"] = { aliases = {"journalese"}, display = "[[journalistic]]", pos_categories = "journalistic terms", } labels["leet"] = { aliases = {"leetspeak"}, display = "[[leetspeak]]", pos_categories = "leetspeak", } labels["LGBTQ slang"] = { aliases = {"LGBT slang"}, display = "[[LGBTQ]] {{glossary|slang}}", pos_categories = true, } labels["literal"] = { glossary = "literally", } labels["literally"] = { glossary = "literally", } labels["pampanitikan"] = { --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp aliases = {"bookish", "literary"}, --TLCHANGE glossary = true, pos_categories = "na salitang pampanitikan", --TLCHANGE "literary terms", } labels["anyong pampanitikan"] = { --TLCHANGE aliases = {"bookish form", "literary form"}, --TLCHANGE glossary = "pampanitikan", --TLCHANGE "literary", display = "pampanitikan", --TLCHANGE "literary", pos_categories = "na anyong pampanitikan", --TLCHANGE "literary forms", } --see also "short scale" labels["long scale"] = { display = "[[w:Long and short scales|long scale]]" } labels["loosely"] = { aliases = {"loose", "broadly", "broad"}, glossary = true, } labels["Lubunyaca"] = { display = "[[Lubunyaca]]", pos_categories = true, } labels["medical slang"] = { display = "[[medical]] {{glossary|slang}}", pos_categories = true, } -- for Awetí, Karajá, etc., where men and women use different words labels["men's speech"] = { aliases = {"male speech"}, glossary = "men's speech", pos_categories = "men's speech terms", } labels["metonymic"] = { aliases = {"metonymically", "metonymy", "metonym"}, glossary = true, pos_categories = "metonyms", } labels["military slang"] = { display = "[[military]] {{glossary|slang}}", pos_categories = true, } labels["minced oath"] = { display = "[[minced oath]]", pos_categories = "minced oaths", } labels["multiplicative"] = { aliases = {"multiplicative number", "multiplicative numeral"}, display = "[[multiplicative number]]", pos_categories = "multiplicative numbers", } labels["multiplicity slang"] = { display = "{{l|en|multiplicity|id=multiple personalities}} {{glossary|slang}}", pos_categories = true, } labels["naval slang"] = { aliases = {"navy slang"}, display = "[[naval]] {{glossary|slang}}", pos_categories = true, } labels["neolohismo"] = { --TLCHANGE aliases = {"neologistic", "neologism"}, --TLCHANGE glossary = true, pos_categories = "na neolohismo", --TLCHANGE "neologisms", } labels["neopronoun"] = { display = "[[neopronoun]]", -- pos_categories = {"neopronouns"}, } labels["no longer productive"] = { aliases = {"non-productive"}, display = "no longer [[Appendix:Glossary#productive|productive]]", } labels["nonce word"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"nonce"}, glossary = true, pos_categories = "nonce terms", } labels["di-pamantayan"] = { --TLCHANGE aliases = {"non-standard", "substandard", "sub-standard", "nonstandard"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang di-pamantayan", --TLCHANGE "nonstandard terms", } labels["anyong di-pamantayan"] = { --TLCHANGE aliases = {"non-standard form", "substandard form", "sub-standard form", "nonstandard form"}, --TLCHANGE glossary = "di-pamantayan", --TLCHANGE "nonstandard", display = "di-pamantayan", --TLCHANGE "nonstandard", pos_categories = "na anyong di-pamantayan", --TLCHANGE "nonstandard forms", } labels["numismatic slang"] = { display = "[[numismatic]] {{glossary|slang}}", pos_categories = true, } labels["lipas na"] = { --TLCHANGE aliases = {"obsolete"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong lipas na"] = { --TLCHANGE aliases = {"obsolete form"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", display = "lipas na", --TLCHANGE "obsolete", pos_categories = "na anyong lipas na", --TLCHANGE "obsolete forms", } labels["salitang lipas na"] = { --TLCHANGE aliases = {"obsolete term"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", -- combine with previous two, q.v. pos_categories = "na salitang lipas na", --TLCHANGE "obsolete terms", } labels["offensive"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "offensive terms", } labels["officialese"] = { aliases = {"bureaucratic"}, display = "[[officialese]]", pos_categories = "officialese terms", } labels["Oxbridge slang"] = { display = "[[w:Oxbridge|Oxbridge]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = {"Cambridge University slang", "Oxford University slang"}, } labels["Oxford University slang"] = { aliases = {"University of Oxford slang", "Oxon slang"}, display = "[[w:University of Oxford|Oxford University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["poetic"] = { aliases = {"poi"}, -- Only used in Ancient Greek as a holdover from [[Module:grc:Dialects]]. -- should be "terms with X senses", leaving "X terms" to the term-context temp glossary = true, pos_categories = "poetic terms", } labels["poetic form"] = { glossary = "poetic", display = "poetic", pos_categories = "poetic forms", } labels["polite"] = { glossary = true, pos_categories = "polite terms", } labels["post-classical"] = { aliases = {"Post-classical", "post-Classical", "Post-Classical", "Postclassical", "postclassical"}, display = "post-Classical", regional_categories = true, } labels["prison slang"] = { display = "[[prison]] {{glossary|slang}}", pos_categories = true, } labels["proscribed"] = { glossary = true, pos_categories = "proscribed terms", } labels["purista"] = { --TLCHANGE aliases = {"purism", "puristic"}, --TLCHANGE Wikipedia = "Linguistic purism", pos_categories = "na salitang purista", --TLCHANGE "puristic terms", } labels["radio slang"] = { display = "[[radio]] {{glossary|slang}}", pos_categories = true, } labels["Reddit slang"] = { display = "[[Reddit]] {{glossary|slang}}", pos_categories = true, } labels["rare"] = { aliases = {"rare sense"}, display = "bihira", glossary = true, sense_categories = true, } labels["rare form"] = { glossary = "rare", display = "rare", pos_categories = "rare forms", } labels["rare term"] = { display = "rare", -- see comments about "obsolete" pos_categories = "rare terms", } -- cf Cockney rhyming slang labels["rhyming slang"] = { display = "[[rhyming slang]]", pos_categories = true, } labels["religious slur"] = { aliases = {"sectarian slur"}, display = "[[religious]] [[slur]]", pos_categories = "religious slurs", } labels["retronym"] = { glossary = true, pos_categories = "retronyms", } labels["reverential"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[reverential]]", pos_categories = "reverential terms", } labels["royal"] = { aliases = {"regal"}, pos_categories = "royal terms", } labels["rustic"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"rural"}, pos_categories = "rustic terms", } labels["sarcastic"] = { display = "[[sarcastic]]", pos_categories = "sarcastic terms", } labels["school slang"] = { aliases = {"public school slang"}, display = "[[school]] {{glossary|slang}}", pos_categories = true, } labels["self-deprecatory"] = { aliases = {"self-deprecating"}, display = "[[self-deprecatory]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "self-deprecatory terms", } -- Swahili Sheng cant / argot -- should this be in a language-specific module? labels["Sheng"] = { Wikipedia = "Sheng slang", plain_categories = true, } labels["siglum"] = { aliases = {"sigla"}, glossary = true, pos_categories = "sigla", } --see also "long scale" labels["short scale"] = { display = "[[w:Long and short scales|short scale]]" } labels["balbal"] = { --TLCHANGE aliases = {"slang"}, --TLCHANGE glossary = true, pos_categories = "na salitang balbal", --TLCHANGE true, } labels["solemn"] = { glossary = true, pos_categories = "solemn terms", } labels["Stenoscript"] = { aliases = {"stenoscript"}, display = "[[Stenoscript]]", pos_categories = "Stenoscript abbreviations", } labels["pinalitang pagbaybay"] = { --TLCHANGE aliases = {"superseded"}, --TLCHANGE glossary = true } labels["swear word"] = { aliases = {"profanity", "expletive"}, pos_categories = "swear words", } labels["syncopated"] = { aliases = {"syncope", "syncopic", "syncopation"}, glossary = true, pos_categories = "syncopic forms", } labels["synecdochically"] = { aliases = {"synecdochic", "synecdochical", "synecdoche"}, glossary = true, pos_categories = "synecdoches", } labels["technical"] = { display = "[[technical]]", pos_categories = "technical terms", } labels["telic"] = { glossary = true, } labels["text messaging"] = { aliases = {"texting"}, display = "[[text messaging]]", pos_categories = "text messaging slang", } labels["tone indicator"] = { display = "[[tone indicator]]", pos_categories = "tone indicators", } labels["trademark"] = { display = "[[trademark]]", pos_categories = "trademarks", } labels["transferred sense"] = { glossary = true, pos_categories = "terms with transferred senses", } labels["transferred senses"] = { display = "[[transferred sense#English|transferred senses]]", pos_categories = "terms with transferred senses", } labels["transgender slang"] = { aliases = {"trans slang"}, display = "[[transgender]] {{glossary|slang}}", pos_categories = true, } labels["Twitch-speak"] = { display = "[[Twitch-speak]]", pos_categories = true, } labels["uds."] = { display = "[[Appendix:Spanish pronouns#Ustedes and vosotros|used formally in Spain]]", } labels["di-karaniwan"] = { aliases = {"uncommon"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong di-karaniwan"] = { --TLCHANGE aliases = {"uncommon form"}, --TLCHANGE glossary = "di-karaniwan", --TLCHANGE "uncommon", display = "di-karaniwan", --TLCHANGE "uncommon", pos_categories = "na anyong di-karaniwan", --TLCHANGE "uncommon forms", } labels["university slang"] = { aliases = {"college slang", "student slang"}, display = "[[university]] {{glossary|slang}}", topical_categories = "Universities", pos_categories = "student slang", } labels["verlan"] = { glossary = true, plain_categories = true, } labels["very rare"] = { display = "very [[Appendix:Glossary#rare|rare]]", sense_categories = "rare", } labels["bulgar"] = { --TLCHANGE aliases = {"coarse", "obscene", "profane", "vulgar"}, --TLCHANGE glossary = true, pos_categories = "na salitang bulgar", --TLCHANGE "vulgarities", } labels["vesre"] = { Wikipedia = true, plain_categories = true, } labels["youth slang"] = { display = "[[youth]] {{glossary|slang}}", pos_categories = "slang", } labels["2channel slang"] = { aliases = {"2channel", "2ch slang"}, display ="[[w:2channel|2channel]] {{glossary|slang}}", pos_categories = {"internet slang" , "2channel slang"}, } -- for Awetí, Karajá, etc., where men & women use different words labels["women's speech"] = { aliases = {"female speech"}, glossary = "women's speech", pos_categories = "women's speech terms", } -- terms applying to Old Norse skaldic poetry labels["kenning"] = { aliases = {"Kenning"}, Wikipedia = "Kenning", pos_categories = "kennings", } labels["heiti"] = { aliases = {"Heiti"}, Wikipedia = "Heiti", pos_categories = true, } return require("Module:labels").finalize_data(labels) obmadgj1cbgv0mg4u88zuo0yvium52w 178187 178186 2026-10-15T01:12:47Z GinawaSaHapon 3989 178187 Scribunto text/plain local labels = {} -- Grammatical labels labels["daglat"] = { --TLCHANGE aliases = {"abbreviation"}, --TLCHANGE glossary = true, pos_categories = "na daglat", --TLCHANGE "abbreviations" } labels["pangngalang basal"] = { --TLCHANGE aliases = {"abstract noun"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pangngalang basal", --TLCHANGE "abstract nouns", } labels["pandiwang basal"] = { --TLCHANGE aliases = {"abstract verb"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pandiwang basal", --TLCHANGE "abstract verbs", } labels["akronim"] = { --TLCHANGE aliases = {"acronym"}, --TLCHANGE glossary = true, pos_categories = "na akronim", --TLCHANGE "acronyms", } labels["active voice"] = { aliases = {"active", "in active", "in the active", "in active voice", "in the active voice"}, glossary = true, } labels["ambitransitive"] = { glossary = true, pos_categories = {"transitive verbs", "intransitive verbs"}, } labels["angry register"] = { aliases = {"angry", "anger", "said in anger"}, glossary = true, pos_categories = "angry register terms", } labels["animate"] = { glossary = true, } labels["panaganong paturol"] = { --TLCHANGE aliases = {"in the indicative", "indicative mood", "indicative"}, --TLCHANGE glossary = "panaganong paturol", --TLCHANGE "indicative mood", } labels["panaganong pasakali"] = { --TLCHANGE aliases = {"in the subjunctive", "subjunctive mood", "subjunctive"}, --TLCHANGE glossary = "panaganong pasakali", --TLCHANGE "subjunctive mood", } labels["panaganong pautos"] = { --TLCHANGE aliases = {"in the imperative", "imperative mood", "imperative"}, --TLCHANGE glossary = "panaganong pautos", --TLCHANGE "imperative mood", } labels["jussive"] = { aliases = {"in the jussive", "jussive mood"}, glossary = "jussive mood", } labels["atelic"] = { glossary = true, } labels["attenuative"] = { pos_categories = "attenuative verbs", } labels["attributive"] = { glossary = true, } labels["attributively"] = { glossary = "attributive", } labels["auxiliary"] = { glossary = true, pos_categories = "auxiliary verbs", } labels["cardinal"] = { aliases = {"cardinal number", "cardinal numeral"}, display = "[[cardinal number]]", pos_categories = "cardinal numbers", } labels["catenative"] = { glossary = "catenative verb", } labels["causative"] = { glossary = true, } labels["causative verb"] = { display = "causative", glossary = true, pos_categories = "causative verbs", } labels["cognate object"] = { aliases = {"with cognate object"}, display = "with [[w:Cognate object|cognate object]]", pos_categories = "verbs used with cognate objects", } labels["collective"] = { glossary = true, display = "collective", pos_categories = "collective nouns", } labels["collectively"] = { glossary = "collective", display = "collectively", pos_categories = "collective nouns", } labels["collective number"] = { aliases = {"collective numeral"}, display = "[[collective number]]", pos_categories = "collective numbers", } labels["common"] = { glossary = true, } labels["comparable"] = { glossary = true, } labels["completive"] = { pos_categories = "completive verbs", } labels["concrete verb"] = { display = "concrete", Wiktionary = true, pos_categories = "concrete verbs", } labels["contraction"] = { aliases = {"contractions", "contracted"}, glossary = true, pos_categories = "contractions", } labels["control verb"] = { aliases = {"control"}, Wikipedia = true, pos_categories = "control verbs", } labels["copulative"] = { aliases = {"copular"}, glossary = true, pos_categories = "copulative verbs", } labels["pamilang"] = { --TLCHANGE aliases = {"countable", "nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang pamilang", --TLCHANGE "countable nouns", } labels["cumulative"] = { pos_categories = "cumulative verbs", } labels["defective adjective"] = { aliases = {"defective a", "defective adj", "defective adjectives"}, display = "defective", glossary = true, pos_categories = "defective adjectives", } labels["defective noun"] = { aliases = {"defective n", "defective nouns"}, display = "defective", glossary = true, pos_categories = "defective nouns", } labels["defective verb"] = { aliases = {"defective v", "defective vb", "defective verbs"}, display = "defective", glossary = true, pos_categories = "defective verbs", } labels["deliberate misspelling"] = { display = "deliberate [[misspelling]]", } labels["delimitative"] = { pos_categories = "delimitative verbs", } labels["deponent"] = { glossary = true, pos_categories = "deponent verbs", } labels["distributive"] = { pos_categories = "distributive verbs", } labels["distributive number"] = { aliases = {"distributive numeral"}, display = "[[distributive number]]", pos_categories = "distributive numbers", } labels["ditransitive"] = { glossary = true, pos_categories = "ditransitive verbs", } labels["dual only"] = { aliases = {"dual-only", "dualonly", "duale tantum"}, display = "[[dual]] only", pos_categories = "dualia tantum", } labels["dysphemistic"] = { aliases = {"dysphemism"}, glossary = "dysphemism", pos_categories = "dysphemisms", } labels["by ellipsis"] = { aliases = {"ellipsis"}, glossary = "ellipsis", pos_categories = "ellipses", } labels["emphatic"] = { glossary = true, } labels["ergative"] = { glossary = true, pos_categories = "ergative verbs", } labels["expressive"] = { glossary = true, pos_categories = "expressive terms", } labels["by extension"] = { aliases = {"hence"}, display = "pinalawak na kahulugan" } labels["feminine"] = { glossary = true, } labels["focus"] = { glossary = true, pos_categories = "focus adverbs", } labels["fractional"] = { aliases = {"fractional number", "fractional numeral"}, display = "[[fractional number]]", pos_categories = "fractional numbers", } labels["frequentative"] = { glossary = true, pos_categories = "frequentative verbs", } labels["hedge"] = { aliases = {"hedges"}, glossary = true, pos_categories = "hedges", } labels["ideophonic"] = { aliases = {"ideophone"}, glossary = true, } labels["sawikain"] = { --TLCHANGE aliases = {"idiom", "idiomatically", "idiomatic"}, --TLCHANGE glossary = true, pos_categories = "na sawikain", --TLCHANGE "idioms", } labels["imperfect"] = { glossary = true, } labels["imperfective"] = { glossary = true, pos_categories = "imperfective verbs", } labels["impersonal"] = { glossary = true, pos_categories = "impersonal verbs", } labels["in the singular"] = { aliases = {"in singular"}, display = "in the [[singular]]", } labels["in the dual"] = { aliases = {"in dual"}, display = "in the [[dual]]", } labels["in the plural"] = { aliases = {"in plural"}, display = "in the [[Appendix:Glossary#plural|plural]]", } labels["inanimate"] = { aliases = {"not animate"}, glossary = true, } labels["inchoative"] = { glossary = true, pos_categories = "inchoative verbs", } labels["indefinite"] = { aliases = {"indef", "not definite"}, glossary = true, } labels["initialism"] = { glossary = true, pos_categories = "initialisms", } labels["intensive verb"] = { display = "intensive", pos_categories = "intensive verbs", } labels["katawanin"] = { --TLCHANGE aliases = {"not transitive", "intransitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang katawanin", --TLCHANGE "intransitive verbs", } labels["IPA"] = { aliases = {"International Phonetic Alphabet"}, Wikipedia = "International Phonetic Alphabet", plain_categories = "IPA symbols", } labels["iterative"] = { glossary = true, pos_categories = "iterative verbs", } labels["litotes"] = { aliases = {"litote", "litotic", "litotical"}, glossary = true, pos_categories = true, } labels["panlalaki"] = { --TLCHANGE aliases = {"masculine"}, --TLCHANGE glossary = true, } labels["mediopassive voice"] = { aliases = {"mediopassive", "in mediopassive", "in the mediopassive", "in mediopassive voice", "in the mediopassive voice"}, glossary = true, } labels["meiosis"] = { aliases = {"meioses", "meiotic"}, glossary = true, pos_categories = "meioses", } labels["middle voice"] = { aliases = {"middle", "in middle", "in the middle", "in middle voice", "in the middle voice"}, glossary = true, } labels["misspelling"] = { display = "[[misspelling]]", } labels["mnemonic"] = { display = "[[mnemonic]]", pos_categories = "mnemonics", } labels["modal"] = { Wikipedia = "Modality (linguistics)", } labels["modal adverb"] = { aliases = {"modal adverbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal adverbs", } labels["modal verb"] = { aliases = {"modal verbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal verbs", } labels["NAPA"] = { aliases = {"Americanist_phonetic_notation"}, Wikipedia = "Americanist_phonetic_notation", plain_categories = "NAPA symbols", } labels["always in the negative"] = { glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative"] = { aliases = {"chiefly used in the negative", "negative polarity", "negative polarity item", "usually in the negative", "usually used in the negative"}, glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative plural"] = { aliases = {"chiefly used in the negative plural", "negative polarity plural", "negative polarity plural item", "usually in the negative plural", "usually used in the negative plural"}, display = "chiefly in the [[Appendix:Glossary#negative polarity item|negative]] [[Appendix:Glossary#plural|plural]]", pos_categories = "negative polarity items", } labels["chiefly in the positive"] = { aliases = {"chiefly used in the positive", "positive polarity", "positive polarity item", "usually in the positive", "usually used in the positive"}, glossary = "positive polarity item", -- pos_categories = {"positive polarity items"}, } labels["chiefly in the positive plural"] = { aliases = {"chiefly used in the positive plural", "positive polarity plural", "positive polarity plural item", "usually in the positive plural", "usually used in the positive plural"}, display = "chiefly in the [[Appendix:Glossary#positive polarity item|positive]] [[Appendix:Glossary#plural|plural]]", -- pos_categories = "positive polarity items", } labels["balaki"] = { --TLCHANGE aliases = {"neuter"}, --TLCHANGE glossary = true, } -- British English ("ise") labels["nominalised"] = { aliases = {"nominalisation", "substantivised", "substantivisation"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } -- American English ("ize") labels["nominalized"] = { aliases = {"nominalization", "substantivized", "substantivization"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } labels["not comparable"] = { aliases = {"notcomp", "incomparable", "uncomparable"}, glossary = "uncomparable", } labels["onomatopoeia"] = { glossary = true, pos_categories = "onomatopoeias", } labels["ordinal"] = { aliases = {"ordinal number", "ordinal numeral"}, display = "[[ordinal number]]", pos_categories = "ordinal numbers", } labels["partitive verb"] = { display = "[[Appendix:Glossary#transitive|transitive]], usually [[Appendix:Finnic telic and atelic verbs|atelic]]", pos_categories = "transitive verbs", -- = "partitive verbs", } labels["perfect"] = { glossary = true, } labels["pandiwari"] = { --TLCHANGE aliases = {"participle"}, --TLCHANGE glossary = true, } labels["balintiyak"] = { --TLCHANGE aliases = {"passive", "in passive", "in the passive", "in passive voice", "in the passive voice", "passive voice"}, --TLCHANGE glossary = true, } labels["perfect"] = { glossary = true, } labels["perfective"] = { glossary = true, pos_categories = "perfective verbs", } labels["plural only"] = { aliases = {"plural-only", "pluralonly", "plurale tantum"}, display = "[[Appendix:Glossary#plural|plural]] only", pos_categories = "pluralia tantum", } labels["possessional adjective"] = { aliases = {"possessional", "possessional adjectives"}, display = "possessional", glossary = true, pos_categories = "possessional adjectives", } labels["possessive pronoun"] = { aliases = {"possessive determiner"}, display = "possessive", glossary = "possessive determiner", pos_categories = "possessive pronouns", } labels["postpositive"] = { glossary = true, } labels["predicative"] = { glossary = true, } labels["predicatively"] = { glossary = "predicative", } labels["prepositive"] = { glossary = true, } labels["prescriptive"] = { aliases = {"normative", "prescribed"}, glossary = true, } labels["privative"] = { pos_categories = "privative verbs", } labels["procedure word"] = { display = "[[procedure word]]", } labels["productive"] = { glossary = true, } -- TODO: This label is probably inappropriate for many languages labels["pronominal"] = { glossary = "pronominal verb", } labels["pronunciation spelling"] = { glossary = true, } labels["pro-verb"] = { Wikipedia = true, } labels["reciprocal"] = { glossary = true, pos_categories = "reciprocal verbs", } labels["reflexive"] = { glossary = true, pos_categories = "reflexive verbs", } labels["reflexive pronoun"] = { glossary = "reflexive", pos_categories = "reflexive pronouns", } labels["relational"] = { glossary = true, pos_categories = "relational adjectives", } labels["repetitive"] = { pos_categories = "repetitive verbs", } labels["respelling"] = { glossary = true, } labels["reversative"] = { pos_categories = "reversative verbs", } labels["rhetorical question"] = { glossary = true, pos_categories = "rhetorical questions", } labels["rhotic"] = { glossary = true, } labels["saturative"] = { aliases = {"sative"}, pos_categories = "saturative verbs", } labels["semelfactive"] = { glossary = true, pos_categories = "semelfactive verbs", } labels["sentence adverb"] = { glossary = true, pos_categories = "sentence adverbs", } labels["set phrase"] = { display = "[[set phrase]]", } labels["simile"] = { glossary = true, pos_categories = "similes", } labels["singular only"] = { aliases = {"singular-only", "singulare tantum", "no plural"}, display = "singular only", pos_categories = "singularia tantum", } labels["snowclone"] = { glossary = true, pos_categories = "snowclones", } labels["stative"] = { aliases = {"stative verb"}, glossary = true, pos_categories = "stative verbs", } labels["strictly"] = { aliases = {"strict", "narrowly", "narrow"}, glossary = true, } labels["substantive"] = { glossary = true, track = true, } labels["terminative"] = { pos_categories = "terminative verbs", } labels["palipat"] = { --TLCHANGE aliases = {"transitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang palipat", --TLCHANGE "transitive verbs" } labels["transmission error"] = { Wiktionary = true, } labels["unaccusative"] = { aliases = {"not accusative"}, Wikipedia = "Unaccusative verb", } labels["di-pamilang"] = { --TLCHANGE aliases = {"not countable", "uncountable", "di-nabibilang", "di nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang di-pamilang", --TLCHANGE "uncountable nouns", } labels["unergative"] = { aliases = {"not ergative"}, Wikipedia = "Unergative verb", } labels["UPA"] = { aliases = {"Uralic Phonetic Alphabet"}, Wikipedia = "Uralic Phonetic Alphabet", plain_categories = "UPA symbols", } labels["usually plural"] = { aliases = {"usually in the plural", "usually in plural"}, display = "usually in the [[Appendix:Glossary#plural|plural]]", deprecated = true, } -- Usage labels labels["4chan"] = { aliases = {"4chan slang"}, display = "[[w:4chan|4chan]] {{glossary|slang}}", pos_categories = "4chan slang", } labels["4chan lgbt"] = { aliases = {"tttt"}, display = "[[w:4chan|4chan]] /lgbt/ {{glossary|slang}}", pos_categories = "4chan /lgbt/ slang", } labels["ACG"] = { display = "[[ACG]]", -- see also "fandom slang" pos_categories = "fandom slang", } labels["endearing"] = { aliases = {"affectionate"}, display = "[[endearing]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "endearing terms", } labels["endearing form"] = { aliases = {"affectionate form"}, display = "[[endearing]]", pos_categories = "endearing forms", } labels["pre-classical"] = { aliases = {"Pre-classical", "pre-Classical", "Pre-Classical", "Preclassical", "preclassical", "ante-classical", "Ante-classical", "ante-Classical", "Ante-Classical", "Anteclassical", "anteclassical"}, display = "pre-Classical", regional_categories = true, } labels["anti-LGBTQ slur"] = { -- don't add aliases "homophobia" or "transphobia" because these could be topical categories aliases = {"homophobic", "transphobic"}, display = "anti-[[LGBTQ]] [[slur]]", pos_categories = "anti-LGBTQ slurs", } labels["makaluma"] = { --TLCHANGE aliases = {"antiquated", "archaic"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong makaluma"] = { --TLCHANGE aliases = {"archaic form"}, --TLCHANGE glossary = "makaluma", --TLCHANGE "archaic", display = "makaluma", --TLCHANGE "archaic", pos_categories = "na anyong makaluma", --TLCHANGE "archaic forms", } labels["Australian slang"] = { display = "[[Australian]] {{glossary|slang}}", regional_categories = "Australian", plain_categories = true, } labels["avoidance"] = { glossary = true, } labels["back slang"] = { aliases = {"backslang", "back-slang"}, glossary = "backslang", pos_categories = true, } labels["Bargoens"] = { Wikipedia = true, plain_categories = true, } labels["Braille"] = { Wikipedia = true, } labels["British slang"] = { aliases = {"UK slang"}, display = "[[British]] {{glossary|slang}}", plain_categories = true, } labels["Cambridge University slang"] = { aliases = {"University of Cambridge slang", "Cantab slang"}, display = "[[w:University of Cambridge|Cambridge University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["cant"] = { aliases = {"argot", "cryptolect"}, display = "[[cant]]", pos_categories = true, } labels["capitalized"] = { aliases = {"capitalised"}, display = "[[capitalisation|capitalized]]", } labels["Castilianism"] = { aliases = {"Hispanicism"}, display = "[[Castilianism]]", } labels["childish"] = { aliases = {"baby talk", "child language", "infantile", "puerile"}, display = "[[childish]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "childish terms", } labels["chu Nom"] = { display = "[[Vietnamese]] [[chữ Nôm]]", plain_categories = "Vietnamese Han tu", } labels["Cockney rhyming slang"] = { display = "[[Cockney rhyming slang]]", plain_categories = true, } labels["kolokyal"] = { --TLCHANGE aliases = {"colloquial", "colloquially"}, --TLCHANGE glossary = true, pos_categories = "na salitang kolokyal" --TLCHANGE "colloquialisms", } -- FIXME! The following two are apparently for Persian but probably don't belong in this file. labels["colloquial-um"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence um", } labels["colloquial-un"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence un", } labels["corporate jargon"] = { aliases = {"business jargon", "corporatese", "businessese", "corporate speak", "business speak"}, display = "[[corporate]] [[jargon]]", pos_categories = true, } labels["costermongers"] = { aliases = {"coster", "costers", "costermonger", "costermongers back slang", "costermongers' back slang"}, display = "[[Appendix:Costermongers' back slang|costermongers]]", plain_categories = "Costermongers' back slang", } labels["criminal slang"] = { aliases = {"thieves' cant", "Thieves' Cant", "thieves cant", "thieves'", "thieves", "thieves' cant"}, -- Thieves' Cant is English-only, so defined in the English submodule; if other languages try to use it, it's just criminal slang display = "[[criminal]] {{glossary|slang}}", topical_categories = "Crime", pos_categories = true, } labels["may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned", "dated"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang may kalumaan", --TLCHANGE "dated terms", } labels["anyong may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned form", "dated form"}, --TLCHANGE glossary = "may kalumaan", --TLCHANGE "dated", display = "may kalumaan", --TLCHANGE "dated", pos_categories = "na anyong may kalumaan", --TLCHANGE "dated forms", } -- combine with previous? labels["dated sense"] = { glossary = "dated", sense_categories = "dated", } labels["mapanlait"] = { --TLCHANGE aliases = {"pejorative", "derogative", "disparaging", "derogatory"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang mapanlait", --TLCHANGE "derogatory terms", } labels["anyong mapanlait"] = { --TLCHANGE aliases = {"pejorative form", "derogative form", "disparaging form", "derogatory form"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE "[[derogatory]]", pos_categories = "na anyong mapanlait", --TLCHANGE "derogatory forms", } labels["dialect"] = {-- separated from "dialectal" so e.g. "obsolete|outside|the|_|dialect|of..." displays right glossary = "dayalekto", pos_categories = "dialectal terms", } labels["dialectal"] = { glossary = true, display = "dayalekto", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "dialectal terms", } labels["dialectal form"] = { glossary = "dialectal", display = "dayalekto", pos_categories = "dialectal forms", } labels["dialects"] = {-- separated from "dialectal" so e.g. "obsolete|outside|dialects" displays right glossary = "dialectal", pos_categories = "dialectal terms", } labels["dis legomenon"] = { display = "[[dis legomenon]]", pos_categories = "dis legomena", } labels["dismissal"] = { display = "[[dismissal]]", pos_categories = "dismissals", } labels["drag slang"] = { aliases = {"Drag Race slang"}, display = "[[drag]] {{glossary|slang}}", pos_categories = "drag slang", } labels["ecclesiastical"] = { display = "[[ecclesiastical#Adjective|ecclesiastical]]", pos_categories = "ecclesiastical terms", } labels["ethnic slur"] = { aliases = {"racial slur"}, display = "[[ethnic]] [[slur]]", pos_categories = "ethnic slurs", } labels["euphemistic"] = { aliases = {"euphemism"}, glossary = "euphemism", pos_categories = "euphemisms", } labels["eye dialect"] = { display = "[[eye dialect]]", pos_categories = true, } labels["familiar"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "familiar terms", } labels["fandom slang"] = { aliases = {"fandom"}, display = "[[fandom]] {{glossary|slang}}", pos_categories = true, } labels["figurative"] = { aliases = {"metaphorical", "metaphoric", "metaphor"}, glossary = "figurative", } labels["figuratively"] = { aliases = {"metaphorically"}, glossary = "figurative", } labels["folk songs"] = { aliases = {"folksongs", "used in folk songs", "used in folksongs"}, pos_categories = "folk poetic terms", display = "used in [[folk song]]s", } labels["folk tales"] = { aliases = {"folktales", "used in folk tales", "used in folktales"}, pos_categories = "folk poetic terms", display = "used in [[folk tale]]s", } labels["folk poetic"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "folk poetic terms", } labels["pormal"] = { --TLCHANGE aliases = {"formal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "na salitang pormal",--TLCHANGE "formal terms", } labels["anyong pormal"] = { --TLCHANGE aliases = {"formal form"}, --TLCHANGE glossary = "pormal", --TLCHANGE "formal" display = "pormal", --TLCHANGE "formal", pos_categories = "na anyong pormal", --TLCHANGE "formal forms", } labels["gay slang"] = { display = "[[gay]] {{glossary|slang}}", pos_categories = true, } labels["gender critical slang"] = { aliases = {"gender-critical slang", "GC slang", "TERF slang"}, display = "[[gender-critical]] {{glossary|slang}}", pos_categories = "gender-critical slang", } labels["gender-neutral"] = { glossary = "gender-neutral", pos_categories = "gender-neutral terms", } labels["graffiti slang"] = { display = "[[graffiti#Noun|graffiti]] {{glossary|slang}}", pos_categories = true, } labels["genericized trademark"] = { aliases = {"generic trademark", "proprietary eponym"}, display = "[[genericized trademark]]", pos_categories = "genericized trademarks", } labels["ghost word"] = { aliases = {"ghost"}, display = "ghost word", glossary = true, pos_categories = "ghost words", } labels["hapax legomenon"] = { aliases = {"hapax"}, display = "hapax legomenon", glossary = true, pos_categories = "hapax legomena", } labels["higher register"] = { aliases = {"high register", "elevated register", "elevated"}, glossary = "higher register", pos_categories = "higher register terms", } labels["makasaysayan"] = { --TLCHANGE aliases = {"historic", "historical"}, --TLCHANGE glossary = true, sense_categories = true, } labels["non-native speakers"] = {-- language-agnostic version aliases = {"NNS"}, display = "[[non-native speaker]]s", -- so preceded by "used by", "error by children and", etc? or reword? regional_categories = {"Non-native speakers'"}, } -- used exclusively by languages that use the "Jpan" script code labels["historical hiragana"] = { pos_categories = true, } -- used exclusively by languages that use the "Jpan" script code labels["historical katakana"] = { pos_categories = true, } -- applies to Japanese and Korean, etc., please do not confuse with "polite" labels["honorific"] = { Wikipedia = "Honorifics (linguistics)", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "honorific terms", } -- for Ancient Greek labels["Homeric epithet"] = { display = "[[Homeric Greek|Homeric]] [[w:Epithets in Homer|epithet]]", omit_postComma = true, plain_categories = "Epic Greek", } -- applies to Japanese and Korean, etc. labels["humble"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[humble]]", pos_categories = "humble terms", } -- for Akkadian labels["in hendiadys"] = { aliases = {"hendiadys"}, display = "in {{w|hendiadys}}", pos_categories = "terms used in hendiadys", } labels["humorous"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp; NB and cf a similar "jocular" label further up on this page aliases = {"humorously", "jocular"}, glossary = true, pos_categories = "humorous terms", } labels["hyperbolic"] = { aliases = {"hyperbole"}, glossary = true, pos_categories = "hyperboles", } labels["hypercorrect"] = { glossary = true, pos_categories = "hypercorrections", } labels["hyperforeign"] = { glossary = true, pos_categories = "hyperforeign terms", } labels["imperial"] = { aliases = {"emperor", "empress"}, pos_categories = "royal terms", } labels["incel slang"] = { display = "[[incel]] {{glossary|slang}}", pos_categories = true, } labels["impormal"] = { --TLCHANGE aliases = {"informally", "not formal", "informal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang impormal", --TLCHANGE "informal terms", } labels["anyong impormal"] = { --TLCHANGE aliases = {"informal form"}, --TLCHANGE glossary = "impormal", --TLCHANGE "informal", display = "impormal", --TLCHANGE "informal", pos_categories = "na anyong impormal" --TLCHANGE "informal forms", } labels["Internet slang"] = { aliases = {"internet slang"}, display = "[[Internet]] {{glossary|slang}}", pos_categories = "internet slang", } labels["IRC"] = { display = "[[IRC]]", pos_categories = "internet slang", } labels["ironic"] = { display = "[[irony|ironic]]", } -- Not the same as "journalism", which maps to a topical category (e.g. [[:Category:en:Journalism]], instead of [[:Category:English journalistic terms]]). labels["journalistic"] = { aliases = {"journalese"}, display = "[[journalistic]]", pos_categories = "journalistic terms", } labels["leet"] = { aliases = {"leetspeak"}, display = "[[leetspeak]]", pos_categories = "leetspeak", } labels["LGBTQ slang"] = { aliases = {"LGBT slang"}, display = "[[LGBTQ]] {{glossary|slang}}", pos_categories = true, } labels["literal"] = { glossary = "literally", } labels["literally"] = { glossary = "literally", } labels["pampanitikan"] = { --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp aliases = {"bookish", "literary"}, --TLCHANGE glossary = true, pos_categories = "na salitang pampanitikan", --TLCHANGE "literary terms", } labels["anyong pampanitikan"] = { --TLCHANGE aliases = {"bookish form", "literary form"}, --TLCHANGE glossary = "pampanitikan", --TLCHANGE "literary", display = "pampanitikan", --TLCHANGE "literary", pos_categories = "na anyong pampanitikan", --TLCHANGE "literary forms", } --see also "short scale" labels["long scale"] = { display = "[[w:Long and short scales|long scale]]" } labels["loosely"] = { aliases = {"loose", "broadly", "broad"}, glossary = true, } labels["Lubunyaca"] = { display = "[[Lubunyaca]]", pos_categories = true, } labels["medical slang"] = { display = "[[medical]] {{glossary|slang}}", pos_categories = true, } -- for Awetí, Karajá, etc., where men and women use different words labels["men's speech"] = { aliases = {"male speech"}, glossary = "men's speech", pos_categories = "men's speech terms", } labels["metonymic"] = { aliases = {"metonymically", "metonymy", "metonym"}, glossary = true, pos_categories = "metonyms", } labels["military slang"] = { display = "[[military]] {{glossary|slang}}", pos_categories = true, } labels["minced oath"] = { display = "[[minced oath]]", pos_categories = "minced oaths", } labels["multiplicative"] = { aliases = {"multiplicative number", "multiplicative numeral"}, display = "[[multiplicative number]]", pos_categories = "multiplicative numbers", } labels["multiplicity slang"] = { display = "{{l|en|multiplicity|id=multiple personalities}} {{glossary|slang}}", pos_categories = true, } labels["naval slang"] = { aliases = {"navy slang"}, display = "[[naval]] {{glossary|slang}}", pos_categories = true, } labels["neolohismo"] = { --TLCHANGE aliases = {"neologistic", "neologism"}, --TLCHANGE glossary = true, pos_categories = "na neolohismo", --TLCHANGE "neologisms", } labels["neopronoun"] = { display = "[[neopronoun]]", -- pos_categories = {"neopronouns"}, } labels["no longer productive"] = { aliases = {"non-productive"}, display = "no longer [[Appendix:Glossary#productive|productive]]", } labels["nonce word"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"nonce"}, glossary = true, pos_categories = "nonce terms", } labels["di-pamantayan"] = { --TLCHANGE aliases = {"non-standard", "substandard", "sub-standard", "nonstandard"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang di-pamantayan", --TLCHANGE "nonstandard terms", } labels["anyong di-pamantayan"] = { --TLCHANGE aliases = {"non-standard form", "substandard form", "sub-standard form", "nonstandard form"}, --TLCHANGE glossary = "di-pamantayan", --TLCHANGE "nonstandard", display = "di-pamantayan", --TLCHANGE "nonstandard", pos_categories = "na anyong di-pamantayan", --TLCHANGE "nonstandard forms", } labels["numismatic slang"] = { display = "[[numismatic]] {{glossary|slang}}", pos_categories = true, } labels["lipas na"] = { --TLCHANGE aliases = {"obsolete"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong lipas na"] = { --TLCHANGE aliases = {"obsolete form"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", display = "lipas na", --TLCHANGE "obsolete", pos_categories = "na anyong lipas na", --TLCHANGE "obsolete forms", } labels["salitang lipas na"] = { --TLCHANGE aliases = {"obsolete term"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", -- combine with previous two, q.v. pos_categories = "na salitang lipas na", --TLCHANGE "obsolete terms", } labels["offensive"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "offensive terms", } labels["officialese"] = { aliases = {"bureaucratic"}, display = "[[officialese]]", pos_categories = "officialese terms", } labels["Oxbridge slang"] = { display = "[[w:Oxbridge|Oxbridge]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = {"Cambridge University slang", "Oxford University slang"}, } labels["Oxford University slang"] = { aliases = {"University of Oxford slang", "Oxon slang"}, display = "[[w:University of Oxford|Oxford University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["poetic"] = { aliases = {"poi"}, -- Only used in Ancient Greek as a holdover from [[Module:grc:Dialects]]. -- should be "terms with X senses", leaving "X terms" to the term-context temp glossary = true, pos_categories = "poetic terms", } labels["poetic form"] = { glossary = "poetic", display = "poetic", pos_categories = "poetic forms", } labels["polite"] = { glossary = true, pos_categories = "polite terms", } labels["post-classical"] = { aliases = {"Post-classical", "post-Classical", "Post-Classical", "Postclassical", "postclassical"}, display = "post-Classical", regional_categories = true, } labels["prison slang"] = { display = "[[prison]] {{glossary|slang}}", pos_categories = true, } labels["proscribed"] = { glossary = true, pos_categories = "proscribed terms", } labels["purista"] = { --TLCHANGE aliases = {"purism", "puristic"}, --TLCHANGE Wikipedia = "Linguistic purism", pos_categories = "na salitang purista", --TLCHANGE "puristic terms", } labels["radio slang"] = { display = "[[radio]] {{glossary|slang}}", pos_categories = true, } labels["Reddit slang"] = { display = "[[Reddit]] {{glossary|slang}}", pos_categories = true, } labels["rare"] = { aliases = {"rare sense"}, display = "bihira", glossary = true, sense_categories = true, } labels["rare form"] = { glossary = "rare", display = "rare", pos_categories = "rare forms", } labels["rare term"] = { display = "rare", -- see comments about "obsolete" pos_categories = "rare terms", } -- cf Cockney rhyming slang labels["rhyming slang"] = { display = "[[rhyming slang]]", pos_categories = true, } labels["religious slur"] = { aliases = {"sectarian slur"}, display = "[[religious]] [[slur]]", pos_categories = "religious slurs", } labels["retronym"] = { glossary = true, pos_categories = "retronyms", } labels["reverential"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[reverential]]", pos_categories = "reverential terms", } labels["royal"] = { aliases = {"regal"}, pos_categories = "royal terms", } labels["rustic"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"rural"}, pos_categories = "rustic terms", } labels["sarcastic"] = { display = "[[sarcastic]]", pos_categories = "sarcastic terms", } labels["school slang"] = { aliases = {"public school slang"}, display = "[[school]] {{glossary|slang}}", pos_categories = true, } labels["self-deprecatory"] = { aliases = {"self-deprecating"}, display = "[[self-deprecatory]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "self-deprecatory terms", } -- Swahili Sheng cant / argot -- should this be in a language-specific module? labels["Sheng"] = { Wikipedia = "Sheng slang", plain_categories = true, } labels["siglum"] = { aliases = {"sigla"}, glossary = true, pos_categories = "sigla", } --see also "long scale" labels["short scale"] = { display = "[[w:Long and short scales|short scale]]" } labels["balbal"] = { --TLCHANGE aliases = {"slang"}, --TLCHANGE glossary = true, pos_categories = "na salitang balbal", --TLCHANGE true, } labels["solemn"] = { glossary = true, pos_categories = "solemn terms", } labels["Stenoscript"] = { aliases = {"stenoscript"}, display = "[[Stenoscript]]", pos_categories = "Stenoscript abbreviations", } labels["pinalitang pagbaybay"] = { --TLCHANGE aliases = {"superseded"}, --TLCHANGE glossary = true } labels["swear word"] = { aliases = {"profanity", "expletive"}, pos_categories = "swear words", } labels["syncopated"] = { aliases = {"syncope", "syncopic", "syncopation"}, glossary = true, pos_categories = "syncopic forms", } labels["synecdochically"] = { aliases = {"synecdochic", "synecdochical", "synecdoche"}, glossary = true, pos_categories = "synecdoches", } labels["technical"] = { display = "[[technical]]", pos_categories = "technical terms", } labels["telic"] = { glossary = true, } labels["text messaging"] = { aliases = {"texting"}, display = "[[text messaging]]", pos_categories = "text messaging slang", } labels["tone indicator"] = { display = "[[tone indicator]]", pos_categories = "tone indicators", } labels["trademark"] = { display = "[[trademark]]", pos_categories = "trademarks", } labels["transferred sense"] = { glossary = true, pos_categories = "terms with transferred senses", } labels["transferred senses"] = { display = "[[transferred sense#English|transferred senses]]", pos_categories = "terms with transferred senses", } labels["transgender slang"] = { aliases = {"trans slang"}, display = "[[transgender]] {{glossary|slang}}", pos_categories = true, } labels["Twitch-speak"] = { display = "[[Twitch-speak]]", pos_categories = true, } labels["uds."] = { display = "[[Appendix:Spanish pronouns#Ustedes and vosotros|used formally in Spain]]", } labels["di-karaniwan"] = { aliases = {"uncommon"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong di-karaniwan"] = { --TLCHANGE aliases = {"uncommon form"}, --TLCHANGE glossary = "di-karaniwan", --TLCHANGE "uncommon", display = "di-karaniwan", --TLCHANGE "uncommon", pos_categories = "na anyong di-karaniwan", --TLCHANGE "uncommon forms", } labels["university slang"] = { aliases = {"college slang", "student slang"}, display = "[[university]] {{glossary|slang}}", topical_categories = "Universities", pos_categories = "student slang", } labels["verlan"] = { glossary = true, plain_categories = true, } labels["very rare"] = { display = "very [[Appendix:Glossary#rare|rare]]", sense_categories = "rare", } labels["bulgar"] = { --TLCHANGE aliases = {"coarse", "obscene", "profane", "vulgar"}, --TLCHANGE glossary = true, pos_categories = "na salitang bulgar", --TLCHANGE "vulgarities", } labels["vesre"] = { Wikipedia = true, plain_categories = true, } labels["youth slang"] = { display = "[[youth]] {{glossary|slang}}", pos_categories = "slang", } labels["2channel slang"] = { aliases = {"2channel", "2ch slang"}, display ="[[w:2channel|2channel]] {{glossary|slang}}", pos_categories = {"internet slang" , "2channel slang"}, } -- for Awetí, Karajá, etc., where men & women use different words labels["women's speech"] = { aliases = {"female speech"}, glossary = "women's speech", pos_categories = "women's speech terms", } -- terms applying to Old Norse skaldic poetry labels["kenning"] = { aliases = {"Kenning"}, Wikipedia = "Kenning", pos_categories = "kennings", } labels["heiti"] = { aliases = {"Heiti"}, Wikipedia = "Heiti", pos_categories = true, } return require("Module:labels").finalize_data(labels) frljx9fsg9fgip20io423uiqbysowhs 178189 178187 2026-10-15T01:19:13Z GinawaSaHapon 3989 178189 Scribunto text/plain local labels = {} -- Grammatical labels labels["daglat"] = { --TLCHANGE aliases = {"abbreviation"}, --TLCHANGE glossary = true, pos_categories = "na daglat", --TLCHANGE "abbreviations" } labels["pangngalang basal"] = { --TLCHANGE aliases = {"abstract noun"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pangngalang basal", --TLCHANGE "abstract nouns", } labels["pandiwang basal"] = { --TLCHANGE aliases = {"abstract verb"}, --TLCHANGE display = "basal", --TLCHANGE "abstract", glossary = true, pos_categories = "na pandiwang basal", --TLCHANGE "abstract verbs", } labels["akronim"] = { --TLCHANGE aliases = {"acronym"}, --TLCHANGE glossary = true, pos_categories = "na akronim", --TLCHANGE "acronyms", } labels["active voice"] = { aliases = {"active", "in active", "in the active", "in active voice", "in the active voice"}, glossary = true, } labels["ambitransitive"] = { glossary = true, pos_categories = {"transitive verbs", "intransitive verbs"}, } labels["angry register"] = { aliases = {"angry", "anger", "said in anger"}, glossary = true, pos_categories = "angry register terms", } labels["animate"] = { glossary = true, } labels["panaganong paturol"] = { --TLCHANGE aliases = {"in the indicative", "indicative mood", "indicative"}, --TLCHANGE glossary = "panaganong paturol", --TLCHANGE "indicative mood", } labels["panaganong pasakali"] = { --TLCHANGE aliases = {"in the subjunctive", "subjunctive mood", "subjunctive"}, --TLCHANGE glossary = "panaganong pasakali", --TLCHANGE "subjunctive mood", } labels["panaganong pautos"] = { --TLCHANGE aliases = {"in the imperative", "imperative mood", "imperative"}, --TLCHANGE glossary = "panaganong pautos", --TLCHANGE "imperative mood", } labels["jussive"] = { aliases = {"in the jussive", "jussive mood"}, glossary = "jussive mood", } labels["atelic"] = { glossary = true, } labels["attenuative"] = { pos_categories = "attenuative verbs", } labels["attributive"] = { glossary = true, } labels["attributively"] = { glossary = "attributive", } labels["auxiliary"] = { glossary = true, pos_categories = "auxiliary verbs", } labels["cardinal"] = { aliases = {"cardinal number", "cardinal numeral"}, display = "[[cardinal number]]", pos_categories = "cardinal numbers", } labels["catenative"] = { glossary = "catenative verb", } labels["causative"] = { glossary = true, } labels["causative verb"] = { display = "causative", glossary = true, pos_categories = "causative verbs", } labels["cognate object"] = { aliases = {"with cognate object"}, display = "with [[w:Cognate object|cognate object]]", pos_categories = "verbs used with cognate objects", } labels["collective"] = { glossary = true, display = "collective", pos_categories = "collective nouns", } labels["collectively"] = { glossary = "collective", display = "collectively", pos_categories = "collective nouns", } labels["collective number"] = { aliases = {"collective numeral"}, display = "[[collective number]]", pos_categories = "collective numbers", } labels["common"] = { glossary = true, } labels["comparable"] = { glossary = true, } labels["completive"] = { pos_categories = "completive verbs", } labels["concrete verb"] = { display = "concrete", Wiktionary = true, pos_categories = "concrete verbs", } labels["contraction"] = { aliases = {"contractions", "contracted"}, glossary = true, pos_categories = "contractions", } labels["control verb"] = { aliases = {"control"}, Wikipedia = true, pos_categories = "control verbs", } labels["copulative"] = { aliases = {"copular"}, glossary = true, pos_categories = "copulative verbs", } labels["pamilang"] = { --TLCHANGE aliases = {"countable", "nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang pamilang", --TLCHANGE "countable nouns", } labels["cumulative"] = { pos_categories = "cumulative verbs", } labels["defective adjective"] = { aliases = {"defective a", "defective adj", "defective adjectives"}, display = "defective", glossary = true, pos_categories = "defective adjectives", } labels["defective noun"] = { aliases = {"defective n", "defective nouns"}, display = "defective", glossary = true, pos_categories = "defective nouns", } labels["defective verb"] = { aliases = {"defective v", "defective vb", "defective verbs"}, display = "defective", glossary = true, pos_categories = "defective verbs", } labels["deliberate misspelling"] = { display = "deliberate [[misspelling]]", } labels["delimitative"] = { pos_categories = "delimitative verbs", } labels["deponent"] = { glossary = true, pos_categories = "deponent verbs", } labels["distributive"] = { pos_categories = "distributive verbs", } labels["distributive number"] = { aliases = {"distributive numeral"}, display = "[[distributive number]]", pos_categories = "distributive numbers", } labels["ditransitive"] = { glossary = true, pos_categories = "ditransitive verbs", } labels["dual only"] = { aliases = {"dual-only", "dualonly", "duale tantum"}, display = "[[dual]] only", pos_categories = "dualia tantum", } labels["dysphemistic"] = { aliases = {"dysphemism"}, glossary = "dysphemism", pos_categories = "dysphemisms", } labels["by ellipsis"] = { aliases = {"ellipsis"}, glossary = "ellipsis", pos_categories = "ellipses", } labels["emphatic"] = { glossary = true, } labels["ergative"] = { glossary = true, pos_categories = "ergative verbs", } labels["expressive"] = { glossary = true, pos_categories = "expressive terms", } labels["by extension"] = { aliases = {"hence"}, display = "pinalawak" } labels["feminine"] = { glossary = true, } labels["focus"] = { glossary = true, pos_categories = "focus adverbs", } labels["fractional"] = { aliases = {"fractional number", "fractional numeral"}, display = "[[fractional number]]", pos_categories = "fractional numbers", } labels["frequentative"] = { glossary = true, pos_categories = "frequentative verbs", } labels["hedge"] = { aliases = {"hedges"}, glossary = true, pos_categories = "hedges", } labels["ideophonic"] = { aliases = {"ideophone"}, glossary = true, } labels["sawikain"] = { --TLCHANGE aliases = {"idiom", "idiomatically", "idiomatic"}, --TLCHANGE glossary = true, pos_categories = "na sawikain", --TLCHANGE "idioms", } labels["imperfect"] = { glossary = true, } labels["imperfective"] = { glossary = true, pos_categories = "imperfective verbs", } labels["impersonal"] = { glossary = true, pos_categories = "impersonal verbs", } labels["in the singular"] = { aliases = {"in singular"}, display = "in the [[singular]]", } labels["in the dual"] = { aliases = {"in dual"}, display = "in the [[dual]]", } labels["in the plural"] = { aliases = {"in plural"}, display = "in the [[Appendix:Glossary#plural|plural]]", } labels["inanimate"] = { aliases = {"not animate"}, glossary = true, } labels["inchoative"] = { glossary = true, pos_categories = "inchoative verbs", } labels["indefinite"] = { aliases = {"indef", "not definite"}, glossary = true, } labels["initialism"] = { glossary = true, pos_categories = "initialisms", } labels["intensive verb"] = { display = "intensive", pos_categories = "intensive verbs", } labels["katawanin"] = { --TLCHANGE aliases = {"not transitive", "intransitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang katawanin", --TLCHANGE "intransitive verbs", } labels["IPA"] = { aliases = {"International Phonetic Alphabet"}, Wikipedia = "International Phonetic Alphabet", plain_categories = "IPA symbols", } labels["iterative"] = { glossary = true, pos_categories = "iterative verbs", } labels["litotes"] = { aliases = {"litote", "litotic", "litotical"}, glossary = true, pos_categories = true, } labels["panlalaki"] = { --TLCHANGE aliases = {"masculine"}, --TLCHANGE glossary = true, } labels["mediopassive voice"] = { aliases = {"mediopassive", "in mediopassive", "in the mediopassive", "in mediopassive voice", "in the mediopassive voice"}, glossary = true, } labels["meiosis"] = { aliases = {"meioses", "meiotic"}, glossary = true, pos_categories = "meioses", } labels["middle voice"] = { aliases = {"middle", "in middle", "in the middle", "in middle voice", "in the middle voice"}, glossary = true, } labels["misspelling"] = { display = "[[misspelling]]", } labels["mnemonic"] = { display = "[[mnemonic]]", pos_categories = "mnemonics", } labels["modal"] = { Wikipedia = "Modality (linguistics)", } labels["modal adverb"] = { aliases = {"modal adverbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal adverbs", } labels["modal verb"] = { aliases = {"modal verbs"}, display = "modal", Wikipedia = "Modality (linguistics)", pos_categories = "modal verbs", } labels["NAPA"] = { aliases = {"Americanist_phonetic_notation"}, Wikipedia = "Americanist_phonetic_notation", plain_categories = "NAPA symbols", } labels["always in the negative"] = { glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative"] = { aliases = {"chiefly used in the negative", "negative polarity", "negative polarity item", "usually in the negative", "usually used in the negative"}, glossary = "negative polarity item", pos_categories = "negative polarity items", } labels["chiefly in the negative plural"] = { aliases = {"chiefly used in the negative plural", "negative polarity plural", "negative polarity plural item", "usually in the negative plural", "usually used in the negative plural"}, display = "chiefly in the [[Appendix:Glossary#negative polarity item|negative]] [[Appendix:Glossary#plural|plural]]", pos_categories = "negative polarity items", } labels["chiefly in the positive"] = { aliases = {"chiefly used in the positive", "positive polarity", "positive polarity item", "usually in the positive", "usually used in the positive"}, glossary = "positive polarity item", -- pos_categories = {"positive polarity items"}, } labels["chiefly in the positive plural"] = { aliases = {"chiefly used in the positive plural", "positive polarity plural", "positive polarity plural item", "usually in the positive plural", "usually used in the positive plural"}, display = "chiefly in the [[Appendix:Glossary#positive polarity item|positive]] [[Appendix:Glossary#plural|plural]]", -- pos_categories = "positive polarity items", } labels["balaki"] = { --TLCHANGE aliases = {"neuter"}, --TLCHANGE glossary = true, } -- British English ("ise") labels["nominalised"] = { aliases = {"nominalisation", "substantivised", "substantivisation"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } -- American English ("ize") labels["nominalized"] = { aliases = {"nominalization", "substantivized", "substantivization"}, glossary = "nominalization", pos_categories = "nominalized adjectives", } labels["not comparable"] = { aliases = {"notcomp", "incomparable", "uncomparable"}, glossary = "uncomparable", } labels["onomatopoeia"] = { glossary = true, pos_categories = "onomatopoeias", } labels["ordinal"] = { aliases = {"ordinal number", "ordinal numeral"}, display = "[[ordinal number]]", pos_categories = "ordinal numbers", } labels["partitive verb"] = { display = "[[Appendix:Glossary#transitive|transitive]], usually [[Appendix:Finnic telic and atelic verbs|atelic]]", pos_categories = "transitive verbs", -- = "partitive verbs", } labels["perfect"] = { glossary = true, } labels["pandiwari"] = { --TLCHANGE aliases = {"participle"}, --TLCHANGE glossary = true, } labels["balintiyak"] = { --TLCHANGE aliases = {"passive", "in passive", "in the passive", "in passive voice", "in the passive voice", "passive voice"}, --TLCHANGE glossary = true, } labels["perfect"] = { glossary = true, } labels["perfective"] = { glossary = true, pos_categories = "perfective verbs", } labels["plural only"] = { aliases = {"plural-only", "pluralonly", "plurale tantum"}, display = "[[Appendix:Glossary#plural|plural]] only", pos_categories = "pluralia tantum", } labels["possessional adjective"] = { aliases = {"possessional", "possessional adjectives"}, display = "possessional", glossary = true, pos_categories = "possessional adjectives", } labels["possessive pronoun"] = { aliases = {"possessive determiner"}, display = "possessive", glossary = "possessive determiner", pos_categories = "possessive pronouns", } labels["postpositive"] = { glossary = true, } labels["predicative"] = { glossary = true, } labels["predicatively"] = { glossary = "predicative", } labels["prepositive"] = { glossary = true, } labels["prescriptive"] = { aliases = {"normative", "prescribed"}, glossary = true, } labels["privative"] = { pos_categories = "privative verbs", } labels["procedure word"] = { display = "[[procedure word]]", } labels["productive"] = { glossary = true, } -- TODO: This label is probably inappropriate for many languages labels["pronominal"] = { glossary = "pronominal verb", } labels["pronunciation spelling"] = { glossary = true, } labels["pro-verb"] = { Wikipedia = true, } labels["reciprocal"] = { glossary = true, pos_categories = "reciprocal verbs", } labels["reflexive"] = { glossary = true, pos_categories = "reflexive verbs", } labels["reflexive pronoun"] = { glossary = "reflexive", pos_categories = "reflexive pronouns", } labels["relational"] = { glossary = true, pos_categories = "relational adjectives", } labels["repetitive"] = { pos_categories = "repetitive verbs", } labels["respelling"] = { glossary = true, } labels["reversative"] = { pos_categories = "reversative verbs", } labels["rhetorical question"] = { glossary = true, pos_categories = "rhetorical questions", } labels["rhotic"] = { glossary = true, } labels["saturative"] = { aliases = {"sative"}, pos_categories = "saturative verbs", } labels["semelfactive"] = { glossary = true, pos_categories = "semelfactive verbs", } labels["sentence adverb"] = { glossary = true, pos_categories = "sentence adverbs", } labels["set phrase"] = { display = "[[set phrase]]", } labels["simile"] = { glossary = true, pos_categories = "similes", } labels["singular only"] = { aliases = {"singular-only", "singulare tantum", "no plural"}, display = "singular only", pos_categories = "singularia tantum", } labels["snowclone"] = { glossary = true, pos_categories = "snowclones", } labels["stative"] = { aliases = {"stative verb"}, glossary = true, pos_categories = "stative verbs", } labels["strictly"] = { aliases = {"strict", "narrowly", "narrow"}, glossary = true, } labels["substantive"] = { glossary = true, track = true, } labels["terminative"] = { pos_categories = "terminative verbs", } labels["palipat"] = { --TLCHANGE aliases = {"transitive"}, --TLCHANGE glossary = true, pos_categories = "na pandiwang palipat", --TLCHANGE "transitive verbs" } labels["transmission error"] = { Wiktionary = true, } labels["unaccusative"] = { aliases = {"not accusative"}, Wikipedia = "Unaccusative verb", } labels["di-pamilang"] = { --TLCHANGE aliases = {"not countable", "uncountable", "di-nabibilang", "di nabibilang"}, --TLCHANGE glossary = true, pos_categories = "na pangngalang di-pamilang", --TLCHANGE "uncountable nouns", } labels["unergative"] = { aliases = {"not ergative"}, Wikipedia = "Unergative verb", } labels["UPA"] = { aliases = {"Uralic Phonetic Alphabet"}, Wikipedia = "Uralic Phonetic Alphabet", plain_categories = "UPA symbols", } labels["usually plural"] = { aliases = {"usually in the plural", "usually in plural"}, display = "usually in the [[Appendix:Glossary#plural|plural]]", deprecated = true, } -- Usage labels labels["4chan"] = { aliases = {"4chan slang"}, display = "[[w:4chan|4chan]] {{glossary|slang}}", pos_categories = "4chan slang", } labels["4chan lgbt"] = { aliases = {"tttt"}, display = "[[w:4chan|4chan]] /lgbt/ {{glossary|slang}}", pos_categories = "4chan /lgbt/ slang", } labels["ACG"] = { display = "[[ACG]]", -- see also "fandom slang" pos_categories = "fandom slang", } labels["endearing"] = { aliases = {"affectionate"}, display = "[[endearing]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "endearing terms", } labels["endearing form"] = { aliases = {"affectionate form"}, display = "[[endearing]]", pos_categories = "endearing forms", } labels["pre-classical"] = { aliases = {"Pre-classical", "pre-Classical", "Pre-Classical", "Preclassical", "preclassical", "ante-classical", "Ante-classical", "ante-Classical", "Ante-Classical", "Anteclassical", "anteclassical"}, display = "pre-Classical", regional_categories = true, } labels["anti-LGBTQ slur"] = { -- don't add aliases "homophobia" or "transphobia" because these could be topical categories aliases = {"homophobic", "transphobic"}, display = "anti-[[LGBTQ]] [[slur]]", pos_categories = "anti-LGBTQ slurs", } labels["makaluma"] = { --TLCHANGE aliases = {"antiquated", "archaic"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong makaluma"] = { --TLCHANGE aliases = {"archaic form"}, --TLCHANGE glossary = "makaluma", --TLCHANGE "archaic", display = "makaluma", --TLCHANGE "archaic", pos_categories = "na anyong makaluma", --TLCHANGE "archaic forms", } labels["Australian slang"] = { display = "[[Australian]] {{glossary|slang}}", regional_categories = "Australian", plain_categories = true, } labels["avoidance"] = { glossary = true, } labels["back slang"] = { aliases = {"backslang", "back-slang"}, glossary = "backslang", pos_categories = true, } labels["Bargoens"] = { Wikipedia = true, plain_categories = true, } labels["Braille"] = { Wikipedia = true, } labels["British slang"] = { aliases = {"UK slang"}, display = "[[British]] {{glossary|slang}}", plain_categories = true, } labels["Cambridge University slang"] = { aliases = {"University of Cambridge slang", "Cantab slang"}, display = "[[w:University of Cambridge|Cambridge University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["cant"] = { aliases = {"argot", "cryptolect"}, display = "[[cant]]", pos_categories = true, } labels["capitalized"] = { aliases = {"capitalised"}, display = "[[capitalisation|capitalized]]", } labels["Castilianism"] = { aliases = {"Hispanicism"}, display = "[[Castilianism]]", } labels["childish"] = { aliases = {"baby talk", "child language", "infantile", "puerile"}, display = "[[childish]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "childish terms", } labels["chu Nom"] = { display = "[[Vietnamese]] [[chữ Nôm]]", plain_categories = "Vietnamese Han tu", } labels["Cockney rhyming slang"] = { display = "[[Cockney rhyming slang]]", plain_categories = true, } labels["kolokyal"] = { --TLCHANGE aliases = {"colloquial", "colloquially"}, --TLCHANGE glossary = true, pos_categories = "na salitang kolokyal" --TLCHANGE "colloquialisms", } -- FIXME! The following two are apparently for Persian but probably don't belong in this file. labels["colloquial-um"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence um", } labels["colloquial-un"] = { glossary = "colloquial", pos_categories = "colloquialisms containing sequence un", } labels["corporate jargon"] = { aliases = {"business jargon", "corporatese", "businessese", "corporate speak", "business speak"}, display = "[[corporate]] [[jargon]]", pos_categories = true, } labels["costermongers"] = { aliases = {"coster", "costers", "costermonger", "costermongers back slang", "costermongers' back slang"}, display = "[[Appendix:Costermongers' back slang|costermongers]]", plain_categories = "Costermongers' back slang", } labels["criminal slang"] = { aliases = {"thieves' cant", "Thieves' Cant", "thieves cant", "thieves'", "thieves", "thieves' cant"}, -- Thieves' Cant is English-only, so defined in the English submodule; if other languages try to use it, it's just criminal slang display = "[[criminal]] {{glossary|slang}}", topical_categories = "Crime", pos_categories = true, } labels["may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned", "dated"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang may kalumaan", --TLCHANGE "dated terms", } labels["anyong may kalumaan"] = { --TLCHANGE aliases = {"old-fashioned form", "dated form"}, --TLCHANGE glossary = "may kalumaan", --TLCHANGE "dated", display = "may kalumaan", --TLCHANGE "dated", pos_categories = "na anyong may kalumaan", --TLCHANGE "dated forms", } -- combine with previous? labels["dated sense"] = { glossary = "dated", sense_categories = "dated", } labels["mapanlait"] = { --TLCHANGE aliases = {"pejorative", "derogative", "disparaging", "derogatory"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang mapanlait", --TLCHANGE "derogatory terms", } labels["anyong mapanlait"] = { --TLCHANGE aliases = {"pejorative form", "derogative form", "disparaging form", "derogatory form"}, --TLCHANGE display = "[[mapanlait]]", --TLCHANGE "[[derogatory]]", pos_categories = "na anyong mapanlait", --TLCHANGE "derogatory forms", } labels["dialect"] = {-- separated from "dialectal" so e.g. "obsolete|outside|the|_|dialect|of..." displays right glossary = "dayalekto", pos_categories = "dialectal terms", } labels["dialectal"] = { glossary = true, display = "dayalekto", -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "dialectal terms", } labels["dialectal form"] = { glossary = "dialectal", display = "dayalekto", pos_categories = "dialectal forms", } labels["dialects"] = {-- separated from "dialectal" so e.g. "obsolete|outside|dialects" displays right glossary = "dialectal", pos_categories = "dialectal terms", } labels["dis legomenon"] = { display = "[[dis legomenon]]", pos_categories = "dis legomena", } labels["dismissal"] = { display = "[[dismissal]]", pos_categories = "dismissals", } labels["drag slang"] = { aliases = {"Drag Race slang"}, display = "[[drag]] {{glossary|slang}}", pos_categories = "drag slang", } labels["ecclesiastical"] = { display = "[[ecclesiastical#Adjective|ecclesiastical]]", pos_categories = "ecclesiastical terms", } labels["ethnic slur"] = { aliases = {"racial slur"}, display = "[[ethnic]] [[slur]]", pos_categories = "ethnic slurs", } labels["euphemistic"] = { aliases = {"euphemism"}, glossary = "euphemism", pos_categories = "euphemisms", } labels["eye dialect"] = { display = "[[eye dialect]]", pos_categories = true, } labels["familiar"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "familiar terms", } labels["fandom slang"] = { aliases = {"fandom"}, display = "[[fandom]] {{glossary|slang}}", pos_categories = true, } labels["figurative"] = { aliases = {"metaphorical", "metaphoric", "metaphor"}, glossary = "figurative", } labels["figuratively"] = { aliases = {"metaphorically"}, glossary = "figurative", } labels["folk songs"] = { aliases = {"folksongs", "used in folk songs", "used in folksongs"}, pos_categories = "folk poetic terms", display = "used in [[folk song]]s", } labels["folk tales"] = { aliases = {"folktales", "used in folk tales", "used in folktales"}, pos_categories = "folk poetic terms", display = "used in [[folk tale]]s", } labels["folk poetic"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "folk poetic terms", } labels["pormal"] = { --TLCHANGE aliases = {"formal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "na salitang pormal",--TLCHANGE "formal terms", } labels["anyong pormal"] = { --TLCHANGE aliases = {"formal form"}, --TLCHANGE glossary = "pormal", --TLCHANGE "formal" display = "pormal", --TLCHANGE "formal", pos_categories = "na anyong pormal", --TLCHANGE "formal forms", } labels["gay slang"] = { display = "[[gay]] {{glossary|slang}}", pos_categories = true, } labels["gender critical slang"] = { aliases = {"gender-critical slang", "GC slang", "TERF slang"}, display = "[[gender-critical]] {{glossary|slang}}", pos_categories = "gender-critical slang", } labels["gender-neutral"] = { glossary = "gender-neutral", pos_categories = "gender-neutral terms", } labels["graffiti slang"] = { display = "[[graffiti#Noun|graffiti]] {{glossary|slang}}", pos_categories = true, } labels["genericized trademark"] = { aliases = {"generic trademark", "proprietary eponym"}, display = "[[genericized trademark]]", pos_categories = "genericized trademarks", } labels["ghost word"] = { aliases = {"ghost"}, display = "ghost word", glossary = true, pos_categories = "ghost words", } labels["hapax legomenon"] = { aliases = {"hapax"}, display = "hapax legomenon", glossary = true, pos_categories = "hapax legomena", } labels["higher register"] = { aliases = {"high register", "elevated register", "elevated"}, glossary = "higher register", pos_categories = "higher register terms", } labels["makasaysayan"] = { --TLCHANGE aliases = {"historic", "historical"}, --TLCHANGE glossary = true, sense_categories = true, } labels["non-native speakers"] = {-- language-agnostic version aliases = {"NNS"}, display = "[[non-native speaker]]s", -- so preceded by "used by", "error by children and", etc? or reword? regional_categories = {"Non-native speakers'"}, } -- used exclusively by languages that use the "Jpan" script code labels["historical hiragana"] = { pos_categories = true, } -- used exclusively by languages that use the "Jpan" script code labels["historical katakana"] = { pos_categories = true, } -- applies to Japanese and Korean, etc., please do not confuse with "polite" labels["honorific"] = { Wikipedia = "Honorifics (linguistics)", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "honorific terms", } -- for Ancient Greek labels["Homeric epithet"] = { display = "[[Homeric Greek|Homeric]] [[w:Epithets in Homer|epithet]]", omit_postComma = true, plain_categories = "Epic Greek", } -- applies to Japanese and Korean, etc. labels["humble"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[humble]]", pos_categories = "humble terms", } -- for Akkadian labels["in hendiadys"] = { aliases = {"hendiadys"}, display = "in {{w|hendiadys}}", pos_categories = "terms used in hendiadys", } labels["humorous"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp; NB and cf a similar "jocular" label further up on this page aliases = {"humorously", "jocular"}, glossary = true, pos_categories = "humorous terms", } labels["hyperbolic"] = { aliases = {"hyperbole"}, glossary = true, pos_categories = "hyperboles", } labels["hypercorrect"] = { glossary = true, pos_categories = "hypercorrections", } labels["hyperforeign"] = { glossary = true, pos_categories = "hyperforeign terms", } labels["imperial"] = { aliases = {"emperor", "empress"}, pos_categories = "royal terms", } labels["incel slang"] = { display = "[[incel]] {{glossary|slang}}", pos_categories = true, } labels["impormal"] = { --TLCHANGE aliases = {"informally", "not formal", "informal"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang impormal", --TLCHANGE "informal terms", } labels["anyong impormal"] = { --TLCHANGE aliases = {"informal form"}, --TLCHANGE glossary = "impormal", --TLCHANGE "informal", display = "impormal", --TLCHANGE "informal", pos_categories = "na anyong impormal" --TLCHANGE "informal forms", } labels["Internet slang"] = { aliases = {"internet slang"}, display = "[[Internet]] {{glossary|slang}}", pos_categories = "internet slang", } labels["IRC"] = { display = "[[IRC]]", pos_categories = "internet slang", } labels["ironic"] = { display = "[[irony|ironic]]", } -- Not the same as "journalism", which maps to a topical category (e.g. [[:Category:en:Journalism]], instead of [[:Category:English journalistic terms]]). labels["journalistic"] = { aliases = {"journalese"}, display = "[[journalistic]]", pos_categories = "journalistic terms", } labels["leet"] = { aliases = {"leetspeak"}, display = "[[leetspeak]]", pos_categories = "leetspeak", } labels["LGBTQ slang"] = { aliases = {"LGBT slang"}, display = "[[LGBTQ]] {{glossary|slang}}", pos_categories = true, } labels["literal"] = { glossary = "literally", } labels["literally"] = { glossary = "literally", } labels["pampanitikan"] = { --TLCHANGE -- should be "terms with X senses", leaving "X terms" to the term-context temp aliases = {"bookish", "literary"}, --TLCHANGE glossary = true, pos_categories = "na salitang pampanitikan", --TLCHANGE "literary terms", } labels["anyong pampanitikan"] = { --TLCHANGE aliases = {"bookish form", "literary form"}, --TLCHANGE glossary = "pampanitikan", --TLCHANGE "literary", display = "pampanitikan", --TLCHANGE "literary", pos_categories = "na anyong pampanitikan", --TLCHANGE "literary forms", } --see also "short scale" labels["long scale"] = { display = "[[w:Long and short scales|long scale]]" } labels["loosely"] = { aliases = {"loose", "broadly", "broad"}, glossary = true, } labels["Lubunyaca"] = { display = "[[Lubunyaca]]", pos_categories = true, } labels["medical slang"] = { display = "[[medical]] {{glossary|slang}}", pos_categories = true, } -- for Awetí, Karajá, etc., where men and women use different words labels["men's speech"] = { aliases = {"male speech"}, glossary = "men's speech", pos_categories = "men's speech terms", } labels["metonymic"] = { aliases = {"metonymically", "metonymy", "metonym"}, glossary = true, pos_categories = "metonyms", } labels["military slang"] = { display = "[[military]] {{glossary|slang}}", pos_categories = true, } labels["minced oath"] = { display = "[[minced oath]]", pos_categories = "minced oaths", } labels["multiplicative"] = { aliases = {"multiplicative number", "multiplicative numeral"}, display = "[[multiplicative number]]", pos_categories = "multiplicative numbers", } labels["multiplicity slang"] = { display = "{{l|en|multiplicity|id=multiple personalities}} {{glossary|slang}}", pos_categories = true, } labels["naval slang"] = { aliases = {"navy slang"}, display = "[[naval]] {{glossary|slang}}", pos_categories = true, } labels["neolohismo"] = { --TLCHANGE aliases = {"neologistic", "neologism"}, --TLCHANGE glossary = true, pos_categories = "na neolohismo", --TLCHANGE "neologisms", } labels["neopronoun"] = { display = "[[neopronoun]]", -- pos_categories = {"neopronouns"}, } labels["no longer productive"] = { aliases = {"non-productive"}, display = "no longer [[Appendix:Glossary#productive|productive]]", } labels["nonce word"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"nonce"}, glossary = true, pos_categories = "nonce terms", } labels["di-pamantayan"] = { --TLCHANGE aliases = {"non-standard", "substandard", "sub-standard", "nonstandard"}, --TLCHANGE glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "na salitang di-pamantayan", --TLCHANGE "nonstandard terms", } labels["anyong di-pamantayan"] = { --TLCHANGE aliases = {"non-standard form", "substandard form", "sub-standard form", "nonstandard form"}, --TLCHANGE glossary = "di-pamantayan", --TLCHANGE "nonstandard", display = "di-pamantayan", --TLCHANGE "nonstandard", pos_categories = "na anyong di-pamantayan", --TLCHANGE "nonstandard forms", } labels["numismatic slang"] = { display = "[[numismatic]] {{glossary|slang}}", pos_categories = true, } labels["lipas na"] = { --TLCHANGE aliases = {"obsolete"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong lipas na"] = { --TLCHANGE aliases = {"obsolete form"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", display = "lipas na", --TLCHANGE "obsolete", pos_categories = "na anyong lipas na", --TLCHANGE "obsolete forms", } labels["salitang lipas na"] = { --TLCHANGE aliases = {"obsolete term"}, --TLCHANGE glossary = "lipas na", --TLCHANGE "obsolete", -- combine with previous two, q.v. pos_categories = "na salitang lipas na", --TLCHANGE "obsolete terms", } labels["offensive"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp pos_categories = "offensive terms", } labels["officialese"] = { aliases = {"bureaucratic"}, display = "[[officialese]]", pos_categories = "officialese terms", } labels["Oxbridge slang"] = { display = "[[w:Oxbridge|Oxbridge]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = {"Cambridge University slang", "Oxford University slang"}, } labels["Oxford University slang"] = { aliases = {"University of Oxford slang", "Oxon slang"}, display = "[[w:University of Oxford|Oxford University]] {{glossary|slang}}", topical_categories = "Universities", plain_categories = true, } labels["poetic"] = { aliases = {"poi"}, -- Only used in Ancient Greek as a holdover from [[Module:grc:Dialects]]. -- should be "terms with X senses", leaving "X terms" to the term-context temp glossary = true, pos_categories = "poetic terms", } labels["poetic form"] = { glossary = "poetic", display = "poetic", pos_categories = "poetic forms", } labels["polite"] = { glossary = true, pos_categories = "polite terms", } labels["post-classical"] = { aliases = {"Post-classical", "post-Classical", "Post-Classical", "Postclassical", "postclassical"}, display = "post-Classical", regional_categories = true, } labels["prison slang"] = { display = "[[prison]] {{glossary|slang}}", pos_categories = true, } labels["proscribed"] = { glossary = true, pos_categories = "proscribed terms", } labels["purista"] = { --TLCHANGE aliases = {"purism", "puristic"}, --TLCHANGE Wikipedia = "Linguistic purism", pos_categories = "na salitang purista", --TLCHANGE "puristic terms", } labels["radio slang"] = { display = "[[radio]] {{glossary|slang}}", pos_categories = true, } labels["Reddit slang"] = { display = "[[Reddit]] {{glossary|slang}}", pos_categories = true, } labels["rare"] = { aliases = {"rare sense"}, display = "bihira", glossary = true, sense_categories = true, } labels["rare form"] = { glossary = "rare", display = "rare", pos_categories = "rare forms", } labels["rare term"] = { display = "rare", -- see comments about "obsolete" pos_categories = "rare terms", } -- cf Cockney rhyming slang labels["rhyming slang"] = { display = "[[rhyming slang]]", pos_categories = true, } labels["religious slur"] = { aliases = {"sectarian slur"}, display = "[[religious]] [[slur]]", pos_categories = "religious slurs", } labels["retronym"] = { glossary = true, pos_categories = "retronyms", } labels["reverential"] = { -- should be "terms with X senses", leaving "X terms" to the term-context temp? display = "[[reverential]]", pos_categories = "reverential terms", } labels["royal"] = { aliases = {"regal"}, pos_categories = "royal terms", } labels["rustic"] = { glossary = true, -- should be "terms with X senses", leaving "X terms" to the term-context temp? aliases = {"rural"}, pos_categories = "rustic terms", } labels["sarcastic"] = { display = "[[sarcastic]]", pos_categories = "sarcastic terms", } labels["school slang"] = { aliases = {"public school slang"}, display = "[[school]] {{glossary|slang}}", pos_categories = true, } labels["self-deprecatory"] = { aliases = {"self-deprecating"}, display = "[[self-deprecatory]]", -- should be "terms with X senses", leaving "X terms" to the term-context temp? pos_categories = "self-deprecatory terms", } -- Swahili Sheng cant / argot -- should this be in a language-specific module? labels["Sheng"] = { Wikipedia = "Sheng slang", plain_categories = true, } labels["siglum"] = { aliases = {"sigla"}, glossary = true, pos_categories = "sigla", } --see also "long scale" labels["short scale"] = { display = "[[w:Long and short scales|short scale]]" } labels["balbal"] = { --TLCHANGE aliases = {"slang"}, --TLCHANGE glossary = true, pos_categories = "na salitang balbal", --TLCHANGE true, } labels["solemn"] = { glossary = true, pos_categories = "solemn terms", } labels["Stenoscript"] = { aliases = {"stenoscript"}, display = "[[Stenoscript]]", pos_categories = "Stenoscript abbreviations", } labels["pinalitang pagbaybay"] = { --TLCHANGE aliases = {"superseded"}, --TLCHANGE glossary = true } labels["swear word"] = { aliases = {"profanity", "expletive"}, pos_categories = "swear words", } labels["syncopated"] = { aliases = {"syncope", "syncopic", "syncopation"}, glossary = true, pos_categories = "syncopic forms", } labels["synecdochically"] = { aliases = {"synecdochic", "synecdochical", "synecdoche"}, glossary = true, pos_categories = "synecdoches", } labels["technical"] = { display = "[[technical]]", pos_categories = "technical terms", } labels["telic"] = { glossary = true, } labels["text messaging"] = { aliases = {"texting"}, display = "[[text messaging]]", pos_categories = "text messaging slang", } labels["tone indicator"] = { display = "[[tone indicator]]", pos_categories = "tone indicators", } labels["trademark"] = { display = "[[trademark]]", pos_categories = "trademarks", } labels["transferred sense"] = { glossary = true, pos_categories = "terms with transferred senses", } labels["transferred senses"] = { display = "[[transferred sense#English|transferred senses]]", pos_categories = "terms with transferred senses", } labels["transgender slang"] = { aliases = {"trans slang"}, display = "[[transgender]] {{glossary|slang}}", pos_categories = true, } labels["Twitch-speak"] = { display = "[[Twitch-speak]]", pos_categories = true, } labels["uds."] = { display = "[[Appendix:Spanish pronouns#Ustedes and vosotros|used formally in Spain]]", } labels["di-karaniwan"] = { aliases = {"uncommon"}, --TLCHANGE glossary = true, sense_categories = true, } labels["anyong di-karaniwan"] = { --TLCHANGE aliases = {"uncommon form"}, --TLCHANGE glossary = "di-karaniwan", --TLCHANGE "uncommon", display = "di-karaniwan", --TLCHANGE "uncommon", pos_categories = "na anyong di-karaniwan", --TLCHANGE "uncommon forms", } labels["university slang"] = { aliases = {"college slang", "student slang"}, display = "[[university]] {{glossary|slang}}", topical_categories = "Universities", pos_categories = "student slang", } labels["verlan"] = { glossary = true, plain_categories = true, } labels["very rare"] = { display = "very [[Appendix:Glossary#rare|rare]]", sense_categories = "rare", } labels["bulgar"] = { --TLCHANGE aliases = {"coarse", "obscene", "profane", "vulgar"}, --TLCHANGE glossary = true, pos_categories = "na salitang bulgar", --TLCHANGE "vulgarities", } labels["vesre"] = { Wikipedia = true, plain_categories = true, } labels["youth slang"] = { display = "[[youth]] {{glossary|slang}}", pos_categories = "slang", } labels["2channel slang"] = { aliases = {"2channel", "2ch slang"}, display ="[[w:2channel|2channel]] {{glossary|slang}}", pos_categories = {"internet slang" , "2channel slang"}, } -- for Awetí, Karajá, etc., where men & women use different words labels["women's speech"] = { aliases = {"female speech"}, glossary = "women's speech", pos_categories = "women's speech terms", } -- terms applying to Old Norse skaldic poetry labels["kenning"] = { aliases = {"Kenning"}, Wikipedia = "Kenning", pos_categories = "kennings", } labels["heiti"] = { aliases = {"Heiti"}, Wikipedia = "Heiti", pos_categories = true, } return require("Module:labels").finalize_data(labels) 5rxzymch3dbyr0puvnmpzee54aiy3ti Module:rhymes 828 31194 178193 176616 2026-10-15T02:04:13Z GinawaSaHapon 3989 178193 Scribunto text/plain local export = {} local force_cat = false -- for testing local decorations_module = "Module:decorations" local IPA_module = "Module:IPA" local parameters_module = "Module:parameters" local parameter_utilities_module = "Module:parameter utilities" local rhymes_styles_css_module = "Module:rhymes/styles.css" local TemplateStyles_module = "Module:TemplateStyles" local utilities_module = "Module:utilities" local rhymes_data = require("Module:rhymes/data") local concat = table.concat local insert = table.insert local function track(page) require("Module:debug/track")("rhymes/" .. page) return true end local function tag_rhyme(rhyme, lang) local formatted_rhyme, cats, err formatted_rhyme, cats, err = require(IPA_module).format_IPA(lang, rhyme, "raw") return formatted_rhyme, cats, err end local function make_rhyme_link(lang, link_rhyme, display_rhyme) local retval, cats local prefix = "[[Rhymes:" if rhymes_data.link_to_category_langs[lang:getCode()] then prefix = "[[:Category:Rhymes:" end if not link_rhyme then retval = concat{prefix, lang:getCanonicalName(), "|", lang:getCanonicalName(), "]]"} cats = {} else local formatted_rhyme, err formatted_rhyme, cats, err = tag_rhyme(display_rhyme or link_rhyme, lang) retval = concat{prefix, lang:getCanonicalName(), "/", link_rhyme, "|", formatted_rhyme, "]]", err} end return retval, cats end --[==[ Implementation of {{tl|rhymes row}}. ]==] function export.show_row(frame) local args = require(parameters_module).process( frame.getParent and frame:getParent().args or frame, { [1] = {required = true, type = "full language"}, [2] = {required = true}, [3] = {}, } ) if not args[1] then return "[[Rhymes:English/aɪmz|<span class=\"IPA\">-aɪmz</span>]]" end -- Discard cleanup categories from make_rhyme_link(). return (make_rhyme_link(args[1], args[2], "-" .. args[2])) .. (args[3] and (" (''" .. args[3] .. "'')") or "") end do local function add_syllable_categories(categories, lang, rhyme, num_syl) local prefix = "Rhymes:" .. lang .. "/" .. rhyme insert(categories, prefix) if num_syl then for _, n in ipairs(num_syl) do local c if n > 1 then c = prefix .. "/" .. n .. " syllables" else c = prefix .. "/1 syllable" end insert(categories, c) end end end --[==[ Meant to be called from a module. `data` is a table containing the following fields: * `lang`: language object for the rhymes; * `rhymes`: a list of rhymes, each described by an object which specifies the rhyme, optional number of syllables, and optional decoration fields: ** `rhyme`: the rhyme itself; ** `num_syl`: {nil} or a list of numbers, specifying the number of syllables of the word with this rhyme; optional and currently used only for categorization; if omitted, defaults to the top-level `num_syl`; ** `separator`: {nil} or the string used to separate this rhyme from the preceding one when displayed; defaults to the top-level `separator`; ** `q`: {nil} or a list of left regular qualifier strings, displayed directly before the rhyme in question; ** `qq`: {nil} or a list of right regular qualifier strings, displayed directly after the rhyme in question; ** `a`: {nil} or a list of left accent qualifier strings (see [[Module:accent qualifier]]), displayed directly before the rhyme in question; ** `aa`: {nil} or a list of right accent qualifier strings, displayed directly after the rhyme in question; ** `refs`: {nil} or a list of references or reference specs to add directly after the rhyme; the value of a list item is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" /></nowiki>}}) and/or `group` (the group of the reference, as in {{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference appropriately and insert a footnote number that hyperlinks to the actual reference, located in the {{cd|<nowiki><references /></nowiki>}} section; ** `nocat`: if {true}, suppress categorization for this rhyme only; * `num_syl`: {nil} or a list of numbers, specifying the number of syllables for all rhymes; optional and currently used only for categorization; overridable at the individual rhyme level; * `separator`: {nil} or a string, specifying the separator displayed before all rhymes but the first; by default, {", "}; overridable at the individual rhyme level; * `q`: {nil} or a list of overall left regular qualifier strings, displayed before the initial caption; * `qq`: {nil} or a list of overall right regular qualifier strings, displayed after all rhymes; * `a`: {nil} or a list of overall left accent qualifier strings (see [[Module:accent qualifier]]), displayed before the initial caption; * `aa`: {nil} or a list of right accent qualifier strings, displayed after all rhymes; * `sort`: {nil} or sort key; * `caption`: {nil} or string specifying the caption to use, in place of {"Rhymes"}; a colon and space is automatically added after the caption; * `nocaption`: if {true}, suppress the caption display; * `nocat`: if {true}, suppress categorization; * `force_cat`: if {true}, force categorization even on non-mainspace pages. If both regular and accent qualifiers on the same side and at the same level are specified, the accent qualifiers precede the regular qualifiers on both left and right. '''WARNING''': Destructively modifies the objects inside the `rhymes` field. Note that the number of syllables is currently used only for categorization; if present, an extra category will be added such as [[:Category:Rhymes:Italian/ino/3 syllables]] in addition to [[:Category:Rhymes:Italian/ino]]. ]==] function export.format_rhymes(data) local langname = data.lang:getFullName() local parts = {} local categories = {} local overall_sep = data.separator or ", " for i, r in ipairs(data.rhymes) do local rhyme = r.rhyme local link, link_cats = make_rhyme_link(data.lang, rhyme, "-" .. rhyme) if not r.nocat and not data.nocat then for _, cat in ipairs(link_cats) do insert(categories, cat) end end if r.qualifiers then -- FIXME; Added 2026-09-18; remove in a month error("qualifiers= not allowed here; use q=") end if r.q and r.q[1] or r.qq and r.qq[1] or r.a and r.a[1] or r.aa and r.aa[1] or r.refs and r.refs[1] then link = require(decorations_module).format_decorations { lang = data.lang, text = link, q = r.q, qq = r.qq, a = r.a, aa = r.aa, refs = r.refs, } end insert(parts, r.separator or i > 1 and overall_sep or "") insert(parts, link) if not r.nocat and not data.nocat then add_syllable_categories(categories, langname, rhyme, r.num_syl or data.num_syl) end end local text = concat(parts) if not data.nocaption then text = (data.caption or "Rhymes") .. ": " .. text end if data.qualifiers then -- FIXME; Added 2026-09-18; remove in a month error("overall qualifiers= not allowed here; use q=") end if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then text = require(decorations_module).format_decorations { lang = data.lang, text = text, q = data.q, qq = data.qq, a = data.a, aa = data.aa, } end if categories[1] then local cat_text = require(utilities_module).format_categories(categories, data.lang, data.sort, nil, force_cat or data.force_cat) text = text .. cat_text end return text end end --[==[ Implementation of {{tl|rhymes}}. ]==] function export.show(frame) local parent_args = frame:getParent().args local compat = parent_args.lang local offset = compat and 0 or 1 local lang_param = compat and "lang" or 1 local plain = {} local boolean = {type = "boolean"} local params = { [lang_param] = {required = true, type = "language", default = "en"}, [1 + offset] = {list = true, required = true, disallow_holes = true, default = "aɪmz"}, ["caption"] = plain, ["nocaption"] = boolean, ["nocat"] = boolean, ["sort"] = plain, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { { param = "s", item_dest = "num_syl", separate_no_index = true, type = "number", sublist = true, }, {group = {"q", "a", "ref"}}, } local rhymes, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 1 + offset, term_dest = "rhyme", track_module = "rhymes", } local lang = args[lang_param] local data = { lang = lang, rhymes = rhymes, num_syl = args.s.default, caption = args.caption, nocaption = args.nocaption, nocat = args.nocat, sort = args.sort, q = args.q.default, qq = args.qq.default, a = args.a.default, aa = args.aa.default, } return export.format_rhymes(data) end --[==[ Implementation of {{tl|rhymes nav}}. ]==] function export.show_nav(frame) local args = require(parameters_module).process( frame:getParent().args, { [1] = {required = true, type = "full language", default = "und"}, [2] = {list = true, allow_holes = true}, ["nocat"] = {type = "boolean"}, } ) local lang = args[1] local langname = lang:getCanonicalName() local parts = args[2] -- Create steps -- FIXME: We should probably use format_categories() in [[Module:utilities]] rather than constructing categories -- manually. local categories = {} -- Here and below, we ignore any cleanup categories coming out of make_rhyme_link() by adding an extra set of parens -- around the call to make_rhyme_link() to cause the second argument (the categories) to be ignored. {{rhymes nav}} -- is run on a rhymes page so it's not clear we want the page to be added to any such categories, if they exist. local steps = {"[[Wiktionary:Rhymes|Rhymes]]", (make_rhyme_link(lang))} if #parts > 0 then local last = parts[#parts] parts[#parts] = nil local prefix = "" for i, part in ipairs(parts) do prefix = prefix .. part parts[i] = prefix end for _, part in ipairs(parts) do insert(steps, (make_rhyme_link(lang, part .. "-", "-" .. part .. "-"))) end if last == "-" then insert(steps, (make_rhyme_link(lang, prefix, "-" .. prefix))) insert(categories, "[[Category:" .. langname .. " rhymes" .. (prefix == "" and "" or "/" .. prefix .. "-") .. "| ]]") elseif mw.title.getCurrentTitle().text == langname .. "/" .. prefix .. last .. "-" then -- DO NOT replace with mw.loadData("Module:headword/data").pagename as we need the root portion insert(steps, (make_rhyme_link(lang, prefix .. last .. "-", "-" .. prefix .. last .. "-"))) insert(categories, "[[Category:" .. langname .. " rhymes/" .. prefix .. last .. "-|-]]") else insert(steps, (make_rhyme_link(lang, prefix .. last, "-" .. prefix .. last))) insert(categories, "[[Category:" .. langname .. " rhymes" .. (prefix == "" and "" or "/" .. prefix .. "-") .. "|" .. last .. "]]") end elseif lang:getCode() ~= "und" then insert(categories, "[[Category:" .. langname .. " rhymes| ]]") end if mw.title.getCurrentTitle().nsText == "Rhymes" then frame:callParserFunction("DISPLAYTITLE", mw.title.getCurrentTitle().fullText:gsub( "/(.+)$", function (rhyme) return "/" .. (tag_rhyme(rhyme, lang)) -- ignore cleanup categories end)) end local templateStyles = require(TemplateStyles_module)(rhymes_styles_css_module) local ol = mw.html.create("ol") for _, step in ipairs(steps) do ol:node(mw.html.create("li"):wikitext(step)) end local div = mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-rhymesBreadcrumbs") :node(ol) local formatted_cats = args.nocat and "" or concat(categories) return templateStyles .. tostring(div) .. formatted_cats end return export mzmyotezfj5p33gnhtgv9cibrfu6vyh 178195 178193 2026-10-15T02:08:18Z GinawaSaHapon 3989 178195 Scribunto text/plain local export = {} local force_cat = false -- for testing local decorations_module = "Module:decorations" local IPA_module = "Module:IPA" local parameters_module = "Module:parameters" local parameter_utilities_module = "Module:parameter utilities" local rhymes_styles_css_module = "Module:rhymes/styles.css" local TemplateStyles_module = "Module:TemplateStyles" local utilities_module = "Module:utilities" local rhymes_data = require("Module:rhymes/data") local concat = table.concat local insert = table.insert local function track(page) require("Module:debug/track")("rhymes/" .. page) return true end local function tag_rhyme(rhyme, lang) local formatted_rhyme, cats, err formatted_rhyme, cats, err = require(IPA_module).format_IPA(lang, rhyme, "raw") return formatted_rhyme, cats, err end local function make_rhyme_link(lang, link_rhyme, display_rhyme) local retval, cats local prefix = "[[Kasingtunog:" if rhymes_data.link_to_category_langs[lang:getCode()] then prefix = "[[:Kategorya:Kasingtunog:" end if not link_rhyme then retval = concat{prefix, lang:getCanonicalName(), "|", lang:getCanonicalName(), "]]"} cats = {} else local formatted_rhyme, err formatted_rhyme, cats, err = tag_rhyme(display_rhyme or link_rhyme, lang) retval = concat{prefix, lang:getCanonicalName(), "/", link_rhyme, "|", formatted_rhyme, "]]", err} end return retval, cats end --[==[ Implementation of {{tl|rhymes row}}. ]==] function export.show_row(frame) local args = require(parameters_module).process( frame.getParent and frame:getParent().args or frame, { [1] = {required = true, type = "full language"}, [2] = {required = true}, [3] = {}, } ) if not args[1] then return "[[Rhymes:English/aɪmz|<span class=\"IPA\">-aɪmz</span>]]" end -- Discard cleanup categories from make_rhyme_link(). return (make_rhyme_link(args[1], args[2], "-" .. args[2])) .. (args[3] and (" (''" .. args[3] .. "'')") or "") end do local function add_syllable_categories(categories, lang, rhyme, num_syl) local prefix = "Kasingtunog:" .. lang .. "/" .. rhyme insert(categories, prefix) if num_syl then for _, n in ipairs(num_syl) do local c if n > 1 then c = prefix .. "/" .. n .. " syllables" else c = prefix .. "/1 syllable" end insert(categories, c) end end end --[==[ Meant to be called from a module. `data` is a table containing the following fields: * `lang`: language object for the rhymes; * `rhymes`: a list of rhymes, each described by an object which specifies the rhyme, optional number of syllables, and optional decoration fields: ** `rhyme`: the rhyme itself; ** `num_syl`: {nil} or a list of numbers, specifying the number of syllables of the word with this rhyme; optional and currently used only for categorization; if omitted, defaults to the top-level `num_syl`; ** `separator`: {nil} or the string used to separate this rhyme from the preceding one when displayed; defaults to the top-level `separator`; ** `q`: {nil} or a list of left regular qualifier strings, displayed directly before the rhyme in question; ** `qq`: {nil} or a list of right regular qualifier strings, displayed directly after the rhyme in question; ** `a`: {nil} or a list of left accent qualifier strings (see [[Module:accent qualifier]]), displayed directly before the rhyme in question; ** `aa`: {nil} or a list of right accent qualifier strings, displayed directly after the rhyme in question; ** `refs`: {nil} or a list of references or reference specs to add directly after the rhyme; the value of a list item is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" /></nowiki>}}) and/or `group` (the group of the reference, as in {{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference appropriately and insert a footnote number that hyperlinks to the actual reference, located in the {{cd|<nowiki><references /></nowiki>}} section; ** `nocat`: if {true}, suppress categorization for this rhyme only; * `num_syl`: {nil} or a list of numbers, specifying the number of syllables for all rhymes; optional and currently used only for categorization; overridable at the individual rhyme level; * `separator`: {nil} or a string, specifying the separator displayed before all rhymes but the first; by default, {", "}; overridable at the individual rhyme level; * `q`: {nil} or a list of overall left regular qualifier strings, displayed before the initial caption; * `qq`: {nil} or a list of overall right regular qualifier strings, displayed after all rhymes; * `a`: {nil} or a list of overall left accent qualifier strings (see [[Module:accent qualifier]]), displayed before the initial caption; * `aa`: {nil} or a list of right accent qualifier strings, displayed after all rhymes; * `sort`: {nil} or sort key; * `caption`: {nil} or string specifying the caption to use, in place of {"Rhymes"}; a colon and space is automatically added after the caption; * `nocaption`: if {true}, suppress the caption display; * `nocat`: if {true}, suppress categorization; * `force_cat`: if {true}, force categorization even on non-mainspace pages. If both regular and accent qualifiers on the same side and at the same level are specified, the accent qualifiers precede the regular qualifiers on both left and right. '''WARNING''': Destructively modifies the objects inside the `rhymes` field. Note that the number of syllables is currently used only for categorization; if present, an extra category will be added such as [[:Category:Rhymes:Italian/ino/3 syllables]] in addition to [[:Category:Rhymes:Italian/ino]]. ]==] function export.format_rhymes(data) local langname = data.lang:getFullName() local parts = {} local categories = {} local overall_sep = data.separator or ", " for i, r in ipairs(data.rhymes) do local rhyme = r.rhyme local link, link_cats = make_rhyme_link(data.lang, rhyme, "-" .. rhyme) if not r.nocat and not data.nocat then for _, cat in ipairs(link_cats) do insert(categories, cat) end end if r.qualifiers then -- FIXME; Added 2026-09-18; remove in a month error("qualifiers= not allowed here; use q=") end if r.q and r.q[1] or r.qq and r.qq[1] or r.a and r.a[1] or r.aa and r.aa[1] or r.refs and r.refs[1] then link = require(decorations_module).format_decorations { lang = data.lang, text = link, q = r.q, qq = r.qq, a = r.a, aa = r.aa, refs = r.refs, } end insert(parts, r.separator or i > 1 and overall_sep or "") insert(parts, link) if not r.nocat and not data.nocat then add_syllable_categories(categories, langname, rhyme, r.num_syl or data.num_syl) end end local text = concat(parts) if not data.nocaption then text = (data.caption or "Kasingtunog") .. ": " .. text end if data.qualifiers then -- FIXME; Added 2026-09-18; remove in a month error("overall qualifiers= not allowed here; use q=") end if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then text = require(decorations_module).format_decorations { lang = data.lang, text = text, q = data.q, qq = data.qq, a = data.a, aa = data.aa, } end if categories[1] then local cat_text = require(utilities_module).format_categories(categories, data.lang, data.sort, nil, force_cat or data.force_cat) text = text .. cat_text end return text end end --[==[ Implementation of {{tl|rhymes}}. ]==] function export.show(frame) local parent_args = frame:getParent().args local compat = parent_args.lang local offset = compat and 0 or 1 local lang_param = compat and "lang" or 1 local plain = {} local boolean = {type = "boolean"} local params = { [lang_param] = {required = true, type = "language", default = "en"}, [1 + offset] = {list = true, required = true, disallow_holes = true, default = "aɪmz"}, ["caption"] = plain, ["nocaption"] = boolean, ["nocat"] = boolean, ["sort"] = plain, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { { param = "s", item_dest = "num_syl", separate_no_index = true, type = "number", sublist = true, }, {group = {"q", "a", "ref"}}, } local rhymes, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 1 + offset, term_dest = "rhyme", track_module = "rhymes", } local lang = args[lang_param] local data = { lang = lang, rhymes = rhymes, num_syl = args.s.default, caption = args.caption, nocaption = args.nocaption, nocat = args.nocat, sort = args.sort, q = args.q.default, qq = args.qq.default, a = args.a.default, aa = args.aa.default, } return export.format_rhymes(data) end --[==[ Implementation of {{tl|rhymes nav}}. ]==] function export.show_nav(frame) local args = require(parameters_module).process( frame:getParent().args, { [1] = {required = true, type = "full language", default = "und"}, [2] = {list = true, allow_holes = true}, ["nocat"] = {type = "boolean"}, } ) local lang = args[1] local langname = lang:getCanonicalName() local parts = args[2] -- Create steps -- FIXME: We should probably use format_categories() in [[Module:utilities]] rather than constructing categories -- manually. local categories = {} -- Here and below, we ignore any cleanup categories coming out of make_rhyme_link() by adding an extra set of parens -- around the call to make_rhyme_link() to cause the second argument (the categories) to be ignored. {{rhymes nav}} -- is run on a rhymes page so it's not clear we want the page to be added to any such categories, if they exist. local steps = {"[[Wiktionary:Rhymes|Rhymes]]", (make_rhyme_link(lang))} if #parts > 0 then local last = parts[#parts] parts[#parts] = nil local prefix = "" for i, part in ipairs(parts) do prefix = prefix .. part parts[i] = prefix end for _, part in ipairs(parts) do insert(steps, (make_rhyme_link(lang, part .. "-", "-" .. part .. "-"))) end if last == "-" then insert(steps, (make_rhyme_link(lang, prefix, "-" .. prefix))) insert(categories, "[[Category:" .. langname .. " rhymes" .. (prefix == "" and "" or "/" .. prefix .. "-") .. "| ]]") elseif mw.title.getCurrentTitle().text == langname .. "/" .. prefix .. last .. "-" then -- DO NOT replace with mw.loadData("Module:headword/data").pagename as we need the root portion insert(steps, (make_rhyme_link(lang, prefix .. last .. "-", "-" .. prefix .. last .. "-"))) insert(categories, "[[Category:" .. langname .. " rhymes/" .. prefix .. last .. "-|-]]") else insert(steps, (make_rhyme_link(lang, prefix .. last, "-" .. prefix .. last))) insert(categories, "[[Category:" .. langname .. " rhymes" .. (prefix == "" and "" or "/" .. prefix .. "-") .. "|" .. last .. "]]") end elseif lang:getCode() ~= "und" then insert(categories, "[[Category:" .. langname .. " rhymes| ]]") end if mw.title.getCurrentTitle().nsText == "Rhymes" then frame:callParserFunction("DISPLAYTITLE", mw.title.getCurrentTitle().fullText:gsub( "/(.+)$", function (rhyme) return "/" .. (tag_rhyme(rhyme, lang)) -- ignore cleanup categories end)) end local templateStyles = require(TemplateStyles_module)(rhymes_styles_css_module) local ol = mw.html.create("ol") for _, step in ipairs(steps) do ol:node(mw.html.create("li"):wikitext(step)) end local div = mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-rhymesBreadcrumbs") :node(ol) local formatted_cats = args.nocat and "" or concat(categories) return templateStyles .. tostring(div) .. formatted_cats end return export oo9feq4mtac4q7xzmsnv9zrj4bhvjwd Module:affix/templates 828 33857 178201 178157 2026-10-15T02:49:06Z GinawaSaHapon 3989 178201 Scribunto text/plain local export = {} local m_affix = require("Module:affix") local m_utilities = require("Module:utilities") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end --TLCHANGE local recognized_affix_types = { prefix = "unlapi", --"prefix", pre = "unlapi", --"prefix", suffix = "hulapi", --"suffix", suf = "hulapi", --"suffix", interfix = "gitnaan", inter = "gitnaan", infix = "gitlapi", --"infix", ["in"] = "gitlapi", --"infix", circumfix = "kabilaan", --"circumfix", circum = "kabilaan", --"circumfix", ["non-affix"] = "di-panlapi", --"non-affix", naf = "di-panlapi", --"non-affix", root = "di-panlapi", --"non-affix", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat data.force_cat = args.force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end -- FIXME: Temporary for check in compound_like() below for old-style {{contraction}} parameters. Remove eventually. local function ine(arg) if arg == "" then return nil else return arg end end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args -- Error to catch most uses of old-style parameters for {{contraction}}. (FIXME: Remove eventually.) local term_param = iargs.lang and 1 or 2 if ine(parent_args[term_param + 2]) and not ine(parent_args[term_param + 1]) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and not ine(parent_args.t2) and not ine(parent_args.gloss2) and not ine(parent_args.g2) and not ine(parent_args.alt2) then error(("You specified a term in %s= and not one in %s=. You probably meant to use t= to specify a gloss instead. " .. "If you intended to specify two terms, put the second term in %s=."):format(term_param + 2, term_param + 1, term_param + 1)) end if not ine(parent_args[term_param + 1]) and not ine(parent_args.alt2) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and ine(parent_args.g2) then error(("You specified a gender in g2= but no term in %s=. You were probably trying to specify two genders for " .. "a single term. To do that, put both genders in g=, comma-separated."):format(term_param + 1)) end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local template = iargs.template local nocat = args.nocat local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "ng") --TLCHANGE "of" local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "k" or "K") .. "ung [[Apendise:Glosaryo#pagsusuri sa anyo|susuriin ang anyo]]" .. etymtext end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iargs = frame.args local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { ["head"] = {}, ["id"] = {}, ["sc"] = {type = "script"}, ["pos"] = {}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.head local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "salitang") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category = nil local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term else category = langname .. " na " .. pos .. derivtype .. " ng " .. term .. (id and " (" .. id .. ")" or "") end return require('Module:collapsible category tree').make{ lang = lang, sc = sc, category = category, } end return export mw7y163xm35pmup4rlplkrj5k015q1v 178202 178201 2026-10-15T02:50:57Z GinawaSaHapon 3989 178202 Scribunto text/plain local export = {} local m_affix = require("Module:affix") local m_utilities = require("Module:utilities") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end --TLCHANGE local recognized_affix_types = { prefix = "unlapi", --"prefix", pre = "unlapi", --"prefix", suffix = "hulapi", --"suffix", suf = "hulapi", --"suffix", interfix = "gitnaan", inter = "gitnaan", infix = "gitlapi", --"infix", ["in"] = "gitlapi", --"infix", circumfix = "kabilaan", --"circumfix", circum = "kabilaan", --"circumfix", ["non-affix"] = "di-panlapi", --"non-affix", naf = "di-panlapi", --"non-affix", root = "di-panlapi", --"non-affix", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat data.force_cat = args.force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end -- FIXME: Temporary for check in compound_like() below for old-style {{contraction}} parameters. Remove eventually. local function ine(arg) if arg == "" then return nil else return arg end end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args -- Error to catch most uses of old-style parameters for {{contraction}}. (FIXME: Remove eventually.) local term_param = iargs.lang and 1 or 2 if ine(parent_args[term_param + 2]) and not ine(parent_args[term_param + 1]) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and not ine(parent_args.t2) and not ine(parent_args.gloss2) and not ine(parent_args.g2) and not ine(parent_args.alt2) then error(("You specified a term in %s= and not one in %s=. You probably meant to use t= to specify a gloss instead. " .. "If you intended to specify two terms, put the second term in %s=."):format(term_param + 2, term_param + 1, term_param + 1)) end if not ine(parent_args[term_param + 1]) and not ine(parent_args.alt2) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and ine(parent_args.g2) then error(("You specified a gender in g2= but no term in %s=. You were probably trying to specify two genders for " .. "a single term. To do that, put both genders in g=, comma-separated."):format(term_param + 1)) end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local template = iargs.template local nocat = args.nocat local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "ng") --TLCHANGE "of" local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "k" or "K") .. "ung [[Apendise:Glosaryo#pagsusuri sa anyo|susuriin ang anyo]]" .. etymtext end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iargs = frame.args local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { ["head"] = {}, ["id"] = {}, ["sc"] = {type = "script"}, ["pos"] = {}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.head local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "salitang") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category = nil local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- added case sa tlwikt category = langname .. " na " .. pos .. " inunlapian ng " .. term else category = langname .. " na " .. pos .. derivtype .. " ng " .. term .. (id and " (" .. id .. ")" or "") end return require('Module:collapsible category tree').make{ lang = lang, sc = sc, category = category, } end return export qcdvvn3448qg9q2vs0kyfsbey6kpc8i 178203 178202 2026-10-15T02:51:41Z GinawaSaHapon 3989 178203 Scribunto text/plain local export = {} local m_affix = require("Module:affix") local m_utilities = require("Module:utilities") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end --TLCHANGE local recognized_affix_types = { prefix = "unlapi", --"prefix", pre = "unlapi", --"prefix", suffix = "hulapi", --"suffix", suf = "hulapi", --"suffix", interfix = "gitnaan", inter = "gitnaan", infix = "gitlapi", --"infix", ["in"] = "gitlapi", --"infix", circumfix = "kabilaan", --"circumfix", circum = "kabilaan", --"circumfix", ["non-affix"] = "di-panlapi", --"non-affix", naf = "di-panlapi", --"non-affix", root = "di-panlapi", --"non-affix", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat data.force_cat = args.force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end -- FIXME: Temporary for check in compound_like() below for old-style {{contraction}} parameters. Remove eventually. local function ine(arg) if arg == "" then return nil else return arg end end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args -- Error to catch most uses of old-style parameters for {{contraction}}. (FIXME: Remove eventually.) local term_param = iargs.lang and 1 or 2 if ine(parent_args[term_param + 2]) and not ine(parent_args[term_param + 1]) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and not ine(parent_args.t2) and not ine(parent_args.gloss2) and not ine(parent_args.g2) and not ine(parent_args.alt2) then error(("You specified a term in %s= and not one in %s=. You probably meant to use t= to specify a gloss instead. " .. "If you intended to specify two terms, put the second term in %s=."):format(term_param + 2, term_param + 1, term_param + 1)) end if not ine(parent_args[term_param + 1]) and not ine(parent_args.alt2) and not ine(parent_args.tr2) and not ine(parent_args.ts2) and ine(parent_args.g2) then error(("You specified a gender in g2= but no term in %s=. You were probably trying to specify two genders for " .. "a single term. To do that, put both genders in g=, comma-separated."):format(term_param + 1)) end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local template = iargs.template local nocat = args.nocat local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "ng") --TLCHANGE "of" local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "k" or "K") .. "ung [[Apendise:Glosaryo#pagsusuri sa anyo|susuriin ang anyo]]" .. etymtext end local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local function extra_params(params) params.nocat = boolean_param params.force_cat = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Padron" then --TLCHANGE "Template" base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iargs = frame.args local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { ["head"] = {}, ["id"] = {}, ["sc"] = {type = "script"}, ["pos"] = {}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.head local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "salitang") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category = nil local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- added case sa tlwikt category = langname .. " na salitang inunlapian ng " .. term else category = langname .. " na " .. pos .. derivtype .. " ng " .. term .. (id and " (" .. id .. ")" or "") end return require('Module:collapsible category tree').make{ lang = lang, sc = sc, category = category, } end return export hlori9h0c8ibf5orgurqt5bzejpe4lp 178214 178203 2026-10-15T03:39:40Z GinawaSaHapon 3989 178214 Scribunto text/plain local export = {} local debug_force_cat = false -- if set to true, always display categories even on userspace pages local m_affix = require("Module:affix") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end local recognized_affix_types = { prefix = "unlapi", pre = "unlapi", suffix = "hulapi", suf = "hulapi", interfix = "singit", inter = "singit", infix = "gitlapi", ["in"] = "gitlapi", circumfix = "kabilaan", circum = "kabilaan", ["non-affix"] = "di-panlapi", naf = "di-panlapi", root = "di-panlapi", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it ["force_cat"] = boolean_param, -- for debugging use } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end insert(param_mod_source, {param = "nocat", type = "boolean", separate_no_index = true}) local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat.default data.force_cat = args.force_cat or debug_force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local nocat = args.nocat.default local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "of") local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "b" or "B") .. "y [[Appendix:Glossary#surface analysis|surface analysis]]" .. etymtext end local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { id = true, ["sc"] = {type = "script"}, pos = true, pagename = true, head = {alias_of = "pagename"}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.pagename local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "term") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- tl case category = langname .. " na salitang inunlapian ng " .. term .. (id and " (" .. id .. ")" or "") else category = langname .. " " .. pos .. " " .. derivtype .. "ed with " .. term .. (id and " (" .. id .. ")" or "") end return require("Module:collapsible category list").make { lang = lang, sc = sc, category = category, } end return export b3r35v5cosb15z8c8hxuo4a7t39gymx 178230 178214 2026-10-15T07:06:21Z GinawaSaHapon 3989 178230 Scribunto text/plain local export = {} local debug_force_cat = false -- if set to true, always display categories even on userspace pages local m_affix = require("Module:affix") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end local recognized_affix_types = { prefix = "unlapi", pre = "unlapi", suffix = "hulapi", suf = "hulapi", interfix = "singit", inter = "singit", infix = "gitlapi", ["in"] = "gitlapi", circumfix = "kabilaan", circum = "kabilaan", ["non-affix"] = "di-panlapi", naf = "di-panlapi", root = "di-panlapi", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it ["force_cat"] = boolean_param, -- for debugging use } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end insert(param_mod_source, {param = "nocat", type = "boolean", separate_no_index = true}) local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat.default data.force_cat = args.force_cat or debug_force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local nocat = args.nocat.default local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "of") local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "s" or "S") .. "a [[Apendise:Glosaryo#pagsusuri sa salita|pagsusuri sa salita]]" .. etymtext end local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { id = true, ["sc"] = {type = "script"}, pos = true, pagename = true, head = {alias_of = "pagename"}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.pagename local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "term") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- tl case category = langname .. " na salitang inunlapian ng " .. term .. (id and " (" .. id .. ")" or "") elseif derivtype == "suffix" then -- tl case category = langname .. " na salitang hinuhulapian ng " .. term .. (id and " (" .. id .. ")" or "") else category = langname .. " " .. pos .. " " .. derivtype .. "ed with " .. term .. (id and " (" .. id .. ")" or "") end return require("Module:collapsible category list").make { lang = lang, sc = sc, category = category, } end return export 43v38k5m2vofv99ddv51yn54xtea78p 178232 178230 2026-10-15T07:14:03Z GinawaSaHapon 3989 178232 Scribunto text/plain local export = {} local debug_force_cat = false -- if set to true, always display categories even on userspace pages local m_affix = require("Module:affix") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end local recognized_affix_types = { prefix = "unlapi", pre = "unlapi", suffix = "hulapi", suf = "hulapi", interfix = "singit", inter = "singit", infix = "gitlapi", ["in"] = "gitlapi", circumfix = "kabilaan", circum = "kabilaan", ["non-affix"] = "di-panlapi", naf = "di-panlapi", root = "di-panlapi", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it ["force_cat"] = boolean_param, -- for debugging use } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end insert(param_mod_source, {param = "nocat", type = "boolean", separate_no_index = true}) local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat.default data.force_cat = args.force_cat or debug_force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local nocat = args.nocat.default local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "of") local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "s" or "S") .. "a [[Apendise:Glosaryo#pagsusuri sa anyo|pagsusuri sa anyo]]" .. etymtext end local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { id = true, ["sc"] = {type = "script"}, pos = true, pagename = true, head = {alias_of = "pagename"}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.pagename local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "term") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- tl case category = langname .. " na salitang inunlapian ng " .. term .. (id and " (" .. id .. ")" or "") elseif derivtype == "suffix" then -- tl case category = langname .. " na salitang hinuhulapian ng " .. term .. (id and " (" .. id .. ")" or "") else category = langname .. " " .. pos .. " " .. derivtype .. "ed with " .. term .. (id and " (" .. id .. ")" or "") end return require("Module:collapsible category list").make { lang = lang, sc = sc, category = category, } end return export ithx55fltzo7f1gh8kk4sb7q9k69lc4 178233 178232 2026-10-15T07:33:54Z GinawaSaHapon 3989 178233 Scribunto text/plain local export = {} local debug_force_cat = false -- if set to true, always display categories even on userspace pages local m_affix = require("Module:affix") local en_utilities_module = "Module:en-utilities" local parameter_utilities_module = "Module:parameter utilities" local pseudo_loan_module = "Module:affix/pseudo-loan" local insert = table.insert local boolean_param = {type = "boolean"} local function is_property_key(k) return require(parameter_utilities_module).item_key_is_property(k) end local recognized_affix_types = { prefix = "unlapi", pre = "unlapi", suffix = "hulapi", suf = "hulapi", interfix = "singit", inter = "singit", infix = "gitlapi", ["in"] = "gitlapi", circumfix = "kabilaan", circum = "kabilaan", ["non-affix"] = "di-panlapi", naf = "di-panlapi", root = "di-panlapi", } local function pre_normalize_affix_type(data) local modtext = data.modtext modtext = modtext:match("^<(.*)>$") if not modtext then error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(data.modtext)) end if recognized_affix_types[modtext] then modtext = "type:" .. modtext end return "<" .. modtext .. ">" end -- Parse raw arguments. A single parameter `data` is passed in, with the following fields: -- * `raw_args`: The raw arguments to parse, normally taken from `frame:getParent().args`. -- * `extra_params`: An optional function of one argument that is called on the `params` structure before parsing; its -- purpose is to specify additional allowed parameters or possibly disable parameters. -- * `has_source`: There is a source-language parameter following 1= (which becomes the "destination" language -- parameter) and preceding the terms. This is currently used for {{pseudo-loan}}. -- * `ilang`: If given, it is a language object that serves as the default for the language. If specified, there is no -- language code specified in 1=; instead the term parameters start directly at 1= (or at 2= if `has_source` is -- given). -- * `require_index_for_pos`: There is no separate |pos= parameter distinct from |pos1=, |pos2=, etc. Instead, -- specifying |pos= results in an error. -- * `dont_require_index`: Allow |foo= to be specified as a synonym for |foo1= (except for |lit=, which remains -- distinct). -- * `allow_type`: Allow |type1=, |type2=, etc. or inline <type:...> for the affix type, and allow a separate |type= -- parameter for the etymology type (FIXME: this may be confusing; consider changing the etymology type to |etype=). -- * `allow_semicolon_separator`: Allow semicolon as a separator, displaying as " or ". This requires changes in the -- display of the output, to not always put a + between the items. -- -- Note that all language parameters are allowed to be etymology-only languages. -- -- Return five values ARGS, ITEMS, LANG_OBJ, SCRIPT_OBJ, SOURCE_LANG_OBJ where ARGS is a table of the parsed arguments; -- ITEMS is the list of parsed items; LANG_OBJ is the language object corresponding to the language code specified in 1= -- (or taken from `ilang` if given); SCRIPT_OBJ is the script object corresponding to sc= (if given, otherwise nil); and -- SOURCE_LANG_OBJ is the language object corresponding to the source-language code specified in 2= (or 1= if `ilang` is -- given) if `has_source` is specified (otherwise nil). local function parse_args(data) local raw_args = data.raw_args local has_source = data.has_source local ilang = data.ilang if raw_args.lang then error("The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.") end local term_index = (ilang and 1 or 2) + (has_source and 1 or 0) local params = { [term_index] = {list = true, allow_holes = true}, ["sort"] = {}, ["nocap"] = boolean_param, -- always allow this even if not used, for use with {{surf}}, which adds it ["force_cat"] = boolean_param, -- for debugging use } if not ilang then params[1] = {required = true, type = "language", default = "und"} end local source_index if has_source then source_index = term_index - 1 params[source_index] = {required = true, type = "language", default = "und"} end local m_param_utils = require(parameter_utilities_module) local param_mod_source = {} if not data.dont_require_index then insert(param_mod_source, -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true} ) end insert(param_mod_source, {group = {"link", "ref", "lang", "q", "l", "infl"}}) -- Override lit= to be separate from lit1=. insert(param_mod_source, {param = "lit", separate_no_index = true}) if not data.dont_require_index and not data.require_index_for_pos then -- Override pos= to be separate from pos1=. insert(param_mod_source, {param = "pos", separate_no_index = true}) end if data.allow_type then insert(param_mod_source, {param = "type", separate_no_index = true}) end insert(param_mod_source, {param = "nocat", type = "boolean", separate_no_index = true}) local param_mods = m_param_utils.construct_param_mods(param_mod_source) if data.extra_params then data.extra_params(params) end local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = raw_args, termarg = term_index, parse_lang_prefix = true, track_module = "homophones", -- the inclusion of &lrm; is what [[Module:affix]] has always done default_separator = data.allow_semicolon_separator and " +&lrm; " or nil, special_separators = data.allow_semicolon_separator and {[";"] = " or "} or nil, disallow_custom_separators = not data.allow_semicolon_separator, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Allow e.g. <infix> to be specified in place of <type:infix>. pre_normalize_modifiers = pre_normalize_affix_type, -- Don't pass in `lang` or `sc`, as they will be used as defaults to initialize the items, which we don't want -- (particularly for `lang`), as the code in [[Module:affix]] uses the presence of `lang` as an indicator that -- a part-specific language was explicitly given. } local lang = ilang or args[1] local source if has_source then source = args[source_index] end -- For compatibility with the prior code, we need to convert items without term or properties to nil. for i = 1, #items do local item = items[i] local saw_item_property = item.term if not saw_item_property then for k, v in pairs(item) do if is_property_key(k) then saw_item_property = true break end end end if not saw_item_property then items[i] = nil elseif item.type then -- Validate and canonicalize affix types. if not recognized_affix_types[item.type] then local valid_types = {} for k in pairs(recognized_affix_types) do insert(valid_types, ("'%s'"):format(k)) end table.sort(recognized_affix_types) error(("Unrecognized affix type '%s' in item %s; valid values are %s"):format( item.type, item.itemno, table.concat(valid_types, ", "))) else item.type = recognized_affix_types[item.type] end end end if args.type and args.type.default and not m_affix.etymology_types[args.type.default] then error("Unrecognized etymology type: '" .. args.type.default .. "'") end return args, items, lang, args.sc.default, source end local function augment_affix_data(data, args, lang, sc) data.lang = lang data.sc = sc data.pos = args.pos and args.pos.default data.lit = args.lit and args.lit.default data.sort_key = args.sort data.type = args.type and args.type.default data.nocap = args.nocap data.notext = args.notext data.nocat = args.nocat.default data.force_cat = args.force_cat or debug_force_cat data.l = args.l.default data.ll = args.ll.default data.q = args.q.default data.qq = args.qq.default data.infl = args.infl.default return data end function export.affix(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "prefix-"}, {term = "base"}, {term = "-suffix"} } else error("You must provide at least one part.") end end return m_affix.show_affix(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) and not args.type.default then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part of a compound.") end end return m_affix.show_compound(augment_affix_data({ parts = parts }, args, lang, sc)) end function export.compound_like(frame) local iparams = { ["lang"] = {type = "language"}, ["template"] = {}, ["text"] = {}, ["oftext"] = {}, ["cat"] = {}, ["noaffixcat"] = boolean_param, ["dont_require_index"] = boolean_param, } local iargs = require("Module:parameters").process(frame.args, iparams) local parent_args = frame:getParent().args local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, ilang = iargs.lang, dont_require_index = iargs.dont_require_index, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = not iargs.dont_require_index, allow_semicolon_separator = true, } local nocat = args.nocat.default local notext = args.notext local text = not notext and iargs.text local oftext = not notext and (iargs.oftext or text and "of") local cat = not nocat and iargs.cat local noaffixcat = nocat or iargs.noaffixcat if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } end end return m_affix.show_compound_like(augment_affix_data({ parts = parts, text = text, oftext = oftext, cat = cat, noaffixcat = noaffixcat }, args, lang, sc)) end function export.surface_analysis(frame) local function ine(arg) -- Since we're operating before calling [[Module:parameters]], we need to imitate how that module processes -- arguments, including trimming since numbered arguments don't have automatic whitespace trimming. if not arg then return arg end arg = mw.text.trim(arg) if arg == "" then arg = nil end return arg end local parent_args = frame:getParent().args local etymtext local arg1 = ine(parent_args[1]) if not arg1 then -- Allow omitted first argument to just display "By surface analysis". etymtext = "" elseif arg1:find("^%+") then -- If the first argument (normally a language code) is prefixed with a +, it's a template name. local template_name = arg1:sub(2) local new_args = {} for i, v in pairs(parent_args) do if type(i) == "number" then if i > 1 then new_args[i - 1] = v end else new_args[i] = v end end new_args.nocap = true etymtext = ", " .. frame:expandTemplate { title = template_name, args = new_args } end if etymtext then return (ine(parent_args.nocap) and "s" or "S") .. "a [[Apendise:Glosaryo#pagsusuri sa anyo|pagsusuri sa anyo]]" .. etymtext end local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc = parse_args { raw_args = parent_args, extra_params = extra_params, allow_type = true, allow_semicolon_separator = true, } -- There must be at least one part to display. If there are gaps, a term -- request will be shown. if not next(parts) then if mw.title.getCurrentTitle().nsText == "Template" then parts = { {term = "first"}, {separator = " +&lrm; ", term = "second"} } else error("You must provide at least one part.") end end return m_affix.show_surface_analysis(augment_affix_data({ parts = parts }, args, lang, sc)) end local function check_max_items(items, max_allowed) if #items > max_allowed then local bad_item = items[max_allowed + 1] if bad_item.term then error(("At most %s terms can be specified but saw a term specified for term #%s") :format(max_allowed, max_allowed + 1)) else for k, v in pairs(bad_item) do if is_property_key(k) then error(("At most %s terms can be specified but saw a value for property '%s' of term #%s") :format(max_allowed, k, max_allowed + 1)) end end end error(("Internal error: Something wrong, %s items generated when there should be at most %s, but item #%s doesn't have a term or any properties") :format(#items, max_allowed, max_allowed + 1)) end end function export.circumfix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[2] local suffix = parts[3] -- Just to make sure someone didn't use the template in a silly way if not (prefix and base and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "circumfix", alt = "prefix"} base = {term = "base"} suffix = {term = "circumfix", alt = "suffix"} else error("You must specify a prefix part, a base term and a suffix part.") end end return m_affix.show_circumfix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.confix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local prefix = parts[1] local base = parts[3] and parts[2] or nil local suffix = parts[3] or parts[2] -- Just to make sure someone didn't use the template in a silly way if not (prefix and suffix) then if mw.title.getCurrentTitle().nsText == "Template" then prefix = {term = "prefix"} suffix = {term = "suffix"} else error("You must specify a prefix part, an optional base term and a suffix part.") end end return m_affix.show_confix(augment_affix_data({ prefix = prefix, base = base, suffix = suffix }, args, lang, sc)) end function export.pseudo_loan(frame) local function extra_params(params) params.notext = boolean_param end local args, parts, lang, sc, source = parse_args { raw_args = frame:getParent().args, extra_params = extra_params, has_source = true, -- FIXME, why are we doing this? Formerly we had 'params.pos = nil' whose intention was to disable the overall -- pos= while preserving posN=, which is equivalent to the following using the new syntax. But why is this -- necessary? require_index_for_pos = true, allow_semicolon_separator = true, } return require(pseudo_loan_module).show_pseudo_loan( augment_affix_data({ source = source, parts = parts }, args, lang, sc)) end function export.infix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } check_max_items(parts, 3) local base = parts[1] local infix = parts[2] -- Just to make sure someone didn't use the template in a silly way if not (base and infix) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} infix = {term = "infix"} else error("You must provide a base term and an infix.") end end return m_affix.show_infix(augment_affix_data({ base = base, infix = infix }, args, lang, sc)) end function export.prefix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local prefixes = parts local base = nil local max_prefix = 0 for k, v in pairs(prefixes) do max_prefix = math.max(k, max_prefix) end if max_prefix >= 2 then base = prefixes[max_prefix] prefixes[max_prefix] = nil end -- Just to make sure someone didn't use the template in a silly way if not next(prefixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} prefixes = { {term = "prefix"} } else error("You must provide at least one prefix.") end end return m_affix.show_prefix(augment_affix_data({ prefixes = prefixes, base = base }, args, lang, sc)) end function export.suffix(frame) local args, parts, lang, sc = parse_args { raw_args = frame:getParent().args, } local base = parts[1] local suffixes = {} for k, v in pairs(parts) do suffixes[k - 1] = v end -- Just to make sure someone didn't use the template in a silly way if not next(suffixes) then if mw.title.getCurrentTitle().nsText == "Template" then base = {term = "base"} suffixes = { {term = "suffix"} } else error("You must provide at least one suffix.") end end return m_affix.show_suffix(augment_affix_data({ base = base, suffixes = suffixes }, args, lang, sc)) end function export.derivsee(frame) local iparams = { ["derivtype"] = {}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { id = true, ["sc"] = {type = "script"}, pos = true, pagename = true, head = {alias_of = "pagename"}, } local derivtype = iargs.derivtype params[1] = {required = "true", type = "language", default = "und"} params[2] = {} local args = require("Module:parameters").process(frame:getParent().args, params) local lang = args[1] local term = args[2] or args.pagename local id = args.id local sc = args.sc local pos = require(en_utilities_module).pluralize(args.pos or "term") if not term then local SUBPAGE = mw.loadData("Module:headword/data").pagename if lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "Reconstruction" then term = "*" .. SUBPAGE elseif lang:hasType("appendix-constructed") then term = SUBPAGE else term = SUBPAGE end end local category local langname = lang:getFullName() if (derivtype == "compound" and pos == nil) then category = langname .. " compounds with " .. term elseif derivtype == "compound" and pos == "verbs" then category = langname .. " compound " .. pos .. " formed with " .. term elseif derivtype == "compound" then category = langname .. " compound " .. pos .. " with " .. term elseif derivtype == "prefix" then -- tl case category = langname .. " na salitang inunlapian ng " .. term .. (id and " (" .. id .. ")" or "") elseif derivtype == "suffix" then -- tl case category = langname .. " na salitang hinulapian ng " .. term .. (id and " (" .. id .. ")" or "") else category = langname .. " " .. pos .. " " .. derivtype .. "ed with " .. term .. (id and " (" .. id .. ")" or "") end return require("Module:collapsible category list").make { lang = lang, sc = sc, category = category, } end return export 4y7ibkk7f2m7pt2bfhw4ay4hw2tg5u8 pa- 0 34079 178200 166164 2026-10-15T02:45:47Z GinawaSaHapon 3989 178200 wikitext text/x-wiki =={{=tl=}}== ===Pagbigkas=== {{tl-pr}} ===Etimolohiya 1=== {{etymon|tl|:inh|map-pro:*pa-|tree=1|text=++|id=affix}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|unlaping ikinakabit sa mga [[pang-abay]] upang ipakita ang proseso ng pagsasagawa ng kilos ng pandiwa}} #: {{prefex|tl|punta|papunta}} #: {{prefex|tl|tapos|patapos}} #: {{ux|tl|'''Patapos''' na ang pelikula.}} # {{n-g|unlaping ikinakabit sa mga [[pangngalan]] upang ipakita na ang isang bagay ay iniutos o ipinakiusap na maisagawa}} #: {{prefex|tl|dala|padala}} #: {{prefex|tl|abuloy|paabuloy}} # {{n-g|unlaping ikinakabit upang ipakita ang direksiyon o patutunguhan}} #: {{ux|tl|'''Pa'''-Espanya ako.}} =====Kaugnay na kataga===== {{prefixsee|tl}} ===Etimolohiya 2=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{lb|tl|informal}} {{apheretic form of|tl|magpa-}} #: {{ux|tl|'''Pagaling''' ka!}} ===Etimolohiya 3=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{lb|tl|informal}} {{n-g|reduced form of {{m|tl|paki-}}}} #: {{ux|tl|'''Patapon''' naman 'to sa basurahan.}} ===Magbasa pa=== * {{R:KWF Diksiyonaryo}} * {{R:map:ACD|pa-|31374}} ===Anagrama=== * {{anagrams|tl|a=ap|AP}} ex4opfkk2ytjj8ezn2gaa7yqyxqkq4x 178205 178200 2026-10-15T03:05:41Z GinawaSaHapon 3989 /* Etimolohiya 2 */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178205 wikitext text/x-wiki =={{=tl=}}== ===Pagbigkas=== {{tl-pr}} ===Etimolohiya 1=== {{etymon|tl|:inh|map-pro:*pa-|tree=1|text=++|id=affix}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|unlaping ikinakabit sa mga [[pang-abay]] upang ipakita ang proseso ng pagsasagawa ng kilos ng pandiwa}} #: {{prefex|tl|punta|papunta}} #: {{prefex|tl|tapos|patapos}} #: {{ux|tl|'''Patapos''' na ang pelikula.}} # {{n-g|unlaping ikinakabit sa mga [[pangngalan]] upang ipakita na ang isang bagay ay iniutos o ipinakiusap na maisagawa}} #: {{prefex|tl|dala|padala}} #: {{prefex|tl|abuloy|paabuloy}} # {{n-g|unlaping ikinakabit upang ipakita ang direksiyon o patutunguhan}} #: {{ux|tl|'''Pa'''-Espanya ako.}} =====Kaugnay na kataga===== {{prefixsee|tl}} ===Etimolohiya 2=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{apheretic form of|tl|magpa-}} #: {{ux|tl|'''Pagaling''' ka!}} ===Etimolohiya 3=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{lb|tl|informal}} {{n-g|reduced form of {{m|tl|paki-}}}} #: {{ux|tl|'''Patapon''' naman 'to sa basurahan.}} ===Magbasa pa=== * {{R:KWF Diksiyonaryo}} * {{R:map:ACD|pa-|31374}} ===Anagrama=== * {{anagrams|tl|a=ap|AP}} hmcsvvy7wtwbhjgj9tx4v3cwgdpvbmr 178207 178205 2026-10-15T03:08:11Z GinawaSaHapon 3989 /* Unlapi */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178207 wikitext text/x-wiki =={{=tl=}}== ===Pagbigkas=== {{tl-pr}} ===Etimolohiya 1=== {{etymon|tl|:inh|map-pro:*pa-|tree=1|text=++|id=affix}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|unlaping ikinakabit sa mga [[pang-abay]] upang ipakita ang proseso ng pagsasagawa ng kilos ng pandiwa}} #: {{prefex|tl|punta|papunta}} #: {{prefex|tl|tapos|patapos}} #: {{ux|tl|'''Patapos''' na ang pelikula.}} # {{n-g|unlaping ikinakabit sa mga [[pangngalan]] upang ipakita na ang isang bagay ay iniutos o ipinakiusap na maisagawa}} #: {{prefex|tl|dala|padala}} #: {{prefex|tl|abuloy|paabuloy}} # {{n-g|unlaping ikinakabit upang ipakita ang direksiyon o patutunguhan}} #: {{ux|tl|'''Pa'''-Espanya ako.}} =====Kaugnay na kataga===== {{prefixsee|tl}} ===Etimolohiya 2=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{apheretic form of|tl|magpa-}} #: {{ux|tl|'''Pagaling''' ka!}} ===Etimolohiya 3=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{lb|tl|informal}} {{n-g|pinaikling anyo ng {{m|tl|paki-}}}} #: {{ux|tl|'''Patapon''' naman 'to sa basurahan.}} ===Magbasa pa=== * {{R:KWF Diksiyonaryo}} * {{R:map:ACD|pa-|31374}} ===Anagrama=== * {{anagrams|tl|a=ap|AP}} 344bjbaj5pvfeu419s9mmfgayiltskc 178208 178207 2026-10-15T03:08:26Z GinawaSaHapon 3989 /* Unlapi */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 178208 wikitext text/x-wiki =={{=tl=}}== ===Pagbigkas=== {{tl-pr}} ===Etimolohiya 1=== {{etymon|tl|:inh|map-pro:*pa-|tree=1|text=++|id=affix}} ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|unlaping ikinakabit sa mga [[pang-abay]] upang ipakita ang proseso ng pagsasagawa ng kilos ng pandiwa}} #: {{prefex|tl|punta|papunta}} #: {{prefex|tl|tapos|patapos}} #: {{ux|tl|'''Patapos''' na ang pelikula.}} # {{n-g|unlaping ikinakabit sa mga [[pangngalan]] upang ipakita na ang isang bagay ay iniutos o ipinakiusap na maisagawa}} #: {{prefex|tl|dala|padala}} #: {{prefex|tl|abuloy|paabuloy}} # {{n-g|unlaping ikinakabit upang ipakita ang direksiyon o patutunguhan}} #: {{ux|tl|'''Pa'''-Espanya ako.}} =====Kaugnay na kataga===== {{prefixsee|tl}} ===Etimolohiya 2=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{apheretic form of|tl|magpa-}} #: {{ux|tl|'''Pagaling''' ka!}} ===Etimolohiya 3=== ====Unlapi==== {{tl-head|prefix|b=+}} # {{n-g|pinaikling anyo ng {{m|tl|paki-}}}} #: {{ux|tl|'''Patapon''' naman 'to sa basurahan.}} ===Magbasa pa=== * {{R:KWF Diksiyonaryo}} * {{R:map:ACD|pa-|31374}} ===Anagrama=== * {{anagrams|tl|a=ap|AP}} qjejmqsx87m7nkwfllcy4nu2pmfxd2u Module:phi-headword 828 34336 178228 178099 2026-10-15T07:01:50Z GinawaSaHapon 3989 178228 Scribunto text/plain -- This module contains code for Philippine-language headword templates. -- Most languages use the following templates (e.g. for Waray-Waray): -- * {{war-noun}}, {{war-proper noun}}; -- * {{war-verb}}; -- * {{war-adj}}; -- * {{war-adv}}; -- * {{war-head}}. -- Tagalog uses the following additional templates: -- * {{tl-num}}; -- * {{tl-pron}}; -- * {{tl-prep}}. -- Cebuano uses the following additional templates: -- * {{ceb-num}}. local export = {} local pos_functions = {} local force_cat = false -- for testing; if true, categories appear in non-mainspace pages local require_when_needed = require("Module:utilities/require when needed") local m_table = require("Module:table") local list_to_set = m_table.listToSet local rsplit = mw.text.split local uupper = mw.ustring.upper local ulower = mw.ustring.lower local unpack = unpack or table.unpack -- Lua 5.2 compatibility local en_utilities_module = "Module:en-utilities" local headword_utilities_module = "Module:headword utilities" local template_parser_module = "Module:template parser" local m_en_utilities = require_when_needed(en_utilities_module) local m_headword_utilities = require_when_needed(headword_utilities_module) local boolean_param = {type = "boolean"} local list_param = {list = true, disallow_holes = true} local concat = table.concat local insert = table.insert local remove = table.remove local rfind = mw.ustring.find local unpack = unpack or table.unpack -- Lua 5.2 compatibility local tl_conj_type_data = { ["actor"] = 5, ["actor indirect"] = 0, ["actor 2nd indirect"] = 4, ["object"] = 11, ["locative"] = 2, ["benefactive"] = 3, ["instrument"] = 2, ["reason"] = {4, {1,2,3}}, ["directional"] = 6, ["reference"] = 0, ["reciprocal"] = 2 } local tl_conjugation_types = {} for key, value in pairs(tl_conj_type_data) do local type_count = 0 local alternates = {} if type(value) == "number" then type_count = value else type_count = value[1] alternates = value[2] end local roman_numeral if type_count == 0 then local trigger = {key, "trigger"} if key == "actor indirect" then trigger[1] = "indirect actor" end tl_conjugation_types[key] = table.concat(trigger, " ") else for i = 1, type_count do roman_numeral = require("Module:roman numerals").arabic_to_roman(tostring(i)) local trigger = {require("Module:ordinal")._ordinal(tostring(i)), key, "trigger"} --These could be typos but putting back in to stay consistent if key == "actor 2nd indirect" then trigger[2] = "secondary indirect actor" end tl_conjugation_types[key .. " " .. roman_numeral] = table.concat(trigger, " ") if require("Module:table").contains(alternates, i) then roman_numeral = roman_numeral .. "A" trigger[1] = "alternate " .. trigger[1] tl_conjugation_types[key .. " " .. roman_numeral] = table.concat(trigger, " ") end end end end local ilo_conjugation_types = { ["actor I"] = "1st actor trigger", -- um- or -um- ["actor II"] = "2nd actor trigger", -- ag- ["actor III"] = "3rd actor trigger", -- mang- ["actor IV"] = "4th actor trigger", -- ma- ["actor potentive I"] = "1st actor trigger potential mood", -- maka- ["actor potential II"] = "2nd actor trigger potential mood", -- makapag- ["actor causative I"] = "2nd actor trigger potential mood", -- agpa- ["actor causative II"] = "2nd actor trigger potential mood", -- mangpa- ["object"] = "object trigger", -- -en ["object potential"] = "object trigger potential mood", -- ma- ["object causative"] = "2nd actor trigger potential mood", -- ipai- ["comitative"] = "comitative trigger", -- ka- ["comitative potential"] = "comitative trigger potential mood", -- maka- ["comitative causative I"] = "1st comitative trigger causative mood", -- makapa- ["comitative causative II"] = "2nd comitative trigger causative mood", -- makipa- ["locative"] = "locative trigger",-- -an ["locative potential"] = "locative trigger potential mood", -- ma- -an ["locative causative"] = "locative trigger causative mood", -- pa- -an ["thematic"] = "thematic trigger", -- i- ["thematic potential"] = "thematic trigger potential mood", -- mai- ["thematic causative"] = "thematic trigger causative mood", -- ipa- ["benefactive"] = "benefactive trigger", -- i- -an ["benefactive potential"] = "benefactive trigger potential mood", -- mai- -an ["benefactive causative"] = "benefactive trigger causative mood", -- ipa- -an ["instrument"] = "instrument trigger", -- pag- ["instrument potential"] = "instrument trigger potential mood", -- mapag- ["instrument causative"] = "1st instrument trigger causative mood", -- pagpa- -an ["instrument causative II"] = "2nd instrument trigger causative mood", -- panagpa- } local pag_conjugation_types = { ["actor I"] = "1st actor trigger", -- on-/-on- ["actor II"] = "2nd actor trigger", --man- ["actor potentive I"] = "actor trigger potential mood", -- maka- ["actor potentive II"] = "actor trigger potential mood", -- makapag- ["object"] = "object trigger", -- -en ["object potential"] = "object trigger potential mood", -- ma- ["instrument"] = "instrument trigger", -- pag- ["instrument potential"] = "instrument trigger potential mood", -- mapag- ["instrument causative"] = "1st instrument trigger causative mood", -- pagpa- -an ["instrument causative II"] = "2nd instrument trigger causative mood", -- panagpa- } -- FIXME: Are these various languages really so different in their verb inflections or is this just a case of -- randomly picking a subset of the total inflections? local phi_default_verb_inflections = { {"comp", {label = "naganap", form = "compl|asp", alias = {2, "complete"}}}, -- TLCHANGE {"prog", {label = "nagaganap", form = "prog|asp", alias = {3, "progressive"}}}, -- TLCHANGE {"cont", {label = "magaganap", form = "contem|asp", alias = {4, "contemplative"}}}, -- TLCHANGE {"vnoun", {label = "pangngalang makadiwa", form = "vnoun", alias = {5, "verbal noun"}}}, -- TLCHANGE } local hil_krj_war_verb_inflections = { {"real", {label = "realis", form = "realis", alias = {2}}}, {"imp", {label = "pautos", form = "imp", alias = {3, "imperative"}}}, -- TLCHANGE {"dim", {label = "paliit", form = "dim", alias = {"diminutive"}}}, -- TLCHANGE {"caus", {label = "causative", form = "caus"}}, {"freq", {label = "frequentative", form = "freq"}}, } local ilo_pag_verb_inflections = { {"perf", {label = "perpektibo", form = "pfv", alias = {2, "perfective"}}}, -- TLCHANGE {"imperf", {label = "imperpektibo", form = "impfv", alias = {3, "imperfective"}}}, -- TLCHANGE {"past_imperf", {label = "past imperfective", form = "past|impfv", alias = {4}}}, -- TLCHANGE {"fut", {label = "panghinaharap", form = "fut", alias = {5, "future"}}}, -- TLCHANGE } local hil_krj_war_noun_inflections = { {"dim", {label = "paliit", form = "dim", alias={"diminutive"}}}, -- TLCHANGE } local hil_krj_war_adj_inflections = { {"dim", {label = "paliit", form = "dim", alias={"diminutive"}}}, -- TLCHANGE {"caus", {label = "causative", form = "caus"}}, } -- NOTE: Here and below, the template names need to be in their canonical form (not shortcuts). local langs_supported = { ["bcl"] = { native_script_name = "Basahan", convert_to_native_script = "bcl-basahan script", native_script_def = "bcl-basahan", pronun_templates_to_check = list_to_set{"bcl-IPA"}, has_pl_all_pos = true, has_intens_all_pos = true, verb_inflections = phi_default_verb_inflections, }, ["bku"] = { native_script_name = "Buhid", convert_to_native_script = "bku-script", native_script_def = "bku-script of", native_script_sc = "Buhd", pronun_templates_to_check = list_to_set{"bku-pr"}, verb_inflections = phi_default_verb_inflections, }, ["cbk"] = { pronun_templates_to_check = list_to_set{"cbk-IPA"}, }, ["ceb"] = { native_script_name = "Badlit", convert_to_native_script = "ceb-badlit script", native_script_def = "ceb-badlit", pronun_templates_to_check = list_to_set{"ceb-IPA"}, verb_inflections = { {"inch", {label = "inchoative", form = "inchoative", alias = {2}}}, {"imp", {label = "imperative", form = "imp", alias = {3}}}, }, }, ["hil"] = { pronun_templates_to_check = list_to_set{"hil-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, ["hnn"] = { native_script_name = "Hanunoo", convert_to_native_script = "hnn-script", native_script_def = "hnn-script of", native_script_sc = "Hano", pronun_templates_to_check = list_to_set{"hnn-pr"}, verb_inflections = { {"comp", {label = "naganap", form = "compl|asp", alias = {2, "complete"}}}, -- TLCHANGE {"prog", {label = "nagaganap", form = "prog|asp", alias = {3, "progressive"}}}, -- TLCHANGE {"cont", {label = "magaganap", form = "contem|asp", alias = {4, "contemplative"}}}, -- TLCHANGE {"vnoun", {label = "pangngalang makadiwa", form = "vnoun", alias = {5, "verbal noun"}}}, -- TLCHANGE {"past", {label = "pangnagdaan", form = "past"}}, --TLCHANGE "past" {"npast", {label = "di-pangnagdaan", form = "npast"}}, --TLCHANGE }, }, ["ibl"] = { verb_inflections = phi_default_verb_inflections, }, ["ilo"] = { native_script_name = "Kur-itan", convert_to_native_script = "ilo-kur-itan script", native_script_def = "ilo-kur-itan", pronun_templates_to_check = list_to_set{"ilo-IPA"}, conjugation_types = ilo_conjugation_types, verb_inflections = ilo_pag_verb_inflections, adj_inflections = { {"comp", {label = "comparative", form = "comp", alias = {2}}}, {"mod", {label = "moderative", form = "moder", alias = {3}}}, {"comp_sup", {label = "comparative superlative", form = "comp|sup", alias = {4}}}, {"abs_sup", {label = "absolutive superlative", form = "abs|sup", alias = {5}}}, {"intens", {label = "intensive", form = "inten", alias = {6}}}, }, }, ["kne"] = { pronun_templates_to_check = list_to_set{"kne-pr", "kne-IPA"}, verb_inflections = phi_default_verb_inflections, }, ["krj"] = { pronun_templates_to_check = list_to_set{"krj-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, ["mdh"] = { arabic_script_name = "Jawi", native_script_def = "mdh-Jawi", pronun_templates_to_check = list_to_set{"mdh-pr", "mdh-IPA"}, verb_inflections = phi_default_verb_inflections, }, ["mrw"] = { arabic_script_name = "batang Arab", }, ["pag"] = { pronun_templates_to_check = list_to_set{"pag-IPA"}, conjugation_types = pag_conjugation_types, verb_inflections = ilo_pag_verb_inflections, }, ["pam"] = { pronun_templates_to_check = list_to_set{"pam-IPA"}, verb_inflections = { {"perf", {label = "perfective", form = "pfv", alias = {2}}}, -- Use with affixed verbs only. {"prog", {label = "progressive", form = "prog", alias = {3}}}, -- Use with affixed verbs only. }, }, ["tl"] = { native_script_name = "Baybayin", convert_to_native_script = "tl-baybayin script", native_script_def = "tl-baybayin", pronun_templates_to_check = list_to_set{"tl-pr", "tl-IPA"}, conjugation_types = tl_conjugation_types, verb_inflections = phi_default_verb_inflections, }, ["tsg"] = { arabic_script_name = "Sulat Sūg", convert_to_arabic_script = "tsg-jawi sc", arabic_script_def = "tsg-jawi", pronun_templates_to_check = list_to_set{"tsg-pr"}, verb_inflections = phi_default_verb_inflections, }, ["war"] = { pronun_templates_to_check = list_to_set{"war-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, } ----------------------------------------------- Utilities -------------------------------------------- local function ine(val) if val == "" then return nil else return val end end local function track(page) require("Module:debug").track("phi-headword/" .. page) return true end local function replace_hash_with_lemma(term, lemma) -- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture -- replace expression. lemma = m_string_utilities.replacement_escape(lemma) return (term:gsub("#", lemma)) -- discard second retval end local function frob_term_with_hash(term, lemma) if term:find("#") then term = replace_hash_with_lemma(term, lemma) end return term end -- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come -- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given; -- `accel` is the accelerator form, or nil. local function parse_and_insert_inflection(data, args, field, label, accel) m_headword_utilities.parse_and_insert_inflection { headdata = data, forms = args[field], paramname = field, splitchar = ",", frob = function(term) return frob_term_with_hash(term, data.pagename) end, label = label, accel = accel and {form = accel} or nil, } end local function add_params(params, params_spec) if not params_spec then return end for _, spec in ipairs(params_spec) do local arg, argspecs = unpack(spec) params[arg] = list_param if argspecs.alias then for _, al in ipairs(argspecs.alias) do params[al] = {alias_of = arg, list = false} end end end end local function parse_and_insert_multiple_inflections(args, data, params_spec) if not params_spec then return end for _, spec in ipairs(params_spec) do local arg, argspecs = unpack(spec) parse_and_insert_inflection(data, args, arg, argspecs.label, argspecs.form) end end ----------------------------------------------- Main code -------------------------------------------- -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local iparams = { [1] = true, ["lang"] = {required = true}, } local iargs = require("Module:parameters").process(frame.args, iparams) local parargs = frame:getParent().args local poscat = iargs[1] local langcode = iargs.lang if not langs_supported[langcode] then local langcodes_supported = {} for lang, _ in pairs(langs_supported) do table.insert(langcodes_supported, lang) end error("This module currently only works for lang=" .. table.concat(langcodes_supported, "/")) end local lang = require("Module:languages").getByCode(langcode) local langname = lang:getCanonicalName() local headarg if poscat then headarg = 1 else headarg = 2 poscat = ine(parargs[1]) or mw.title.getCurrentTitle().fullText == "Padron:" .. langcode .. "-head" and "interjection" or --TLCHANGE error("Part of speech must be specified in 1=") poscat = poscat --TLCHANGE m_en_utilities.pluralize(poscat) remove pluralization end local langprops = langs_supported[langcode] local has_alt_script = langprops.native_script_name or langprops.arabic_script_name local params = { [headarg] = {list = "head", disallow_holes = true}, ["tr"] = has_alt_script and {replaced_by = false, instead = "use inline modifier <tr:...> on the head param"} or nil, ["id"] = true, ["nolink"] = boolean_param, ["nolinkhead"] = {type = "boolean", alias_of = "nolink"}, ["suffix"] = boolean_param, ["nosuffix"] = boolean_param, ["addlpos"] = true, ["json"] = boolean_param, ["pagename"] = true, -- for testing } if langprops.native_script_name then params["b"] = list_param end if langprops.arabic_script_name then params["j"] = list_param end if headarg == 2 then params[1] = {required = true} -- required but ignored as already processed above end if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params(langcode)) do params[key] = val end end local need_pl_handled if langprops.has_pl_all_pos and not params.pl then -- Yuck, this should be POS-specific but it seems all POS's can be pluralized in Bikol Central? params["pl"] = list_param need_pl_handled = true end if langprops.has_intens_all_pos then params["intens"] = list_param if langprops.has_pl_all_pos then params["plintens"] = list_param end end local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local user_specified_heads = m_headword_utilities.parse_term_list_with_modifiers { forms = args[headarg], paramname = {headarg, "head"}, splitchar = ",", is_head = true, include_mods = has_alt_script and {"tr"} or nil, -- frob for # doesn't make sense here; we already have + } local heads = user_specified_heads if args.nolink then if not heads[1] then heads = {{term = pagename}} end end for _, head in ipairs(heads) do if head.term == "+" then head.term = nil end end local data = { lang = lang, langcode = langcode, langname = langname, pos_category = poscat, categories = {}, heads = heads, user_specified_heads = user_specified_heads, no_redundant_head_cat = not user_specified_heads[1], inflections = {}, pagename = pagename, id = args.id, force_cat_output = force_cat, } data.is_suffix = false if args.suffix or ( not args.nosuffix and pagename:find("^%-") and poscat ~= "suffixes" and poscat ~= "suffix forms" ) then data.is_suffix = true data.pos_category = "hulapi" --TLCHANGE "suffixes" local singular_poscat = m_en_utilities.singularize(poscat) table.insert(data.categories, langname .. "na hulaping gumagawa ng " .. singular_poscat) table.insert(data.inflections, {label = "hulaping gumagawa ng " .. singular_poscat}) if args.addlpos then for _, addlpos in ipairs(rsplit(args.addlpos, "%s*,%s*")) do table.insert(data.categories, langname .. "na hulaping gumagawa ng " .. addlpos) table.insert(data.inflections, {label = "hulaping gumagawa ng " .. addlpos}) end end end if pos_functions[poscat] then pos_functions[poscat].func(args, data) end if need_pl_handled then parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") --TLCHANGE end if langprops.has_intens_all_pos then parse_and_insert_inflection(data, args, "intens", "intensified") if langprops.has_pl_all_pos then parse_and_insert_inflection(data, args, "plintens", "plural intensified") end end local script if has_alt_script then script = lang:findBestScript(pagename) -- Latn or Tglg -- Disable native-script spelling parameter if entry is already in native script. if script:getCode() == "Tglg" or (script:getCode() == "Hano" and langcode == "hnn") or (script:getCode() == "Buhd" and langcode == "bku") then args.b = nil end -- Disable Arabic-script spelling parameter if entry is already in Arabic script. if script:getCode() == "Arab" then args.j = nil end local function check_for_alt_script_entry(altscript, altscript_def) -- See if we need to add a tracking category for missing alt script entry. if not altscript_def then return false end local title = mw.title.new(altscript) if not title then return end local altscript_content = title:getContent() if not altscript_content then return end for template in require(template_parser_module).find_templates(altscript_content) do if template:get_name() == altscript_def then for _, arg in ipairs(template:get_arguments()) do if arg == pagename then return true end end end end end local function handle_alt_script(script_argname, script_code, script_name, convert_to_script, script_def) if not args[script_argname] then -- Happens when the term is already in a foreign script. return end local script_arg = m_headword_utilities.parse_term_list_with_modifiers { forms = args[script_argname], paramname = script_argname, splitchar = ",", frob = function(term) if term == "+" then term = pagename end if term:find("^raw:") then term = term:sub(5) else local termsc = lang:findBestScript(term) if termsc:getCode() == "Latn" then if convert_to_script then term = frame:expandTemplate { title = convert_to_script, args = { term }} else error(("Latin script for %s= not currently supported; supply proper script"):format( script_argname)) end end end return term end, } for i, altobj in ipairs(script_arg) do altobj.sc = require("Module:scripts").getByCode(script_code) if not check_for_alt_script_entry(altobj.term, script_def) then table.insert(data.categories, ("%s na salitang walang entradang %s"):format(langname, script_name)) -- TLCHANGE end end m_headword_utilities.insert_inflection { headdata = data, terms = script_arg, label = "sulat " .. script_name, --TLCHANGE script_name .. " spelling", accel = {form = script_name}, } if script:getCode() == "Latn" then table.insert(data.categories, ("%s na salitang %s %s"):format( -- TLCHANGE langname, #script_arg > 0 and "mayroong pagbaybay na" or "walang pagbaybay na", script_name)) -- TLCHANGE elseif script:getCode() == script_code then table.insert(data.categories, ("%s na salitang naisulat sa %s"):format(langname, script_name)) -- TLCHANGE end end if langprops.native_script_name then handle_alt_script("b", langprops.native_script_name or "Tglg", langprops.native_script_name, langprops.convert_to_native_script, langprops.native_script_def) end if langprops.arabic_script_name then handle_alt_script("j", "Arab", langprops.arabic_script_name, langprops.convert_to_arabic_script, langprops.arabic_script_def) end end if langprops.pronun_templates_to_check and (not has_alt_script or script:getCode() == "Latn") then -- See if we need to add a tracking category for missing {{tl-pr}}, {{tl-IPA}}, etc. local template_present local this_title = mw.title.new(pagename) if this_title then local content = this_title:getContent() if content then for template in require(template_parser_module).find_templates(content) do if langprops.pronun_templates_to_check[template:get_name()] then template_present = true break end end end end if not template_present then table.insert(data.categories, ("%s na salitang walang padrong pambigkas"):format(langname, pronun_template)) -- TLCHANGE end end if args.json then return require("Module:JSON").toJSON(data) end return require("Module:headword").full_headword(data) end pos_functions["pang-uri"] = { -- TLCHANGE params = function(langcode) local params = { ["f"] = list_param, ["m"] = list_param, ["pl"] = list_param, ["comp"] = list_param, ["sup"] = list_param, } add_params(params, langs_supported[langcode].adj_inflections) return params end, func = function(args, data) parse_and_insert_inflection(data, args, "f", "pambabe") -- TLCHANGE parse_and_insert_inflection(data, args, "m", "panlalaki") -- TLCHANGE parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE parse_and_insert_inflection(data, args, "comp", "pahambing") -- TLCHANGE parse_and_insert_inflection(data, args, "sup", "pasukdol") -- TLCHANGE parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].adj_inflections) end, } pos_functions["adjectives"] = pos_functions["pang-uri"] --TLCHANGE pos_functions["adjective"] = pos_functions["pang-uri"] --TLCHANGE pos_functions["artikulo"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["articles"] = pos_functions["artikulo"] --TLCHANGE pos_functions["article"] = pos_functions["artikulo"] --TLCHANGE pos_functions["pang-uring pahambing na magkatulad"] = { -- TLCHANGE "equative adjectives" params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["equative adjectives"] = pos_functions["pang-uring pahambing na magkatulad"] pos_functions["equative adjective"] = pos_functions["pang-uring pahambing na magkatulad"] pos_functions["pangngalan"] = { -- TLCHANGE params = function(langcode) local params = { ["f"] = list_param, ["m"] = list_param, ["pl"] = list_param, rootword = boolean_param, action = boolean_param, --if action noun } add_params(params, langs_supported[langcode].noun_inflections) return params end, func = function(args, data) parse_and_insert_inflection(data, args, "f", "pambabae") -- TLCHANGE parse_and_insert_inflection(data, args, "m", "panlalaki") -- TLCHANGE parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].noun_inflections) if args.rootword then table.insert(data.inflections, {label = "salitang-ugat"}) -- TLCHANGE table.insert(data.categories, data.langname .. " na ugat") --TLCHANGE " roots" end if args.action then --if action noun table.insert(data.categories, data.langname .. " action nouns") end end, } pos_functions["nouns"] = pos_functions["pangngalan"] --TLCHANGE pos_functions["noun"] = pos_functions["pangngalan"] --TLCHANGE pos_functions["pangngalang pangkilos"] = pos_functions["pangngalan"] -- TLCHANGE "action nouns" pos_functions["action nouns"] = pos_functions["pangngalan"] -- TLCHANGE pos_functions["action noun"] = pos_functions["pangngalan"] -- TLCHANGE pos_functions["pangngalang pantangi"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["proper nouns"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["proper noun"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["panghalip"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["pronouns"] = pos_functions["panghalip"] --TLCHANGE pos_functions["pronoun"] = pos_functions["panghalip"] --TLCHANGE pos_functions["pang-ukol"] = pos_functions["panghalip"] -- TLCHANGE pos_functions["prepositions"] = pos_functions["pang-ukol"] --TLCHANGE pos_functions["preposition"] = pos_functions["pang-ukol"] --TLCHANGE pos_functions["pang-uring pasukdol"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["superlative adjectives"] = pos_functions["pang-uring pasukdol"] --TLCHANGE pos_functions["superlative adjective"] = pos_functions["pang-uring pasukdol"] --TLCHANGE pos_functions["pandiwa"] = { -- TLCHANGE params = function(langcode) local params = { rootword = boolean_param, } if langs_supported[langcode].conjugation_types then params.type = list_param end add_params(params, langs_supported[langcode].verb_inflections) return params end, func = function(args, data) parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].verb_inflections) if args.rootword then table.insert(data.inflections, {label = "salitang-ugat"}) -- TLCHANGE table.insert(data.categories, data.langname .. " na ugat") --TLCHANGE end if args.type then local types = m_headword_utilities.parse_term_list_with_modifiers { forms = args.type, paramname = "type", splitchar = ",", } -- Tag verb trigger local conjugation_types = langs_supported[data.langcode].conjugation_types for _, typobj in ipairs(types) do local typ = typobj.term if not conjugation_types[typ] then error(("Unrecognized %s verb conjugation type '%s'"):format(data.langname, typ)) end local label = conjugation_types[typ] m_headword_utilities.insert_fixed_inflection { headdata = data, label = label, originating_term = typobj, } table.insert(data.categories, ("%s %s verbs"):format(data.langname, label)) end end end, } pos_functions["verbs"] = pos_functions["pandiwa"] --TLCHANGE pos_functions["verb"] = pos_functions["pandiwa"] --TLCHANGE pos_functions["titik"] = { -- TLCHANGE params = function(langcode) return { ["type"] = true, ["upper"] = true, ["lower"] = true, ["mixed"] = true, } end, func = function(args, data) if args.type then if args.type ~= "upper" and args.type ~= "lower" and args.type ~= "mixed" then error(("Unrecognized value for type '%s'; should be one of 'upper', 'lower' or 'mixed'"):format( args.type)) end end local uppage = uupper(data.pagename) local lopage = ulower(data.pagename) if uppage == lopage then if args.type then error("Can't specify type= when letter has no case") end if args.upper or args.lower or args.mixed then error("Can't specify upper=, lower= or mixed= when letter has no case") end table.insert(data.inflections, {label = "no case"}) elseif args.type == "upper" or data.pagename == uppage then if args.upper then error("Already uppercase; can't specify upper=") end table.insert(data.inflections, {label = "[[Appendix:Capital letter|upper case]]"}) table.insert(data.inflections, {args.lower or lopage, label = "maliit na titik"}) -- TLCHANGE elseif args.type == "lower" or data.pagename == lopage then if args.lower then error("Already uppercase; can't specify upper=") end table.insert(data.inflections, {label = "lower case"}) table.insert(data.inflections, {args.upper or uppage, label = "malaking titik"}) -- TLCHANGE else table.insert(data.inflections, {label = "pinaghalong titik"}) -- TLCHANGE table.insert(data.inflections, {args.upper or uppage, label = "malaking titik"}) -- TLCHANGE table.insert(data.inflections, {args.lower or lopage, label = "maliit na titik"}) -- TLCHANGE end end, } pos_functions["letters"] = pos_functions["titik"] --TLCHANGE pos_functions["letter"] = pos_functions["titik"] --TLCHANGE return export olb992l9b1wa4xh0u9zgap2sqxowyee 178229 178228 2026-10-15T07:02:18Z GinawaSaHapon 3989 178229 Scribunto text/plain -- This module contains code for Philippine-language headword templates. -- Most languages use the following templates (e.g. for Waray-Waray): -- * {{war-noun}}, {{war-proper noun}}; -- * {{war-verb}}; -- * {{war-adj}}; -- * {{war-adv}}; -- * {{war-head}}. -- Tagalog uses the following additional templates: -- * {{tl-num}}; -- * {{tl-pron}}; -- * {{tl-prep}}. -- Cebuano uses the following additional templates: -- * {{ceb-num}}. local export = {} local pos_functions = {} local force_cat = false -- for testing; if true, categories appear in non-mainspace pages local require_when_needed = require("Module:utilities/require when needed") local m_table = require("Module:table") local list_to_set = m_table.listToSet local rsplit = mw.text.split local uupper = mw.ustring.upper local ulower = mw.ustring.lower local unpack = unpack or table.unpack -- Lua 5.2 compatibility local en_utilities_module = "Module:en-utilities" local headword_utilities_module = "Module:headword utilities" local template_parser_module = "Module:template parser" local m_en_utilities = require_when_needed(en_utilities_module) local m_headword_utilities = require_when_needed(headword_utilities_module) local boolean_param = {type = "boolean"} local list_param = {list = true, disallow_holes = true} local concat = table.concat local insert = table.insert local remove = table.remove local rfind = mw.ustring.find local unpack = unpack or table.unpack -- Lua 5.2 compatibility local tl_conj_type_data = { ["actor"] = 5, ["actor indirect"] = 0, ["actor 2nd indirect"] = 4, ["object"] = 11, ["locative"] = 2, ["benefactive"] = 3, ["instrument"] = 2, ["reason"] = {4, {1,2,3}}, ["directional"] = 6, ["reference"] = 0, ["reciprocal"] = 2 } local tl_conjugation_types = {} for key, value in pairs(tl_conj_type_data) do local type_count = 0 local alternates = {} if type(value) == "number" then type_count = value else type_count = value[1] alternates = value[2] end local roman_numeral if type_count == 0 then local trigger = {key, "trigger"} if key == "actor indirect" then trigger[1] = "indirect actor" end tl_conjugation_types[key] = table.concat(trigger, " ") else for i = 1, type_count do roman_numeral = require("Module:roman numerals").arabic_to_roman(tostring(i)) local trigger = {require("Module:ordinal")._ordinal(tostring(i)), key, "trigger"} --These could be typos but putting back in to stay consistent if key == "actor 2nd indirect" then trigger[2] = "secondary indirect actor" end tl_conjugation_types[key .. " " .. roman_numeral] = table.concat(trigger, " ") if require("Module:table").contains(alternates, i) then roman_numeral = roman_numeral .. "A" trigger[1] = "alternate " .. trigger[1] tl_conjugation_types[key .. " " .. roman_numeral] = table.concat(trigger, " ") end end end end local ilo_conjugation_types = { ["actor I"] = "1st actor trigger", -- um- or -um- ["actor II"] = "2nd actor trigger", -- ag- ["actor III"] = "3rd actor trigger", -- mang- ["actor IV"] = "4th actor trigger", -- ma- ["actor potentive I"] = "1st actor trigger potential mood", -- maka- ["actor potential II"] = "2nd actor trigger potential mood", -- makapag- ["actor causative I"] = "2nd actor trigger potential mood", -- agpa- ["actor causative II"] = "2nd actor trigger potential mood", -- mangpa- ["object"] = "object trigger", -- -en ["object potential"] = "object trigger potential mood", -- ma- ["object causative"] = "2nd actor trigger potential mood", -- ipai- ["comitative"] = "comitative trigger", -- ka- ["comitative potential"] = "comitative trigger potential mood", -- maka- ["comitative causative I"] = "1st comitative trigger causative mood", -- makapa- ["comitative causative II"] = "2nd comitative trigger causative mood", -- makipa- ["locative"] = "locative trigger",-- -an ["locative potential"] = "locative trigger potential mood", -- ma- -an ["locative causative"] = "locative trigger causative mood", -- pa- -an ["thematic"] = "thematic trigger", -- i- ["thematic potential"] = "thematic trigger potential mood", -- mai- ["thematic causative"] = "thematic trigger causative mood", -- ipa- ["benefactive"] = "benefactive trigger", -- i- -an ["benefactive potential"] = "benefactive trigger potential mood", -- mai- -an ["benefactive causative"] = "benefactive trigger causative mood", -- ipa- -an ["instrument"] = "instrument trigger", -- pag- ["instrument potential"] = "instrument trigger potential mood", -- mapag- ["instrument causative"] = "1st instrument trigger causative mood", -- pagpa- -an ["instrument causative II"] = "2nd instrument trigger causative mood", -- panagpa- } local pag_conjugation_types = { ["actor I"] = "1st actor trigger", -- on-/-on- ["actor II"] = "2nd actor trigger", --man- ["actor potentive I"] = "actor trigger potential mood", -- maka- ["actor potentive II"] = "actor trigger potential mood", -- makapag- ["object"] = "object trigger", -- -en ["object potential"] = "object trigger potential mood", -- ma- ["instrument"] = "instrument trigger", -- pag- ["instrument potential"] = "instrument trigger potential mood", -- mapag- ["instrument causative"] = "1st instrument trigger causative mood", -- pagpa- -an ["instrument causative II"] = "2nd instrument trigger causative mood", -- panagpa- } -- FIXME: Are these various languages really so different in their verb inflections or is this just a case of -- randomly picking a subset of the total inflections? local phi_default_verb_inflections = { {"comp", {label = "naganap", form = "compl|asp", alias = {2, "complete"}}}, -- TLCHANGE {"prog", {label = "nagaganap", form = "prog|asp", alias = {3, "progressive"}}}, -- TLCHANGE {"cont", {label = "magaganap", form = "contem|asp", alias = {4, "contemplative"}}}, -- TLCHANGE {"vnoun", {label = "pangngalang makadiwa", form = "vnoun", alias = {5, "verbal noun"}}}, -- TLCHANGE } local hil_krj_war_verb_inflections = { {"real", {label = "realis", form = "realis", alias = {2}}}, {"imp", {label = "pautos", form = "imp", alias = {3, "imperative"}}}, -- TLCHANGE {"dim", {label = "paliit", form = "dim", alias = {"diminutive"}}}, -- TLCHANGE {"caus", {label = "causative", form = "caus"}}, {"freq", {label = "frequentative", form = "freq"}}, } local ilo_pag_verb_inflections = { {"perf", {label = "perpektibo", form = "pfv", alias = {2, "perfective"}}}, -- TLCHANGE {"imperf", {label = "imperpektibo", form = "impfv", alias = {3, "imperfective"}}}, -- TLCHANGE {"past_imperf", {label = "past imperfective", form = "past|impfv", alias = {4}}}, -- TLCHANGE {"fut", {label = "panghinaharap", form = "fut", alias = {5, "future"}}}, -- TLCHANGE } local hil_krj_war_noun_inflections = { {"dim", {label = "paliit", form = "dim", alias={"diminutive"}}}, -- TLCHANGE } local hil_krj_war_adj_inflections = { {"dim", {label = "paliit", form = "dim", alias={"diminutive"}}}, -- TLCHANGE {"caus", {label = "causative", form = "caus"}}, } -- NOTE: Here and below, the template names need to be in their canonical form (not shortcuts). local langs_supported = { ["bcl"] = { native_script_name = "Basahan", convert_to_native_script = "bcl-basahan script", native_script_def = "bcl-basahan", pronun_templates_to_check = list_to_set{"bcl-IPA"}, has_pl_all_pos = true, has_intens_all_pos = true, verb_inflections = phi_default_verb_inflections, }, ["bku"] = { native_script_name = "Buhid", convert_to_native_script = "bku-script", native_script_def = "bku-script of", native_script_sc = "Buhd", pronun_templates_to_check = list_to_set{"bku-pr"}, verb_inflections = phi_default_verb_inflections, }, ["cbk"] = { pronun_templates_to_check = list_to_set{"cbk-IPA"}, }, ["ceb"] = { native_script_name = "Badlit", convert_to_native_script = "ceb-badlit script", native_script_def = "ceb-badlit", pronun_templates_to_check = list_to_set{"ceb-IPA"}, verb_inflections = { {"inch", {label = "inchoative", form = "inchoative", alias = {2}}}, {"imp", {label = "imperative", form = "imp", alias = {3}}}, }, }, ["hil"] = { pronun_templates_to_check = list_to_set{"hil-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, ["hnn"] = { native_script_name = "Hanunoo", convert_to_native_script = "hnn-script", native_script_def = "hnn-script of", native_script_sc = "Hano", pronun_templates_to_check = list_to_set{"hnn-pr"}, verb_inflections = { {"comp", {label = "naganap", form = "compl|asp", alias = {2, "complete"}}}, -- TLCHANGE {"prog", {label = "nagaganap", form = "prog|asp", alias = {3, "progressive"}}}, -- TLCHANGE {"cont", {label = "magaganap", form = "contem|asp", alias = {4, "contemplative"}}}, -- TLCHANGE {"vnoun", {label = "pangngalang makadiwa", form = "vnoun", alias = {5, "verbal noun"}}}, -- TLCHANGE {"past", {label = "pangnagdaan", form = "past"}}, --TLCHANGE "past" {"npast", {label = "di-pangnagdaan", form = "npast"}}, --TLCHANGE }, }, ["ibl"] = { verb_inflections = phi_default_verb_inflections, }, ["ilo"] = { native_script_name = "Kur-itan", convert_to_native_script = "ilo-kur-itan script", native_script_def = "ilo-kur-itan", pronun_templates_to_check = list_to_set{"ilo-IPA"}, conjugation_types = ilo_conjugation_types, verb_inflections = ilo_pag_verb_inflections, adj_inflections = { {"comp", {label = "comparative", form = "comp", alias = {2}}}, {"mod", {label = "moderative", form = "moder", alias = {3}}}, {"comp_sup", {label = "comparative superlative", form = "comp|sup", alias = {4}}}, {"abs_sup", {label = "absolutive superlative", form = "abs|sup", alias = {5}}}, {"intens", {label = "intensive", form = "inten", alias = {6}}}, }, }, ["kne"] = { pronun_templates_to_check = list_to_set{"kne-pr", "kne-IPA"}, verb_inflections = phi_default_verb_inflections, }, ["krj"] = { pronun_templates_to_check = list_to_set{"krj-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, ["mdh"] = { arabic_script_name = "Jawi", native_script_def = "mdh-Jawi", pronun_templates_to_check = list_to_set{"mdh-pr", "mdh-IPA"}, verb_inflections = phi_default_verb_inflections, }, ["mrw"] = { arabic_script_name = "batang Arab", }, ["pag"] = { pronun_templates_to_check = list_to_set{"pag-IPA"}, conjugation_types = pag_conjugation_types, verb_inflections = ilo_pag_verb_inflections, }, ["pam"] = { pronun_templates_to_check = list_to_set{"pam-IPA"}, verb_inflections = { {"perf", {label = "perfective", form = "pfv", alias = {2}}}, -- Use with affixed verbs only. {"prog", {label = "progressive", form = "prog", alias = {3}}}, -- Use with affixed verbs only. }, }, ["tl"] = { native_script_name = "Baybayin", convert_to_native_script = "tl-baybayin script", native_script_def = "tl-baybayin", pronun_templates_to_check = list_to_set{"tl-pr", "tl-IPA"}, conjugation_types = tl_conjugation_types, verb_inflections = phi_default_verb_inflections, }, ["tsg"] = { arabic_script_name = "Sulat Sūg", convert_to_arabic_script = "tsg-jawi sc", arabic_script_def = "tsg-jawi", pronun_templates_to_check = list_to_set{"tsg-pr"}, verb_inflections = phi_default_verb_inflections, }, ["war"] = { pronun_templates_to_check = list_to_set{"war-IPA"}, verb_inflections = hil_krj_war_verb_inflections, noun_inflections = hil_krj_war_noun_inflections, adj_inflections = hil_krj_war_adj_inflections, }, } ----------------------------------------------- Utilities -------------------------------------------- local function ine(val) if val == "" then return nil else return val end end local function track(page) require("Module:debug").track("phi-headword/" .. page) return true end local function replace_hash_with_lemma(term, lemma) -- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture -- replace expression. lemma = m_string_utilities.replacement_escape(lemma) return (term:gsub("#", lemma)) -- discard second retval end local function frob_term_with_hash(term, lemma) if term:find("#") then term = replace_hash_with_lemma(term, lemma) end return term end -- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come -- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given; -- `accel` is the accelerator form, or nil. local function parse_and_insert_inflection(data, args, field, label, accel) m_headword_utilities.parse_and_insert_inflection { headdata = data, forms = args[field], paramname = field, splitchar = ",", frob = function(term) return frob_term_with_hash(term, data.pagename) end, label = label, accel = accel and {form = accel} or nil, } end local function add_params(params, params_spec) if not params_spec then return end for _, spec in ipairs(params_spec) do local arg, argspecs = unpack(spec) params[arg] = list_param if argspecs.alias then for _, al in ipairs(argspecs.alias) do params[al] = {alias_of = arg, list = false} end end end end local function parse_and_insert_multiple_inflections(args, data, params_spec) if not params_spec then return end for _, spec in ipairs(params_spec) do local arg, argspecs = unpack(spec) parse_and_insert_inflection(data, args, arg, argspecs.label, argspecs.form) end end ----------------------------------------------- Main code -------------------------------------------- -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local iparams = { [1] = true, ["lang"] = {required = true}, } local iargs = require("Module:parameters").process(frame.args, iparams) local parargs = frame:getParent().args local poscat = iargs[1] local langcode = iargs.lang if not langs_supported[langcode] then local langcodes_supported = {} for lang, _ in pairs(langs_supported) do table.insert(langcodes_supported, lang) end error("This module currently only works for lang=" .. table.concat(langcodes_supported, "/")) end local lang = require("Module:languages").getByCode(langcode) local langname = lang:getCanonicalName() local headarg if poscat then headarg = 1 else headarg = 2 poscat = ine(parargs[1]) or mw.title.getCurrentTitle().fullText == "Padron:" .. langcode .. "-head" and "interjection" or --TLCHANGE error("Part of speech must be specified in 1=") poscat = poscat --TLCHANGE m_en_utilities.pluralize(poscat) remove pluralization end local langprops = langs_supported[langcode] local has_alt_script = langprops.native_script_name or langprops.arabic_script_name local params = { [headarg] = {list = "head", disallow_holes = true}, ["tr"] = has_alt_script and {replaced_by = false, instead = "use inline modifier <tr:...> on the head param"} or nil, ["id"] = true, ["nolink"] = boolean_param, ["nolinkhead"] = {type = "boolean", alias_of = "nolink"}, ["suffix"] = boolean_param, ["nosuffix"] = boolean_param, ["addlpos"] = true, ["json"] = boolean_param, ["pagename"] = true, -- for testing } if langprops.native_script_name then params["b"] = list_param end if langprops.arabic_script_name then params["j"] = list_param end if headarg == 2 then params[1] = {required = true} -- required but ignored as already processed above end if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params(langcode)) do params[key] = val end end local need_pl_handled if langprops.has_pl_all_pos and not params.pl then -- Yuck, this should be POS-specific but it seems all POS's can be pluralized in Bikol Central? params["pl"] = list_param need_pl_handled = true end if langprops.has_intens_all_pos then params["intens"] = list_param if langprops.has_pl_all_pos then params["plintens"] = list_param end end local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local user_specified_heads = m_headword_utilities.parse_term_list_with_modifiers { forms = args[headarg], paramname = {headarg, "head"}, splitchar = ",", is_head = true, include_mods = has_alt_script and {"tr"} or nil, -- frob for # doesn't make sense here; we already have + } local heads = user_specified_heads if args.nolink then if not heads[1] then heads = {{term = pagename}} end end for _, head in ipairs(heads) do if head.term == "+" then head.term = nil end end local data = { lang = lang, langcode = langcode, langname = langname, pos_category = poscat, categories = {}, heads = heads, user_specified_heads = user_specified_heads, no_redundant_head_cat = not user_specified_heads[1], inflections = {}, pagename = pagename, id = args.id, force_cat_output = force_cat, } data.is_suffix = false if args.suffix or ( not args.nosuffix and pagename:find("^%-") and poscat ~= "suffixes" and poscat ~= "suffix forms" ) then data.is_suffix = true data.pos_category = "hulapi" --TLCHANGE "suffixes" local singular_poscat = m_en_utilities.singularize(poscat) table.insert(data.categories, langname .. " na hulaping gumagawa ng " .. singular_poscat) table.insert(data.inflections, {label = "hulaping gumagawa ng " .. singular_poscat}) if args.addlpos then for _, addlpos in ipairs(rsplit(args.addlpos, "%s*,%s*")) do table.insert(data.categories, langname .. " na hulaping gumagawa ng " .. addlpos) table.insert(data.inflections, {label = "hulaping gumagawa ng " .. addlpos}) end end end if pos_functions[poscat] then pos_functions[poscat].func(args, data) end if need_pl_handled then parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") --TLCHANGE end if langprops.has_intens_all_pos then parse_and_insert_inflection(data, args, "intens", "intensified") if langprops.has_pl_all_pos then parse_and_insert_inflection(data, args, "plintens", "plural intensified") end end local script if has_alt_script then script = lang:findBestScript(pagename) -- Latn or Tglg -- Disable native-script spelling parameter if entry is already in native script. if script:getCode() == "Tglg" or (script:getCode() == "Hano" and langcode == "hnn") or (script:getCode() == "Buhd" and langcode == "bku") then args.b = nil end -- Disable Arabic-script spelling parameter if entry is already in Arabic script. if script:getCode() == "Arab" then args.j = nil end local function check_for_alt_script_entry(altscript, altscript_def) -- See if we need to add a tracking category for missing alt script entry. if not altscript_def then return false end local title = mw.title.new(altscript) if not title then return end local altscript_content = title:getContent() if not altscript_content then return end for template in require(template_parser_module).find_templates(altscript_content) do if template:get_name() == altscript_def then for _, arg in ipairs(template:get_arguments()) do if arg == pagename then return true end end end end end local function handle_alt_script(script_argname, script_code, script_name, convert_to_script, script_def) if not args[script_argname] then -- Happens when the term is already in a foreign script. return end local script_arg = m_headword_utilities.parse_term_list_with_modifiers { forms = args[script_argname], paramname = script_argname, splitchar = ",", frob = function(term) if term == "+" then term = pagename end if term:find("^raw:") then term = term:sub(5) else local termsc = lang:findBestScript(term) if termsc:getCode() == "Latn" then if convert_to_script then term = frame:expandTemplate { title = convert_to_script, args = { term }} else error(("Latin script for %s= not currently supported; supply proper script"):format( script_argname)) end end end return term end, } for i, altobj in ipairs(script_arg) do altobj.sc = require("Module:scripts").getByCode(script_code) if not check_for_alt_script_entry(altobj.term, script_def) then table.insert(data.categories, ("%s na salitang walang entradang %s"):format(langname, script_name)) -- TLCHANGE end end m_headword_utilities.insert_inflection { headdata = data, terms = script_arg, label = "sulat " .. script_name, --TLCHANGE script_name .. " spelling", accel = {form = script_name}, } if script:getCode() == "Latn" then table.insert(data.categories, ("%s na salitang %s %s"):format( -- TLCHANGE langname, #script_arg > 0 and "mayroong pagbaybay na" or "walang pagbaybay na", script_name)) -- TLCHANGE elseif script:getCode() == script_code then table.insert(data.categories, ("%s na salitang naisulat sa %s"):format(langname, script_name)) -- TLCHANGE end end if langprops.native_script_name then handle_alt_script("b", langprops.native_script_name or "Tglg", langprops.native_script_name, langprops.convert_to_native_script, langprops.native_script_def) end if langprops.arabic_script_name then handle_alt_script("j", "Arab", langprops.arabic_script_name, langprops.convert_to_arabic_script, langprops.arabic_script_def) end end if langprops.pronun_templates_to_check and (not has_alt_script or script:getCode() == "Latn") then -- See if we need to add a tracking category for missing {{tl-pr}}, {{tl-IPA}}, etc. local template_present local this_title = mw.title.new(pagename) if this_title then local content = this_title:getContent() if content then for template in require(template_parser_module).find_templates(content) do if langprops.pronun_templates_to_check[template:get_name()] then template_present = true break end end end end if not template_present then table.insert(data.categories, ("%s na salitang walang padrong pambigkas"):format(langname, pronun_template)) -- TLCHANGE end end if args.json then return require("Module:JSON").toJSON(data) end return require("Module:headword").full_headword(data) end pos_functions["pang-uri"] = { -- TLCHANGE params = function(langcode) local params = { ["f"] = list_param, ["m"] = list_param, ["pl"] = list_param, ["comp"] = list_param, ["sup"] = list_param, } add_params(params, langs_supported[langcode].adj_inflections) return params end, func = function(args, data) parse_and_insert_inflection(data, args, "f", "pambabe") -- TLCHANGE parse_and_insert_inflection(data, args, "m", "panlalaki") -- TLCHANGE parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE parse_and_insert_inflection(data, args, "comp", "pahambing") -- TLCHANGE parse_and_insert_inflection(data, args, "sup", "pasukdol") -- TLCHANGE parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].adj_inflections) end, } pos_functions["adjectives"] = pos_functions["pang-uri"] --TLCHANGE pos_functions["adjective"] = pos_functions["pang-uri"] --TLCHANGE pos_functions["artikulo"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["articles"] = pos_functions["artikulo"] --TLCHANGE pos_functions["article"] = pos_functions["artikulo"] --TLCHANGE pos_functions["pang-uring pahambing na magkatulad"] = { -- TLCHANGE "equative adjectives" params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["equative adjectives"] = pos_functions["pang-uring pahambing na magkatulad"] pos_functions["equative adjective"] = pos_functions["pang-uring pahambing na magkatulad"] pos_functions["pangngalan"] = { -- TLCHANGE params = function(langcode) local params = { ["f"] = list_param, ["m"] = list_param, ["pl"] = list_param, rootword = boolean_param, action = boolean_param, --if action noun } add_params(params, langs_supported[langcode].noun_inflections) return params end, func = function(args, data) parse_and_insert_inflection(data, args, "f", "pambabae") -- TLCHANGE parse_and_insert_inflection(data, args, "m", "panlalaki") -- TLCHANGE parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].noun_inflections) if args.rootword then table.insert(data.inflections, {label = "salitang-ugat"}) -- TLCHANGE table.insert(data.categories, data.langname .. " na ugat") --TLCHANGE " roots" end if args.action then --if action noun table.insert(data.categories, data.langname .. " action nouns") end end, } pos_functions["nouns"] = pos_functions["pangngalan"] --TLCHANGE pos_functions["noun"] = pos_functions["pangngalan"] --TLCHANGE pos_functions["pangngalang pangkilos"] = pos_functions["pangngalan"] -- TLCHANGE "action nouns" pos_functions["action nouns"] = pos_functions["pangngalan"] -- TLCHANGE pos_functions["action noun"] = pos_functions["pangngalan"] -- TLCHANGE pos_functions["pangngalang pantangi"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["proper nouns"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["proper noun"] = pos_functions["pangngalan"] -- TLCHANGE "proper nouns" pos_functions["panghalip"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["pronouns"] = pos_functions["panghalip"] --TLCHANGE pos_functions["pronoun"] = pos_functions["panghalip"] --TLCHANGE pos_functions["pang-ukol"] = pos_functions["panghalip"] -- TLCHANGE pos_functions["prepositions"] = pos_functions["pang-ukol"] --TLCHANGE pos_functions["preposition"] = pos_functions["pang-ukol"] --TLCHANGE pos_functions["pang-uring pasukdol"] = { -- TLCHANGE params = function(langcode) return { ["pl"] = list_param, } end, func = function(args, data) parse_and_insert_inflection(data, args, "pl", "maramihan", "plural") -- TLCHANGE end, } pos_functions["superlative adjectives"] = pos_functions["pang-uring pasukdol"] --TLCHANGE pos_functions["superlative adjective"] = pos_functions["pang-uring pasukdol"] --TLCHANGE pos_functions["pandiwa"] = { -- TLCHANGE params = function(langcode) local params = { rootword = boolean_param, } if langs_supported[langcode].conjugation_types then params.type = list_param end add_params(params, langs_supported[langcode].verb_inflections) return params end, func = function(args, data) parse_and_insert_multiple_inflections(args, data, langs_supported[data.langcode].verb_inflections) if args.rootword then table.insert(data.inflections, {label = "salitang-ugat"}) -- TLCHANGE table.insert(data.categories, data.langname .. " na ugat") --TLCHANGE end if args.type then local types = m_headword_utilities.parse_term_list_with_modifiers { forms = args.type, paramname = "type", splitchar = ",", } -- Tag verb trigger local conjugation_types = langs_supported[data.langcode].conjugation_types for _, typobj in ipairs(types) do local typ = typobj.term if not conjugation_types[typ] then error(("Unrecognized %s verb conjugation type '%s'"):format(data.langname, typ)) end local label = conjugation_types[typ] m_headword_utilities.insert_fixed_inflection { headdata = data, label = label, originating_term = typobj, } table.insert(data.categories, ("%s %s verbs"):format(data.langname, label)) end end end, } pos_functions["verbs"] = pos_functions["pandiwa"] --TLCHANGE pos_functions["verb"] = pos_functions["pandiwa"] --TLCHANGE pos_functions["titik"] = { -- TLCHANGE params = function(langcode) return { ["type"] = true, ["upper"] = true, ["lower"] = true, ["mixed"] = true, } end, func = function(args, data) if args.type then if args.type ~= "upper" and args.type ~= "lower" and args.type ~= "mixed" then error(("Unrecognized value for type '%s'; should be one of 'upper', 'lower' or 'mixed'"):format( args.type)) end end local uppage = uupper(data.pagename) local lopage = ulower(data.pagename) if uppage == lopage then if args.type then error("Can't specify type= when letter has no case") end if args.upper or args.lower or args.mixed then error("Can't specify upper=, lower= or mixed= when letter has no case") end table.insert(data.inflections, {label = "no case"}) elseif args.type == "upper" or data.pagename == uppage then if args.upper then error("Already uppercase; can't specify upper=") end table.insert(data.inflections, {label = "[[Appendix:Capital letter|upper case]]"}) table.insert(data.inflections, {args.lower or lopage, label = "maliit na titik"}) -- TLCHANGE elseif args.type == "lower" or data.pagename == lopage then if args.lower then error("Already uppercase; can't specify upper=") end table.insert(data.inflections, {label = "lower case"}) table.insert(data.inflections, {args.upper or uppage, label = "malaking titik"}) -- TLCHANGE else table.insert(data.inflections, {label = "pinaghalong titik"}) -- TLCHANGE table.insert(data.inflections, {args.upper or uppage, label = "malaking titik"}) -- TLCHANGE table.insert(data.inflections, {args.lower or lopage, label = "maliit na titik"}) -- TLCHANGE end end, } pos_functions["letters"] = pos_functions["titik"] --TLCHANGE pos_functions["letter"] = pos_functions["titik"] --TLCHANGE return export dpm6kev2ryd6dqt99f25wvvmn0bi1i6 Padron:coordinate terms 10 36463 178222 178128 2026-10-15T04:02:49Z GinawaSaHapon 3989 178222 wikitext text/x-wiki {{#invoke:nyms|nyms|katulad}}<noinclude>{{documentation}}</noinclude> dtl7xn1zoeyt8rjt05vf4keecx19sfh Module:R:map:ACD 828 37339 178196 174437 2026-10-15T02:11:50Z GinawaSaHapon 3989 178196 Scribunto text/plain local export = {} function export.main(frame) local args = require("Module:parameters").process(frame:getParent().args, { entry = { }, [1] = { alias_of = "entry" }, id = { }, [2] = { alias_of = "id" }, display = { }, alt = { alias_of = "display" }, type = { }, }) local text if args.entry then local function format_numbers(str) return mw.ustring.gsub(str, "[1-9]$", { ["1"] = "₁", ["2"] = "₂", ["3"] = "₃", ["4"] = "₄", ["5"] = "₅", ["6"] = "₆", ["7"] = "₇", ["8"] = "₈", ["9"] = "₉", }) end local encoded_entry if (not args.id) then encoded_entry = mw.uri.encode(format_numbers(args.entry), "PATH") end if not args.type or args.type == "s" then text = "“[https://acd.clld.org/cognatesets" .. (args.id and "/" .. args.id or "?sSearch_1=" .. encoded_entry) .. " *" elseif args.type == "l" or args.type == "lo" then text = "loan “[https://acd.clld.org/" .. (args.id and "formsets/" .. args.id or "contributions/Loan?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "r" then text = "root “[https://acd.clld.org/" .. (args.id and "formsets/Root-" .. args.id or "contributions/Root?sSearch_0=" .. encoded_entry) .. " *-" elseif args.type == "n" or args.type == "near" then text = "near cognates “[https://acd.clld.org/" .. (args.id and "formsets/Near-" .. args.id or "contributions/Near?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "noise" then text = "chance resemblances “[https://acd.clld.org/" .. (args.id and "formsets/Noise-" .. args.id or "contributions/Noise?sSearch_0=" .. encoded_entry) .. " " end text = text .. format_numbers(args.display or args.entry) .. "]”, in the " else text = "" end return "Blust, Robert; Trussel, Stephen; et al. (2023) " .. text .. "Dataset ng CLDF mula sa <cite>The Austronesian Comparative Dictionary</cite> (2010–), [https://doi.org/10.5281/zenodo.7737547 →DOI]" end return export mnhvt06g6gyf8k5mr3ayvg4bdwu7pz8 178210 178196 2026-10-15T03:10:15Z GinawaSaHapon 3989 178210 Scribunto text/plain local export = {} function export.main(frame) local args = require("Module:parameters").process(frame:getParent().args, { entry = { }, [1] = { alias_of = "entry" }, id = { }, [2] = { alias_of = "id" }, display = { }, alt = { alias_of = "display" }, type = { }, }) local text if args.entry then local function format_numbers(str) return mw.ustring.gsub(str, "[1-9]$", { ["1"] = "₁", ["2"] = "₂", ["3"] = "₃", ["4"] = "₄", ["5"] = "₅", ["6"] = "₆", ["7"] = "₇", ["8"] = "₈", ["9"] = "₉", }) end local encoded_entry if (not args.id) then encoded_entry = mw.uri.encode(format_numbers(args.entry), "PATH") end if not args.type or args.type == "s" then text = "“[https://acd.clld.org/cognatesets" .. (args.id and "/" .. args.id or "?sSearch_1=" .. encoded_entry) .. " *" elseif args.type == "l" or args.type == "lo" then text = "loan “[https://acd.clld.org/" .. (args.id and "formsets/" .. args.id or "contributions/Loan?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "r" then text = "root “[https://acd.clld.org/" .. (args.id and "formsets/Root-" .. args.id or "contributions/Root?sSearch_0=" .. encoded_entry) .. " *-" elseif args.type == "n" or args.type == "near" then text = "near cognates “[https://acd.clld.org/" .. (args.id and "formsets/Near-" .. args.id or "contributions/Near?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "noise" then text = "chance resemblances “[https://acd.clld.org/" .. (args.id and "formsets/Noise-" .. args.id or "contributions/Noise?sSearch_0=" .. encoded_entry) .. " " end text = text .. format_numbers(args.display or args.entry) .. "]”, mula sa " else text = "" end return "Blust, Robert; Trussel, Stephen; et al. (2023) " .. text .. "Dataset ng CLDF mula sa <cite>The Austronesian Comparative Dictionary</cite> (2010–), [https://doi.org/10.5281/zenodo.7737547 →DOI]" end return export gyudsx4oaht3x9wlhx6qd43k8qekcuh 178211 178210 2026-10-15T03:11:45Z GinawaSaHapon 3989 178211 Scribunto text/plain local export = {} function export.main(frame) local args = require("Module:parameters").process(frame:getParent().args, { entry = { }, [1] = { alias_of = "entry" }, id = { }, [2] = { alias_of = "id" }, display = { }, alt = { alias_of = "display" }, type = { }, }) local text if args.entry then local function format_numbers(str) return mw.ustring.gsub(str, "[1-9]$", { ["1"] = "₁", ["2"] = "₂", ["3"] = "₃", ["4"] = "₄", ["5"] = "₅", ["6"] = "₆", ["7"] = "₇", ["8"] = "₈", ["9"] = "₉", }) end local encoded_entry if (not args.id) then encoded_entry = mw.uri.encode(format_numbers(args.entry), "PATH") end if not args.type or args.type == "s" then text = "“[https://acd.clld.org/cognatesets" .. (args.id and "/" .. args.id or "?sSearch_1=" .. encoded_entry) .. " *" elseif args.type == "l" or args.type == "lo" then text = "loan “[https://acd.clld.org/" .. (args.id and "formsets/" .. args.id or "contributions/Loan?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "r" then text = "root “[https://acd.clld.org/" .. (args.id and "formsets/Root-" .. args.id or "contributions/Root?sSearch_0=" .. encoded_entry) .. " *-" elseif args.type == "n" or args.type == "near" then text = "near cognates “[https://acd.clld.org/" .. (args.id and "formsets/Near-" .. args.id or "contributions/Near?sSearch_0=" .. encoded_entry) .. " " elseif args.type == "noise" then text = "chance resemblances “[https://acd.clld.org/" .. (args.id and "formsets/Noise-" .. args.id or "contributions/Noise?sSearch_0=" .. encoded_entry) .. " " end text = text .. format_numbers(args.display or args.entry) .. "]”, mula sa " else text = "" end return "Blust, Robert; Trussel, Stephen; et al. (2023) " .. text .. "dataset ng CLDF sa <cite>The Austronesian Comparative Dictionary</cite> (2010–), [https://doi.org/10.5281/zenodo.7737547 →DOI]" end return export 01q8wnlj2kxthw68p2x3zohnx1006bf အချင်းဝက် 0 38899 178182 2026-10-14T14:46:04Z Hiyuune 5522 Nilikha ang pahina na may '=={{=my=}}== ===Pagbigkas=== * {{my-IPA|အ'ချင်းဝက်}} ===Pangngalan=== {{my-noun|head=[[အချင်း]][[ဝက်]]}} # [[lihit]] ===Magbasa pa=== * {{R:my:MED}}' 178182 wikitext text/x-wiki =={{=my=}}== ===Pagbigkas=== * {{my-IPA|အ'ချင်းဝက်}} ===Pangngalan=== {{my-noun|head=[[အချင်း]][[ဝက်]]}} # [[lihit]] ===Magbasa pa=== * {{R:my:MED}} gw7p0xcc2fidcirajnlmdp4xnyp0b5f manuskrito 0 38900 178183 2026-10-15T00:38:09Z GinawaSaHapon 3989 Nilikha ang pahina na may '=={{=tl=}}== ===Etimolohiya=== {{ety|tl|:bor|es:manuscrito|text=++|tree=1}} ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # [[orihinal]] na [[kopya]] ng isang [[aklat]], [[artikulo]], [[komposisyon]], o katulad na [[magpasa|ipinasa]] sa [[patnugot]] bago [[maglathala|ilathala]] # aklat o artikulo na [[magsulat|isinulat]] nang [[mano-mano]] gamit [[kamay]] o [[makinilya]] {{q|kumpara sa [[mekanikal]] o [[elektroniko|elektronikong]] paraan}} #: {{s...' 178183 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya=== {{ety|tl|:bor|es:manuscrito|text=++|tree=1}} ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # [[orihinal]] na [[kopya]] ng isang [[aklat]], [[artikulo]], [[komposisyon]], o katulad na [[magpasa|ipinasa]] sa [[patnugot]] bago [[maglathala|ilathala]] # aklat o artikulo na [[magsulat|isinulat]] nang [[mano-mano]] gamit [[kamay]] o [[makinilya]] {{q|kumpara sa [[mekanikal]] o [[elektroniko|elektronikong]] paraan}} #: {{syn|tl|sulat-kamay}} ===Magbasa pa=== {{R:Pambansang Diksiyonaryo}} fim4frzvfljcqdmoi5mkea46l519pu1 nobela 0 38901 178185 2026-10-15T00:58:52Z GinawaSaHapon 3989 Nilikha ang pahina na may '=={{=tl=}}== ===Etimolohiya=== {{etymon|tl|:bor|es:novela|tree=1|text=++}} ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # uri ng [[piksiyon|piksiyonal]] na [[akda|akdang]] [[pasalaysay]] na karaniwang mahaba at seryoso ang [[tema]] # {{lb|tl|rare}} bagay na [[bago]] ====Hinangong kataga==== {{col3|tl|isanobela|pagsasanobela}} ====Kaugnay na kataga==== {{col3|tl|nobelista|telenobela}} ===Magbasa pa=== {{R:Pambansang Diksiyonaryo}}' 178185 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya=== {{etymon|tl|:bor|es:novela|tree=1|text=++}} ===Pagbigkas=== {{tl-pr}} ===Pangngalan=== {{tl-noun|b=+}} # uri ng [[piksiyon|piksiyonal]] na [[akda|akdang]] [[pasalaysay]] na karaniwang mahaba at seryoso ang [[tema]] # {{lb|tl|rare}} bagay na [[bago]] ====Hinangong kataga==== {{col3|tl|isanobela|pagsasanobela}} ====Kaugnay na kataga==== {{col3|tl|nobelista|telenobela}} ===Magbasa pa=== {{R:Pambansang Diksiyonaryo}} el27ourr6uhdcmlh8poalw11vbv9hdz pabalat 0 38902 178188 2026-10-15T01:18:38Z GinawaSaHapon 3989 Nilikha ang pahina na may '=={{=tl=}}== ===Etimolohiya=== {{ety|tl|:af|pa-|balat|tree=1|text=++}} ===Pagbigkas=== {{tl-pr|pabalát}} ===Pangngalan=== {{tl-noun|pabalát|b=+}} # [[takip]] ng [[aklat]], [[magasin]], at katulad # {{lb|tl|by extension}} takip; [[pambalot]] # [[papel]] o [[plastik]] na [[ibalot|ibinabalot]] sa [[balangkas]] ng [[saranggola]] ====Hinangong kataga==== {{col|tl|magpabalat|pagpapabalat}} ====Kaugnay na kataga==== {{col|tl|pabalat-bunga|pabalat-sibuyas|pabalat...' 178188 wikitext text/x-wiki =={{=tl=}}== ===Etimolohiya=== {{ety|tl|:af|pa-|balat|tree=1|text=++}} ===Pagbigkas=== {{tl-pr|pabalát}} ===Pangngalan=== {{tl-noun|pabalát|b=+}} # [[takip]] ng [[aklat]], [[magasin]], at katulad # {{lb|tl|by extension}} takip; [[pambalot]] # [[papel]] o [[plastik]] na [[ibalot|ibinabalot]] sa [[balangkas]] ng [[saranggola]] ====Hinangong kataga==== {{col|tl|magpabalat|pagpapabalat}} ====Kaugnay na kataga==== {{col|tl|pabalat-bunga|pabalat-sibuyas|pabalatkayo}} ===Magbasa pa=== {{R:Pambansang Diksiyonaryo}} d9jzym072yx3sumnw9x1bpq0249xj38 Module:rhymes/data 828 38903 178194 2026-10-15T02:05:46Z GinawaSaHapon 3989 Nilikha ang pahina na may 'local export = {} -- List of languages which do not have entries in the Rhymes -- namespace and link to the automatic category instead. export.link_to_category_langs = { ["izh"] = true, ["mt"] = true, ["sq"] = true, } return export' 178194 Scribunto text/plain local export = {} -- List of languages which do not have entries in the Rhymes -- namespace and link to the automatic category instead. export.link_to_category_langs = { ["izh"] = true, ["mt"] = true, ["sq"] = true, } return export 88uttm5ad5u5las70bryawduhf0aqug Padron:prefex 10 38904 178199 2026-10-15T02:36:13Z GinawaSaHapon 3989 Nilikha ang pahina na may '{{#invoke:affixusex/templates|affixusex_t|type=prefix}}<noinclude>{{documentation}}</noinclude>' 178199 wikitext text/x-wiki {{#invoke:affixusex/templates|affixusex_t|type=prefix}}<noinclude>{{documentation}}</noinclude> igsh3mutwto4wwcu0sx5g98zw5r8pme Kategorya:Tagalog na salitang inunlapian ng pa- 14 38905 178204 2026-10-15T02:53:19Z GinawaSaHapon 3989 Created blank page 178204 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Padron:apheretic form of 10 38906 178206 2026-10-15T03:06:53Z GinawaSaHapon 3989 Nilikha ang pahina na may '{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!-- -->{{#invoke:form of/templates|form_of_t|{{lg|pinaikli|pinaikling}} anyo ng|withencap=1|cat=apheretic forms}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude>' 178206 wikitext text/x-wiki {{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!-- -->{{#invoke:form of/templates|form_of_t|{{lg|pinaikli|pinaikling}} anyo ng|withencap=1|cat=apheretic forms}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> cwfu3w86d1xmu5wg1ieb1kh7mzinhny 178209 178206 2026-10-15T03:09:06Z GinawaSaHapon 3989 178209 wikitext text/x-wiki {{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!-- -->{{#invoke:form of/templates|form_of_t|{{lg|bawas}} na anyo ng|withencap=1|cat=apheretic forms}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> k95n6n5kz5ihldnv2j3wxfjt36otctf Kategorya:Tagalog na salitang inunlapian ng ma- 14 38907 178213 2026-10-15T03:31:55Z GinawaSaHapon 3989 Created blank page 178213 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Kategorya:Tagalog na salitang inunlapian ng ma- (stative prefix) 14 38908 178215 2026-10-15T03:41:05Z GinawaSaHapon 3989 Created blank page 178215 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Kategorya:Tagalog na salitang inunlapian ng ma- (future prefix) 14 38909 178216 2026-10-15T03:41:32Z GinawaSaHapon 3989 Created blank page 178216 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Padron:coord 10 38910 178221 2026-10-15T04:02:01Z GinawaSaHapon 3989 Ikinakarga sa [[Padron:coordinate terms]] 178221 wikitext text/x-wiki #REDIRECT [[Padron:coordinate terms]] d1alt2d5nyborkwf3t3b0v1sh2xrj9d Kategorya:Tagalog na salitang inunlapian ng ma- (katayuan) 14 38911 178224 2026-10-15T05:57:56Z GinawaSaHapon 3989 Created blank page 178224 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Kategorya:Tagalog na salitang inunlapian ng ma- (panghinaharap) 14 38912 178225 2026-10-15T05:58:19Z GinawaSaHapon 3989 Created blank page 178225 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Kategorya:Tagalog na salitang hinulapian ng -an 14 38913 178231 2026-10-15T07:08:33Z GinawaSaHapon 3989 Created blank page 178231 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1