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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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 ‎ is what [[Module:affix]] has always done
default_separator = data.allow_semicolon_separator and " +‎ " 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 = " +‎ ", 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 = " +‎ ", 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 = " +‎ ", 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